%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
// Copyright 2019 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include 'src/builtins/builtins-proxy-gen.h' namespace proxy { // ES #sec-proxy-object-internal-methods-and-internal-slots-preventextensions // https://tc39.es/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-preventextensions transitioning builtin ProxyPreventExtensions(implicit context: Context)( proxy: JSProxy, doThrow: Boolean): JSAny { PerformStackCheck(); const kTrapName: constexpr string = 'preventExtensions'; try { // 1. Let handler be O.[[ProxyHandler]]. // 2. If handler is null, throw a TypeError exception. // 3. Assert: Type(handler) is Object. assert(proxy.handler == Null || Is<JSReceiver>(proxy.handler)); const handler = Cast<JSReceiver>(proxy.handler) otherwise ThrowProxyHandlerRevoked; // 4. Let target be O.[[ProxyTarget]]. const target = proxy.target; // 5. Let trap be ? GetMethod(handler, "preventExtensions"). // 6. If trap is undefined, then (see 6.a below). const trap: Callable = GetMethod(handler, kTrapName) otherwise goto TrapUndefined(target); // 7. Let booleanTrapResult be ToBoolean(? Call(trap, handler, « // target»)). const trapResult = Call(context, trap, handler, target); // 8. If booleanTrapResult is true, then // 8.a. Let extensibleTarget be ? IsExtensible(target). // 8.b If extensibleTarget is true, throw a TypeError exception. if (ToBoolean(trapResult)) { const extensibleTarget: JSAny = object::ObjectIsExtensibleImpl(target); assert(extensibleTarget == True || extensibleTarget == False); if (extensibleTarget == True) { ThrowTypeError(MessageTemplate::kProxyPreventExtensionsExtensible); } } else { if (doThrow == True) { ThrowTypeError(MessageTemplate::kProxyTrapReturnedFalsish, kTrapName); } return False; } // 9. Return booleanTrapResult. return True; } label TrapUndefined(target: JSAny) { // 6.a. Return ? target.[[PreventExtensions]](). if (doThrow == True) { return object::ObjectPreventExtensionsThrow(target); } return object::ObjectPreventExtensionsDontThrow(target); } label ThrowProxyHandlerRevoked deferred { ThrowTypeError(MessageTemplate::kProxyRevoked, kTrapName); } } } // namespace proxy