From: <fwi...@us...> - 2008-08-27 02:38:38
|
Revision: 5255 http://jython.svn.sourceforge.net/jython/?rev=5255&view=rev Author: fwierzbicki Date: 2008-08-27 02:38:35 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Fix for FunctionDef and Call problems. Modified Paths: -------------- branches/nowalker/grammar/Python.g branches/nowalker/src/org/python/antlr/GrammarActions.java Modified: branches/nowalker/grammar/Python.g =================================================================== --- branches/nowalker/grammar/Python.g 2008-08-27 00:44:35 UTC (rev 5254) +++ branches/nowalker/grammar/Python.g 2008-08-27 02:38:35 UTC (rev 5255) @@ -359,25 +359,42 @@ } : AT dotted_attr ( LPAREN (arglist - {$etype = new Call($LPAREN, $dotted_attr.etype, actions.makeExprs($arglist.args), - actions.makeKeywords($arglist.keywords), $arglist.starargs, $arglist.kwargs);} - | {$etype = $dotted_attr.etype;} + { + $etype = actions.makeCall($LPAREN, $dotted_attr.etype, $arglist.args, + $arglist.keywords, $arglist.starargs, $arglist.kwargs); + } + |{ + $etype = actions.makeCall($LPAREN, $dotted_attr.etype); + } ) RPAREN - | { $etype = $dotted_attr.etype; } + | { + $etype = $dotted_attr.etype; + } ) NEWLINE ; //decorators: decorator+ decorators returns [List etypes] - : d+=decorator+ {$etypes = $d;} + : d+=decorator+ + { + $etypes = $d; + } ; //funcdef: [decorators] 'def' NAME parameters ':' suite -funcdef : decorators? DEF NAME parameters COLON suite - -> ^(DEF<FunctionDef>[$DEF, $NAME.text, $parameters.args, actions.makeStmts($suite.stypes), - actions.makeExprs($decorators.etypes)]) - ; +funcdef +@init { stmtType stype = null; } +@after { $funcdef.tree = stype; } + : decorators? DEF NAME parameters COLON suite + { + Token t = $DEF; + if ($decorators.start != null) { + t = $decorators.start; + } + stype = actions.makeFuncdef(t, $NAME, $parameters.args, $suite.stypes, $decorators.etypes); + } + ; //parameters: '(' [varargslist] ')' parameters returns [argumentsType args] @@ -1387,7 +1404,7 @@ } : CLASS NAME (LPAREN testlist[expr_contextType.Load]? RPAREN)? COLON suite { - stype = new ClassDef($CLASS, $NAME.getText(), actions.makeBases((exprType)$testlist.tree), + stype = new ClassDef($CLASS, actions.cantBeNone($NAME), actions.makeBases((exprType)$testlist.tree), actions.makeStmts($suite.stypes)); } ; @@ -1443,6 +1460,9 @@ arguments.add(new GeneratorExp($gen_for.start, (exprType)$t1.tree, c)); } | { + if (kws.size() > 0) { + errorHandler.error("non-keyword arg after keyword arg", $t1.tree); + } $arguments.add($t1.tree); } ) Modified: branches/nowalker/src/org/python/antlr/GrammarActions.java =================================================================== --- branches/nowalker/src/org/python/antlr/GrammarActions.java 2008-08-27 00:44:35 UTC (rev 5254) +++ branches/nowalker/src/org/python/antlr/GrammarActions.java 2008-08-27 02:38:35 UTC (rev 5255) @@ -233,6 +233,7 @@ if (target == null || iter == null) { return errorHandler.errorStmt(new PythonTree(t)); } + cantBeNone(target); stmtType[] o = makeStmts(orelse); stmtType[] b = makeStmts(body); @@ -258,9 +259,9 @@ return new TryFinally(t, b, f); } - stmtType makeFunctionDef(PythonTree t, PythonTree nameToken, argumentsType args, List funcStatements, List decorators) { + stmtType makeFuncdef(Token t, Token nameToken, argumentsType args, List funcStatements, List decorators) { if (nameToken == null) { - return errorHandler.errorStmt(t); + return errorHandler.errorStmt(new PythonTree(t)); } cantBeNone(nameToken); argumentsType a; @@ -554,13 +555,13 @@ return new For(t, target, iter, b, o); } - exprType makeCall(PythonTree t, exprType func) { + exprType makeCall(Token t, exprType func) { return makeCall(t, func, null, null, null, null); } - exprType makeCall(PythonTree t, exprType func, List args, List keywords, exprType starargs, exprType kwargs) { + exprType makeCall(Token t, exprType func, List args, List keywords, exprType starargs, exprType kwargs) { if (func == null) { - return errorHandler.errorExpr(t); + return errorHandler.errorExpr(new PythonTree(t)); } keywordType[] k = makeKeywords(keywords); exprType[] a = makeExprs(args); @@ -603,6 +604,13 @@ return new UnaryOp(t, unaryopType.USub, o); } + String cantBeNone(Token t) { + if (t == null || t.getText().equals("None")) { + errorHandler.error("can't be None", new PythonTree(t)); + } + return t.getText(); + } + void cantBeNone(PythonTree e) { if (e.getText().equals("None")) { errorHandler.error("can't be None", e); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |