diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2015-05-20 09:56:07 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2015-05-20 09:56:07 +0000 |
commit | 41386e9cb918eed93b3f13648cbef387e371e451 (patch) | |
tree | a97f9d7bd1d9d091833286085f72da9d83fd0606 /Source/JavaScriptCore/runtime/JSCJSValue.cpp | |
parent | e15dd966d523731101f70ccf768bba12435a0208 (diff) | |
download | WebKitGtk-tarball-41386e9cb918eed93b3f13648cbef387e371e451.tar.gz |
webkitgtk-2.4.9webkitgtk-2.4.9
Diffstat (limited to 'Source/JavaScriptCore/runtime/JSCJSValue.cpp')
-rw-r--r-- | Source/JavaScriptCore/runtime/JSCJSValue.cpp | 113 |
1 files changed, 17 insertions, 96 deletions
diff --git a/Source/JavaScriptCore/runtime/JSCJSValue.cpp b/Source/JavaScriptCore/runtime/JSCJSValue.cpp index 9e0aab177..cca6888bf 100644 --- a/Source/JavaScriptCore/runtime/JSCJSValue.cpp +++ b/Source/JavaScriptCore/runtime/JSCJSValue.cpp @@ -25,7 +25,6 @@ #include "BooleanConstructor.h" #include "BooleanPrototype.h" -#include "CustomGetterSetter.h" #include "Error.h" #include "ExceptionHelpers.h" #include "GetterSetter.h" @@ -34,7 +33,6 @@ #include "JSGlobalObject.h" #include "JSNotAnObject.h" #include "NumberObject.h" -#include "StructureInlines.h" #include <wtf/MathExtras.h> #include <wtf/StringExtras.h> @@ -63,7 +61,7 @@ double JSValue::toNumberSlowCase(ExecState* exec) const return asCell()->toNumber(exec); if (isTrue()) return 1.0; - return isUndefined() ? PNaN : 0; // null and false both convert to 0. + return isUndefined() ? QNaN : 0; // null and false both convert to 0. } JSObject* JSValue::toObjectSlowCase(ExecState* exec, JSGlobalObject* globalObject) const @@ -99,10 +97,8 @@ JSValue JSValue::toThisSlowCase(ExecState* exec, ECMAMode ecmaMode) const JSObject* JSValue::synthesizePrototype(ExecState* exec) const { if (isCell()) { - if (isString()) - return exec->lexicalGlobalObject()->stringPrototype(); - ASSERT(isSymbol()); - return exec->lexicalGlobalObject()->symbolPrototype(); + ASSERT(isString()); + return exec->lexicalGlobalObject()->stringPrototype(); } if (isNumber()) @@ -121,8 +117,9 @@ void JSValue::putToPrimitive(ExecState* exec, PropertyName propertyName, JSValue { VM& vm = exec->vm(); - if (Optional<uint32_t> index = parseIndex(propertyName)) { - putToPrimitiveByIndex(exec, index.value(), value, slot.isStrictMode()); + unsigned index = propertyName.asIndex(); + if (index != PropertyName::NotAnIndex) { + putToPrimitiveByIndex(exec, index, value, slot.isStrictMode()); return; } @@ -142,7 +139,8 @@ void JSValue::putToPrimitive(ExecState* exec, PropertyName propertyName, JSValue for (; ; obj = asObject(prototype)) { unsigned attributes; - PropertyOffset offset = obj->structure()->get(vm, propertyName, attributes); + JSCell* specificValue; + PropertyOffset offset = obj->structure()->get(vm, propertyName, attributes, specificValue); if (offset != invalidOffset) { if (attributes & ReadOnly) { if (slot.isStrictMode()) @@ -156,11 +154,6 @@ void JSValue::putToPrimitive(ExecState* exec, PropertyName propertyName, JSValue return; } - if (gs.isCustomGetterSetter()) { - callCustomSetter(exec, gs, obj, slot.thisValue(), value); - return; - } - // If there's an existing property on the object or one of its // prototypes it should be replaced, so break here. break; @@ -198,13 +191,6 @@ void JSValue::dump(PrintStream& out) const void JSValue::dumpInContext(PrintStream& out, DumpContext* context) const { - dumpInContextAssumingStructure( - out, context, (!!*this && isCell()) ? asCell()->structure() : nullptr); -} - -void JSValue::dumpInContextAssumingStructure( - PrintStream& out, DumpContext* context, Structure* structure) const -{ if (!*this) out.print("<JSValue()>"); else if (isInt32()) @@ -221,7 +207,7 @@ void JSValue::dumpInContextAssumingStructure( out.printf("Double: %08x:%08x, %lf", u.asTwoInt32s[1], u.asTwoInt32s[0], asDouble()); #endif } else if (isCell()) { - if (structure->classInfo()->isSubClassOf(JSString::info())) { + if (asCell()->inherits(JSString::info())) { JSString* string = jsCast<JSString*>(asCell()); out.print("String"); if (string->isRope()) @@ -230,62 +216,18 @@ void JSValue::dumpInContextAssumingStructure( if (impl) { if (impl->isAtomic()) out.print(" (atomic)"); - if (impl->isAtomic()) + if (impl->isIdentifier()) out.print(" (identifier)"); - if (impl->isSymbol()) - out.print(" (symbol)"); + if (impl->isEmptyUnique()) + out.print(" (unique)"); } else out.print(" (unresolved)"); out.print(": ", impl); - } else if (structure->classInfo()->isSubClassOf(Structure::info())) + } else if (asCell()->inherits(Structure::info())) out.print("Structure: ", inContext(*jsCast<Structure*>(asCell()), context)); else { out.print("Cell: ", RawPointer(asCell())); - out.print(" (", inContext(*structure, context), ")"); - } -#if USE(JSVALUE64) - out.print(", ID: ", asCell()->structureID()); -#endif - } else if (isTrue()) - out.print("True"); - else if (isFalse()) - out.print("False"); - else if (isNull()) - out.print("Null"); - else if (isUndefined()) - out.print("Undefined"); - else - out.print("INVALID"); -} - -void JSValue::dumpForBacktrace(PrintStream& out) const -{ - if (!*this) - out.print("<JSValue()>"); - else if (isInt32()) - out.printf("%d", asInt32()); - else if (isDouble()) - out.printf("%lf", asDouble()); - else if (isCell()) { - if (asCell()->inherits(JSString::info())) { - JSString* string = jsCast<JSString*>(asCell()); - const StringImpl* impl = string->tryGetValueImpl(); - if (impl) - out.print("\"", impl, "\""); - else - out.print("(unresolved string)"); - } else if (asCell()->inherits(Structure::info())) { - out.print("Structure[ ", asCell()->structure()->classInfo()->className); -#if USE(JSVALUE64) - out.print(" ID: ", asCell()->structureID()); -#endif - out.print("]: ", RawPointer(asCell())); - } else { - out.print("Cell[", asCell()->structure()->classInfo()->className); -#if USE(JSVALUE64) - out.print(" ID: ", asCell()->structureID()); -#endif - out.print("]: ", RawPointer(asCell())); + out.print(" (", inContext(*asCell()->structure(), context), ")"); } } else if (isTrue()) out.print("True"); @@ -353,12 +295,8 @@ JSString* JSValue::toStringSlowCase(ExecState* exec) const { VM& vm = exec->vm(); ASSERT(!isString()); - if (isInt32()) { - auto integer = asInt32(); - if (static_cast<unsigned>(integer) <= 9) - return vm.smallStrings.singleCharacterString(integer + '0'); - return jsNontrivialString(&vm, vm.numericStrings.add(integer)); - } + if (isInt32()) + return jsString(&vm, vm.numericStrings.add(asInt32())); if (isDouble()) return jsString(&vm, vm.numericStrings.add(asDouble())); if (isTrue()) @@ -369,10 +307,6 @@ JSString* JSValue::toStringSlowCase(ExecState* exec) const return vm.smallStrings.nullString(); if (isUndefined()) return vm.smallStrings.undefinedString(); - if (isSymbol()) { - throwTypeError(exec); - return jsEmptyString(exec); - } ASSERT(isCell()); JSValue value = asCell()->toPrimitive(exec, PreferString); @@ -384,20 +318,7 @@ JSString* JSValue::toStringSlowCase(ExecState* exec) const String JSValue::toWTFStringSlowCase(ExecState* exec) const { - VM& vm = exec->vm(); - if (isInt32()) - return vm.numericStrings.add(asInt32()); - if (isDouble()) - return vm.numericStrings.add(asDouble()); - if (isTrue()) - return vm.propertyNames->trueKeyword.string(); - if (isFalse()) - return vm.propertyNames->falseKeyword.string(); - if (isNull()) - return vm.propertyNames->nullKeyword.string(); - if (isUndefined()) - return vm.propertyNames->undefinedKeyword.string(); - return toString(exec)->value(exec); + return inlineJSValueNotStringtoString(*this, exec); } } // namespace JSC |