From: <zy...@us...> - 2009-02-07 18:14:35
|
Revision: 6021 http://jython.svn.sourceforge.net/jython/?rev=6021&view=rev Author: zyasoft Date: 2009-02-07 18:14:33 +0000 (Sat, 07 Feb 2009) Log Message: ----------- Further refinement of nested scopes. Modified Paths: -------------- branches/pbcvm/src/org/python/core/PyBytecode.java Modified: branches/pbcvm/src/org/python/core/PyBytecode.java =================================================================== --- branches/pbcvm/src/org/python/core/PyBytecode.java 2009-02-07 17:47:19 UTC (rev 6020) +++ branches/pbcvm/src/org/python/core/PyBytecode.java 2009-02-07 18:14:33 UTC (rev 6021) @@ -779,29 +779,14 @@ break; case Opcode.LOAD_CLOSURE: { -//// if (debug) { -//// System.err.println("LOAD_CLOSURE: " + Arrays.toString(f.f_env)); -//// } -// PyCell cell = (PyCell) (f.getclosure(oparg)); -// if (cell.ob_ref == null) { -// cell.ob_ref = f.getlocal(oparg); -// } -////// cell.ob_ref = f.getname(co_freevars[oparg]); -// stack.push(cell); -// stack.push(f.getclosure(oparg)); - - PyCell cell = (PyCell) (f.getclosure(oparg)); if (cell.ob_ref == null) { -// if (oparg < co_nlocals) { -// cell.ob_ref = f.getlocal(oparg); -// } else { -// String name = co_cellvars[oparg]; - -// cell.ob_ref = f.getname(name); -// } - - String name = co_cellvars[oparg]; + String name; + if (oparg >= co_cellvars.length) { + name = co_freevars[oparg - co_cellvars.length]; + } else { + name = co_cellvars[oparg]; + } // System.err.println("Loading closure: " + name); // XXX - consider some efficient lookup mechanism, like a hash if (f.f_fastlocals != null) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |