From: Finn B. <bc...@us...> - 2002-01-13 18:31:59
|
Update of /cvsroot/jython/jython/org/python/compiler In directory usw-pr-cvs1:/tmp/cvs-serv21029 Modified Files: CodeCompiler.java Future.java Module.java ScopesCompiler.java Log Message: Support for floor division and future division. This patch also moves the Future instance from the CodeCompiler to the module where I believe it should be defined. I'm sorry if that happens to break something for nested_scope, but nested_scope should not need future support anymore. Index: CodeCompiler.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/compiler/CodeCompiler.java,v retrieving revision 2.24 retrieving revision 2.25 diff -C2 -d -r2.24 -r2.25 *** CodeCompiler.java 2002/01/06 21:19:13 2.24 --- CodeCompiler.java 2002/01/13 18:31:55 2.25 *************** *** 38,46 **** public boolean fast_locals, print_results; - public Future futures; public Hashtable tbl; public ScopeInfo my_scope; ! public Future getFutures() { return futures; } public String getFilename() { return module.sfilename; } --- 38,45 ---- public boolean fast_locals, print_results; public Hashtable tbl; public ScopeInfo my_scope; ! public Future getFutures() { return module.futures; } public String getFilename() { return module.sfilename; } *************** *** 203,208 **** if (scope == null) { - futures = new Future(); - futures.preprocessFutures(node,cflags); new ScopesCompiler(this).parse(node); scope = node.scope; --- 202,205 ---- *************** *** 1409,1415 **** public Object div_2op(SimpleNode node) throws Exception { ! return binaryop(node, "_div"); } public Object mod_2op(SimpleNode node) throws Exception { return binaryop(node, "_mod"); --- 1406,1419 ---- public Object div_2op(SimpleNode node) throws Exception { ! if (getFutures().areDivisionOn()) ! return binaryop(node, "_truediv"); ! else ! return binaryop(node, "_div"); } + public Object floordiv_2op(SimpleNode node) throws Exception { + return binaryop(node, "_floordiv"); + } + public Object mod_2op(SimpleNode node) throws Exception { return binaryop(node, "_mod"); *************** *** 1470,1474 **** public Object aug_divide(SimpleNode node) throws Exception { ! return aug_binaryop(node, "__idiv__"); } --- 1474,1485 ---- public Object aug_divide(SimpleNode node) throws Exception { ! if (getFutures().areDivisionOn()) ! return aug_binaryop(node, "__itruediv__"); ! else ! return aug_binaryop(node, "__idiv__"); ! } ! ! public Object aug_floordivide(SimpleNode node) throws Exception { ! return aug_binaryop(node, "__ifloordiv__"); } Index: Future.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/compiler/Future.java,v retrieving revision 2.5 retrieving revision 2.6 diff -C2 -d -r2.5 -r2.6 *** Future.java 2001/11/27 19:07:21 2.5 --- Future.java 2002/01/13 18:31:55 2.6 *************** *** 8,11 **** --- 8,12 ---- private boolean nested_scopes; + private boolean division; private static final String FUTURE = "__future__"; *************** *** 38,41 **** --- 39,46 ---- continue; } + if (feature.equals("division")) { + division = true; + continue; + } throw new ParseException("future feature "+feature+ " is not defined",cand); *************** *** 50,55 **** if (cflags != null) { nested_scopes = cflags.nested_scopes; } - if ( node.id != JJTFILE_INPUT && node.id != JJTSINGLE_INPUT) return; --- 55,60 ---- if (cflags != null) { nested_scopes = cflags.nested_scopes; + division = cflags.division; } if ( node.id != JJTFILE_INPUT && node.id != JJTSINGLE_INPUT) return; *************** *** 71,74 **** --- 76,80 ---- if (cflags != null) { cflags.nested_scopes = cflags.nested_scopes || nested_scopes; + cflags.division = cflags.division || division; } } *************** *** 88,91 **** --- 94,101 ---- public boolean areNestedScopesOn() { return nested_scopes; + } + + public boolean areDivisionOn() { + return division; } Index: Module.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/compiler/Module.java,v retrieving revision 2.10 retrieving revision 2.11 diff -C2 -d -r2.10 -r2.11 *** Module.java 2001/11/27 19:07:21 2.10 --- Module.java 2002/01/13 18:31:55 2.11 *************** *** 263,266 **** --- 263,267 ---- public boolean linenumbers; public boolean setFile=true; + Future futures; public Module(String name, String filename, boolean linenumbers) { *************** *** 275,278 **** --- 276,280 ---- this.filename = null; codes = new Vector(); + futures = new Future(); } *************** *** 582,585 **** --- 584,588 ---- Module module = new Module(name, filename, linenumbers); module.setFile = setFile; + module.futures.preprocessFutures(node, cflags); //Add __doc__ if it exists //Add __file__ for filename (if it exists?) Index: ScopesCompiler.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/compiler/ScopesCompiler.java,v retrieving revision 2.5 retrieving revision 2.6 diff -C2 -d -r2.5 -r2.6 *** ScopesCompiler.java 2001/11/27 19:07:21 2.5 --- ScopesCompiler.java 2002/01/13 18:31:55 2.6 *************** *** 399,402 **** --- 399,407 ---- } + public Object floordiv_2op(SimpleNode node) throws Exception { + binaryop(node); + return null; + } + public Object mod_2op(SimpleNode node) throws Exception { binaryop(node); *************** *** 624,627 **** --- 629,637 ---- public Object aug_divide(SimpleNode node) throws Exception { + aug_assign(node); + return null; + } + + public Object aug_floordivide(SimpleNode node) throws Exception { aug_assign(node); return null; |