diff options
Diffstat (limited to 'deps/v8/src/apinatives.js')
-rw-r--r-- | deps/v8/src/apinatives.js | 61 |
1 files changed, 18 insertions, 43 deletions
diff --git a/deps/v8/src/apinatives.js b/deps/v8/src/apinatives.js index 6431901bf2..0579caf544 100644 --- a/deps/v8/src/apinatives.js +++ b/deps/v8/src/apinatives.js @@ -1,29 +1,6 @@ // Copyright 2006-2008 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. // This file contains infrastructure used by the API. See // v8natives.js for an explanation of these files are processed and @@ -71,31 +48,29 @@ function InstantiateFunction(data, name) { (serialNumber in cache) && (cache[serialNumber] != kUninitialized); if (!isFunctionCached) { try { - var fun = %CreateApiFunction(data); - if (name) %FunctionSetName(fun, name); var flags = %GetTemplateField(data, kApiFlagOffset); - var doNotCache = flags & (1 << kDoNotCacheBit); - if (!doNotCache) cache[serialNumber] = fun; - if (flags & (1 << kRemovePrototypeBit)) { - %FunctionRemovePrototype(fun); - } else { - var prototype = %GetTemplateField(data, kApiPrototypeTemplateOffset); - // Note: Do not directly use an object template as a condition, our - // internal ToBoolean doesn't handle that! - fun.prototype = typeof prototype === 'undefined' ? - {} : Instantiate(prototype); - if (flags & (1 << kReadOnlyPrototypeBit)) { - %FunctionSetReadOnlyPrototype(fun); - } - %SetProperty(fun.prototype, "constructor", fun, DONT_ENUM); + var has_proto = !(flags & (1 << kRemovePrototypeBit)); + var prototype; + if (has_proto) { + var template = %GetTemplateField(data, kApiPrototypeTemplateOffset); + prototype = typeof template === 'undefined' + ? {} : Instantiate(template); + var parent = %GetTemplateField(data, kApiParentTemplateOffset); // Note: Do not directly use a function template as a condition, our // internal ToBoolean doesn't handle that! - if (!(typeof parent === 'undefined')) { + if (typeof parent !== 'undefined') { var parent_fun = Instantiate(parent); - %SetPrototype(fun.prototype, parent_fun.prototype); + %SetPrototype(prototype, parent_fun.prototype); } } + var fun = %CreateApiFunction(data, prototype); + if (name) %FunctionSetName(fun, name); + var doNotCache = flags & (1 << kDoNotCacheBit); + if (!doNotCache) cache[serialNumber] = fun; + if (has_proto && flags & (1 << kReadOnlyPrototypeBit)) { + %FunctionSetReadOnlyPrototype(fun); + } ConfigureTemplateInstance(fun, data); if (doNotCache) return fun; } catch (e) { |