home *** CD-ROM | disk | FTP | other *** search
- package com.netscape.javascript;
-
- import java.lang.reflect.Constructor;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Member;
- import java.lang.reflect.Method;
- import java.lang.reflect.Modifier;
- import java.util.Hashtable;
-
- public abstract class ScriptableObject implements Scriptable {
- public static final int EMPTY = 0;
- public static final int READONLY = 1;
- public static final int DONTENUM = 2;
- public static final int PERMANENT = 4;
- private static final int SLOT_NOT_FOUND = -1;
- protected Scriptable prototype;
- protected Scriptable parent;
- private static final Object HAS_STATIC_ACCESSORS;
- private static final Slot REMOVED;
- private static Hashtable exclusionList;
- private Slot[] slots;
- private int count;
- private String lastName;
- private int lastHash;
- private Object lastValue;
- // $FF: synthetic field
- private static Class class$com$netscape$javascript$ScriptableObject;
- // $FF: synthetic field
- private static Class class$com$netscape$javascript$Scriptable;
- // $FF: synthetic field
- private static Class class$com$netscape$javascript$Function;
- // $FF: synthetic field
- private static Class class$com$netscape$javascript$FunctionObject;
-
- public abstract String getClassName();
-
- public void put(String var1, Scriptable var2, Object var3) {
- int var4 = var1.hashCode();
- int var5 = this.getSlot(var1, var4);
- if (var5 == -1) {
- if (var2 != this) {
- ((Scriptable)var2).put(var1, (Scriptable)var2, var3);
- return;
- }
-
- var5 = this.getSlotToSet(var1, var4, false);
- }
-
- Slot var6 = this.slots[var5];
- if ((var6.attributes & 1) == 0) {
- if ((var6.flags & 2) != 0) {
- GetterSlot var7 = (GetterSlot)var6;
-
- try {
- if (var7.delegateTo != null) {
- Object[] var12 = new Object[]{this, var3};
- var7.setter.invoke(var7.delegateTo, var12);
- } else {
- Object[] var8 = new Object[]{var3};
- Class var9 = var7.setter.getDeclaringClass();
-
- while(!var9.isInstance(var2)) {
- var2 = ((Scriptable)var2).getPrototype();
- if (var2 == null) {
- var2 = this;
- break;
- }
- }
-
- var7.setter.invoke(var2, var8);
- }
- } catch (InvocationTargetException var10) {
- throw WrappedException.wrapException(var10);
- } catch (IllegalAccessException var11) {
- throw WrappedException.wrapException(var11);
- }
- } else if (this == var2) {
- var6.value = var3;
- this.lastValue = var1 == this.lastName ? var3 : REMOVED;
- } else {
- ((Scriptable)var2).put(var1, (Scriptable)var2, var3);
- }
- }
- }
-
- public void put(int var1, Scriptable var2, Object var3) {
- int var4 = this.getSlot((String)null, var1);
- if (var4 == -1) {
- if (var2 != this) {
- var2.put(var1, var2, var3);
- return;
- }
-
- var4 = this.getSlotToSet((String)null, var1, false);
- }
-
- Slot var5 = this.slots[var4];
- if ((var5.attributes & 1) == 0) {
- if (this == var2) {
- var5.value = var3;
- } else {
- var2.put(var1, var2, var3);
- }
- }
- }
-
- public Scriptable getParentScope() {
- return this.parent;
- }
-
- public void setParentScope(Scriptable var1) {
- this.parent = var1;
- }
-
- public static Scriptable getFunctionPrototype(Scriptable var0) {
- return getClassPrototype(var0, "Function");
- }
-
- public static Scriptable getClassPrototype(Scriptable var0, String var1) {
- var0 = getTopLevelScope(var0);
- if (!var0.has(var1, var0)) {
- return null;
- } else {
- Object var2 = var0.get(var1, var0);
- if (!(var2 instanceof Scriptable)) {
- return null;
- } else {
- Scriptable var3 = (Scriptable)var2;
- if (!var3.has("prototype", var3)) {
- return null;
- } else {
- Object var4 = var3.get("prototype", var3);
- return !(var4 instanceof Scriptable) ? null : (Scriptable)var4;
- }
- }
- }
- }
-
- private int getSlot(String var1, int var2) {
- if (this.slots == null) {
- return -1;
- } else {
- int var3 = (var2 & Integer.MAX_VALUE) % this.slots.length;
- int var4 = var3;
-
- do {
- Slot var5 = this.slots[var4];
- if (var5 == null) {
- return -1;
- }
-
- if (var5 != REMOVED && var5.intKey == var2 && (var5.stringKey == var1 || var1 != null && var1.equals(var5.stringKey))) {
- return var4;
- }
-
- ++var4;
- if (var4 == this.slots.length) {
- var4 = 0;
- }
- } while(var4 != var3);
-
- return -1;
- }
- }
-
- private static Object rescopeValue(Object var0, Hashtable var1) {
- if (var0 == null) {
- return null;
- } else {
- try {
- return ((Rescopeable)var0).rescope(var1);
- } catch (ClassCastException var2) {
- throw new RuntimeException("Can't rescope value " + var0);
- }
- }
- }
-
- public static Scriptable getObjectPrototype(Scriptable var0) {
- return getClassPrototype(var0, "Object");
- }
-
- public void defineProperty(String var1, Object var2, int var3) {
- this.put(var1, this, var2);
-
- try {
- this.setAttributes(var1, this, var3);
- } catch (PropertyException var4) {
- throw new RuntimeException("Cannot create property");
- }
- }
-
- public void defineProperty(String var1, Class var2, int var3) throws PropertyException {
- StringBuffer var4 = new StringBuffer(var1);
- var4.setCharAt(0, Character.toUpperCase(var1.charAt(0)));
- String var5 = var4.toString();
- Method[] var6 = FunctionObject.findMethods(var2, "get" + var5);
- Method[] var7 = FunctionObject.findMethods(var2, "set" + var5);
- if (var7 == null) {
- var3 |= 1;
- }
-
- if (var6.length == 1 && (var7 == null || var7.length == 1)) {
- this.defineProperty(var1, (Object)null, var6[0], var7 == null ? null : var7[0], var3);
- } else {
- Object[] var8 = new Object[]{var1, var2.getName()};
- throw new PropertyException(Context.getMessage("msg.no.overload", var8));
- }
- }
-
- public void defineProperty(String var1, Object var2, Method var3, Method var4, int var5) throws PropertyException {
- short var6 = 1;
- if (var2 == null && Modifier.isStatic(var3.getModifiers())) {
- var2 = HAS_STATIC_ACCESSORS;
- }
-
- Class[] var7 = var3.getParameterTypes();
- if (var7.length != 0) {
- if (var7.length != 1 || var7[0] != (class$com$netscape$javascript$ScriptableObject != null ? class$com$netscape$javascript$ScriptableObject : (class$com$netscape$javascript$ScriptableObject = class$("com.netscape.javascript.ScriptableObject")))) {
- Object[] var8 = new Object[]{var3.toString()};
- throw new PropertyException(Context.getMessage("msg.bad.getter.parms", var8));
- }
- } else if (var2 != null) {
- Object[] var14 = new Object[]{var3.toString()};
- throw new PropertyException(Context.getMessage("msg.obj.getter.parms", var14));
- }
-
- if (var4 != null) {
- var6 = (short)(var6 | 2);
- if (var2 == HAS_STATIC_ACCESSORS != Modifier.isStatic(var4.getModifiers())) {
- throw new PropertyException(Context.getMessage("msg.getter.static", (Object[])null));
- }
-
- var7 = var4.getParameterTypes();
- if (var7.length == 2) {
- if (var7[0] != (class$com$netscape$javascript$ScriptableObject != null ? class$com$netscape$javascript$ScriptableObject : (class$com$netscape$javascript$ScriptableObject = class$("com.netscape.javascript.ScriptableObject")))) {
- throw new PropertyException(Context.getMessage("msg.setter2.parms", (Object[])null));
- }
-
- if (var2 == null) {
- Object[] var11 = new Object[]{var4.toString()};
- throw new PropertyException(Context.getMessage("msg.setter1.parms", var11));
- }
- } else {
- if (var7.length != 1) {
- throw new PropertyException(Context.getMessage("msg.setter.parms", (Object[])null));
- }
-
- if (var2 != null) {
- Object[] var13 = new Object[]{var4.toString()};
- throw new PropertyException(Context.getMessage("msg.setter2.expected", var13));
- }
- }
- }
-
- int var12 = this.getSlotToSet(var1, var1.hashCode(), true);
- GetterSlot var9 = (GetterSlot)this.slots[var12];
- var9.delegateTo = var2;
- var9.getter = var3;
- var9.setter = var4;
- var9.value = null;
- var9.attributes = (short)var5;
- var9.flags = var6;
- }
-
- public boolean has(String var1, Scriptable var2) {
- return this.getSlot(var1, var1.hashCode()) != -1;
- }
-
- public boolean has(int var1, Scriptable var2) {
- return this.getSlot((String)null, var1) != -1;
- }
-
- public Object[] getIds() {
- if (this.slots == null) {
- return ScriptRuntime.emptyArgs;
- } else {
- int var1 = 0;
-
- for(int var2 = this.slots.length - 1; var2 >= 0; --var2) {
- Slot var3 = this.slots[var2];
- if (var3 != null && var3 != REMOVED && (var3.attributes & 2) == 0) {
- ++var1;
- }
- }
-
- Object[] var5 = new Object[var1];
-
- for(int var6 = this.slots.length - 1; var6 >= 0; --var6) {
- Slot var4 = this.slots[var6];
- if (var4 != null && var4 != REMOVED && (var4.attributes & 2) == 0) {
- --var1;
- var5[var1] = var4.stringKey != null ? var4.stringKey : new Integer(var4.intKey);
- }
- }
-
- return var5;
- }
- }
-
- protected synchronized Scriptable rescope(Hashtable var1) {
- Scriptable var2 = (Scriptable)var1.get(this);
- if (var2 != null) {
- return var2;
- } else {
- ScriptableObject var3 = null;
-
- try {
- var3 = (ScriptableObject)this.clone();
- } catch (CloneNotSupportedException var6) {
- }
-
- var1.put(this, var3);
- var3.parent = (Scriptable)rescopeValue(this.parent, var1);
- var3.prototype = (Scriptable)rescopeValue(this.prototype, var1);
- if (this.slots == null) {
- return var3;
- } else {
- var3.slots = new Slot[this.slots.length];
-
- for(int var4 = 0; var4 < this.slots.length; ++var4) {
- if (this.slots[var4] != null) {
- Object var5 = this.slots[var4].value;
- if (var5 instanceof Scriptable) {
- var2 = (Scriptable)var1.get(var5);
- if (var2 == null) {
- var3.slots[var4] = new RescopingSlot(this.slots[var4], var1);
- continue;
- }
-
- var5 = var2;
- }
-
- var3.slots[var4] = (Slot)this.slots[var4].clone();
- var3.slots[var4].value = var5;
- }
- }
-
- return var3;
- }
- }
- }
-
- private synchronized int addSlot(String var1, int var2, boolean var3) {
- int var4 = (var2 & Integer.MAX_VALUE) % this.slots.length;
- int var5 = var4;
-
- while(true) {
- Slot var6 = this.slots[var5];
- if (var6 != null && var6 != REMOVED) {
- if (var6.intKey != var2 || var6.stringKey != var1 && (var1 == null || !var1.equals(var6.stringKey))) {
- ++var5;
- if (var5 == this.slots.length) {
- var5 = 0;
- }
-
- if (var5 == var4) {
- throw new RuntimeException("Hashtable internal error");
- }
- continue;
- }
-
- return var5;
- }
-
- ++this.count;
- if (4 * this.count > 3 * this.slots.length) {
- this.grow();
- return this.getSlotToSet(var1, var2, var3);
- }
-
- var6 = (Slot)(var3 ? new GetterSlot() : new Slot());
- var6.stringKey = var1;
- var6.intKey = var2;
- this.slots[var5] = var6;
- return var5;
- }
- }
-
- public boolean hasInstance(Scriptable var1) {
- return ScriptRuntime.jsDelegatesTo(var1, this);
- }
-
- public Object get(String var1, Scriptable var2) {
- int var3;
- if (var1 == this.lastName) {
- if (this.lastValue != REMOVED) {
- return this.lastValue;
- }
-
- var3 = this.lastHash;
- } else {
- var3 = var1.hashCode();
- }
-
- int var4 = this.getSlot(var1, var3);
- if (var4 == -1) {
- return Scriptable.NOT_FOUND;
- } else {
- Slot var5 = this.slots[var4];
- if ((var5.flags & 4) != 0) {
- var5.value = rescopeValue(var5.value, ((RescopingSlot)var5).ht);
- var5.flags = (short)(var5.flags & -5);
- }
-
- if ((var5.flags & 1) != 0) {
- GetterSlot var6 = (GetterSlot)var5;
-
- try {
- if (var6.delegateTo != null) {
- Object[] var10 = new Object[]{this};
- return var6.getter.invoke(var6.delegateTo, var10);
- } else {
- Class var7 = var6.getter.getDeclaringClass();
-
- while(!var7.isInstance(var2)) {
- var2 = ((Scriptable)var2).getPrototype();
- if (var2 == null) {
- var2 = this;
- break;
- }
- }
-
- return var6.getter.invoke(var2, ScriptRuntime.emptyArgs);
- }
- } catch (InvocationTargetException var8) {
- throw WrappedException.wrapException(var8);
- } catch (IllegalAccessException var9) {
- throw WrappedException.wrapException(var9);
- }
- } else {
- this.lastValue = REMOVED;
- this.lastName = var1;
- this.lastHash = var3;
- this.lastValue = var5.value;
- return this.lastValue;
- }
- }
- }
-
- public Object get(int var1, Scriptable var2) {
- int var3 = this.getSlot((String)null, var1);
- return var3 == -1 ? Scriptable.NOT_FOUND : this.slots[var3].value;
- }
-
- public Object getDefaultValue(Class var1) {
- FlattenedObject var3 = new FlattenedObject(this);
- Context var4 = null;
-
- try {
- int var5 = 0;
-
- do {
- label123: {
- Object var2;
- if (var1 == ScriptRuntime.StringClass ? var5 == 0 : var5 == 1) {
- Function var6 = this.getFunctionProperty(var3, "toString");
- if (var6 == null) {
- break label123;
- }
-
- if (var4 == null) {
- var4 = Context.getContext();
- }
-
- var2 = var6.call(var4, var6.getParentScope(), var3.getObject(), ScriptRuntime.emptyArgs);
- } else {
- String var11;
- if (var1 == null) {
- var11 = "undefined";
- } else if (var1 == ScriptRuntime.StringClass) {
- var11 = "string";
- } else if (var1 == ScriptRuntime.ScriptableClass) {
- var11 = "object";
- } else if (var1 == ScriptRuntime.FunctionClass) {
- var11 = "function";
- } else if (var1 != ScriptRuntime.BooleanClass && var1 != Boolean.TYPE) {
- if (var1 != ScriptRuntime.NumberClass && var1 != ScriptRuntime.ByteClass && var1 != Byte.TYPE && var1 != ScriptRuntime.ShortClass && var1 != Short.TYPE && var1 != ScriptRuntime.IntegerClass && var1 != Integer.TYPE && var1 != ScriptRuntime.FloatClass && var1 != Float.TYPE && var1 != ScriptRuntime.DoubleClass && var1 != Double.TYPE) {
- Object[] var7 = new Object[]{var1.toString()};
- throw Context.reportRuntimeError(Context.getMessage("msg.invalid.type", var7));
- }
-
- var11 = "number";
- } else {
- var11 = "boolean";
- }
-
- Function var13 = this.getFunctionProperty(var3, "valueOf");
- if (var13 == null) {
- break label123;
- }
-
- Object[] var8 = new Object[]{var11};
- if (var4 == null) {
- var4 = Context.getContext();
- }
-
- var2 = var13.call(var4, var13.getParentScope(), var3.getObject(), var8);
- }
-
- if (var2 != null && (var2 == Undefined.instance || !(var2 instanceof Scriptable) || var1 == (class$com$netscape$javascript$Scriptable != null ? class$com$netscape$javascript$Scriptable : (class$com$netscape$javascript$Scriptable = class$("com.netscape.javascript.Scriptable"))) || var1 == (class$com$netscape$javascript$Function != null ? class$com$netscape$javascript$Function : (class$com$netscape$javascript$Function = class$("com.netscape.javascript.Function"))))) {
- return var2;
- }
- }
-
- ++var5;
- } while(var5 < 2);
- } catch (JavaScriptException var9) {
- }
-
- String var10 = var1 == null ? "undefined" : var1.toString();
- Object[] var12 = new Object[]{var10};
- throw Context.reportRuntimeError(Context.getMessage("msg.default.value", var12));
- }
-
- public ScriptableObject() {
- this.lastValue = REMOVED;
- }
-
- public Scriptable getPrototype() {
- return this.prototype;
- }
-
- public void setPrototype(Scriptable var1) {
- this.prototype = var1;
- }
-
- public int getAttributes(String var1, Scriptable var2) throws PropertyException {
- int var3 = this.getSlot(var1, var1.hashCode());
- if (var3 == -1) {
- throw new PropertyException(Context.getMessage("msg.prop.not.found", (Object[])null));
- } else {
- return this.slots[var3].attributes;
- }
- }
-
- public int getAttributes(int var1, Scriptable var2) throws PropertyException {
- int var3 = this.getSlot((String)null, var1);
- if (var3 == -1) {
- throw new PropertyException(Context.getMessage("msg.prop.not.found", (Object[])null));
- } else {
- return this.slots[var3].attributes;
- }
- }
-
- public void setAttributes(String var1, Scriptable var2, int var3) throws PropertyException {
- boolean var4 = true;
- var3 &= 7;
- int var5 = this.getSlot(var1, var1.hashCode());
- if (var5 == -1) {
- throw new PropertyException(Context.getMessage("msg.prop.not.found", (Object[])null));
- } else {
- this.slots[var5].attributes = (short)var3;
- }
- }
-
- public void setAttributes(int var1, Scriptable var2, int var3) throws PropertyException {
- int var4 = this.getSlot((String)null, var1);
- if (var4 == -1) {
- throw new PropertyException(Context.getMessage("msg.prop.not.found", (Object[])null));
- } else {
- this.slots[var4].attributes = (short)var3;
- }
- }
-
- public void defineFunctionProperties(String[] var1, Class var2, int var3) throws PropertyException {
- for(int var4 = 0; var4 < var1.length; ++var4) {
- String var5 = var1[var4];
- Method[] var6 = FunctionObject.findMethods(var2, var5);
- if (var6 == null) {
- Object[] var9 = new Object[]{var5, var2.getName()};
- throw new PropertyException(Context.getMessage("msg.method.not.found", var9));
- }
-
- if (var6.length > 1) {
- Object[] var8 = new Object[]{var5, var2.getName()};
- throw new PropertyException(Context.getMessage("msg.no.overload", var8));
- }
-
- FunctionObject var7 = new FunctionObject(var5, var6[0], this);
- this.defineProperty(var5, (Object)var7, var3);
- }
-
- }
-
- private Function getFunctionProperty(FlattenedObject var1, String var2) {
- Object var3 = var1.getProperty(var2);
- if (var3 != null && var3 instanceof FlattenedObject) {
- Scriptable var4 = ((FlattenedObject)var3).getObject();
- return var4 instanceof Function ? (Function)var4 : null;
- } else {
- return null;
- }
- }
-
- private static Hashtable getExclusionList() {
- if (exclusionList != null) {
- return exclusionList;
- } else {
- Hashtable var0 = new Hashtable(17);
- Method[] var1 = ScriptRuntime.FunctionClass.getMethods();
-
- for(int var2 = 0; var2 < var1.length; ++var2) {
- var0.put(var1[var2].getName(), Boolean.TRUE);
- }
-
- exclusionList = var0;
- return var0;
- }
- }
-
- private int getSlotToSet(String var1, int var2, boolean var3) {
- if (this.slots == null) {
- this.slots = new Slot[5];
- }
-
- int var4 = (var2 & Integer.MAX_VALUE) % this.slots.length;
- int var5 = var4;
-
- do {
- Slot var6 = this.slots[var5];
- if (var6 == null) {
- return this.addSlot(var1, var2, var3);
- }
-
- if (var6 != REMOVED && var6.intKey == var2 && (var6.stringKey == var1 || var1 != null && var1.equals(var6.stringKey))) {
- return var5;
- }
-
- ++var5;
- if (var5 == this.slots.length) {
- var5 = 0;
- }
- } while(var5 != var4);
-
- throw new RuntimeException("Hashtable internal error");
- }
-
- static {
- HAS_STATIC_ACCESSORS = Void.TYPE;
- REMOVED = new Slot();
- exclusionList = null;
- }
-
- public static void defineClass(Scriptable var0, Class var1) throws IllegalAccessException, InstantiationException, InvocationTargetException, ClassDefinitionException, PropertyException {
- Method[] var2 = var1.getMethods();
-
- for(int var3 = 0; var3 < var2.length; ++var3) {
- if (var2[var3].getName().equals("init")) {
- Class[] var4 = var2[var3].getParameterTypes();
- if (var4.length == 1 && var4[0] == ScriptRuntime.ScriptableClass && Modifier.isStatic(var2[var3].getModifiers())) {
- Object[] var5 = new Object[]{var0};
- var2[var3].invoke((Object)null, var5);
- return;
- }
- }
- }
-
- Hashtable var25 = getExclusionList();
- Constructor[] var26 = var1.getConstructors();
- Constructor var27 = null;
-
- for(int var6 = 0; var6 < var26.length; ++var6) {
- if (var26[var6].getParameterTypes().length == 0) {
- var27 = var26[var6];
- break;
- }
- }
-
- if (var27 == null) {
- Object[] var29 = new Object[]{var1.getName()};
- throw new ClassDefinitionException(Context.getMessage("msg.zero.arg.ctor", var29));
- } else {
- Scriptable var28 = (Scriptable)var27.newInstance(ScriptRuntime.emptyArgs);
- var28.setPrototype(getObjectPrototype(var0));
- String var7 = var28.getClassName();
- String var8 = "js_";
- String var9 = "jsFunction_";
- String var10 = "jsProperty_";
- boolean var11 = false;
- Object var12 = null;
-
- for(int var13 = 0; var13 < var2.length; ++var13) {
- String var14 = var2[var13].getName();
- String var15 = null;
- if (var14.startsWith("js_")) {
- var15 = "js_";
- }
-
- if (var14.startsWith("jsFunction_")) {
- var15 = "jsFunction_";
- }
-
- if (var14.startsWith("jsProperty_")) {
- var15 = "jsProperty_";
- }
-
- if (var15 != null) {
- var11 = true;
- var14 = var14.substring(var15.length());
- }
-
- if (var14.equals(var7)) {
- if (var12 != null) {
- Object[] var16 = new Object[]{var12, var2[var13]};
- throw new ClassDefinitionException(Context.getMessage("msg.multiple.ctors", var16));
- }
-
- var12 = var2[var13];
- }
- }
-
- if (var12 == null) {
- if (var26.length == 1) {
- var12 = var26[0];
- } else if (var26.length == 2) {
- if (var26[0].getParameterTypes().length == 0) {
- var12 = var26[1];
- } else if (var26[1].getParameterTypes().length == 0) {
- var12 = var26[0];
- }
- }
-
- if (var12 == null) {
- Object[] var31 = new Object[]{var1.getName()};
- throw new ClassDefinitionException(Context.getMessage("msg.ctor.multiple.parms", var31));
- }
- }
-
- FunctionObject var30 = new FunctionObject(var7, (Member)var12, var0);
- var30.addAsConstructor(var0, var28);
- Method var32 = null;
-
- for(int var33 = 0; var33 < var2.length; ++var33) {
- if (var2[var33].getDeclaringClass() == var1) {
- String var35 = var2[var33].getName();
- if (var35.equals("finishInit")) {
- Class[] var17 = var2[var33].getParameterTypes();
- if (var17.length == 3 && var17[0] == ScriptRuntime.ScriptableClass && var17[1] == (class$com$netscape$javascript$FunctionObject != null ? class$com$netscape$javascript$FunctionObject : (class$com$netscape$javascript$FunctionObject = class$("com.netscape.javascript.FunctionObject"))) && var17[2] == ScriptRuntime.ScriptableClass && Modifier.isStatic(var2[var33].getModifiers())) {
- var32 = var2[var33];
- continue;
- }
- }
-
- String var36 = null;
- if (var11) {
- if (var35.startsWith("js_")) {
- var35 = var35.substring("js_".length());
- var36 = "js_";
- } else if (var35.startsWith("jsFunction_")) {
- var35 = var35.substring("jsFunction_".length());
- var36 = "jsFunction_";
- } else {
- if (!var35.startsWith("jsProperty_")) {
- continue;
- }
-
- var35 = var35.substring("jsProperty_".length());
- var36 = "jsProperty_";
- }
- } else if (var25.get(var35) != null) {
- continue;
- }
-
- if (var2[var33] != var12) {
- if ((var35.startsWith("get") || var35.startsWith("set")) && var35.length() > 3 && (!var11 || !var36.equals("jsFunction_"))) {
- if (!(var28 instanceof ScriptableObject)) {
- Object[] var38 = new Object[]{var28.getClass().toString(), var35};
- throw new PropertyException(Context.getMessage("msg.extend.scriptable", var38));
- }
-
- if (!var35.startsWith("set")) {
- StringBuffer var37 = new StringBuffer();
- char var19 = var35.charAt(3);
- var37.append(Character.toLowerCase(var19));
- if (var35.length() > 4) {
- var37.append(var35.substring(4));
- }
-
- String var20 = var37.toString();
- var37.setCharAt(0, var19);
- var37.insert(0, "set");
- String var21 = var37.toString();
- Method[] var22 = FunctionObject.findMethods(var1, var11 ? "js_" + var21 : var21);
- if (var22 != null && var22.length != 1) {
- Object[] var39 = new Object[]{var35, var1.getName()};
- throw new PropertyException(Context.getMessage("msg.no.overload", var39));
- }
-
- if (var22 == null && var11) {
- var22 = FunctionObject.findMethods(var1, "jsProperty_" + var21);
- }
-
- int var23 = 6 | (var22 != null ? 0 : 1);
- Method var24 = var22 == null ? null : var22[0];
- ((ScriptableObject)var28).defineProperty(var20, (Object)null, var2[var33], var24, var23);
- }
- } else {
- FunctionObject var18 = new FunctionObject(var35, var2[var33], var28);
- if (var28 instanceof ScriptableObject) {
- ((ScriptableObject)var28).defineProperty(var35, (Object)var18, 2);
- } else {
- var28.put(var35, var28, var18);
- }
- }
- }
- }
- }
-
- if (var32 != null) {
- Object[] var34 = new Object[]{var0, var30, var28};
- var32.invoke((Object)null, var34);
- }
-
- }
- }
-
- // $FF: synthetic method
- private static Class class$(String var0) {
- try {
- return Class.forName(var0);
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
- }
-
- private synchronized void removeSlot(String var1, int var2) {
- int var3 = this.getSlot(var1, var2);
- if (var3 != -1) {
- if ((this.slots[var3].attributes & 4) == 0) {
- this.slots[var3] = REMOVED;
- this.count += -1;
- }
- }
- }
-
- private synchronized void grow() {
- Slot[] var1 = new Slot[this.slots.length * 2 + 1];
-
- for(int var2 = this.slots.length - 1; var2 >= 0; --var2) {
- Slot var3 = this.slots[var2];
- if (var3 != null && var3 != REMOVED) {
- int var4 = (var3.intKey & Integer.MAX_VALUE) % var1.length;
-
- while(var1[var4] != null) {
- ++var4;
- if (var4 == var1.length) {
- var4 = 0;
- }
- }
-
- synchronized(var3){}
- var1[var4] = var3;
- }
- }
-
- this.slots = var1;
- }
-
- public void delete(String var1) {
- if (var1.equals(this.lastName)) {
- this.lastValue = REMOVED;
- }
-
- this.removeSlot(var1, var1.hashCode());
- }
-
- public void delete(int var1) {
- this.removeSlot((String)null, var1);
- }
-
- public static Scriptable getTopLevelScope(Scriptable var0) {
- Scriptable var1 = var0;
-
- do {
- var0 = var1;
- var1 = var1.getParentScope();
- } while(var1 != null);
-
- return var0;
- }
- }
-