8000 symtable: fix functions with no normal arguments (only *args etc) · go-python/gpython@b306413 · GitHub
[go: up one dir, main page]

Skip to content

Commit b306413

Browse files
committed
symtable: fix functions with no normal arguments (only *args etc)
1 parent 6a2dcc9 commit b306413

File tree

3 files changed

+58
-3
lines changed

3 files changed

+58
-3
lines changed

symtable/make_symtable_test.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
# Functions
2424
('''def fn(): pass''', "exec"),
2525
('''def fn(a,b):\n e=1\n return a*b*c*d*e''', "exec"),
26+
('''def fn(*args,a=2,b=3,**kwargs): return (args,a,b,kwargs)''', "exec"),
2627
('''def fn(a,b):\n def nested(c,d):\n return a*b*c*d*e''', "exec"),
2728
('''\
2829
def fn(a:A,*arg:ARG,b:B=BB,c:C=CC,**kwargs:KW) -> RET:

symtable/symtable.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,6 @@ func (st *SymTable) GetScope(name string) Scope {
177177

178178
// Add arguments to the symbol table
179179
func (st *SymTable) addArgumentsToSymbolTable(node *ast.Arguments) {
180-
if node.Args == nil {
181-
return
182-
}
183180
// skip default arguments inside function block
184181
// XXX should ast be different?
185182
for _, arg := range node.Args {

symtable/symtable_data_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,63 @@ var symtableTestData = []struct {
161161
},
162162
},
163163
}, nil, ""},
164+
{"def fn(*args,a=2,b=3,**kwargs): return (args,a,b,kwargs)", "exec", &SymTable{
165+
Type: ModuleBlock,
166+
Name: "top",
167+
Lineno: 0,
168+
Unoptimized: optTopLevel,
169+
Nested: false,
170+
Free: false,
171+
ChildFree: false,
172+
Generator: false,
173+
Varargs: false,
174+
Varkeywords: false,
175+
ReturnsValue: false,
176+
NeedsClassClosure: false,
177+
Varnames: []string{},
178+
Symbols: Symbols{
179+
"fn": Symbol{
180+
Flags: DefLocal,
181+
Scope: ScopeLocal,
182+
},
183+
},
184+
Children: Children{
185+
&SymTable{
186+
Type: FunctionBlock,
187+
Name: "fn",
188+
Lineno: 1,
189+
Unoptimized: 0,
190+
Nested: false,
191+
Free: false,
192+
ChildFree: false,
193+
Generator: false,
194+
Varargs: true,
195+
Varkeywords: true,
196+
ReturnsValue: true,
197+
NeedsClassClosure: false,
198+
Varnames: []string{"a", "b", "args", "kwargs"},
199+
Symbols: Symbols{
200+
"a": Symbol{
201+
Flags: DefParam | DefUse,
202+
Scope: ScopeLocal,
203+
},
204+
"args": Symbol{
205+
Flags: DefParam | DefUse,
206+
Scope: ScopeLocal,
207+
},
208+
"b": Symbol{
209+
Flags: DefParam | DefUse,
210+
Scope: ScopeLocal,
211+
},
212+
"kwargs": Symbol{
213+
Flags: DefParam | DefUse,
214+
Scope: ScopeLocal,
215+
},
216+
},
217+
Children: Children{},
218+
},
219+
},
220+
}, nil, ""},
164221
{"def fn(a,b):\n def nested(c,d):\n return a*b*c*d*e", "exec", &SymTable{
165222
Type: ModuleBlock,
166223
Name: "top",

0 commit comments

Comments
 (0)
0