From ff45d817684ba0bd2832cfde9ef120b7bdaf520f Mon Sep 17 00:00:00 2001 From: "igor%mir2.org" Date: Mon, 29 Apr 2002 17:31:11 +0000 Subject: [PATCH] I replaced java.util.Enumeration type for result and arguments of ScriptRuntime.initEnum/ScriptRuntime.nextEnum by Object to allow for greater flexibility in for (...in...) implementation. --- .../org/mozilla/javascript/Interpreter.java | 4 +-- .../org/mozilla/javascript/ScriptRuntime.java | 30 ++++++++----------- .../mozilla/javascript/optimizer/Codegen.java | 4 +-- 3 files changed, 15 insertions(+), 23 deletions(-) diff --git a/js/rhino/src/org/mozilla/javascript/Interpreter.java b/js/rhino/src/org/mozilla/javascript/Interpreter.java index 0e6f34c0df6e..2599b6bbe914 100644 --- a/js/rhino/src/org/mozilla/javascript/Interpreter.java +++ b/js/rhino/src/org/mozilla/javascript/Interpreter.java @@ -39,7 +39,6 @@ package org.mozilla.javascript; import java.io.*; -import java.util.Enumeration; import org.mozilla.javascript.debug.*; @@ -2259,8 +2258,7 @@ public class Interpreter extends LabelTable { int slot = (iCode[++pc] & 0xFF); Object val = stack[LOCAL_SHFT + slot]; ++stackTop; - stack[stackTop] = ScriptRuntime. - nextEnum((Enumeration)val); + stack[stackTop] = ScriptRuntime.nextEnum(val); break; } case TokenStream.GETPROTO : { diff --git a/js/rhino/src/org/mozilla/javascript/ScriptRuntime.java b/js/rhino/src/org/mozilla/javascript/ScriptRuntime.java index f043e704a041..48d5a04078f4 100644 --- a/js/rhino/src/org/mozilla/javascript/ScriptRuntime.java +++ b/js/rhino/src/org/mozilla/javascript/ScriptRuntime.java @@ -40,7 +40,6 @@ package org.mozilla.javascript; -import java.util.Enumeration; import java.lang.reflect.*; import org.mozilla.classfile.DefiningClassLoader; @@ -1129,17 +1128,15 @@ public class ScriptRuntime { return value; } - public static Enumeration initEnum(Object value, Scriptable scope) { + public static Object initEnum(Object value, Scriptable scope) { Scriptable m = toObject(scope, value); return new IdEnumeration(m); } - public static Object nextEnum(Enumeration enum) { - // OPT this could be more efficient; should junk the Enumeration - // interface - if (!enum.hasMoreElements()) - return null; - return enum.nextElement(); + public static Object nextEnum(Object enumObj) { + // OPT this could be more efficient + IdEnumeration enum = (IdEnumeration)enumObj; + return enum.nextId(); } // Form used by class files generated by 1.4R3 and earlier. @@ -2066,24 +2063,21 @@ public class ScriptRuntime { * to see if a given property has already been enumerated. * */ -class IdEnumeration implements Enumeration { +class IdEnumeration { IdEnumeration(Scriptable m) { used = new ObjToIntMap(27); changeObject(m); next = getNext(); } - public boolean hasMoreElements() { - return next != null; - } - - public Object nextElement() { + Object nextId() { Object result = next; + if (result != null) { + // only key used; 0 as value for convenience + used.put(next, 0); - // only key used; 0 as value for convenience - used.put(next, 0); - - next = getNext(); + next = getNext(); + } return result; } diff --git a/js/rhino/src/org/mozilla/javascript/optimizer/Codegen.java b/js/rhino/src/org/mozilla/javascript/optimizer/Codegen.java index 710d853004d0..5f4c24a3141d 100644 --- a/js/rhino/src/org/mozilla/javascript/optimizer/Codegen.java +++ b/js/rhino/src/org/mozilla/javascript/optimizer/Codegen.java @@ -1691,7 +1691,7 @@ public class Codegen extends Interpreter { aload(variableObjectLocal); addScriptRuntimeInvoke("initEnum", "(Ljava/lang/Object;Lorg/mozilla/javascript/Scriptable;)", - "Ljava/util/Enumeration;"); + "Ljava/lang/Object;"); short x = getNewWordLocal(); astore(x); node.putIntProp(Node.LOCAL_PROP, x); @@ -1705,7 +1705,7 @@ public class Codegen extends Interpreter { Node init = (Node) node.getProp(Node.ENUM_PROP); int local = init.getExistingIntProp(Node.LOCAL_PROP); aload((short)local); - addScriptRuntimeInvoke("nextEnum", "(Ljava/util/Enumeration;)", "Ljava/lang/Object;"); + addScriptRuntimeInvoke("nextEnum", "(Ljava/lang/Object;)", "Ljava/lang/Object;"); } private void visitEnumDone(Node node, Node child) {