Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wa-lang
wa
提交
86a784e0
wa
项目概览
wa-lang
/
wa
10 个月 前同步成功
通知
68
Star
655
Fork
45
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
wa
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
86a784e0
编写于
6月 28, 2023
作者:
chai2010
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fmt 支持 global 关键字
上级
edaa2dd3
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
28 addition
and
31 deletion
+28
-31
internal/app/yacc/yacc.go
internal/app/yacc/yacc.go
+1
-1
internal/ast/ast.go
internal/ast/ast.go
+1
-1
internal/ast/astutil/enclosing.go
internal/ast/astutil/enclosing.go
+1
-1
internal/parser/parser.go
internal/parser/parser.go
+2
-6
internal/printer/nodes.go
internal/printer/nodes.go
+1
-1
internal/scanner/scanner_test.go
internal/scanner/scanner_test.go
+1
-0
internal/ssa/builder.go
internal/ssa/builder.go
+1
-1
internal/ssa/create.go
internal/ssa/create.go
+1
-1
internal/ssa/source.go
internal/ssa/source.go
+1
-1
internal/types/decl.go
internal/types/decl.go
+1
-1
internal/types/labels.go
internal/types/labels.go
+1
-1
internal/types/resolver.go
internal/types/resolver.go
+1
-1
waroot/examples/expr/y.wa
waroot/examples/expr/y.wa
+15
-15
未找到文件。
internal/app/yacc/yacc.go
浏览文件 @
86a784e0
...
...
@@ -2143,7 +2143,7 @@ func output() {
if
!
lflag
{
fmt
.
Fprintf
(
ftable
,
"
\n
//line yacctab:1"
)
}
fmt
.
Fprintf
(
ftable
,
"
\n
var
%sExca = [...]int{
\n
"
,
prefix
)
fmt
.
Fprintf
(
ftable
,
"
\n
global
%sExca = [...]int{
\n
"
,
prefix
)
if
len
(
errors
)
>
0
{
stateTable
=
make
([]
Row
,
nstate
)
...
...
internal/ast/ast.go
浏览文件 @
86a784e0
...
...
@@ -868,7 +868,7 @@ type (
GenDecl
struct
{
Doc
*
CommentGroup
// associated documentation; or nil
TokPos
token
.
Pos
// position of Tok
Tok
token
.
Token
// IMPORT, CONST, TYPE, VAR
Tok
token
.
Token
// IMPORT, CONST, TYPE, VAR
, GLOBAL
Lparen
token
.
Pos
// position of '(', if any
Specs
[]
Spec
Rparen
token
.
Pos
// position of ')', if any
...
...
internal/ast/astutil/enclosing.go
浏览文件 @
86a784e0
...
...
@@ -536,7 +536,7 @@ func NodeDescription(n ast.Node) string {
return
"constant declaration"
case
token
.
TYPE
:
return
"type declaration"
case
token
.
VAR
:
case
token
.
VAR
,
token
.
GLOBAL
:
return
"variable declaration"
}
case
*
ast
.
Ident
:
...
...
internal/parser/parser.go
浏览文件 @
86a784e0
...
...
@@ -2394,7 +2394,7 @@ func (p *parser) parseValueSpec(doc *ast.CommentGroup, keyword token.Token, iota
p
.
expectSemi
()
// call before accessing p.linecomment
switch
keyword
{
case
token
.
VAR
:
case
token
.
VAR
,
token
.
GLOBAL
:
if
typ
==
nil
&&
values
==
nil
{
p
.
error
(
pos
,
"missing variable type or initialization"
)
}
...
...
@@ -2417,7 +2417,7 @@ func (p *parser) parseValueSpec(doc *ast.CommentGroup, keyword token.Token, iota
Comment
:
p
.
lineComment
,
}
kind
:=
ast
.
Con
if
keyword
==
token
.
VAR
{
if
keyword
==
token
.
VAR
||
keyword
==
token
.
GLOBAL
{
kind
=
ast
.
Var
}
p
.
declare
(
spec
,
iota
,
p
.
topScope
,
kind
,
idents
...
)
...
...
@@ -2460,10 +2460,6 @@ func (p *parser) parseGenDecl(keyword token.Token, f parseSpecFunction) *ast.Gen
doc
:=
p
.
leadComment
pos
:=
p
.
expect
(
keyword
)
if
keyword
==
token
.
GLOBAL
{
keyword
=
token
.
VAR
// TODO(chai2010): AST 支持 global
}
var
lparen
,
rparen
token
.
Pos
var
list
[]
ast
.
Spec
if
p
.
tok
==
token
.
LPAREN
{
...
...
internal/printer/nodes.go
浏览文件 @
86a784e0
...
...
@@ -1523,7 +1523,7 @@ func (p *printer) genDecl(d *ast.GenDecl) {
p
.
print
(
d
.
Lparen
,
token
.
LPAREN
)
if
n
:=
len
(
d
.
Specs
);
n
>
0
{
p
.
print
(
indent
,
formfeed
)
if
n
>
1
&&
(
d
.
Tok
==
token
.
CONST
||
d
.
Tok
==
token
.
VAR
)
{
if
n
>
1
&&
(
d
.
Tok
==
token
.
CONST
||
d
.
Tok
==
token
.
VAR
||
d
.
Tok
==
token
.
GLOBAL
)
{
// two or more grouped const/var declarations:
// determine if the type column must be kept
keepType
:=
keepTypeColumn
(
d
.
Specs
)
...
...
internal/scanner/scanner_test.go
浏览文件 @
86a784e0
...
...
@@ -164,6 +164,7 @@ var tokens = [...]elt{
{
token
.
FOR
,
"for"
,
keyword
},
{
token
.
FUNC
,
"func"
,
keyword
},
{
token
.
GLOBAL
,
"global"
,
keyword
},
{
token
.
IF
,
"if"
,
keyword
},
{
token
.
IMPORT
,
"import"
,
keyword
},
...
...
internal/ssa/builder.go
浏览文件 @
86a784e0
...
...
@@ -1722,7 +1722,7 @@ start:
case
*
ast
.
DeclStmt
:
// Con, Var or Typ
d
:=
s
.
Decl
.
(
*
ast
.
GenDecl
)
if
d
.
Tok
==
token
.
VAR
{
if
d
.
Tok
==
token
.
VAR
||
d
.
Tok
==
token
.
GLOBAL
{
for
_
,
spec
:=
range
d
.
Specs
{
if
vs
,
ok
:=
spec
.
(
*
ast
.
ValueSpec
);
ok
{
b
.
localValueSpec
(
fn
,
vs
)
...
...
internal/ssa/create.go
浏览文件 @
86a784e0
...
...
@@ -126,7 +126,7 @@ func membersFromDecl(pkg *Package, decl ast.Decl) {
}
}
case
token
.
VAR
:
case
token
.
VAR
,
token
.
GLOBAL
:
for
_
,
spec
:=
range
decl
.
Specs
{
for
_
,
id
:=
range
spec
.
(
*
ast
.
ValueSpec
)
.
Names
{
if
!
isBlankIdent
(
id
)
{
...
...
internal/ssa/source.go
浏览文件 @
86a784e0
...
...
@@ -77,7 +77,7 @@ func findEnclosingPackageLevelFunction(pkg *Package, path []ast.Node) *Function
if
n
:=
len
(
path
);
n
>=
2
{
// [... {Gen,Func}Decl File]
switch
decl
:=
path
[
n
-
2
]
.
(
type
)
{
case
*
ast
.
GenDecl
:
if
decl
.
Tok
==
token
.
VAR
&&
n
>=
3
{
if
(
decl
.
Tok
==
token
.
VAR
||
decl
.
Tok
==
token
.
GLOBAL
)
&&
n
>=
3
{
// Package-level 'var' initializer.
return
pkg
.
init
}
...
...
internal/types/decl.go
浏览文件 @
86a784e0
...
...
@@ -615,7 +615,7 @@ func (check *Checker) declStmt(decl ast.Decl) {
check
.
declare
(
check
.
scope
,
name
,
lhs
[
i
],
scopePos
)
}
case
token
.
VAR
:
case
token
.
VAR
,
token
.
GLOBAL
:
top
:=
len
(
check
.
delayed
)
lhs0
:=
make
([]
*
Var
,
len
(
s
.
Names
))
...
...
internal/types/labels.go
浏览文件 @
86a784e0
...
...
@@ -124,7 +124,7 @@ func (check *Checker) blockBranches(all *Scope, parent *block, lstmt *ast.Labele
stmtBranches
=
func
(
s
ast
.
Stmt
)
{
switch
s
:=
s
.
(
type
)
{
case
*
ast
.
DeclStmt
:
if
d
,
_
:=
s
.
Decl
.
(
*
ast
.
GenDecl
);
d
!=
nil
&&
d
.
Tok
==
token
.
VAR
{
if
d
,
_
:=
s
.
Decl
.
(
*
ast
.
GenDecl
);
d
!=
nil
&&
(
d
.
Tok
==
token
.
VAR
||
d
.
Tok
==
token
.
GLOBAL
)
{
recordVarDecl
(
d
.
Pos
())
}
...
...
internal/types/resolver.go
浏览文件 @
86a784e0
...
...
@@ -356,7 +356,7 @@ func (check *Checker) collectObjects() {
check
.
arityMatch
(
s
,
last
)
case
token
.
VAR
:
case
token
.
VAR
,
token
.
GLOBAL
:
lhs
:=
make
([]
*
Var
,
len
(
s
.
Names
))
// If there's exactly one rhs initializer, use
// the same declInfo d1 for all lhs variables
...
...
waroot/examples/expr/y.wa
浏览文件 @
86a784e0
...
...
@@ -13,7 +13,7 @@ type exprSymType struct {
const NUM = 57346
var
exprToknames = [...]string{
global
exprToknames = [...]string{
"$end",
"error",
"$unk",
...
...
@@ -26,7 +26,7 @@ var exprToknames = [...]string{
"NUM",
}
var
exprStatenames = [...]string{}
global
exprStatenames = [...]string{}
const exprEofCode = 1
const exprErrCode = 2
...
...
@@ -79,7 +79,7 @@ func main {
})
}
var
exprExca = [...]int{
global
exprExca = [...]int{
-1, 1,
1, -1,
-2, 0,
...
...
@@ -89,45 +89,45 @@ const exprPrivate = 57344
const exprLast = 23
var
exprAct = [...]int{
global
exprAct = [...]int{
7, 4, 5, 2, 21, 9, 6, 8, 12, 13,
9, 1, 8, 16, 3, 19, 20, 17, 18, 14,
15, 10, 11,
}
var
exprPact = [...]int{
global
exprPact = [...]int{
-3, -1000, -1000, 17, -3, -3, 13, -1000, -1000, -3,
2, 2, -1000, -1000, 2, 2, -5, 13, 13, -1000,
-1000, -1000,
}
var
exprPgo = [...]int{
global
exprPgo = [...]int{
0, 3, 14, 6, 0, 11,
}
var
exprR1 = [...]int{
global
exprR1 = [...]int{
0, 5, 1, 1, 1, 2, 2, 2, 3, 3,
3, 4, 4,
}
var
exprR2 = [...]int{
global
exprR2 = [...]int{
0, 1, 1, 2, 2, 1, 3, 3, 1, 3,
3, 1, 3,
}
var
exprChk = [...]int{
global
exprChk = [...]int{
-1000, -5, -1, -2, 4, 5, -3, -4, 10, 8,
4, 5, -1, -1, 6, 7, -1, -3, -3, -4,
-4, 9,
}
var
exprDef = [...]int{
global
exprDef = [...]int{
0, -2, 1, 2, 0, 0, 5, 8, 11, 0,
0, 0, 3, 4, 0, 0, 0, 6, 7, 9,
10, 12,
}
var
exprTok1 = [...]int{
global
exprTok1 = [...]int{
1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
...
...
@@ -135,11 +135,11 @@ var exprTok1 = [...]int{
8, 9, 6, 4, 3, 5, 3, 7,
}
var
exprTok2 = [...]int{
global
exprTok2 = [...]int{
2, 3, 10,
}
var
exprTok3 = [...]int{
global
exprTok3 = [...]int{
0,
}
...
...
@@ -149,11 +149,11 @@ type exprErrorMessageInfo struct {
msg :string
}
var
exprErrorMessages = [...]exprErrorMessageInfo{}
global
exprErrorMessages = [...]exprErrorMessageInfo{}
/* parser for yacc output */
var
(
global
(
exprDebug = 0
exprErrorVerbose = false
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录