Skip to content

Commit 9370a6e

Browse files
committed
fix arity creation for functions with splat marker
1 parent 6025003 commit 9370a6e

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/parser/PythonTreeTranslator.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,9 @@ public Object visitEval_input(Python3Parser.Eval_inputContext ctx) {
239239
deriveSourceSection(ctx, node);
240240
StatementNode evalReturn = factory.createFrameReturn(factory.createWriteLocal(node, environment.getReturnSlot()));
241241
ReturnTargetNode returnTarget = new ReturnTargetNode(evalReturn, factory.createReadLocal(environment.getReturnSlot()));
242+
FunctionRootNode functionRoot = factory.createFunctionRoot(node.getSourceSection(), name, false, ctx.scope.getFrameDescriptor(), returnTarget, environment.getExecutionCellSlots());
242243
environment.leaveScope();
243-
return factory.createFunctionRoot(node.getSourceSection(), name, false, ctx.scope.getFrameDescriptor(), returnTarget, environment.getExecutionCellSlots());
244+
return functionRoot;
244245
}
245246

246247
@Override
@@ -1505,19 +1506,19 @@ public Args visitArgs(String functionName, ParserRuleContext ctx) {
15051506
argname = ((Python3Parser.VdefparameterContext) child).vfpdef().NAME().getText();
15061507
test = ((Python3Parser.VdefparameterContext) child).test();
15071508
} else if (child instanceof Python3Parser.SplatparameterContext) {
1508-
varargsSeen = true;
15091509
Python3Parser.SplatparameterContext splat = (Python3Parser.SplatparameterContext) child;
15101510
argname = splat.tfpdef() == null ? null : splat.tfpdef().NAME().getText();
15111511
if (argname != null) {
1512+
varargsSeen = true;
15121513
argumentReadNode = environment.getWriteVarArgsToLocal(argname);
15131514
} else {
15141515
starArgsMarker = true;
15151516
}
15161517
} else if (child instanceof Python3Parser.VsplatparameterContext) {
1517-
varargsSeen = true;
15181518
Python3Parser.VsplatparameterContext splat = (Python3Parser.VsplatparameterContext) child;
15191519
argname = splat.vfpdef() == null ? null : splat.vfpdef().NAME().getText();
15201520
if (argname != null) {
1521+
varargsSeen = true;
15211522
argumentReadNode = environment.getWriteVarArgsToLocal(argname);
15221523
} else {
15231524
starArgsMarker = true;
@@ -1537,16 +1538,15 @@ public Args visitArgs(String functionName, ParserRuleContext ctx) {
15371538
if (test != null) {
15381539
ReadDefaultArgumentNode readDefaultArgumentNode = new ReadDefaultArgumentNode();
15391540
defaultReads.add(readDefaultArgumentNode);
1540-
if (!varargsSeen) {
1541+
if (!varargsSeen && !starArgsMarker) {
15411542
argumentReadNode = environment.getWriteKeywordArgumentToLocal(argname, readDefaultArgumentNode);
1542-
arityKeywordNames.add(new Arity.KeywordName(argname, false));
15431543
maxNumPosArgs++;
15441544
} else {
15451545
argumentReadNode = environment.getWriteRequiredKeywordArgumentToLocal(argname, readDefaultArgumentNode);
1546-
arityKeywordNames.add(new Arity.KeywordName(argname, false));
15471546
}
1547+
arityKeywordNames.add(new Arity.KeywordName(argname, false));
15481548
keywordNames.add(argname);
1549-
} else if (varargsSeen) {
1549+
} else if (varargsSeen || starArgsMarker) {
15501550
argumentReadNode = environment.getWriteRequiredKeywordArgumentToLocal(argname);
15511551
arityKeywordNames.add(new Arity.KeywordName(argname, true));
15521552
keywordNames.add(argname);

0 commit comments

Comments
 (0)