From: <fwi...@us...> - 2008-11-29 04:59:25
|
Revision: 5660 http://jython.svn.sourceforge.net/jython/?rev=5660&view=rev Author: fwierzbicki Date: 2008-11-29 04:59:20 +0000 (Sat, 29 Nov 2008) Log Message: ----------- Movement towards a PyObject-centric ast. Modified Paths: -------------- branches/astwrite/CoreExposed.includes branches/astwrite/ast/asdl_antlr.py branches/astwrite/src/org/python/antlr/AST.java branches/astwrite/src/org/python/antlr/GrammarActions.java branches/astwrite/src/org/python/antlr/ParseException.java branches/astwrite/src/org/python/antlr/PythonErrorNode.java branches/astwrite/src/org/python/antlr/PythonTree.java branches/astwrite/src/org/python/antlr/PythonTreeAdaptor.java branches/astwrite/src/org/python/antlr/ast/Assert.java branches/astwrite/src/org/python/antlr/ast/Assign.java branches/astwrite/src/org/python/antlr/ast/Attribute.java branches/astwrite/src/org/python/antlr/ast/AugAssign.java branches/astwrite/src/org/python/antlr/ast/BinOp.java branches/astwrite/src/org/python/antlr/ast/BoolOp.java branches/astwrite/src/org/python/antlr/ast/Break.java branches/astwrite/src/org/python/antlr/ast/Call.java branches/astwrite/src/org/python/antlr/ast/ClassDef.java branches/astwrite/src/org/python/antlr/ast/Compare.java branches/astwrite/src/org/python/antlr/ast/Continue.java branches/astwrite/src/org/python/antlr/ast/Delete.java branches/astwrite/src/org/python/antlr/ast/Dict.java branches/astwrite/src/org/python/antlr/ast/Ellipsis.java branches/astwrite/src/org/python/antlr/ast/ExceptHandler.java branches/astwrite/src/org/python/antlr/ast/Exec.java branches/astwrite/src/org/python/antlr/ast/Expr.java branches/astwrite/src/org/python/antlr/ast/Expression.java branches/astwrite/src/org/python/antlr/ast/ExtSlice.java branches/astwrite/src/org/python/antlr/ast/For.java branches/astwrite/src/org/python/antlr/ast/FunctionDef.java branches/astwrite/src/org/python/antlr/ast/GeneratorExp.java branches/astwrite/src/org/python/antlr/ast/Global.java branches/astwrite/src/org/python/antlr/ast/If.java branches/astwrite/src/org/python/antlr/ast/IfExp.java branches/astwrite/src/org/python/antlr/ast/Import.java branches/astwrite/src/org/python/antlr/ast/ImportFrom.java branches/astwrite/src/org/python/antlr/ast/Index.java branches/astwrite/src/org/python/antlr/ast/Interactive.java branches/astwrite/src/org/python/antlr/ast/Lambda.java branches/astwrite/src/org/python/antlr/ast/List.java branches/astwrite/src/org/python/antlr/ast/ListComp.java branches/astwrite/src/org/python/antlr/ast/Module.java branches/astwrite/src/org/python/antlr/ast/Name.java branches/astwrite/src/org/python/antlr/ast/Num.java branches/astwrite/src/org/python/antlr/ast/Pass.java branches/astwrite/src/org/python/antlr/ast/Print.java branches/astwrite/src/org/python/antlr/ast/Raise.java branches/astwrite/src/org/python/antlr/ast/Repr.java branches/astwrite/src/org/python/antlr/ast/Return.java branches/astwrite/src/org/python/antlr/ast/Slice.java branches/astwrite/src/org/python/antlr/ast/Str.java branches/astwrite/src/org/python/antlr/ast/Subscript.java branches/astwrite/src/org/python/antlr/ast/Suite.java branches/astwrite/src/org/python/antlr/ast/TryExcept.java branches/astwrite/src/org/python/antlr/ast/TryFinally.java branches/astwrite/src/org/python/antlr/ast/Tuple.java branches/astwrite/src/org/python/antlr/ast/UnaryOp.java branches/astwrite/src/org/python/antlr/ast/VisitorBase.java branches/astwrite/src/org/python/antlr/ast/While.java branches/astwrite/src/org/python/antlr/ast/With.java branches/astwrite/src/org/python/antlr/ast/Yield.java branches/astwrite/src/org/python/antlr/ast/aliasType.java branches/astwrite/src/org/python/antlr/ast/argumentsType.java branches/astwrite/src/org/python/antlr/ast/boolopType.java branches/astwrite/src/org/python/antlr/ast/cmpopType.java branches/astwrite/src/org/python/antlr/ast/comprehensionType.java branches/astwrite/src/org/python/antlr/ast/excepthandlerType.java branches/astwrite/src/org/python/antlr/ast/exprType.java branches/astwrite/src/org/python/antlr/ast/expr_contextType.java branches/astwrite/src/org/python/antlr/ast/keywordType.java branches/astwrite/src/org/python/antlr/ast/modType.java branches/astwrite/src/org/python/antlr/ast/operatorType.java branches/astwrite/src/org/python/antlr/ast/sliceType.java branches/astwrite/src/org/python/antlr/ast/stmtType.java branches/astwrite/src/org/python/antlr/ast/unaryopType.java branches/astwrite/src/org/python/compiler/ScopesCompiler.java branches/astwrite/src/org/python/modules/Setup.java Added Paths: ----------- branches/astwrite/src/org/python/antlr/ast/AstModule.java Removed Paths: ------------- branches/astwrite/Lib/_ast.py Modified: branches/astwrite/CoreExposed.includes =================================================================== --- branches/astwrite/CoreExposed.includes 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/CoreExposed.includes 2008-11-29 04:59:20 UTC (rev 5660) @@ -1,3 +1,5 @@ +org/python/antlr/AST.class +org/python/antlr/ast/AsmModule.class org/python/core/PyArray.class org/python/core/PyBaseString.class org/python/core/PyBaseException.class Deleted: branches/astwrite/Lib/_ast.py =================================================================== --- branches/astwrite/Lib/_ast.py 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/Lib/_ast.py 2008-11-29 04:59:20 UTC (rev 5660) @@ -1,79 +0,0 @@ -from org.python.antlr.ast.boolopType import And,Or -from org.python.antlr.ast.operatorType import Add,Sub,Mult,Div,FloorDiv,Mod,LShift,RShift,BitOr,BitAnd,BitXor,Pow -from org.python.antlr.ast.cmpopType import Eq,Gt,GtE,In,Is,IsNot,Lt,LtE,NotEq,NotIn -from org.python.antlr.ast.unaryopType import Invert,Not,UAdd,USub -from org.python.core.PyTableCode import PyCF_ONLY_AST -from org.python.antlr.ast.expr_contextType import Load, Store, Del, AugLoad, AugStore, Param - -from org.python.antlr import AST - -from org.python.antlr.ast import Assert -from org.python.antlr.ast import Assign -from org.python.antlr.ast import Attribute -from org.python.antlr.ast import AugAssign -from org.python.antlr.ast import BinOp -from org.python.antlr.ast import BoolOp -from org.python.antlr.ast import Break -from org.python.antlr.ast import Call -from org.python.antlr.ast import ClassDef -from org.python.antlr.ast import Compare -from org.python.antlr.ast import Continue -from org.python.antlr.ast import Delete -from org.python.antlr.ast import Dict -from org.python.antlr.ast import Ellipsis -from org.python.antlr.ast import Exec -from org.python.antlr.ast import Expr -from org.python.antlr.ast import Expression -from org.python.antlr.ast import ExtSlice -from org.python.antlr.ast import For -from org.python.antlr.ast import FunctionDef -from org.python.antlr.ast import GeneratorExp -from org.python.antlr.ast import Global -from org.python.antlr.ast import If -from org.python.antlr.ast import IfExp -from org.python.antlr.ast import Import -from org.python.antlr.ast import ImportFrom -from org.python.antlr.ast import Index -from org.python.antlr.ast import Interactive -from org.python.antlr.ast import Lambda -from org.python.antlr.ast import List -from org.python.antlr.ast import ListComp -from org.python.antlr.ast import Module -from org.python.antlr.ast import Name -from org.python.antlr.ast import Num -from org.python.antlr.ast import Pass -from org.python.antlr.ast import Print -from org.python.antlr.ast import Raise -from org.python.antlr.ast import Repr -from org.python.antlr.ast import Return -from org.python.antlr.ast import Slice -from org.python.antlr.ast import Str -from org.python.antlr.ast import Subscript -from org.python.antlr.ast import Suite -from org.python.antlr.ast import TryExcept -from org.python.antlr.ast import TryFinally -from org.python.antlr.ast import Tuple -from org.python.antlr.ast import UnaryOp -#from org.python.antlr.ast import Unicode -from org.python.antlr.ast import While -from org.python.antlr.ast import With -from org.python.antlr.ast import Yield - -import org.python.antlr.ast.aliasType as alias -import org.python.antlr.ast.argumentsType as arguments -import org.python.antlr.ast.boolopType as boolop -import org.python.antlr.ast.cmpopType as cmpop -import org.python.antlr.ast.comprehensionType as comprehension -import org.python.antlr.ast.excepthandlerType as excepthandler -import org.python.antlr.ast.exprType as expr -import org.python.antlr.ast.expr_contextType as expr_context -import org.python.antlr.ast.keywordType as keyword -import org.python.antlr.ast.modType as mod -import org.python.antlr.ast.operatorType as operator -import org.python.antlr.ast.sliceType as slice -import org.python.antlr.ast.stmtType as stmt -import org.python.antlr.ast.unaryopType as unaryop - -#Set to the same value as the CPython version we are targetting. -#note that this number comes from the revision number in CPython's repository. -__version__ = 43614 Modified: branches/astwrite/ast/asdl_antlr.py =================================================================== --- branches/astwrite/ast/asdl_antlr.py 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/ast/asdl_antlr.py 2008-11-29 04:59:20 UTC (rev 5660) @@ -56,15 +56,24 @@ print >> self.file, "// Autogenerated AST node" print >> self.file, 'package org.python.antlr.ast;' if refersToPythonTree: - print >> self.file, 'import java.util.ArrayList;' print >> self.file, 'import org.python.antlr.PythonTree;' print >> self.file, 'import org.python.antlr.adapter.AstAdapters;' print >> self.file, 'import org.python.antlr.adapter.ListWrapper;' print >> self.file, 'import org.antlr.runtime.CommonToken;' print >> self.file, 'import org.antlr.runtime.Token;' + print >> self.file, 'import org.python.core.Py;' + print >> self.file, 'import org.python.core.PyObject;' + print >> self.file, 'import org.python.core.PyType;' + print >> self.file, 'import org.python.expose.ExposedGet;' + print >> self.file, 'import org.python.expose.ExposedMethod;' + print >> self.file, 'import org.python.expose.ExposedNew;' + print >> self.file, 'import org.python.expose.ExposedSet;' + print >> self.file, 'import org.python.expose.ExposedType;' + if useDataOutput: print >> self.file, 'import java.io.DataOutputStream;' print >> self.file, 'import java.io.IOException;' + print >> self.file, 'import java.util.ArrayList;' print >> self.file def close(self): @@ -143,7 +152,7 @@ self.open("%sType" % name, refersToPythonTree=0) self.emit('import org.python.antlr.AST;', depth) self.emit('', 0) - self.emit("public enum %(name)sType implements AST {" % locals(), depth) + self.emit("public enum %(name)sType {" % locals(), depth) self.emit("UNDEFINED,", depth + 1) for i in range(len(sum.types) - 1): type = sum.types[i] @@ -199,6 +208,10 @@ self.emit("}", depth+1) self.emit("", 0) + self.emit("public %(name)sType(PyType subType) {" % locals(), depth+1) + self.emit("}", depth+1) + self.emit("", 0) + self.emit("public %(name)sType(int ttype, Token token) {" % locals(), depth+1) self.emit("super(ttype, token);", depth+2) self.emit("}", depth+1) @@ -223,6 +236,7 @@ self.open("%sType" % name, useDataOutput=1) self.emit("public class %(name)sType extends PythonTree {" % locals(), depth) + self.emit("public static final PyType TYPE = PyType.fromClass(%sType.class);" % name, depth + 1); for f in product.fields: self.visit(f, depth + 1) self.emit("", depth) @@ -245,8 +259,10 @@ s = "implements %s " % ", ".join(ifaces) else: s = "" + self.emit('@ExposedType(name = "_ast.%s", base = PyObject.class)' % cons.name, depth); self.emit("public class %s extends %sType %s{" % (cons.name, name, s), depth) + self.emit("public static final PyType TYPE = PyType.fromClass(%s.class);" % cons.name, depth); for f in cons.fields: self.visit(f, depth + 1) self.emit("", depth) @@ -377,8 +393,18 @@ def javaConstructors(self, type, clsname, ctorname, fields, depth): if len(fields) > 0: - self.emit("public %s() {}" % (ctorname), depth) + self.emit("public %s() {" % (ctorname), depth) + self.emit("this(TYPE);", depth + 1) + self.emit("}", depth) + self.emit("public %s(PyType subType) {" % (ctorname), depth) + self.emit("super(subType);", depth + 1) + self.emit("}", depth) + + self.emit("@ExposedNew", depth) + self.emit("@ExposedMethod", depth) + self.emit("public void Module___init__(PyObject[] args, String[] keywords) {}", depth) + fpargs = ", ".join(["Object %s" % f.name for f in fields]) self.emit("public %s(%s) {" % (ctorname, fpargs), depth) for f in fields: @@ -421,17 +447,23 @@ str(field.name).capitalize()), depth) self.emit("return %s;" % field.name, depth+1) self.emit("}", depth) - self.emit("public Object get%s() {" % (str(field.name).capitalize()), depth) + self.emit('@ExposedGet(name = "%s")' % field.name, depth) + self.emit("public PyObject get%s() {" % (str(field.name).capitalize()), depth) if field.seq: - self.emit("return new ListWrapper(%s, AstAdapters.%sAdapter);" % (field.name, field.type), depth+1) + #FIXME: temporary + #self.emit("return new ListWrapper(%s, AstAdapters.%sAdapter);" % (field.name, field.type), depth+1) + self.emit("return Py.None;", depth+1) else: - self.emit("return %s;" % field.name, depth+1) + #FIXME: temporary + #self.emit("return %s;" % field.name, depth+1) + self.emit("return Py.None;", depth+1) self.emit("}", depth) + self.emit('@ExposedSet(name = "%s")' % field.name, depth) self.emit("public void set%s(Object %s) {" % (str(field.name).capitalize(), field.name), depth) if field.seq: #self.emit("this.%s = new %s(" % (field.name, self.javaType(field)), depth+1) - self.emit("this.%s = AstAdapters.to_%sList(%s);" % (field.name, str(field.type), field.name), depth+1) + self.emit("//FJW this.%s = AstAdapters.to_%sList(%s);" % (field.name, str(field.type), field.name), depth+1) else: self.emit("this.%s = AstAdapters.to_%s(%s);" % (field.name, str(field.type), field.name), depth+1) self.emit("}", depth) Modified: branches/astwrite/src/org/python/antlr/AST.java =================================================================== --- branches/astwrite/src/org/python/antlr/AST.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/AST.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -1,8 +1,12 @@ package org.python.antlr; -public interface AST { +import org.python.core.PyObject; +import org.python.core.PyType; +import org.python.expose.ExposedType; + +@ExposedType(name = "_ast.AST", base = PyObject.class) +public abstract class AST extends PyObject { + public static final PyType TYPE = PyType.fromClass(AST.class); public static String[] emptyStringArray = new String[0]; - public String[] get_attributes(); - public String[] get_fields(); } Modified: branches/astwrite/src/org/python/antlr/GrammarActions.java =================================================================== --- branches/astwrite/src/org/python/antlr/GrammarActions.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/GrammarActions.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -308,7 +308,7 @@ return value; } - void recurseSetContext(Tree tree, expr_contextType context) { + void recurseSetContext(PythonTree tree, expr_contextType context) { if (tree instanceof Context) { ((Context)tree).setContext(context); } Modified: branches/astwrite/src/org/python/antlr/ParseException.java =================================================================== --- branches/astwrite/src/org/python/antlr/ParseException.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/ParseException.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -38,7 +38,7 @@ public ParseException(String message, PythonTree n) { this(message, n.getLine(), n.getCharPositionInLine()); this.node = n; - this.token = n.token; + this.token = n.getToken(); } public ParseException(String message, RecognitionException r) { Modified: branches/astwrite/src/org/python/antlr/PythonErrorNode.java =================================================================== --- branches/astwrite/src/org/python/antlr/PythonErrorNode.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/PythonErrorNode.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -24,7 +24,7 @@ return errorNode.isNil(); } - public int getType() { + public int getAntlrType() { return errorNode.getType(); } Modified: branches/astwrite/src/org/python/antlr/PythonTree.java =================================================================== --- branches/astwrite/src/org/python/antlr/PythonTree.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/PythonTree.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -1,35 +1,50 @@ package org.python.antlr; -import org.antlr.runtime.tree.BaseTree; -import org.antlr.runtime.tree.Tree; +import org.python.core.PyObject; import org.antlr.runtime.CommonToken; import org.antlr.runtime.Token; +import org.antlr.runtime.tree.CommonTree; +import org.python.core.PyType; import org.python.antlr.ast.VisitorIF; -public class PythonTree extends BaseTree implements AST { +import java.util.ArrayList; +import java.util.List; +public class PythonTree extends AST { + public boolean from_future_checked = false; private int charStartIndex = -1; private int charStopIndex = -1; - + private CommonTree node; + private PythonTree parent; + /** A single token is the payload */ - public Token token; + //private Token token; /** What token indexes bracket all tokens associated with this node * and below? */ - protected int startIndex=-1, stopIndex=-1; + //protected int startIndex=-1, stopIndex=-1; /** Who is the parent node of this node; if null, implies node is root */ - public PythonTree parent; + //private PythonTree parent; /** What index is this node in the child list? Range: 0..n-1 */ - public int childIndex = -1; + //private int childIndex = -1; public PythonTree() { + node = new CommonTree(); } + public PythonTree(PyType subType) { + node = new CommonTree(); + } + + public PythonTree(Token t) { + node = new CommonTree(t); + } + public PythonTree(int ttype, Token t) { CommonToken c = new CommonToken(ttype, t.getText()); c.setLine(t.getLine()); @@ -38,59 +53,51 @@ c.setChannel(t.getChannel()); c.setStartIndex(((CommonToken)t).getStartIndex()); c.setStopIndex(((CommonToken)t).getStopIndex()); - token = c; + node = new CommonTree(c); } - public PythonTree(Token t) { - this.token = t; + public PythonTree(PythonTree tree) { + node = new CommonTree(tree.getNode()); + charStartIndex = tree.getCharStartIndex(); + charStopIndex = tree.getCharStopIndex(); } + + public CommonTree getNode() { + return node; + } - public PythonTree(PythonTree node) { - super(node); - token = node.token; - startIndex = node.startIndex; - stopIndex = node.stopIndex; - charStartIndex = node.getCharStartIndex(); - charStopIndex = node.getCharStopIndex(); - } - public Token getToken() { - return token; + return node.getToken(); } - public Tree dupNode() { + public PythonTree dupNode() { return new PythonTree(this); } public boolean isNil() { - return token==null; + return node.isNil(); } - public int getType() { - if (token==null) { - return Token.INVALID_TOKEN_TYPE; - } - return token.getType(); + public int getAntlrType() { + return node.getType(); } public String getText() { - if (token==null) { - return null; - } - return token.getText(); + return node.getText(); } public int getLine() { - if (token==null || token.getLine()==0) { + if (node.getToken()==null || node.getToken().getLine()==0) { if ( getChildCount()>0 ) { return getChild(0).getLine(); } return 1; } - return token.getLine(); + return node.getToken().getLine(); } public int getCharPositionInLine() { + Token token = node.getToken(); if (token==null || token.getCharPositionInLine()==-1) { if (getChildCount()>0) { return getChild(0).getCharPositionInLine(); @@ -107,46 +114,24 @@ } public int getTokenStartIndex() { - if ( startIndex==-1 && token!=null ) { - return token.getTokenIndex(); - } - return startIndex; + return node.getTokenStartIndex(); } public void setTokenStartIndex(int index) { - startIndex = index; + node.setTokenStartIndex(index); } public int getTokenStopIndex() { - if ( stopIndex==-1 && token!=null ) { - return token.getTokenIndex(); - } - return stopIndex; + return node.getTokenStopIndex(); } public void setTokenStopIndex(int index) { - stopIndex = index; + node.setTokenStopIndex(index); } - public int getChildIndex() { - return childIndex; - } - - public Tree getParent() { - return parent; - } - - public void setParent(Tree t) { - this.parent = (PythonTree)t; - } - - public void setChildIndex(int index) { - this.childIndex = index; - } - public int getCharStartIndex() { - if (charStartIndex == -1 && token != null) { - return ((CommonToken)token).getStartIndex(); + if (charStartIndex == -1 && node.getToken() != null) { + return ((CommonToken)node.getToken()).getStartIndex(); } return charStartIndex ; } @@ -166,8 +151,8 @@ */ public int getCharStopIndex() { - if (charStopIndex == -1 && token != null) { - return ((CommonToken)token).getStopIndex() + 1; + if (charStopIndex == -1 && node.getToken() != null) { + return ((CommonToken)node.getToken()).getStopIndex() + 1; } return charStopIndex; } @@ -176,24 +161,36 @@ charStopIndex = index; } + public int getChildIndex() { + return node.getChildIndex(); + } + + public PythonTree getParent() { + return parent; + } + + public void setParent(PythonTree t) { + this.parent = t; + } + + public void setChildIndex(int index) { + node.setChildIndex(index); + } + public String toString() { if (isNil()) { return "None"; } - if ( getType()==Token.INVALID_TOKEN_TYPE ) { + if ( getAntlrType()==Token.INVALID_TOKEN_TYPE ) { return "<errornode>"; } - if ( token==null ) { + if ( node.getToken()==null ) { return null; } - return token.getText() + "(" + this.getLine() + "," + this.getCharPositionInLine() + ")"; + return node.getToken().getText() + "(" + this.getLine() + "," + this.getCharPositionInLine() + ")"; } - public String info() { - return this.getCharStartIndex() + ":" + this.getCharStopIndex(); - } - public String toStringTree() { if (children == null || children.size() == 0) { return this.toString();// + "[" + this.info() + "]"; @@ -205,7 +202,7 @@ buf.append(' '); } for (int i = 0; children != null && i < children.size(); i++) { - BaseTree t = (BaseTree)children.get(i); + PythonTree t = (PythonTree)children.get(i); if (i > 0) { buf.append(' '); } @@ -260,4 +257,205 @@ public String[] get_attributes() { return emptyStringArray; } + + //Copied from org.antlr.runtime.tree.BaseTree + protected List children; + + public PythonTree getChild(int i) { + if ( children==null || i>=children.size() ) { + return null; + } + return (PythonTree)children.get(i); + } + + /** Get the children internal List; note that if you directly mess with + * the list, do so at your own risk. + */ + public List getChildren() { + return children; + } + + public PythonTree getFirstChildWithType(int type) { + for (int i = 0; children!=null && i < children.size(); i++) { + PythonTree t = (PythonTree) children.get(i); + if ( t.getAntlrType()==type ) { + return t; + } + } + return null; + } + + public int getChildCount() { + if ( children==null ) { + return 0; + } + return children.size(); + } + + /** Add t as child of this node. + * + * Warning: if t has no children, but child does + * and child isNil then this routine moves children to t via + * t.children = child.children; i.e., without copying the array. + */ + public void addChild(PythonTree t) { + //System.out.println("add child "+t.toStringTree()+" "+this.toStringTree()); + //System.out.println("existing children: "+children); + if ( t==null ) { + return; // do nothing upon addChild(null) + } + PythonTree childTree = (PythonTree)t; + if ( childTree.isNil() ) { // t is an empty node possibly with children + if ( this.children!=null && this.children == childTree.children ) { + throw new RuntimeException("attempt to add child list to itself"); + } + // just add all of childTree's children to this + if ( childTree.children!=null ) { + if ( this.children!=null ) { // must copy, this has children already + int n = childTree.children.size(); + for (int i = 0; i < n; i++) { + PythonTree c = (PythonTree)childTree.children.get(i); + this.children.add(c); + // handle double-link stuff for each child of nil root + c.setParent(this); + c.setChildIndex(children.size()-1); + } + } + else { + // no children for this but t has children; just set pointer + // call general freshener routine + this.children = childTree.children; + this.freshenParentAndChildIndexes(); + } + } + } + else { // child is not nil (don't care about children) + if ( children==null ) { + children = createChildrenList(); // create children list on demand + } + children.add(t); + childTree.setParent(this); + childTree.setChildIndex(children.size()-1); + } + // System.out.println("now children are: "+children); + } + + /** Add all elements of kids list as children of this node */ + public void addChildren(List kids) { + for (int i = 0; i < kids.size(); i++) { + PythonTree t = (PythonTree) kids.get(i); + addChild(t); + } + } + + public void setChild(int i, PythonTree t) { + if ( t==null ) { + return; + } + if ( t.isNil() ) { + throw new IllegalArgumentException("Can't set single child to a list"); + } + if ( children==null ) { + children = createChildrenList(); + } + children.set(i, t); + t.setParent(this); + t.setChildIndex(i); + } + + public Object deleteChild(int i) { + if ( children==null ) { + return null; + } + PythonTree killed = (PythonTree)children.remove(i); + // walk rest and decrement their child indexes + this.freshenParentAndChildIndexes(i); + return killed; + } + + /** Delete children from start to stop and replace with t even if t is + * a list (nil-root tree). num of children can increase or decrease. + * For huge child lists, inserting children can force walking rest of + * children to set their childindex; could be slow. + */ + public void replaceChildren(int startChildIndex, int stopChildIndex, Object t) { + /* + System.out.println("replaceChildren "+startChildIndex+", "+stopChildIndex+ + " with "+((PythonTree)t).toStringTree()); + System.out.println("in="+toStringTree()); + */ + if ( children==null ) { + throw new IllegalArgumentException("indexes invalid; no children in list"); + } + int replacingHowMany = stopChildIndex - startChildIndex + 1; + int replacingWithHowMany; + PythonTree newTree = (PythonTree)t; + List newChildren = null; + // normalize to a list of children to add: newChildren + if ( newTree.isNil() ) { + newChildren = newTree.children; + } + else { + newChildren = new ArrayList(1); + newChildren.add(newTree); + } + replacingWithHowMany = newChildren.size(); + int numNewChildren = newChildren.size(); + int delta = replacingHowMany - replacingWithHowMany; + // if same number of nodes, do direct replace + if ( delta == 0 ) { + int j = 0; // index into new children + for (int i=startChildIndex; i<=stopChildIndex; i++) { + PythonTree child = (PythonTree)newChildren.get(j); + children.set(i, child); + child.setParent(this); + child.setChildIndex(i); + j++; + } + } + else if ( delta > 0 ) { // fewer new nodes than there were + // set children and then delete extra + for (int j=0; j<numNewChildren; j++) { + children.set(startChildIndex+j, newChildren.get(j)); + } + int indexToDelete = startChildIndex+numNewChildren; + for (int c=indexToDelete; c<=stopChildIndex; c++) { + // delete same index, shifting everybody down each time + PythonTree killed = (PythonTree)children.remove(indexToDelete); + } + freshenParentAndChildIndexes(startChildIndex); + } + else { // more new nodes than were there before + // fill in as many children as we can (replacingHowMany) w/o moving data + for (int j=0; j<replacingHowMany; j++) { + children.set(startChildIndex+j, newChildren.get(j)); + } + int numToInsert = replacingWithHowMany-replacingHowMany; + for (int j=replacingHowMany; j<replacingWithHowMany; j++) { + children.add(startChildIndex+j, newChildren.get(j)); + } + freshenParentAndChildIndexes(startChildIndex); + } + //System.out.println("out="+toStringTree()); + } + + /** Override in a subclass to change the impl of children list */ + protected List createChildrenList() { + return new ArrayList(); + } + + /** Set the parent and child index values for all child of t */ + public void freshenParentAndChildIndexes() { + freshenParentAndChildIndexes(0); + } + + public void freshenParentAndChildIndexes(int offset) { + int n = getChildCount(); + for (int c = offset; c < n; c++) { + PythonTree child = (PythonTree)getChild(c); + child.setChildIndex(c); + child.setParent(this); + } + } + } Modified: branches/astwrite/src/org/python/antlr/PythonTreeAdaptor.java =================================================================== --- branches/astwrite/src/org/python/antlr/PythonTreeAdaptor.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/PythonTreeAdaptor.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -49,6 +49,104 @@ if (t == null) { return null; } - return create(((PythonTree) t).token); + return create(((PythonTree) t).getToken()); } + + public boolean isNil(Object tree) { + return ((PythonTree)tree).isNil(); + } + + public void addChild(Object t, Object child) { + if ( t!=null && child!=null ) { + ((PythonTree)t).addChild((PythonTree)child); + } + } + + public Object becomeRoot(Object newRoot, Object oldRoot) { + //System.out.println("becomeroot new "+newRoot.toString()+" old "+oldRoot); + PythonTree newRootTree = (PythonTree)newRoot; + PythonTree oldRootTree = (PythonTree)oldRoot; + if ( oldRoot==null ) { + return newRoot; + } + // handle ^(nil real-node) + if ( newRootTree.isNil() ) { + int nc = newRootTree.getChildCount(); + if ( nc==1 ) newRootTree = (PythonTree)newRootTree.getChild(0); + else if ( nc >1 ) { + // TODO: make tree run time exceptions hierarchy + throw new RuntimeException("more than one node as root (TODO: make exception hierarchy)"); + } + } + // add oldRoot to newRoot; addChild takes care of case where oldRoot + // is a flat list (i.e., nil-rooted tree). All children of oldRoot + // are added to newRoot. + newRootTree.addChild(oldRootTree); + return newRootTree; + } + + public Object rulePostProcessing(Object root) { + //System.out.println("rulePostProcessing: "+((PythonTree)root).toStringTree()); + PythonTree r = (PythonTree)root; + if ( r!=null && r.isNil() ) { + if ( r.getChildCount()==0 ) { + r = null; + } + else if ( r.getChildCount()==1 ) { + r = (PythonTree)r.getChild(0); + // whoever invokes rule will set parent and child index + r.setParent(null); + r.setChildIndex(-1); + } + } + return r; + } + + public Object create(int tokenType, Token fromToken) { + fromToken = createToken(fromToken); + //((ClassicToken)fromToken).setType(tokenType); + fromToken.setType(tokenType); + PythonTree t = (PythonTree)create(fromToken); + return t; + } + + public Object create(int tokenType, Token fromToken, String text) { + fromToken = createToken(fromToken); + fromToken.setType(tokenType); + fromToken.setText(text); + PythonTree t = (PythonTree)create(fromToken); + return t; + } + + public Object create(int tokenType, String text) { + Token fromToken = createToken(tokenType, text); + PythonTree t = (PythonTree)create(fromToken); + return t; + } + + public int getType(Object t) { + ((PythonTree)t).getType(); + return 0; + } + + public String getText(Object t) { + return ((PythonTree)t).getText(); + } + + public Object getChild(Object t, int i) { + return ((PythonTree)t).getChild(i); + } + + public void setChild(Object t, int i, Object child) { + ((PythonTree)t).setChild(i, (PythonTree)child); + } + + public Object deleteChild(Object t, int i) { + return ((PythonTree)t).deleteChild(i); + } + + public int getChildCount(Object t) { + return ((PythonTree)t).getChildCount(); + } + } Modified: branches/astwrite/src/org/python/antlr/ast/Assert.java =================================================================== --- branches/astwrite/src/org/python/antlr/ast/Assert.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/ast/Assert.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -1,22 +1,34 @@ // Autogenerated AST node package org.python.antlr.ast; -import java.util.ArrayList; import org.python.antlr.PythonTree; import org.python.antlr.adapter.AstAdapters; import org.python.antlr.adapter.ListWrapper; import org.antlr.runtime.CommonToken; import org.antlr.runtime.Token; +import org.python.core.Py; +import org.python.core.PyObject; +import org.python.core.PyType; +import org.python.expose.ExposedGet; +import org.python.expose.ExposedMethod; +import org.python.expose.ExposedNew; +import org.python.expose.ExposedSet; +import org.python.expose.ExposedType; import java.io.DataOutputStream; import java.io.IOException; +import java.util.ArrayList; +@ExposedType(name = "_ast.Assert", base = PyObject.class) public class Assert extends stmtType { +public static final PyType TYPE = PyType.fromClass(Assert.class); private exprType test; public exprType getInternalTest() { return test; } - public Object getTest() { - return test; + @ExposedGet(name = "test") + public PyObject getTest() { + return Py.None; } + @ExposedSet(name = "test") public void setTest(Object test) { this.test = AstAdapters.to_expr(test); } @@ -25,9 +37,11 @@ public exprType getInternalMsg() { return msg; } - public Object getMsg() { - return msg; + @ExposedGet(name = "msg") + public PyObject getMsg() { + return Py.None; } + @ExposedSet(name = "msg") public void setMsg(Object msg) { this.msg = AstAdapters.to_expr(msg); } @@ -36,7 +50,15 @@ private final static String[] fields = new String[] {"test", "msg"}; public String[] get_fields() { return fields; } - public Assert() {} + public Assert() { + this(TYPE); + } + public Assert(PyType subType) { + super(subType); + } + @ExposedNew + @ExposedMethod + public void Module___init__(PyObject[] args, String[] keywords) {} public Assert(Object test, Object msg) { setTest(test); setMsg(msg); Modified: branches/astwrite/src/org/python/antlr/ast/Assign.java =================================================================== --- branches/astwrite/src/org/python/antlr/ast/Assign.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/ast/Assign.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -1,33 +1,47 @@ // Autogenerated AST node package org.python.antlr.ast; -import java.util.ArrayList; import org.python.antlr.PythonTree; import org.python.antlr.adapter.AstAdapters; import org.python.antlr.adapter.ListWrapper; import org.antlr.runtime.CommonToken; import org.antlr.runtime.Token; +import org.python.core.Py; +import org.python.core.PyObject; +import org.python.core.PyType; +import org.python.expose.ExposedGet; +import org.python.expose.ExposedMethod; +import org.python.expose.ExposedNew; +import org.python.expose.ExposedSet; +import org.python.expose.ExposedType; import java.io.DataOutputStream; import java.io.IOException; +import java.util.ArrayList; +@ExposedType(name = "_ast.Assign", base = PyObject.class) public class Assign extends stmtType { +public static final PyType TYPE = PyType.fromClass(Assign.class); private java.util.List<exprType> targets; public java.util.List<exprType> getInternalTargets() { return targets; } - public Object getTargets() { - return new ListWrapper(targets, AstAdapters.exprAdapter); + @ExposedGet(name = "targets") + public PyObject getTargets() { + return Py.None; } + @ExposedSet(name = "targets") public void setTargets(Object targets) { - this.targets = AstAdapters.to_exprList(targets); + //FJW this.targets = AstAdapters.to_exprList(targets); } private exprType value; public exprType getInternalValue() { return value; } - public Object getValue() { - return value; + @ExposedGet(name = "value") + public PyObject getValue() { + return Py.None; } + @ExposedSet(name = "value") public void setValue(Object value) { this.value = AstAdapters.to_expr(value); } @@ -36,7 +50,15 @@ private final static String[] fields = new String[] {"targets", "value"}; public String[] get_fields() { return fields; } - public Assign() {} + public Assign() { + this(TYPE); + } + public Assign(PyType subType) { + super(subType); + } + @ExposedNew + @ExposedMethod + public void Module___init__(PyObject[] args, String[] keywords) {} public Assign(Object targets, Object value) { setTargets(targets); setValue(value); Added: branches/astwrite/src/org/python/antlr/ast/AstModule.java =================================================================== --- branches/astwrite/src/org/python/antlr/ast/AstModule.java (rev 0) +++ branches/astwrite/src/org/python/antlr/ast/AstModule.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -0,0 +1,86 @@ +package org.python.antlr.ast; + +import org.python.core.ClassDictInit; +import org.python.core.imp; +import org.python.core.Py; +import org.python.core.PyObject; +import org.python.core.PyType; + +import org.python.antlr.AST; +import org.python.core.exceptions; + +public class AstModule implements ClassDictInit { + + private AstModule() {} + + public static void classDictInit(PyObject dict) { + dict.__setitem__("AST", AST.TYPE); + dict.__setitem__("Module", Module.TYPE); + dict.__setitem__("Assert", Assert.TYPE); + dict.__setitem__("Assign", Assign.TYPE); + dict.__setitem__("Attribute", AugAssign.TYPE); + dict.__setitem__("AugAssign", AugAssign.TYPE); + dict.__setitem__("BinOp", BinOp.TYPE); + dict.__setitem__("BoolOp", BoolOp.TYPE); + dict.__setitem__("Break", Break.TYPE); + dict.__setitem__("Call", Call.TYPE); + dict.__setitem__("ClassDef", ClassDef.TYPE); + dict.__setitem__("Compare", Compare.TYPE); + dict.__setitem__("Continue", Continue.TYPE); + dict.__setitem__("Delete", Delete.TYPE); + dict.__setitem__("Dict", Dict.TYPE); + dict.__setitem__("Ellipsis", Ellipsis.TYPE); +// dict.__setitem__("ErrorExpr", ErrorExpr.TYPE); +// dict.__setitem__("ErrorMod", ErrorMod.TYPE); +// dict.__setitem__("ErrorSlice", ErrorSlice.TYPE); +// dict.__setitem__("ErrorStmt", ErrorStmt.TYPE); + dict.__setitem__("ExceptHandler", ExceptHandler.TYPE); + dict.__setitem__("Exec", Exec.TYPE); + dict.__setitem__("Expr", Expr.TYPE); + dict.__setitem__("Expression", Expression.TYPE); + dict.__setitem__("ExtSlice", ExtSlice.TYPE); + dict.__setitem__("For", For.TYPE); + dict.__setitem__("FunctionDef", FunctionDef.TYPE); + dict.__setitem__("GeneratorExp", GeneratorExp.TYPE); + dict.__setitem__("Global", Global.TYPE); + dict.__setitem__("If", If.TYPE); + dict.__setitem__("IfExp", IfExp.TYPE); + dict.__setitem__("Import", Import.TYPE); + dict.__setitem__("ImportFrom", ImportFrom.TYPE); + dict.__setitem__("Index", Index.TYPE); + dict.__setitem__("Interactive", Interactive.TYPE); + dict.__setitem__("Lambda", Lambda.TYPE); + dict.__setitem__("List", List.TYPE); + dict.__setitem__("ListComp", ListComp.TYPE); + dict.__setitem__("Module", Module.TYPE); + dict.__setitem__("Name", Name.TYPE); + dict.__setitem__("Num", Num.TYPE); + dict.__setitem__("Pass", Pass.TYPE); + dict.__setitem__("Print", Print.TYPE); + dict.__setitem__("Raise", Raise.TYPE); + dict.__setitem__("Repr", Repr.TYPE); + dict.__setitem__("Return", Return.TYPE); + dict.__setitem__("Slice", Slice.TYPE); + dict.__setitem__("Str", Str.TYPE); + dict.__setitem__("Subscript", Subscript.TYPE); + dict.__setitem__("Suite", Suite.TYPE); + dict.__setitem__("TryExcept", TryExcept.TYPE); + dict.__setitem__("TryFinally", TryFinally.TYPE); + dict.__setitem__("Tuple", Tuple.TYPE); + dict.__setitem__("UnaryOp", UnaryOp.TYPE); + dict.__setitem__("While", While.TYPE); + dict.__setitem__("With", With.TYPE); + dict.__setitem__("Yield", Yield.TYPE); + dict.__setitem__("alias", aliasType.TYPE); + dict.__setitem__("arguments", argumentsType.TYPE); + dict.__setitem__("comprehension", comprehensionType.TYPE); + dict.__setitem__("excepthandler", excepthandlerType.TYPE); + dict.__setitem__("expr", exprType.TYPE); + dict.__setitem__("keyword", keywordType.TYPE); + dict.__setitem__("mod", modType.TYPE); + dict.__setitem__("slice", sliceType.TYPE); + dict.__setitem__("stmt", stmtType.TYPE); + dict.__setitem__("operator", imp.importName("org.python.antlr.ast.operatorType", false)); + dict.__setitem__("Add", imp.importName("org.python.antlr.ast.operatorType.Add", false)); + } +} Modified: branches/astwrite/src/org/python/antlr/ast/Attribute.java =================================================================== --- branches/astwrite/src/org/python/antlr/ast/Attribute.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/ast/Attribute.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -1,22 +1,34 @@ // Autogenerated AST node package org.python.antlr.ast; -import java.util.ArrayList; import org.python.antlr.PythonTree; import org.python.antlr.adapter.AstAdapters; import org.python.antlr.adapter.ListWrapper; import org.antlr.runtime.CommonToken; import org.antlr.runtime.Token; +import org.python.core.Py; +import org.python.core.PyObject; +import org.python.core.PyType; +import org.python.expose.ExposedGet; +import org.python.expose.ExposedMethod; +import org.python.expose.ExposedNew; +import org.python.expose.ExposedSet; +import org.python.expose.ExposedType; import java.io.DataOutputStream; import java.io.IOException; +import java.util.ArrayList; +@ExposedType(name = "_ast.Attribute", base = PyObject.class) public class Attribute extends exprType implements Context { +public static final PyType TYPE = PyType.fromClass(Attribute.class); private exprType value; public exprType getInternalValue() { return value; } - public Object getValue() { - return value; + @ExposedGet(name = "value") + public PyObject getValue() { + return Py.None; } + @ExposedSet(name = "value") public void setValue(Object value) { this.value = AstAdapters.to_expr(value); } @@ -25,9 +37,11 @@ public String getInternalAttr() { return attr; } - public Object getAttr() { - return attr; + @ExposedGet(name = "attr") + public PyObject getAttr() { + return Py.None; } + @ExposedSet(name = "attr") public void setAttr(Object attr) { this.attr = AstAdapters.to_identifier(attr); } @@ -36,9 +50,11 @@ public expr_contextType getInternalCtx() { return ctx; } - public Object getCtx() { - return ctx; + @ExposedGet(name = "ctx") + public PyObject getCtx() { + return Py.None; } + @ExposedSet(name = "ctx") public void setCtx(Object ctx) { this.ctx = AstAdapters.to_expr_context(ctx); } @@ -48,7 +64,15 @@ "ctx"}; public String[] get_fields() { return fields; } - public Attribute() {} + public Attribute() { + this(TYPE); + } + public Attribute(PyType subType) { + super(subType); + } + @ExposedNew + @ExposedMethod + public void Module___init__(PyObject[] args, String[] keywords) {} public Attribute(Object value, Object attr, Object ctx) { setValue(value); setAttr(attr); Modified: branches/astwrite/src/org/python/antlr/ast/AugAssign.java =================================================================== --- branches/astwrite/src/org/python/antlr/ast/AugAssign.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/ast/AugAssign.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -1,22 +1,34 @@ // Autogenerated AST node package org.python.antlr.ast; -import java.util.ArrayList; import org.python.antlr.PythonTree; import org.python.antlr.adapter.AstAdapters; import org.python.antlr.adapter.ListWrapper; import org.antlr.runtime.CommonToken; import org.antlr.runtime.Token; +import org.python.core.Py; +import org.python.core.PyObject; +import org.python.core.PyType; +import org.python.expose.ExposedGet; +import org.python.expose.ExposedMethod; +import org.python.expose.ExposedNew; +import org.python.expose.ExposedSet; +import org.python.expose.ExposedType; import java.io.DataOutputStream; import java.io.IOException; +import java.util.ArrayList; +@ExposedType(name = "_ast.AugAssign", base = PyObject.class) public class AugAssign extends stmtType { +public static final PyType TYPE = PyType.fromClass(AugAssign.class); private exprType target; public exprType getInternalTarget() { return target; } - public Object getTarget() { - return target; + @ExposedGet(name = "target") + public PyObject getTarget() { + return Py.None; } + @ExposedSet(name = "target") public void setTarget(Object target) { this.target = AstAdapters.to_expr(target); } @@ -25,9 +37,11 @@ public operatorType getInternalOp() { return op; } - public Object getOp() { - return op; + @ExposedGet(name = "op") + public PyObject getOp() { + return Py.None; } + @ExposedSet(name = "op") public void setOp(Object op) { this.op = AstAdapters.to_operator(op); } @@ -36,9 +50,11 @@ public exprType getInternalValue() { return value; } - public Object getValue() { - return value; + @ExposedGet(name = "value") + public PyObject getValue() { + return Py.None; } + @ExposedSet(name = "value") public void setValue(Object value) { this.value = AstAdapters.to_expr(value); } @@ -48,7 +64,15 @@ "value"}; public String[] get_fields() { return fields; } - public AugAssign() {} + public AugAssign() { + this(TYPE); + } + public AugAssign(PyType subType) { + super(subType); + } + @ExposedNew + @ExposedMethod + public void Module___init__(PyObject[] args, String[] keywords) {} public AugAssign(Object target, Object op, Object value) { setTarget(target); setOp(op); Modified: branches/astwrite/src/org/python/antlr/ast/BinOp.java =================================================================== --- branches/astwrite/src/org/python/antlr/ast/BinOp.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/ast/BinOp.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -1,22 +1,34 @@ // Autogenerated AST node package org.python.antlr.ast; -import java.util.ArrayList; import org.python.antlr.PythonTree; import org.python.antlr.adapter.AstAdapters; import org.python.antlr.adapter.ListWrapper; import org.antlr.runtime.CommonToken; import org.antlr.runtime.Token; +import org.python.core.Py; +import org.python.core.PyObject; +import org.python.core.PyType; +import org.python.expose.ExposedGet; +import org.python.expose.ExposedMethod; +import org.python.expose.ExposedNew; +import org.python.expose.ExposedSet; +import org.python.expose.ExposedType; import java.io.DataOutputStream; import java.io.IOException; +import java.util.ArrayList; +@ExposedType(name = "_ast.BinOp", base = PyObject.class) public class BinOp extends exprType { +public static final PyType TYPE = PyType.fromClass(BinOp.class); private exprType left; public exprType getInternalLeft() { return left; } - public Object getLeft() { - return left; + @ExposedGet(name = "left") + public PyObject getLeft() { + return Py.None; } + @ExposedSet(name = "left") public void setLeft(Object left) { this.left = AstAdapters.to_expr(left); } @@ -25,9 +37,11 @@ public operatorType getInternalOp() { return op; } - public Object getOp() { - return op; + @ExposedGet(name = "op") + public PyObject getOp() { + return Py.None; } + @ExposedSet(name = "op") public void setOp(Object op) { this.op = AstAdapters.to_operator(op); } @@ -36,9 +50,11 @@ public exprType getInternalRight() { return right; } - public Object getRight() { - return right; + @ExposedGet(name = "right") + public PyObject getRight() { + return Py.None; } + @ExposedSet(name = "right") public void setRight(Object right) { this.right = AstAdapters.to_expr(right); } @@ -47,7 +63,15 @@ private final static String[] fields = new String[] {"left", "op", "right"}; public String[] get_fields() { return fields; } - public BinOp() {} + public BinOp() { + this(TYPE); + } + public BinOp(PyType subType) { + super(subType); + } + @ExposedNew + @ExposedMethod + public void Module___init__(PyObject[] args, String[] keywords) {} public BinOp(Object left, Object op, Object right) { setLeft(left); setOp(op); Modified: branches/astwrite/src/org/python/antlr/ast/BoolOp.java =================================================================== --- branches/astwrite/src/org/python/antlr/ast/BoolOp.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/ast/BoolOp.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -1,22 +1,34 @@ // Autogenerated AST node package org.python.antlr.ast; -import java.util.ArrayList; import org.python.antlr.PythonTree; import org.python.antlr.adapter.AstAdapters; import org.python.antlr.adapter.ListWrapper; import org.antlr.runtime.CommonToken; import org.antlr.runtime.Token; +import org.python.core.Py; +import org.python.core.PyObject; +import org.python.core.PyType; +import org.python.expose.ExposedGet; +import org.python.expose.ExposedMethod; +import org.python.expose.ExposedNew; +import org.python.expose.ExposedSet; +import org.python.expose.ExposedType; import java.io.DataOutputStream; import java.io.IOException; +import java.util.ArrayList; +@ExposedType(name = "_ast.BoolOp", base = PyObject.class) public class BoolOp extends exprType { +public static final PyType TYPE = PyType.fromClass(BoolOp.class); private boolopType op; public boolopType getInternalOp() { return op; } - public Object getOp() { - return op; + @ExposedGet(name = "op") + public PyObject getOp() { + return Py.None; } + @ExposedSet(name = "op") public void setOp(Object op) { this.op = AstAdapters.to_boolop(op); } @@ -25,18 +37,28 @@ public java.util.List<exprType> getInternalValues() { return values; } - public Object getValues() { - return new ListWrapper(values, AstAdapters.exprAdapter); + @ExposedGet(name = "values") + public PyObject getValues() { + return Py.None; } + @ExposedSet(name = "values") public void setValues(Object values) { - this.values = AstAdapters.to_exprList(values); + //FJW this.values = AstAdapters.to_exprList(values); } private final static String[] fields = new String[] {"op", "values"}; public String[] get_fields() { return fields; } - public BoolOp() {} + public BoolOp() { + this(TYPE); + } + public BoolOp(PyType subType) { + super(subType); + } + @ExposedNew + @ExposedMethod + public void Module___init__(PyObject[] args, String[] keywords) {} public BoolOp(Object op, Object values) { setOp(op); setValues(values); Modified: branches/astwrite/src/org/python/antlr/ast/Break.java =================================================================== --- branches/astwrite/src/org/python/antlr/ast/Break.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/ast/Break.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -1,15 +1,25 @@ // Autogenerated AST node package org.python.antlr.ast; -import java.util.ArrayList; import org.python.antlr.PythonTree; import org.python.antlr.adapter.AstAdapters; import org.python.antlr.adapter.ListWrapper; import org.antlr.runtime.CommonToken; import org.antlr.runtime.Token; +import org.python.core.Py; +import org.python.core.PyObject; +import org.python.core.PyType; +import org.python.expose.ExposedGet; +import org.python.expose.ExposedMethod; +import org.python.expose.ExposedNew; +import org.python.expose.ExposedSet; +import org.python.expose.ExposedType; import java.io.DataOutputStream; import java.io.IOException; +import java.util.ArrayList; +@ExposedType(name = "_ast.Break", base = PyObject.class) public class Break extends stmtType { +public static final PyType TYPE = PyType.fromClass(Break.class); public Break(Token token) { super(token); Modified: branches/astwrite/src/org/python/antlr/ast/Call.java =================================================================== --- branches/astwrite/src/org/python/antlr/ast/Call.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/ast/Call.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -1,22 +1,34 @@ // Autogenerated AST node package org.python.antlr.ast; -import java.util.ArrayList; import org.python.antlr.PythonTree; import org.python.antlr.adapter.AstAdapters; import org.python.antlr.adapter.ListWrapper; import org.antlr.runtime.CommonToken; import org.antlr.runtime.Token; +import org.python.core.Py; +import org.python.core.PyObject; +import org.python.core.PyType; +import org.python.expose.ExposedGet; +import org.python.expose.ExposedMethod; +import org.python.expose.ExposedNew; +import org.python.expose.ExposedSet; +import org.python.expose.ExposedType; import java.io.DataOutputStream; import java.io.IOException; +import java.util.ArrayList; +@ExposedType(name = "_ast.Call", base = PyObject.class) public class Call extends exprType { +public static final PyType TYPE = PyType.fromClass(Call.class); private exprType func; public exprType getInternalFunc() { return func; } - public Object getFunc() { - return func; + @ExposedGet(name = "func") + public PyObject getFunc() { + return Py.None; } + @ExposedSet(name = "func") public void setFunc(Object func) { this.func = AstAdapters.to_expr(func); } @@ -25,31 +37,37 @@ public java.util.List<exprType> getInternalArgs() { return args; } - public Object getArgs() { - return new ListWrapper(args, AstAdapters.exprAdapter); + @ExposedGet(name = "args") + public PyObject getArgs() { + return Py.None; } + @ExposedSet(name = "args") public void setArgs(Object args) { - this.args = AstAdapters.to_exprList(args); + //FJW this.args = AstAdapters.to_exprList(args); } private java.util.List<keywordType> keywords; public java.util.List<keywordType> getInternalKeywords() { return keywords; } - public Object getKeywords() { - return new ListWrapper(keywords, AstAdapters.keywordAdapter); + @ExposedGet(name = "keywords") + public PyObject getKeywords() { + return Py.None; } + @ExposedSet(name = "keywords") public void setKeywords(Object keywords) { - this.keywords = AstAdapters.to_keywordList(keywords); + //FJW this.keywords = AstAdapters.to_keywordList(keywords); } private exprType starargs; public exprType getInternalStarargs() { return starargs; } - public Object getStarargs() { - return starargs; + @ExposedGet(name = "starargs") + public PyObject getStarargs() { + return Py.None; } + @ExposedSet(name = "starargs") public void setStarargs(Object starargs) { this.starargs = AstAdapters.to_expr(starargs); } @@ -58,9 +76,11 @@ public exprType getInternalKwargs() { return kwargs; } - public Object getKwargs() { - return kwargs; + @ExposedGet(name = "kwargs") + public PyObject getKwargs() { + return Py.None; } + @ExposedSet(name = "kwargs") public void setKwargs(Object kwargs) { this.kwargs = AstAdapters.to_expr(kwargs); } @@ -71,7 +91,15 @@ "starargs", "kwargs"}; public String[] get_fields() { return fields; } - public Call() {} + public Call() { + this(TYPE); + } + public Call(PyType subType) { + super(subType); + } + @ExposedNew + @ExposedMethod + public void Module___init__(PyObject[] args, String[] keywords) {} public Call(Object func, Object args, Object keywords, Object starargs, Object kwargs) { setFunc(func); Modified: branches/astwrite/src/org/python/antlr/ast/ClassDef.java =================================================================== --- branches/astwrite/src/org/python/antlr/ast/ClassDef.java 2008-11-29 00:48:32 UTC (rev 5659) +++ branches/astwrite/src/org/python/antlr/ast/ClassDef.java 2008-11-29 04:59:20 UTC (rev 5660) @@ -1,22 +1,34 @@ // Autogenerated AST node package org.python.antlr.ast; -import java.util.ArrayList; import org.python.antlr.PythonTree; import org.python.antlr.adapter.AstAdapters; import org.python.antlr.adapter.ListWrapper; import org.antlr.runtime.CommonToke... [truncated message content] |