use of com.github.anba.es6draft.runtime.types.Property in project es6draft by anba.
the class ProxyObject method get.
/**
* 9.5.8 [[Get]] (P, Receiver)
*/
@Override
public Object get(ExecutionContext cx, String propertyKey, Object receiver) {
/* step 1 (implicit) */
/* steps 2-4 */
ScriptObject handler = getProxyHandler(cx);
/* step 5 */
ScriptObject target = getProxyTarget();
/* step 6 */
Callable trap = GetMethod(cx, handler, "get");
/* step 7 */
if (trap == null) {
return target.get(cx, propertyKey, receiver);
}
/* step 8 */
Object trapResult = trap.call(cx, handler, target, propertyKey, receiver);
/* step 9 */
Property targetDesc = target.getOwnProperty(cx, propertyKey);
/* steps 10-11 */
return validateGet(cx, trapResult, targetDesc);
}
use of com.github.anba.es6draft.runtime.types.Property in project es6draft by anba.
the class ProxyObject method set.
/**
* 9.5.9 [[Set]] ( P, V, Receiver)
*/
@Override
public boolean set(ExecutionContext cx, long propertyKey, Object value, Object receiver) {
/* step 1 (implicit) */
/* steps 2-4 */
ScriptObject handler = getProxyHandler(cx);
/* step 5 */
ScriptObject target = getProxyTarget();
/* step 6 */
Callable trap = GetMethod(cx, handler, "set");
/* step 7 */
if (trap == null) {
return target.set(cx, propertyKey, value, receiver);
}
/* step 8 */
boolean trapResult = ToBoolean(trap.call(cx, handler, target, ToString(propertyKey), value, receiver));
/* step 9 */
if (!trapResult) {
return false;
}
/* step 10 */
Property targetDesc = target.getOwnProperty(cx, propertyKey);
/* steps 11-12 */
return validateSet(cx, value, targetDesc);
}
use of com.github.anba.es6draft.runtime.types.Property in project es6draft by anba.
the class ProxyObject method defineOwnProperty.
/**
* 9.5.6 [[DefineOwnProperty]] (P, Desc)
*/
@Override
public boolean defineOwnProperty(ExecutionContext cx, Symbol propertyKey, PropertyDescriptor desc) {
/* step 1 (implicit) */
/* steps 2-4 */
ScriptObject handler = getProxyHandler(cx);
/* step 5 */
ScriptObject target = getProxyTarget();
/* step 6 */
Callable trap = GetMethod(cx, handler, "defineProperty");
/* step 7 */
if (trap == null) {
return target.defineOwnProperty(cx, propertyKey, desc);
}
/* step 8 */
Object descObj = FromPropertyDescriptor(cx, desc);
/* step 9 */
boolean trapResult = ToBoolean(trap.call(cx, handler, target, propertyKey, descObj));
/* step 10 */
if (!trapResult) {
return false;
}
/* step 11 */
Property targetDesc = target.getOwnProperty(cx, propertyKey);
/* steps 12-17 */
return validateDefineOwnProperty(cx, desc, target, targetDesc);
}
use of com.github.anba.es6draft.runtime.types.Property in project es6draft by anba.
the class ProxyObject method delete.
/**
* 9.5.10 [[Delete]] (P)
*/
@Override
public boolean delete(ExecutionContext cx, String propertyKey) {
/* step 1 (implicit) */
/* steps 2-4 */
ScriptObject handler = getProxyHandler(cx);
/* step 5 */
ScriptObject target = getProxyTarget();
/* step 6 */
Callable trap = GetMethod(cx, handler, "deleteProperty");
/* step 7 */
if (trap == null) {
return target.delete(cx, propertyKey);
}
/* step 8 */
boolean trapResult = ToBoolean(trap.call(cx, handler, target, propertyKey));
/* step 9 */
if (!trapResult) {
return false;
}
/* step 10 */
Property targetDesc = target.getOwnProperty(cx, propertyKey);
/* steps 11-13 */
return validateDelete(cx, targetDesc);
}
use of com.github.anba.es6draft.runtime.types.Property in project es6draft by anba.
the class Properties method createAliasFunction.
private static void createAliasFunction(Realm realm, OrdinaryObject target, AliasFunctionLayout layout) {
Object propertyKey = layout.propertyKey;
Property fun;
if (propertyKey instanceof String) {
fun = target.lookupOwnProperty((String) propertyKey);
} else {
fun = target.lookupOwnProperty(((BuiltinSymbol) propertyKey).get());
}
assert fun != null : "property not found: " + propertyKey;
defineProperty(target, layout, valueProperty(layout, fun.getValue()));
}
Aggregations