use of com.github.anba.es6draft.runtime.types.Callable in project es6draft by anba.
the class ProxyObject method isExtensible.
/**
* 9.5.3 [[IsExtensible]] ( )
*/
@Override
public boolean isExtensible(ExecutionContext cx) {
/* steps 1-3 */
ScriptObject handler = getProxyHandler(cx);
/* step 4 */
ScriptObject target = getProxyTarget();
/* steps 5-6 */
Callable trap = GetMethod(cx, handler, "isExtensible");
/* step 7 */
if (trap == null) {
return target.isExtensible(cx);
}
/* steps 8-9 */
boolean trapResult = ToBoolean(trap.call(cx, handler, target));
/* steps 10-11 */
boolean targetResult = target.isExtensible(cx);
/* step 12 */
if (trapResult != targetResult) {
throw newTypeError(cx, Messages.Key.ProxyExtensible);
}
/* step 13 */
return trapResult;
}
use of com.github.anba.es6draft.runtime.types.Callable 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();
/* steps 6-7 */
Callable trap = GetMethod(cx, handler, "defineProperty");
/* step 8 */
if (trap == null) {
return target.defineOwnProperty(cx, propertyKey, desc);
}
/* step 9 */
Object descObj = FromPropertyDescriptor(cx, desc);
/* steps 10-11 */
boolean trapResult = ToBoolean(trap.call(cx, handler, target, propertyKey, descObj));
/* step 12 */
if (!trapResult) {
return false;
}
/* steps 13-14 */
Property targetDesc = target.getOwnProperty(cx, propertyKey);
/* steps 15-21 */
return validateDefineOwnProperty(cx, desc, target, targetDesc);
}
use of com.github.anba.es6draft.runtime.types.Callable in project es6draft by anba.
the class ProxyObject method getPrototypeOf.
/**
* 9.5.1 [[GetPrototypeOf]] ( )
*/
@Override
public ScriptObject getPrototypeOf(ExecutionContext cx) {
/* steps 1-3 */
ScriptObject handler = getProxyHandler(cx);
/* step 4 */
ScriptObject target = getProxyTarget();
/* steps 5-6 */
Callable trap = GetMethod(cx, handler, "getPrototypeOf");
/* step 7 */
if (trap == null) {
return target.getPrototypeOf(cx);
}
/* steps 8-9 */
Object handlerProto = trap.call(cx, handler, target);
/* step 10 */
if (!Type.isObjectOrNull(handlerProto)) {
throw newTypeError(cx, Messages.Key.NotObjectOrNull);
}
ScriptObject handlerProtoObj = Type.objectValueOrNull(handlerProto);
/* steps 11-12 */
boolean extensibleTarget = IsExtensible(cx, target);
/* step 13 */
if (extensibleTarget) {
return handlerProtoObj;
}
/* steps 14-15 */
ScriptObject targetProto = target.getPrototypeOf(cx);
/* step 16 */
if (handlerProtoObj != targetProto) {
throw newTypeError(cx, Messages.Key.ProxySamePrototype);
}
/* step 17 */
return handlerProtoObj;
}
use of com.github.anba.es6draft.runtime.types.Callable in project es6draft by anba.
the class ProxyObject method getOwnProperty.
/**
* 9.5.5 [[GetOwnProperty]] (P)
*/
@Override
public Property getOwnProperty(ExecutionContext cx, Symbol propertyKey) {
/* step 1 (implicit) */
/* steps 2-4 */
ScriptObject handler = getProxyHandler(cx);
/* step 5 */
ScriptObject target = getProxyTarget();
/* steps 6-7 */
Callable trap = GetMethod(cx, handler, "getOwnPropertyDescriptor");
/* step 8 */
if (trap == null) {
return target.getOwnProperty(cx, propertyKey);
}
/* steps 9-10 */
Object trapResultObj = trap.call(cx, handler, target, propertyKey);
/* step 11 */
if (!(Type.isObject(trapResultObj) || Type.isUndefined(trapResultObj))) {
throw newTypeError(cx, Messages.Key.ProxyNotObjectOrUndefined);
}
/* steps 12-13 */
Property targetDesc = target.getOwnProperty(cx, propertyKey);
/* steps 14-23 */
return validateGetOwnProperty(cx, target, trapResultObj, targetDesc);
}
use of com.github.anba.es6draft.runtime.types.Callable in project es6draft by anba.
the class ProxyObject method preventExtensions.
/**
* 9.5.4 [[PreventExtensions]] ( )
*/
@Override
public boolean preventExtensions(ExecutionContext cx) {
/* steps 1-3 */
ScriptObject handler = getProxyHandler(cx);
/* step 4 */
ScriptObject target = getProxyTarget();
/* steps 5-6 */
Callable trap = GetMethod(cx, handler, "preventExtensions");
/* step 7 */
if (trap == null) {
return target.preventExtensions(cx);
}
/* steps 8-9 */
boolean trapResult = ToBoolean(trap.call(cx, handler, target));
/* step 10 */
if (trapResult) {
boolean targetIsExtensible = target.isExtensible(cx);
if (targetIsExtensible) {
throw newTypeError(cx, Messages.Key.ProxyExtensible);
}
}
/* step 11 */
return trapResult;
}
Aggregations