]>
git.saurik.com Git - apple/javascriptcore.git/blob - runtime/Symbol.cpp
2 * Copyright (C) 2012 Apple Inc. All rights reserved.
3 * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
18 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
24 * THE POSSIBILITY OF SUCH DAMAGE.
31 #include "JSCInlines.h"
32 #include "SymbolObject.h"
36 const ClassInfo
Symbol::s_info
= { "symbol", nullptr, nullptr, CREATE_METHOD_TABLE(Symbol
) };
38 Symbol::Symbol(VM
& vm
)
39 : Base(vm
, vm
.symbolStructure
.get())
44 Symbol::Symbol(VM
& vm
, const String
& string
)
45 : Base(vm
, vm
.symbolStructure
.get())
46 , m_privateName(PrivateName::Description
, string
)
50 Symbol::Symbol(VM
& vm
, SymbolImpl
& uid
)
51 : Base(vm
, vm
.symbolStructure
.get())
56 inline SymbolObject
* SymbolObject::create(VM
& vm
, JSGlobalObject
* globalObject
, Symbol
* symbol
)
58 SymbolObject
* object
= new (NotNull
, allocateCell
<SymbolObject
>(vm
.heap
)) SymbolObject(vm
, globalObject
->symbolObjectStructure());
59 object
->finishCreation(vm
, symbol
);
63 JSValue
Symbol::toPrimitive(ExecState
*, PreferredPrimitiveType
) const
65 return const_cast<Symbol
*>(this);
68 bool Symbol::getPrimitiveNumber(ExecState
* exec
, double& number
, JSValue
& result
) const
71 number
= toNumber(exec
);
75 JSObject
* Symbol::toObject(ExecState
* exec
, JSGlobalObject
* globalObject
) const
77 return SymbolObject::create(exec
->vm(), globalObject
, const_cast<Symbol
*>(this));
80 double Symbol::toNumber(ExecState
* exec
) const
86 void Symbol::destroy(JSCell
* cell
)
88 static_cast<Symbol
*>(cell
)->Symbol::~Symbol();
91 String
Symbol::descriptiveString() const
93 return makeString("Symbol(", String(privateName().uid()), ')');