private boolean sharedWithActivation(int index) { NativeFunction f = activation.function; int definedCount = f.getParamCount(); if (index < definedCount) { // Check if argument is not hidden by later argument with the same // name as hidden arguments are not shared with activation if (index < definedCount - 1) { String argName = f.getParamOrVarName(index); for (int i = index + 1; i < definedCount; i++) { if (argName.equals(f.getParamOrVarName(i))) { return false; } } } return true; } return false; }
@Override public Object get(int index, Scriptable start) { if (0 <= index && index < args.length) { Object value = args[index]; if (value != NOT_FOUND) { if (sharedWithActivation(index)) { NativeFunction f = activation.function; String argName = f.getParamOrVarName(index); value = activation.get(argName, activation); if (value == NOT_FOUND) Kit.codeBug(); } return value; } } return super.get(index, start); }
@Override public void put(int index, Scriptable start, Object value) { if (0 <= index && index < args.length) { if (args[index] != NOT_FOUND) { if (sharedWithActivation(index)) { String argName; argName = activation.function.getParamOrVarName(index); activation.put(argName, activation, value); return; } synchronized (this) { if (args[index] != NOT_FOUND) { if (args == activation.originalArgs) { args = args.clone(); } args[index] = value; return; } } } } super.put(index, start, value); }
if (paramAndVarCount != 0) { for (int i = 0; i < paramCount; ++i) { String name = function.getParamOrVarName(i); Object val = i < args.length ? args[i] : Undefined.instance; String name = function.getParamOrVarName(i); if (!super.has(name, this)) { if (function.getParamOrVarConst(i))
String name = funObj.getParamOrVarName(i); boolean isConst = funObj.getParamOrVarConst(i);