From: <fwi...@us...> - 2007-12-09 03:30:39
|
Revision: 3782 http://jython.svn.sourceforge.net/jython/?rev=3782&view=rev Author: fwierzbicki Date: 2007-12-08 19:30:38 -0800 (Sat, 08 Dec 2007) Log Message: ----------- Oops checked in try/except stuff too soon -- fixed some NPEs during regression testing. Modified Paths: -------------- trunk/sandbox/ast/grammar/PythonWalker.g Modified: trunk/sandbox/ast/grammar/PythonWalker.g =================================================================== --- trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-09 02:51:09 UTC (rev 3781) +++ trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-09 03:30:38 UTC (rev 3782) @@ -197,13 +197,25 @@ return new Num(t, new Long(l)); } + private TryExcept makeTryExcept(PythonTree t, List body, List handlers, List orelses) { + excepthandlerType[] e = (excepthandlerType[])handlers.toArray(new excepthandlerType[handlers.size()]); + stmtType[] b = (stmtType[])body.toArray(new stmtType[body.size()]); + stmtType[] o; + if (orelses != null) { + o = (stmtType[])orelses.toArray(new stmtType[orelses.size()]); + } else { + o = new stmtType[0]; + } + return new TryExcept(t, b, e, o); + } } module returns [modType mod] - : ^(Module stmts?) { - debug("matched module"); - $mod = makeMod($Module, $stmts.stypes); - } + : ^(Module + ( stmts {$mod = makeMod($Module, $stmts.stypes); } + | {$mod = makeMod($Module, null);} + ) + ) ; funcdef @@ -433,11 +445,11 @@ List handlers = new ArrayList(); } : ^(TryExcept ^(Body body=stmts) except_clause[handlers]+ (^(OrElse orelse=stmts))? (^(FinalBody 'finally' fin=stmts))?) { - excepthandlerType[] e = (excepthandlerType[])handlers.toArray(new excepthandlerType[handlers.size()]); - stmtType[] b = (stmtType[])$body.stypes.toArray(new stmtType[$body.stypes.size()]); - stmtType[] o = (stmtType[])$orelse.stypes.toArray(new stmtType[$orelse.stypes.size()]); - stmtType[] f = (stmtType[])$orelse.stypes.toArray(new stmtType[$fin.stypes.size()]); - TryExcept te = new TryExcept($TryExcept, b, e, o, f); + List o = null; + if ($OrElse != null) { + o = $orelse.stypes; + } + TryExcept te = makeTryExcept($TryExcept, $body.stypes, handlers, o); $stmts::statements.add(te); } | ^(TryFinally ^(Body suite) ^(FinalBody suite)) @@ -445,7 +457,10 @@ except_clause[List handlers] : ^(ExceptHandler (^(Type type=test[expr_contextType.Load]))? (^(Name name=test[expr_contextType.Load]))? ^(Body stmts)) { - stmtType[] b = (stmtType[])$stmts.stypes.toArray(new stmtType[$stmts.stypes.size()]); + stmtType[] b; + if ($stmts.start != null) { + b = (stmtType[])$stmts.stypes.toArray(new stmtType[$stmts.stypes.size()]); + } else b = new stmtType[0]; handlers.add(new excepthandlerType($ExceptHandler, $type.etype, $name.etype, b)); } ; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2007-12-12 01:19:19
|
Revision: 3797 http://jython.svn.sourceforge.net/jython/?rev=3797&view=rev Author: fwierzbicki Date: 2007-12-11 17:19:18 -0800 (Tue, 11 Dec 2007) Log Message: ----------- augassign support Modified Paths: -------------- trunk/sandbox/ast/grammar/PythonWalker.g Modified: trunk/sandbox/ast/grammar/PythonWalker.g =================================================================== --- trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-12 00:43:57 UTC (rev 3796) +++ trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-12 01:19:18 UTC (rev 3797) @@ -336,7 +336,9 @@ expr_stmt : test[expr_contextType.Load] { } - | ^(augassign targ=test[expr_contextType.Load] value=test[expr_contextType.Load]) { + | ^(augassign targ=test[expr_contextType.Store] value=test[expr_contextType.Load]) { + AugAssign a = new AugAssign($augassign.start, $targ.etype, $augassign.op, $value.etype); + $stmts::statements.add(a); } | ^(Assign targets ^(Value value=test[expr_contextType.Load])) { debug("Matched Assign"); @@ -365,19 +367,19 @@ } ; -augassign - : PLUSEQUAL {} - | MINUSEQUAL {} - | STAREQUAL {} - | SLASHEQUAL {} - | PERCENTEQUAL {} - | AMPEREQUAL {} - | VBAREQUAL {} - | CIRCUMFLEXEQUAL {} - | LEFTSHIFTEQUAL {} - | RIGHTSHIFTEQUAL {} - | DOUBLESTAREQUAL {} - | DOUBLESLASHEQUAL {} +augassign returns [int op] + : PLUSEQUAL {$op = operatorType.Add;} + | MINUSEQUAL {$op = operatorType.Sub;} + | STAREQUAL {$op = operatorType.Mult;} + | SLASHEQUAL {$op = operatorType.Div;} + | PERCENTEQUAL {$op = operatorType.Mod;} + | AMPEREQUAL {$op = operatorType.BitAnd;} + | VBAREQUAL {$op = operatorType.BitOr;} + | CIRCUMFLEXEQUAL {$op = operatorType.BitXor;} + | LEFTSHIFTEQUAL {$op = operatorType.LShift;} + | RIGHTSHIFTEQUAL {$op = operatorType.RShift;} + | DOUBLESTAREQUAL {$op = operatorType.Pow;} + | DOUBLESLASHEQUAL {$op = operatorType.FloorDiv;} ; print_stmt This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2007-12-13 13:28:07
|
Revision: 3804 http://jython.svn.sourceforge.net/jython/?rev=3804&view=rev Author: fwierzbicki Date: 2007-12-13 05:27:57 -0800 (Thu, 13 Dec 2007) Log Message: ----------- wrapped Yield in Expr. Modified Paths: -------------- trunk/sandbox/ast/grammar/PythonWalker.g Modified: trunk/sandbox/ast/grammar/PythonWalker.g =================================================================== --- trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-12 09:50:38 UTC (rev 3803) +++ trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-13 13:27:57 UTC (rev 3804) @@ -442,7 +442,8 @@ if ($Value != null) { v = $test.etype; } - //$stmts::statements.add(new Yield($Yield, v)); + Yield y = new Yield($Yield, v); + $stmts::statements.add(new Expr($Yield, y)); } ; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2007-12-15 21:20:37
|
Revision: 3809 http://jython.svn.sourceforge.net/jython/?rev=3809&view=rev Author: fwierzbicki Date: 2007-12-15 13:20:35 -0800 (Sat, 15 Dec 2007) Log Message: ----------- while support. Modified Paths: -------------- trunk/sandbox/ast/grammar/PythonWalker.g Modified: trunk/sandbox/ast/grammar/PythonWalker.g =================================================================== --- trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-15 21:04:26 UTC (rev 3808) +++ trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-15 21:20:35 UTC (rev 3809) @@ -45,6 +45,7 @@ import org.python.antlr.ast.Raise; import org.python.antlr.ast.Return; import org.python.antlr.ast.Str; +import org.python.antlr.ast.While; import org.python.antlr.ast.Yield; import java.util.Arrays; @@ -209,12 +210,12 @@ return new Num(t, new Long(l)); } - private stmtType makeTryExcept(PythonTree t, List body, List handlers, List orelses, List finBody) { + private stmtType makeTryExcept(PythonTree t, List body, List handlers, List orelse, List finBody) { stmtType[] b = (stmtType[])body.toArray(new stmtType[body.size()]); excepthandlerType[] e = (excepthandlerType[])handlers.toArray(new excepthandlerType[handlers.size()]); stmtType[] o; - if (orelses != null) { - o = (stmtType[])orelses.toArray(new stmtType[orelses.size()]); + if (orelse != null) { + o = (stmtType[])orelse.toArray(new stmtType[orelse.size()]); } else { o = new stmtType[0]; } @@ -233,6 +234,17 @@ stmtType[] f = (stmtType[])finBody.toArray(new stmtType[finBody.size()]); return new TryFinally(t, b, f); } + + private While makeWhile(PythonTree t, exprType test, List body, List orelse) { + stmtType[] o; + if (orelse != null) { + o = (stmtType[])orelse.toArray(new stmtType[orelse.size()]); + } else { + o = new stmtType[0]; + } + stmtType[] b = (stmtType[])body.toArray(new stmtType[body.size()]); + return new While(t, test, b, o); + } } module returns [modType mod] @@ -358,7 +370,6 @@ Assign a = new Assign($Assign, e, $value.etype); $stmts::statements.add(a); } -// | call_expr ; call_expr @@ -528,7 +539,14 @@ ; while_stmt - : ^(While test[expr_contextType.Load] ^(Body suite) (^(OrElse suite))?) + : ^(While test[expr_contextType.Load] ^(Body body=stmts) (^(OrElse orelse=stmts))?) { + List o = null; + if ($OrElse != null) { + o = $orelse.stypes; + } + While w = makeWhile($While, $test.etype, $body.stypes, o); + $stmts::statements.add(w); + } ; for_stmt This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2007-12-16 14:02:10
|
Revision: 3816 http://jython.svn.sourceforge.net/jython/?rev=3816&view=rev Author: fwierzbicki Date: 2007-12-16 06:02:08 -0800 (Sun, 16 Dec 2007) Log Message: ----------- Global support. Modified Paths: -------------- trunk/sandbox/ast/grammar/PythonWalker.g Modified: trunk/sandbox/ast/grammar/PythonWalker.g =================================================================== --- trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-16 02:59:37 UTC (rev 3815) +++ trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-16 14:02:08 UTC (rev 3816) @@ -34,6 +34,7 @@ import org.python.antlr.ast.Expr; import org.python.antlr.ast.For; import org.python.antlr.ast.FunctionDef; +import org.python.antlr.ast.Global; import org.python.antlr.ast.Import; import org.python.antlr.ast.Module; import org.python.antlr.ast.Name; @@ -530,9 +531,21 @@ ; global_stmt - : ^(Global NAME+) +@init { + List nms = new ArrayList(); +} + : ^(Global name_expr[nms]+) { + String[] n = (String[])nms.toArray(new String[nms.size()]); + $stmts::statements.add(new Global($Global, n)); + } ; +name_expr[List nms] + : NAME { + nms.add($NAME.text); + } + ; + exec_stmt : ^(Exec test[expr_contextType.Load] (^(Globals test[expr_contextType.Load]))? (^(Locals test[expr_contextType.Load]))?) ; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2007-12-16 15:43:14
|
Revision: 3818 http://jython.svn.sourceforge.net/jython/?rev=3818&view=rev Author: fwierzbicki Date: 2007-12-16 07:43:11 -0800 (Sun, 16 Dec 2007) Log Message: ----------- If support (no elif yet). Modified Paths: -------------- trunk/sandbox/ast/grammar/PythonWalker.g Modified: trunk/sandbox/ast/grammar/PythonWalker.g =================================================================== --- trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-16 14:44:45 UTC (rev 3817) +++ trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-16 15:43:11 UTC (rev 3818) @@ -37,6 +37,7 @@ import org.python.antlr.ast.For; import org.python.antlr.ast.FunctionDef; import org.python.antlr.ast.Global; +import org.python.antlr.ast.If; import org.python.antlr.ast.Import; import org.python.antlr.ast.Module; import org.python.antlr.ast.Name; @@ -239,6 +240,18 @@ return new TryFinally(t, b, f); } + private If makeIf(PythonTree t, exprType test, List body, List orelse) { + stmtType[] o; + if (orelse != null) { + o = (stmtType[])orelse.toArray(new stmtType[orelse.size()]); + } else { + o = new stmtType[0]; + } + stmtType[] b = (stmtType[])body.toArray(new stmtType[body.size()]); + return new If(t, test, b, o); + } + + private While makeWhile(PythonTree t, exprType test, List body, List orelse) { stmtType[] o; if (orelse != null) { @@ -573,7 +586,14 @@ ; if_stmt - : ^(If test[expr_contextType.Load] stmts elif_clause* (^(OrElse stmts))?) + : ^(If test[expr_contextType.Load] body=stmts elif_clause* (^(OrElse orelse=stmts))?) { + List o = null; + if ($OrElse != null) { + o = $orelse.stypes; + } + If i = makeIf($If, $test.etype, $body.stypes, o); + $stmts::statements.add(i); + } ; elif_clause This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2007-12-16 16:10:41
|
Revision: 3819 http://jython.svn.sourceforge.net/jython/?rev=3819&view=rev Author: fwierzbicki Date: 2007-12-16 08:10:39 -0800 (Sun, 16 Dec 2007) Log Message: ----------- Simple import support. Modified Paths: -------------- trunk/sandbox/ast/grammar/PythonWalker.g Modified: trunk/sandbox/ast/grammar/PythonWalker.g =================================================================== --- trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-16 15:43:11 UTC (rev 3818) +++ trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-16 16:10:39 UTC (rev 3819) @@ -383,6 +383,7 @@ expr_stmt : test[expr_contextType.Load] { + $stmts::statements.add(new Expr($test.start, $test.etype)); } | ^(augassign targ=test[expr_contextType.Store] value=test[expr_contextType.Load]) { AugAssign a = new AugAssign($augassign.start, $targ.etype, $augassign.op, $value.etype); @@ -527,18 +528,37 @@ ; import_stmt - : ^(Import dotted_as_name+) { +@init { + List nms = new ArrayList(); +} + : ^(Import dotted_as_name[nms]+) { + aliasType[] n = (aliasType[])nms.toArray(new aliasType[nms.size()]); + $stmts::statements.add(new Import($Import, n)); } | ^(ImportFrom dotted_name ^(Import STAR)) | ^(ImportFrom dotted_name ^(Import import_as_name+)) ; import_as_name - : ^(Alias NAME (^(Asname NAME))?) + : ^(Alias name=NAME (^(Asname asname=NAME))?) { + String as = null; + if ($Asname != null) { + as = $asname.text; + } + aliasType a = new aliasType($Alias, $name.text, as); + //nms.add(a); + } ; -dotted_as_name - : ^(Alias dotted_name (^(Asname NAME))?) +dotted_as_name [List nms] + : ^(Alias dotted_name (^(Asname NAME))?) { + String as = null; + if ($Asname != null) { + as = $NAME.text; + } + aliasType a = new aliasType($Alias, $dotted_name.text, as); + nms.add(a); + } ; dotted_name This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <otm...@us...> - 2007-12-17 23:33:19
|
Revision: 3837 http://jython.svn.sourceforge.net/jython/?rev=3837&view=rev Author: otmarhumbel Date: 2007-12-17 15:33:17 -0800 (Mon, 17 Dec 2007) Log Message: ----------- prevent NullPointerException (probably due to a recoverFromMismatchedToken) Modified Paths: -------------- trunk/sandbox/ast/grammar/PythonWalker.g Modified: trunk/sandbox/ast/grammar/PythonWalker.g =================================================================== --- trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-17 21:33:35 UTC (rev 3836) +++ trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-17 23:33:17 UTC (rev 3837) @@ -247,7 +247,12 @@ } else { o = new stmtType[0]; } - stmtType[] b = (stmtType[])body.toArray(new stmtType[body.size()]); + stmtType[] b; + if (body != null) { + b = (stmtType[])body.toArray(new stmtType[body.size()]); + } else { + b = new stmtType[0]; + } return new If(t, test, b, o); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2007-12-30 18:45:59
|
Revision: 3908 http://jython.svn.sourceforge.net/jython/?rev=3908&view=rev Author: fwierzbicki Date: 2007-12-30 10:45:24 -0800 (Sun, 30 Dec 2007) Log Message: ----------- small correction of Attribute contexts. Modified Paths: -------------- trunk/sandbox/ast/grammar/PythonWalker.g Modified: trunk/sandbox/ast/grammar/PythonWalker.g =================================================================== --- trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-30 06:53:35 UTC (rev 3907) +++ trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-30 18:45:24 UTC (rev 3908) @@ -971,9 +971,9 @@ debug("matched Name " + $NAME.text); $etype = new Name($NAME, $NAME.text, ctype); } - | ^(DOT NAME test[ctype]) { + | ^(DOT NAME test[expr_contextType.Load]) { debug("matched DOT in atom: " + $test.etype + "###" + $NAME.text); - $etype = new Attribute($DOT, $test.etype, $NAME.text, expr_contextType.Load); + $etype = new Attribute($DOT, $test.etype, $NAME.text, ctype); } | ^(SubscriptList subscriptlist test[ctype]) | ^(Num INT) {$etype = makeNum($INT);} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2007-12-30 19:07:00
|
Revision: 3909 http://jython.svn.sourceforge.net/jython/?rev=3909&view=rev Author: fwierzbicki Date: 2007-12-30 11:06:53 -0800 (Sun, 30 Dec 2007) Log Message: ----------- context fix for list comps. Modified Paths: -------------- trunk/sandbox/ast/grammar/PythonWalker.g Modified: trunk/sandbox/ast/grammar/PythonWalker.g =================================================================== --- trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-30 18:45:24 UTC (rev 3908) +++ trunk/sandbox/ast/grammar/PythonWalker.g 2007-12-30 19:06:53 UTC (rev 3909) @@ -1098,7 +1098,7 @@ list_for returns [comprehensionType gen] : - ^(ListFor ^(Target targ=test[expr_contextType.Store]) ^(Iter iter=test[expr_contextType.Store]) (^(Ifs list_iter))?) { + ^(ListFor ^(Target targ=test[expr_contextType.Store]) ^(Iter iter=test[expr_contextType.Load]) (^(Ifs list_iter))?) { debug("matched list_for"); //XXX: Not collecting from Ifs yet. $gen = new comprehensionType($ListFor, $targ.etype, $iter.etype, new exprType[0]); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2008-01-01 05:22:11
|
Revision: 3930 http://jython.svn.sourceforge.net/jython/?rev=3930&view=rev Author: fwierzbicki Date: 2007-12-31 21:22:10 -0800 (Mon, 31 Dec 2007) Log Message: ----------- bugfix for NOT. Modified Paths: -------------- trunk/sandbox/ast/grammar/PythonWalker.g Modified: trunk/sandbox/ast/grammar/PythonWalker.g =================================================================== --- trunk/sandbox/ast/grammar/PythonWalker.g 2008-01-01 04:22:02 UTC (rev 3929) +++ trunk/sandbox/ast/grammar/PythonWalker.g 2008-01-01 05:22:10 UTC (rev 3930) @@ -897,10 +897,6 @@ //XXX: could re-use BoolOps discarded above in many cases. $etype = new BoolOp($OR, boolopType.Or, e); } - | ^(NOT test[ctype]) { - $etype = new UnaryOp($NOT, unaryopType.Not, $test.etype); - $etype = $test.etype; - } | ^(comp_op left=test[ctype] targs=test[ctype]) { exprType[] targets = new exprType[1]; cmpopType[] ops = new cmpopType[1]; @@ -1045,6 +1041,9 @@ //FIXME: need to actually invert this $etype = $test.etype; } + | ^(NOT test[ctype]) { + $etype = new UnaryOp($NOT, unaryopType.Not, $test.etype); + } ; stringlist returns [List strings] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2008-01-05 03:35:07
|
Revision: 3967 http://jython.svn.sourceforge.net/jython/?rev=3967&view=rev Author: fwierzbicki Date: 2008-01-04 19:35:06 -0800 (Fri, 04 Jan 2008) Log Message: ----------- better list comprehensions and generator expressions. Modified Paths: -------------- trunk/sandbox/ast/grammar/PythonWalker.g Modified: trunk/sandbox/ast/grammar/PythonWalker.g =================================================================== --- trunk/sandbox/ast/grammar/PythonWalker.g 2008-01-05 00:41:53 UTC (rev 3966) +++ trunk/sandbox/ast/grammar/PythonWalker.g 2008-01-05 03:35:06 UTC (rev 3967) @@ -70,6 +70,7 @@ import java.math.BigInteger; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.ListIterator; @@ -1007,14 +1008,7 @@ } $etype = new org.python.antlr.ast.List($List, e, ctype); } - | ^(ListComp test[ctype] list_for) { - debug("matched ListComp"); - $etype = new ListComp($ListComp, $test.etype, new comprehensionType[]{$list_for.gen}); - } - | ^(GeneratorExp test[ctype] gen_for) { - debug("matched GeneratorExp"); - $etype = new GeneratorExp($GeneratorExp, $test.etype, new comprehensionType[]{$gen_for.gen}); - } + | comprehension[ctype] {$etype = $comprehension.etype;} | ^(Dict (^(Elts elts[ctype]))?) { exprType[] keys; exprType[] values; @@ -1073,17 +1067,35 @@ $etype = negate($USub, $test.etype); } | ^(UAdd test[ctype]) { - $etype = $test.etype; + $etype = new UnaryOp($UAdd, unaryopType.UAdd, $test.etype); } | ^(Invert test[ctype]) { //FIXME: need to actually invert this - $etype = $test.etype; + $etype = new UnaryOp($Invert, unaryopType.Invert, $test.etype); } | ^(NOT test[ctype]) { $etype = new UnaryOp($NOT, unaryopType.Not, $test.etype); } ; +comprehension[expr_contextType ctype] returns [exprType etype] +@init { + List gens = new ArrayList(); +} + : ^(ListComp test[ctype] list_for[gens]) { + debug("matched ListComp"); + Collections.reverse(gens); + comprehensionType[] c = (comprehensionType[])gens.toArray(new comprehensionType[gens.size()]); + $etype = new ListComp($ListComp, $test.etype, c); + } + | ^(GeneratorExp test[ctype] gen_for[gens]) { + debug("matched GeneratorExp"); + Collections.reverse(gens); + comprehensionType[] c = (comprehensionType[])gens.toArray(new comprehensionType[gens.size()]); + $etype = new GeneratorExp($GeneratorExp, $test.etype, c); + } + ; + stringlist returns [List strings] @init { List strs = new ArrayList(); @@ -1236,11 +1248,16 @@ ; argument[List arguments] +@init { + List gens = new ArrayList(); +} : ^(Arg test[expr_contextType.Load]) { arguments.add($test.etype); } - | ^(GenFor test[expr_contextType.Load] gen_for) { - arguments.add(new GeneratorExp($GenFor, $test.etype, new comprehensionType[]{$gen_for.gen})); + | ^(GenFor test[expr_contextType.Load] gen_for[gens]) { + Collections.reverse(gens); + comprehensionType[] c = (comprehensionType[])gens.toArray(new comprehensionType[gens.size()]); + arguments.add(new GeneratorExp($GenFor, $test.etype, c)); } ; @@ -1250,16 +1267,16 @@ } ; -list_iter returns [exprType etype] - : list_for - | list_if { +list_iter [List gens] returns [exprType etype] + : list_for[gens] + | list_if[gens] { $etype = $list_if.etype; } ; -list_for returns [comprehensionType gen] +list_for [List gens] : - ^(ListFor ^(Target targ=test[expr_contextType.Store]) ^(Iter iter=test[expr_contextType.Load]) (^(Ifs list_iter))?) { + ^(ListFor ^(Target targ=test[expr_contextType.Store]) ^(Iter iter=test[expr_contextType.Load]) (^(Ifs list_iter[gens]))?) { debug("matched list_for"); exprType[] e; if ($Ifs != null && $list_iter.etype != null) { @@ -1267,25 +1284,25 @@ } else { e = new exprType[0]; } - $gen = new comprehensionType($ListFor, $targ.etype, $iter.etype, e); + gens.add(new comprehensionType($ListFor, $targ.etype, $iter.etype, e)); } ; -list_if returns [exprType etype] - : ^(ListIf ^(Target test[expr_contextType.Load]) (Ifs list_iter)?) { +list_if[List gens] returns [exprType etype] + : ^(ListIf ^(Target test[expr_contextType.Load]) (Ifs list_iter[gens])?) { $etype = $test.etype; } ; -gen_iter returns [exprType etype] - : gen_for - | gen_if { +gen_iter [List gens] returns [exprType etype] + : gen_for[gens] + | gen_if[gens] { $etype = $gen_if.etype; } ; -gen_for returns [comprehensionType gen] - : ^(GenFor ^(Target targ=test[expr_contextType.Store]+) ^(Iter iter=test[expr_contextType.Load]) (^(Ifs gen_iter))?) { +gen_for [List gens] + : ^(GenFor ^(Target targ=test[expr_contextType.Store]+) ^(Iter iter=test[expr_contextType.Load]) (^(Ifs gen_iter[gens]))?) { debug("matched gen_for"); exprType[] e; if ($Ifs != null && $gen_iter.etype != null) { @@ -1293,12 +1310,12 @@ } else { e = new exprType[0]; } - $gen = new comprehensionType($GenFor, $targ.etype, $iter.etype, e); + gens.add(new comprehensionType($GenFor, $targ.etype, $iter.etype, e)); } ; -gen_if returns [exprType etype] - : ^(GenIf ^(Target test[expr_contextType.Load]) (^(Iter gen_iter))?) { +gen_if[List gens] returns [exprType etype] + : ^(GenIf ^(Target test[expr_contextType.Load]) (^(Iter gen_iter[gens]))?) { $etype = $test.etype; } ; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2008-01-06 21:46:35
|
Revision: 3983 http://jython.svn.sourceforge.net/jython/?rev=3983&view=rev Author: fwierzbicki Date: 2008-01-06 13:46:33 -0800 (Sun, 06 Jan 2008) Log Message: ----------- nested fplist support. Modified Paths: -------------- trunk/sandbox/ast/grammar/PythonWalker.g Modified: trunk/sandbox/ast/grammar/PythonWalker.g =================================================================== --- trunk/sandbox/ast/grammar/PythonWalker.g 2008-01-06 21:40:26 UTC (rev 3982) +++ trunk/sandbox/ast/grammar/PythonWalker.g 2008-01-06 21:46:33 UTC (rev 3983) @@ -344,27 +344,42 @@ ; defparameter[List params, List defaults] -@init { - List nms = new ArrayList(); -} - : NAME (ASSIGN test[expr_contextType.Load] )? { - params.add(new Name($NAME, $NAME.text, expr_contextType.Param)); + : fpdef[expr_contextType.Param, null] (ASSIGN test[expr_contextType.Load])? { + params.add($fpdef.etype); if ($ASSIGN != null) { defaults.add($test.etype); } } - | ^(FpList fplist_name[nms]+) { - Name[] n = (Name[])nms.toArray(new Name[nms.size()]); - params.add(new Tuple($fplist_name.start, n, expr_contextType.Store)); - } ; -fplist_name[List nms] +fpdef [expr_contextType ctype, List nms] returns [exprType etype] : NAME { - nms.add(new Name($NAME, $NAME.text, expr_contextType.Store)); + exprType e = new Name($NAME, $NAME.text, ctype); + if (nms == null) { + $etype = e; + } else { + nms.add(e); + } } + | ^(FpList fplist) { + exprType[] e = (exprType[])$fplist.etypes.toArray(new exprType[$fplist.etypes.size()]); + Tuple t = new Tuple($fplist.start, e, expr_contextType.Store); + if (nms == null) { + $etype = t; + } else { + nms.add(t); + } + } ; +fplist returns [List etypes] +@init { + List nms = new ArrayList(); +} + : fpdef[expr_contextType.Store, nms]+ { + $etypes = nms; + } + ; decorators returns [List etypes] @init { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |