From: <fwi...@us...> - 2009-01-05 18:48:59
|
Revision: 5852 http://jython.svn.sourceforge.net/jython/?rev=5852&view=rev Author: fwierzbicki Date: 2009-01-05 18:48:54 +0000 (Mon, 05 Jan 2009) Log Message: ----------- Just enough patchwork to get this thing compiling. Modified Paths: -------------- branches/jy3k/grammar/Python.g branches/jy3k/src/org/python/antlr/GrammarActions.java branches/jy3k/src/org/python/antlr/adapter/AstAdapters.java branches/jy3k/src/org/python/compiler/ArgListCompiler.java branches/jy3k/src/org/python/compiler/CodeCompiler.java branches/jy3k/src/org/python/compiler/ScopesCompiler.java Added Paths: ----------- branches/jy3k/src/org/python/antlr/adapter/ArgAdapter.java Modified: branches/jy3k/grammar/Python.g =================================================================== --- branches/jy3k/grammar/Python.g 2009-01-05 17:59:06 UTC (rev 5851) +++ branches/jy3k/grammar/Python.g 2009-01-05 18:48:54 UTC (rev 5852) @@ -498,7 +498,7 @@ //tfpdef: NAME [':' test] tfpdef[expr_contextType ctype] @after { - actions.checkAssign(actions.castExpr($vfpdef.tree)); + actions.checkAssign(actions.castExpr($tfpdef.tree)); } : NAME (':' test[ctype])? -> ^(NAME<Name>[$NAME, $NAME.text, ctype]) @@ -905,10 +905,10 @@ } ; -//except_clause: 'except' [test [',' test]] +//except_clause: 'except' [test ['as' NAME]] except_clause - : EXCEPT (t1=test[expr_contextType.Load] (COMMA t2=test[expr_contextType.Store])?)? COLON suite[!$suite.isEmpty() && $suite::continueIllegal] - -> ^(EXCEPT<ExceptHandler>[$EXCEPT, actions.castExpr($t1.tree), actions.castExpr($t2.tree), + : EXCEPT (test[expr_contextType.Load] (AS NAME)?)? COLON suite[!$suite.isEmpty() && $suite::continueIllegal] + -> ^(EXCEPT<ExceptHandler>[$EXCEPT, actions.castExpr($test.tree), $NAME.getText(), actions.castStmts($suite.stypes)]) ; @@ -1434,6 +1434,9 @@ } stype = new ClassDef(t, actions.cantBeNone($NAME), actions.makeBases(actions.castExpr($testlist.tree)), + new ArrayList<keyword>(), + null, + null, actions.castStmts($suite.stypes), actions.castExprs($decorators.etypes)); } Modified: branches/jy3k/src/org/python/antlr/GrammarActions.java =================================================================== --- branches/jy3k/src/org/python/antlr/GrammarActions.java 2009-01-05 17:59:06 UTC (rev 5851) +++ branches/jy3k/src/org/python/antlr/GrammarActions.java 2009-01-05 18:48:54 UTC (rev 5852) @@ -155,8 +155,7 @@ List<arg> castArgs(List args) { List<arg> result = new ArrayList<arg>(); if (args != null) { - for (int i=start; i<args.size(); i++) { - Object o = args.get(i); + for (Object o : args) { if (o instanceof arg) { result.add((arg)o); } @@ -268,7 +267,7 @@ } List<stmt> s = castStmts(funcStatements); List<expr> d = castExprs(decorators); - return new FunctionDef(t, nameToken.getText(), a, s, d); + return new FunctionDef(t, nameToken.getText(), a, s, d, null); } List<expr> makeAssignTargets(expr lhs, List rhs) { @@ -496,8 +495,8 @@ cantBeNone(nameToken); List<expr> b = castExprs(bases); List<stmt> s = castStmts(body); - List<expr> d = castExprs(decorators); - return new ClassDef(t, nameToken.getText(), b, s, d); + List<expr> d = castExprs(decorators); + return new ClassDef(t, nameToken.getText(), b, new ArrayList<keyword>(), null, null, s, d); } stmt makeTryExcept(PythonTree t, List body, List handlers, List orelse, List finBody) { Added: branches/jy3k/src/org/python/antlr/adapter/ArgAdapter.java =================================================================== --- branches/jy3k/src/org/python/antlr/adapter/ArgAdapter.java (rev 0) +++ branches/jy3k/src/org/python/antlr/adapter/ArgAdapter.java 2009-01-05 18:48:54 UTC (rev 5852) @@ -0,0 +1,35 @@ +package org.python.antlr.adapter; + +import java.util.ArrayList; +import java.util.List; + +import org.python.antlr.ast.arg; +import org.python.core.Py; +import org.python.core.PyObject; + +public class ArgAdapter implements AstAdapter { + + public Object py2ast(PyObject o) { + if (o == null || o instanceof arg) { + return o; + } else if (o == Py.None) { + return null; + } + + //FIXME: investigate the right exception + throw Py.TypeError("Can't convert " + o.getClass().getName() + " to arg node"); + } + + public PyObject ast2py(Object o) { + return (PyObject)o; + } + + public List iter2ast(PyObject iter) { + List<arg> args = new ArrayList<arg>(); + for(Object o : (Iterable)iter) { + args.add((arg)py2ast((PyObject)o)); + } + return args; + } + +} Modified: branches/jy3k/src/org/python/antlr/adapter/AstAdapters.java =================================================================== --- branches/jy3k/src/org/python/antlr/adapter/AstAdapters.java 2009-01-05 17:59:06 UTC (rev 5851) +++ branches/jy3k/src/org/python/antlr/adapter/AstAdapters.java 2009-01-05 18:48:54 UTC (rev 5852) @@ -11,6 +11,7 @@ */ public class AstAdapters { public static AliasAdapter aliasAdapter = new AliasAdapter(); + public static ArgAdapter argAdapter = new ArgAdapter(); public static CmpopAdapter cmpopAdapter = new CmpopAdapter(); public static ComprehensionAdapter comprehensionAdapter = new ComprehensionAdapter(); public static ExcepthandlerAdapter excepthandlerAdapter = new ExcepthandlerAdapter(); @@ -24,6 +25,10 @@ return (java.util.List<alias>)aliasAdapter.iter2ast(o); } + public static java.util.List<arg> py2argList(PyObject o) { + return (java.util.List<arg>)argAdapter.iter2ast(o); + } + public static java.util.List<cmpopType> py2cmpopList(PyObject o) { return (java.util.List<cmpopType>)cmpopAdapter.iter2ast(o); } Modified: branches/jy3k/src/org/python/compiler/ArgListCompiler.java =================================================================== --- branches/jy3k/src/org/python/compiler/ArgListCompiler.java 2009-01-05 17:59:06 UTC (rev 5851) +++ branches/jy3k/src/org/python/compiler/ArgListCompiler.java 2009-01-05 18:48:54 UTC (rev 5852) @@ -51,14 +51,6 @@ for (int i = 0; i < args.getInternalArgs().size(); i++) { String name = (String) visit(args.getInternalArgs().get(i)); names.add(name); - if (args.getInternalArgs().get(i) instanceof Tuple) { - List<expr> targets = new ArrayList<expr>(); - targets.add(args.getInternalArgs().get(i)); - Assign ass = new Assign(args.getInternalArgs().get(i), - targets, - new Name(args.getInternalArgs().get(i), name, expr_contextType.Load)); - init_code.add(ass); - } } if (args.getInternalVararg() != null) { arglist = true; Modified: branches/jy3k/src/org/python/compiler/CodeCompiler.java =================================================================== --- branches/jy3k/src/org/python/compiler/CodeCompiler.java 2009-01-05 17:59:06 UTC (rev 5851) +++ branches/jy3k/src/org/python/compiler/CodeCompiler.java 2009-01-05 18:48:54 UTC (rev 5852) @@ -1057,7 +1057,12 @@ if (handler.getInternalName() != null) { code.aload(exc); code.getfield("org/python/core/PyException", "value", "Lorg/python/core/PyObject;"); - set(handler.getInternalName()); + + //XXX: in 3.0 name is now a string, not a node. + //set(handler.getInternalName()); + String name = getName(handler.getInternalName()); + code.ldc(name); + } //do exception body Modified: branches/jy3k/src/org/python/compiler/ScopesCompiler.java =================================================================== --- branches/jy3k/src/org/python/compiler/ScopesCompiler.java 2009-01-05 17:59:06 UTC (rev 5851) +++ branches/jy3k/src/org/python/compiler/ScopesCompiler.java 2009-01-05 18:48:54 UTC (rev 5852) @@ -4,6 +4,7 @@ import org.python.antlr.Visitor; import org.python.antlr.PythonTree; +import org.python.antlr.ast.arg; import org.python.antlr.ast.ClassDef; import org.python.antlr.ast.Expression; import org.python.antlr.ast.FunctionDef; @@ -301,9 +302,9 @@ + ")"; def(tmp); ArgListCompiler ac = new ArgListCompiler(); - List<expr> args = new ArrayList<expr>(); - args.add(new Name(node.getToken(), bound_exp, expr_contextType.Param)); - ac.visitArgs(new arguments(node, args, null, null, new ArrayList<expr>())); + List<arg> args = new ArrayList<arg>(); + args.add(new arg(node, bound_exp, null)); + ac.visitArgs(new arguments(node, args, null, null, new ArrayList<arg>(), null, null, new ArrayList<expr>(), new ArrayList<expr>())); beginScope(tmp, FUNCSCOPE, node, ac); cur.addParam(bound_exp); cur.markFromParam(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |