Changeset 77113 in webkit for trunk/Source/JavaScriptCore/runtime
- Timestamp:
- Jan 30, 2011, 10:56:20 PM (14 years ago)
- Location:
- trunk/Source/JavaScriptCore/runtime
- Files:
-
- 1 deleted
- 71 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/ArgList.cpp
r77098 r77113 43 43 for (ListSet::iterator it = markSet.begin(); it != end; ++it) { 44 44 MarkedArgumentBuffer* list = *it; 45 markStack. deprecatedAppendValues(list->m_buffer, list->m_size);45 markStack.appendValues(reinterpret_cast<JSValue*>(list->m_buffer), list->m_size); 46 46 } 47 47 } -
trunk/Source/JavaScriptCore/runtime/Arguments.cpp
r77098 r77113 49 49 50 50 if (d->registerArray) 51 markStack. deprecatedAppendValues(d->registerArray.get(), d->numParameters);51 markStack.appendValues(reinterpret_cast<JSValue*>(d->registerArray.get()), d->numParameters); 52 52 53 53 if (d->extraArguments) { 54 54 unsigned numExtraArguments = d->numArguments - d->numParameters; 55 markStack. deprecatedAppendValues(d->extraArguments, numExtraArguments);56 } 57 58 markStack.append( &d->callee);55 markStack.appendValues(reinterpret_cast<JSValue*>(d->extraArguments), numExtraArguments); 56 } 57 58 markStack.append(d->callee); 59 59 60 60 if (d->activation) 61 markStack.append( &d->activation);61 markStack.append(d->activation); 62 62 } 63 63 … … 198 198 if (propertyName == exec->propertyNames().callee && LIKELY(!d->overrodeCallee)) { 199 199 if (!d->isStrictMode) { 200 slot.setValue(d->callee .get());200 slot.setValue(d->callee); 201 201 return true; 202 202 } … … 229 229 if (propertyName == exec->propertyNames().callee && LIKELY(!d->overrodeCallee)) { 230 230 if (!d->isStrictMode) { 231 descriptor.setDescriptor(d->callee .get(), DontEnum);231 descriptor.setDescriptor(d->callee, DontEnum); 232 232 return true; 233 233 } … … 281 281 if (propertyName == exec->propertyNames().length && !d->overrodeLength) { 282 282 d->overrodeLength = true; 283 putDirect( exec->globalData(),propertyName, value, DontEnum);283 putDirect(propertyName, value, DontEnum); 284 284 return; 285 285 } … … 288 288 if (!d->isStrictMode) { 289 289 d->overrodeCallee = true; 290 putDirect( exec->globalData(),propertyName, value, DontEnum);290 putDirect(propertyName, value, DontEnum); 291 291 return; 292 292 } -
trunk/Source/JavaScriptCore/runtime/Arguments.h
r77098 r77113 38 38 public: 39 39 ArgumentsData() { } 40 WriteBarrier<JSActivation>activation;40 JSActivation* activation; 41 41 42 42 unsigned numParameters; … … 51 51 Register extraArgumentsFixedBuffer[4]; 52 52 53 WriteBarrier<JSFunction>callee;53 JSFunction* callee; 54 54 bool overrodeLength : 1; 55 55 bool overrodeCallee : 1; … … 87 87 void copyRegisters(); 88 88 bool isTornOff() const { return d->registerArray; } 89 void setActivation(JS GlobalData& globalData, JSActivation* activation)89 void setActivation(JSActivation* activation) 90 90 { 91 d->activation .set(globalData, this, activation);91 d->activation = activation; 92 92 d->registers = &activation->registerAt(0); 93 93 } … … 159 159 d->numArguments = numArguments; 160 160 161 d->activation = 0; 161 162 d->registers = callFrame->registers(); 162 163 … … 176 177 d->extraArguments = extraArguments; 177 178 178 d->callee .set(callFrame->globalData(), this, callee);179 d->callee = callee; 179 180 d->overrodeLength = false; 180 181 d->overrodeCallee = false; … … 195 196 d->numParameters = 0; 196 197 d->numArguments = numArguments; 198 d->activation = 0; 197 199 198 200 Register* extraArguments; … … 208 210 d->extraArguments = extraArguments; 209 211 210 d->callee .set(callFrame->globalData(), this, asFunction(callFrame->callee()));212 d->callee = asFunction(callFrame->callee()); 211 213 d->overrodeLength = false; 212 214 d->overrodeCallee = false; -
trunk/Source/JavaScriptCore/runtime/ArrayConstructor.cpp
r77098 r77113 43 43 { 44 44 // ECMA 15.4.3.1 Array.prototype 45 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().prototype, arrayPrototype, DontEnum | DontDelete | ReadOnly);45 putDirectWithoutTransition(exec->propertyNames().prototype, arrayPrototype, DontEnum | DontDelete | ReadOnly); 46 46 47 47 // no. of arguments for constructor 48 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete);48 putDirectWithoutTransition(exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete); 49 49 50 50 // ES5 … … 63 63 64 64 // otherwise the array is constructed with the arguments in it 65 return new (exec) JSArray(exec-> globalData(), exec->lexicalGlobalObject()->arrayStructure(), args);65 return new (exec) JSArray(exec->lexicalGlobalObject()->arrayStructure(), args); 66 66 } 67 67 -
trunk/Source/JavaScriptCore/runtime/ArrayPrototype.cpp
r77098 r77113 546 546 JSArray* resObj = new (exec) JSArray(exec->lexicalGlobalObject()->arrayStructure(), deleteCount, CreateCompact); 547 547 JSValue result = resObj; 548 JSGlobalData& globalData = exec->globalData(); 548 549 549 for (unsigned k = 0; k < deleteCount; k++) 550 resObj->uncheckedSetIndex( globalData,k, getProperty(exec, thisObj, k + begin));550 resObj->uncheckedSetIndex(k, getProperty(exec, thisObj, k + begin)); 551 551 552 552 resObj->setLength(deleteCount); -
trunk/Source/JavaScriptCore/runtime/BatchedTransitionOptimizer.h
r77098 r77113 35 35 WTF_MAKE_NONCOPYABLE(BatchedTransitionOptimizer); 36 36 public: 37 BatchedTransitionOptimizer(JSGlobalData& globalData, JSObject* object) 38 : m_globalData(&globalData) 39 , m_object(object) 37 BatchedTransitionOptimizer(JSObject* object) 38 : m_object(object) 40 39 { 41 40 if (!m_object->structure()->isDictionary()) … … 45 44 ~BatchedTransitionOptimizer() 46 45 { 47 m_object->flattenDictionaryObject( *m_globalData);46 m_object->flattenDictionaryObject(); 48 47 } 49 48 50 49 private: 51 JSGlobalData* m_globalData;52 50 JSObject* m_object; 53 51 }; -
trunk/Source/JavaScriptCore/runtime/BooleanConstructor.cpp
r77098 r77113 32 32 : InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, booleanPrototype->classInfo()->className)) 33 33 { 34 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().prototype, booleanPrototype, DontEnum | DontDelete | ReadOnly);34 putDirectWithoutTransition(exec->propertyNames().prototype, booleanPrototype, DontEnum | DontDelete | ReadOnly); 35 35 36 36 // no. of arguments for constructor 37 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().length, jsNumber(1), ReadOnly | DontDelete | DontEnum);37 putDirectWithoutTransition(exec->propertyNames().length, jsNumber(1), ReadOnly | DontDelete | DontEnum); 38 38 } 39 39 … … 42 42 { 43 43 BooleanObject* obj = new (exec) BooleanObject(exec->lexicalGlobalObject()->booleanObjectStructure()); 44 obj->setInternalValue( exec->globalData(),jsBoolean(args.at(0).toBoolean(exec)));44 obj->setInternalValue(jsBoolean(args.at(0).toBoolean(exec))); 45 45 return obj; 46 46 } … … 73 73 { 74 74 BooleanObject* obj = new (exec) BooleanObject(exec->lexicalGlobalObject()->booleanObjectStructure()); 75 obj->setInternalValue( exec->globalData(),immediateBooleanValue);75 obj->setInternalValue(immediateBooleanValue); 76 76 return obj; 77 77 } -
trunk/Source/JavaScriptCore/runtime/BooleanPrototype.cpp
r77098 r77113 42 42 : BooleanObject(structure) 43 43 { 44 setInternalValue( exec->globalData(),jsBoolean(false));44 setInternalValue(jsBoolean(false)); 45 45 46 46 putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 0, exec->propertyNames().toString, booleanProtoFuncToString), DontEnum); -
trunk/Source/JavaScriptCore/runtime/ConservativeSet.cpp
r77098 r77113 37 37 { 38 38 size_t newCapacity = m_capacity == inlineCapacity ? nonInlineCapacity : m_capacity * 2; 39 DeprecatedPtr<JSCell>* newSet = static_cast<DeprecatedPtr<JSCell>*>(OSAllocator::reserveAndCommit(newCapacity * sizeof(JSCell*)));39 JSCell** newSet = static_cast<JSCell**>(OSAllocator::reserveAndCommit(newCapacity * sizeof(JSCell*))); 40 40 memcpy(newSet, m_set, m_size * sizeof(JSCell*)); 41 41 if (m_set != m_inlineSet) -
trunk/Source/JavaScriptCore/runtime/ConservativeSet.h
r77098 r77113 50 50 51 51 Heap* m_heap; 52 DeprecatedPtr<JSCell>* m_set;52 JSCell** m_set; 53 53 size_t m_size; 54 54 size_t m_capacity; 55 DeprecatedPtr<JSCell>m_inlineSet[inlineCapacity];55 JSCell* m_inlineSet[inlineCapacity]; 56 56 }; 57 57 … … 67 67 { 68 68 if (m_set != m_inlineSet) 69 OSAllocator::decommitAndRelease(m_set, m_capacity * sizeof( DeprecatedPtr<JSCell>*));69 OSAllocator::decommitAndRelease(m_set, m_capacity * sizeof(JSCell*)); 70 70 } 71 71 … … 73 73 { 74 74 for (size_t i = 0; i < m_size; ++i) 75 markStack.append( &m_set[i]);75 markStack.append(m_set[i]); 76 76 } 77 77 -
trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp
r77098 r77113 62 62 : InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, datePrototype->classInfo()->className)) 63 63 { 64 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().prototype, datePrototype, DontEnum | DontDelete |ReadOnly);64 putDirectWithoutTransition(exec->propertyNames().prototype, datePrototype, DontEnum|DontDelete|ReadOnly); 65 65 66 66 putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 1, exec->propertyNames().parse, dateParse), DontEnum); … … 68 68 putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 0, exec->propertyNames().now, dateNow), DontEnum); 69 69 70 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().length, jsNumber(7), ReadOnly | DontEnum | DontDelete);70 putDirectWithoutTransition(exec->propertyNames().length, jsNumber(7), ReadOnly | DontEnum | DontDelete); 71 71 } 72 72 -
trunk/Source/JavaScriptCore/runtime/DateInstance.cpp
r77098 r77113 35 35 const ClassInfo DateInstance::info = {"Date", 0, 0, 0}; 36 36 37 DateInstance::DateInstance(ExecState* exec, NonNullPassRefPtr<Structure> structure)37 DateInstance::DateInstance(ExecState*, NonNullPassRefPtr<Structure> structure) 38 38 : JSWrapperObject(structure) 39 39 { 40 setInternalValue( exec->globalData(),jsNaN());40 setInternalValue(jsNaN()); 41 41 } 42 42 43 DateInstance::DateInstance(ExecState* exec, NonNullPassRefPtr<Structure> structure, double time)43 DateInstance::DateInstance(ExecState*, NonNullPassRefPtr<Structure> structure, double time) 44 44 : JSWrapperObject(structure) 45 45 { 46 setInternalValue( exec->globalData(),jsNumber(timeClip(time)));46 setInternalValue(jsNumber(timeClip(time))); 47 47 } 48 48 … … 50 50 : JSWrapperObject(exec->lexicalGlobalObject()->dateStructure()) 51 51 { 52 setInternalValue( exec->globalData(),jsNumber(timeClip(time)));52 setInternalValue(jsNumber(timeClip(time))); 53 53 } 54 54 -
trunk/Source/JavaScriptCore/runtime/DatePrototype.cpp
r77098 r77113 846 846 double milli = timeClip(exec->argument(0).toNumber(exec)); 847 847 JSValue result = jsNumber(milli); 848 thisDateObj->setInternalValue( exec->globalData(),result);848 thisDateObj->setInternalValue(result); 849 849 return JSValue::encode(result); 850 850 } … … 861 861 if (!exec->argumentCount() || isnan(milli)) { 862 862 JSValue result = jsNaN(); 863 thisDateObj->setInternalValue( exec->globalData(),result);863 thisDateObj->setInternalValue(result); 864 864 return JSValue::encode(result); 865 865 } … … 878 878 if (!fillStructuresUsingTimeArgs(exec, numArgsToUse, &ms, &gregorianDateTime)) { 879 879 JSValue result = jsNaN(); 880 thisDateObj->setInternalValue( exec->globalData(),result);880 thisDateObj->setInternalValue(result); 881 881 return JSValue::encode(result); 882 882 } 883 883 884 884 JSValue result = jsNumber(gregorianDateTimeToMS(exec, gregorianDateTime, ms, inputIsUTC)); 885 thisDateObj->setInternalValue( exec->globalData(),result);885 thisDateObj->setInternalValue(result); 886 886 return JSValue::encode(result); 887 887 } … … 896 896 if (!exec->argumentCount()) { 897 897 JSValue result = jsNaN(); 898 thisDateObj->setInternalValue( exec->globalData(),result);898 thisDateObj->setInternalValue(result); 899 899 return JSValue::encode(result); 900 900 } … … 918 918 if (!fillStructuresUsingDateArgs(exec, numArgsToUse, &ms, &gregorianDateTime)) { 919 919 JSValue result = jsNaN(); 920 thisDateObj->setInternalValue( exec->globalData(),result);920 thisDateObj->setInternalValue(result); 921 921 return JSValue::encode(result); 922 922 } 923 923 924 924 JSValue result = jsNumber(gregorianDateTimeToMS(exec, gregorianDateTime, ms, inputIsUTC)); 925 thisDateObj->setInternalValue( exec->globalData(),result);925 thisDateObj->setInternalValue(result); 926 926 return JSValue::encode(result); 927 927 } … … 1020 1020 if (!exec->argumentCount()) { 1021 1021 JSValue result = jsNaN(); 1022 thisDateObj->setInternalValue( exec->globalData(),result);1022 thisDateObj->setInternalValue(result); 1023 1023 return JSValue::encode(result); 1024 1024 } … … 1042 1042 if (!isfinite(year)) { 1043 1043 JSValue result = jsNaN(); 1044 thisDateObj->setInternalValue( exec->globalData(),result);1044 thisDateObj->setInternalValue(result); 1045 1045 return JSValue::encode(result); 1046 1046 } … … 1048 1048 gregorianDateTime.year = toInt32((year > 99 || year < 0) ? year - 1900 : year); 1049 1049 JSValue result = jsNumber(gregorianDateTimeToMS(exec, gregorianDateTime, ms, false)); 1050 thisDateObj->setInternalValue( exec->globalData(),result);1050 thisDateObj->setInternalValue(result); 1051 1051 return JSValue::encode(result); 1052 1052 } -
trunk/Source/JavaScriptCore/runtime/ErrorConstructor.cpp
r77098 r77113 34 34 { 35 35 // ECMA 15.11.3.1 Error.prototype 36 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().prototype, errorPrototype, DontEnum | DontDelete | ReadOnly);37 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().length, jsNumber(1), DontDelete | ReadOnly | DontEnum);36 putDirectWithoutTransition(exec->propertyNames().prototype, errorPrototype, DontEnum | DontDelete | ReadOnly); 37 putDirectWithoutTransition(exec->propertyNames().length, jsNumber(1), DontDelete | ReadOnly | DontEnum); 38 38 } 39 39 -
trunk/Source/JavaScriptCore/runtime/ErrorInstance.cpp
r77098 r77113 30 30 , m_appendSourceToMessage(false) 31 31 { 32 putDirect( *globalData,globalData->propertyNames->message, jsString(globalData, ""));32 putDirect(globalData->propertyNames->message, jsString(globalData, "")); 33 33 } 34 34 … … 37 37 , m_appendSourceToMessage(false) 38 38 { 39 putDirect( *globalData,globalData->propertyNames->message, jsString(globalData, message));39 putDirect(globalData->propertyNames->message, jsString(globalData, message)); 40 40 } 41 41 -
trunk/Source/JavaScriptCore/runtime/ErrorPrototype.cpp
r77098 r77113 42 42 // The constructor will be added later in ErrorConstructor's constructor 43 43 44 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().name, jsNontrivialString(exec, "Error"), DontEnum);44 putDirectWithoutTransition(exec->propertyNames().name, jsNontrivialString(exec, "Error"), DontEnum); 45 45 putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 0, exec->propertyNames().toString, errorProtoFuncToString), DontEnum); 46 46 } -
trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp
r77098 r77113 41 41 : InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, functionPrototype->classInfo()->className)) 42 42 { 43 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().prototype, functionPrototype, DontEnum | DontDelete | ReadOnly);43 putDirectWithoutTransition(exec->propertyNames().prototype, functionPrototype, DontEnum | DontDelete | ReadOnly); 44 44 45 45 // Number of arguments for constructor 46 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().length, jsNumber(1), ReadOnly | DontDelete | DontEnum);46 putDirectWithoutTransition(exec->propertyNames().length, jsNumber(1), ReadOnly | DontDelete | DontEnum); 47 47 } 48 48 -
trunk/Source/JavaScriptCore/runtime/FunctionPrototype.cpp
r77098 r77113 42 42 : InternalFunction(&exec->globalData(), globalObject, structure, exec->propertyNames().nullIdentifier) 43 43 { 44 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().length, jsNumber(0), DontDelete | ReadOnly | DontEnum);44 putDirectWithoutTransition(exec->propertyNames().length, jsNumber(0), DontDelete | ReadOnly | DontEnum); 45 45 } 46 46 -
trunk/Source/JavaScriptCore/runtime/GetterSetter.cpp
r77098 r77113 34 34 35 35 if (m_getter) 36 markStack.append( &m_getter);36 markStack.append(m_getter); 37 37 if (m_setter) 38 markStack.append( &m_setter);38 markStack.append(m_setter); 39 39 } 40 40 -
trunk/Source/JavaScriptCore/runtime/GetterSetter.h
r77098 r77113 39 39 GetterSetter(ExecState* exec) 40 40 : JSCell(exec->globalData().getterSetterStructure.get()) 41 , m_getter(0) 42 , m_setter(0) 41 43 { 42 44 } … … 44 46 virtual void markChildren(MarkStack&); 45 47 46 JSObject* getter() const { return m_getter .get(); }47 void setGetter(JS GlobalData& globalData, JSObject* getter) { m_getter.set(globalData, this, getter); }48 JSObject* setter() const { return m_setter .get(); }49 void setSetter(JS GlobalData& globalData, JSObject* setter) { m_setter.set(globalData, this, setter); }48 JSObject* getter() const { return m_getter; } 49 void setGetter(JSObject* getter) { m_getter = getter; } 50 JSObject* setter() const { return m_setter; } 51 void setSetter(JSObject* setter) { m_setter = setter; } 50 52 static PassRefPtr<Structure> createStructure(JSValue prototype) 51 53 { … … 55 57 virtual bool isGetterSetter() const; 56 58 57 WriteBarrier<JSObject>m_getter;58 WriteBarrier<JSObject>m_setter;59 JSObject* m_getter; 60 JSObject* m_setter; 59 61 }; 60 62 -
trunk/Source/JavaScriptCore/runtime/GlobalEvalFunction.cpp
r77098 r77113 35 35 GlobalEvalFunction::GlobalEvalFunction(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, int len, const Identifier& name, NativeFunction function, JSGlobalObject* cachedGlobalObject) 36 36 : PrototypeFunction(exec, globalObject, structure, len, name, function) 37 , m_cachedGlobalObject( exec->globalData(), this,cachedGlobalObject)37 , m_cachedGlobalObject(cachedGlobalObject) 38 38 { 39 39 ASSERT_ARG(cachedGlobalObject, cachedGlobalObject); … … 43 43 { 44 44 PrototypeFunction::markChildren(markStack); 45 markStack.append( &m_cachedGlobalObject);45 markStack.append(m_cachedGlobalObject); 46 46 } 47 47 -
trunk/Source/JavaScriptCore/runtime/GlobalEvalFunction.h
r77098 r77113 34 34 public: 35 35 GlobalEvalFunction(ExecState*, JSGlobalObject*, NonNullPassRefPtr<Structure>, int len, const Identifier&, NativeFunction, JSGlobalObject* expectedThisObject); 36 JSGlobalObject* cachedGlobalObject() const { return m_cachedGlobalObject .get(); }36 JSGlobalObject* cachedGlobalObject() const { return m_cachedGlobalObject; } 37 37 38 38 static PassRefPtr<Structure> createStructure(JSValue prototype) … … 47 47 virtual void markChildren(MarkStack&); 48 48 49 WriteBarrier<JSGlobalObject>m_cachedGlobalObject;49 JSGlobalObject* m_cachedGlobalObject; 50 50 }; 51 51 -
trunk/Source/JavaScriptCore/runtime/Heap.cpp
r77098 r77113 180 180 ProtectCountSet::iterator end = m_protectedValues.end(); 181 181 for (ProtectCountSet::iterator it = m_protectedValues.begin(); it != end; ++it) 182 markStack. deprecatedAppend(&it->first);182 markStack.append(it->first); 183 183 } 184 184 … … 205 205 for (Vector<ValueStringPair>::iterator vectorIt = tempSortingVector->begin(); vectorIt != vectorEnd; ++vectorIt) { 206 206 if (vectorIt->first) 207 markStack. deprecatedAppend(&vectorIt->first);207 markStack.append(vectorIt->first); 208 208 } 209 209 } … … 256 256 MarkedArgumentBuffer::markLists(markStack, *m_markListSet); 257 257 if (m_globalData->exception) 258 markStack.append( &m_globalData->exception);258 markStack.append(m_globalData->exception); 259 259 if (m_globalData->firstStringifierToMark) 260 260 JSONObject::markStringifiers(markStack, m_globalData->firstStringifierToMark); -
trunk/Source/JavaScriptCore/runtime/InternalFunction.cpp
r77098 r77113 47 47 : JSObjectWithGlobalObject(globalObject, structure) 48 48 { 49 putDirect( *globalData,globalData->propertyNames->name, jsString(globalData, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum);49 putDirect(globalData->propertyNames->name, jsString(globalData, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum); 50 50 } 51 51 -
trunk/Source/JavaScriptCore/runtime/JSAPIValueWrapper.h
r77098 r77113 32 32 friend JSValue jsAPIValueWrapper(ExecState*, JSValue); 33 33 public: 34 JSValue value() const { return m_value .get(); }34 JSValue value() const { return m_value; } 35 35 36 36 virtual bool isAPIValueWrapper() const { return true; } … … 45 45 JSAPIValueWrapper(ExecState* exec, JSValue value) 46 46 : JSCell(exec->globalData().apiWrapperStructure.get()) 47 , m_value(value) 47 48 { 48 m_value.set(exec->globalData(), this, value);49 49 ASSERT(!value.isCell()); 50 50 } 51 51 52 WriteBarrier<Unknown>m_value;52 JSValue m_value; 53 53 }; 54 54 -
trunk/Source/JavaScriptCore/runtime/JSActivation.cpp
r77098 r77113 62 62 63 63 size_t count = numParametersMinusThis; 64 markStack. deprecatedAppendValues(registerArray, count);64 markStack.appendValues(registerArray, count); 65 65 66 66 size_t numVars = d()->functionExecutable->capturedVariableCount(); 67 67 68 68 // Skip the call frame, which sits between the parameters and vars. 69 markStack. deprecatedAppendValues(registerArray + count + RegisterFile::CallFrameHeaderSize, numVars, MayContainNullValues);69 markStack.appendValues(registerArray + count + RegisterFile::CallFrameHeaderSize, numVars, MayContainNullValues); 70 70 } 71 71 … … 145 145 } 146 146 147 void JSActivation::put(ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot& slot)147 void JSActivation::put(ExecState*, const Identifier& propertyName, JSValue value, PutPropertySlot& slot) 148 148 { 149 149 ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(this)); … … 156 156 // expose in the activation object. 157 157 ASSERT(!hasGetterSetterProperties()); 158 putDirect( exec->globalData(),propertyName, value, 0, true, slot);158 putDirect(propertyName, value, 0, true, slot); 159 159 } 160 160 -
trunk/Source/JavaScriptCore/runtime/JSArray.cpp
r77098 r77113 189 189 m_storage->m_length = initialLength; 190 190 m_storage->m_numValuesInVector = 0; 191 WriteBarrier<Unknown>* vector = m_storage->m_vector;191 JSValue* vector = m_storage->m_vector; 192 192 for (size_t i = 0; i < initialCapacity; ++i) 193 vector[i] .clear();193 vector[i] = JSValue(); 194 194 } 195 195 … … 199 199 } 200 200 201 JSArray::JSArray( JSGlobalData& globalData,NonNullPassRefPtr<Structure> structure, const ArgList& list)201 JSArray::JSArray(NonNullPassRefPtr<Structure> structure, const ArgList& list) 202 202 : JSObject(structure) 203 203 { … … 226 226 227 227 size_t i = 0; 228 WriteBarrier<Unknown>* vector = m_storage->m_vector;228 JSValue* vector = m_storage->m_vector; 229 229 ArgList::const_iterator end = list.end(); 230 230 for (ArgList::const_iterator it = list.begin(); it != end; ++it, ++i) 231 vector[i] .set(globalData, this, *it);231 vector[i] = *it; 232 232 for (; i < initialStorage; i++) 233 vector[i] .clear();233 vector[i] = JSValue(); 234 234 235 235 checkConsistency(); … … 258 258 259 259 if (i < m_vectorLength) { 260 WriteBarrier<Unknown>& valueSlot = storage->m_vector[i];260 JSValue& valueSlot = storage->m_vector[i]; 261 261 if (valueSlot) { 262 slot.setValueSlot( valueSlot.slot());262 slot.setValueSlot(&valueSlot); 263 263 return true; 264 264 } … … 267 267 SparseArrayValueMap::iterator it = map->find(i); 268 268 if (it != map->end()) { 269 slot.setValueSlot( it->second.slot());269 slot.setValueSlot(&it->second); 270 270 return true; 271 271 } … … 306 306 return false; 307 307 if (i < m_vectorLength) { 308 WriteBarrier<Unknown>& value = storage->m_vector[i];308 JSValue& value = storage->m_vector[i]; 309 309 if (value) { 310 descriptor.setDescriptor(value .get(), 0);310 descriptor.setDescriptor(value, 0); 311 311 return true; 312 312 } … … 315 315 SparseArrayValueMap::iterator it = map->find(i); 316 316 if (it != map->end()) { 317 descriptor.setDescriptor(it->second .get(), 0);317 descriptor.setDescriptor(it->second, 0); 318 318 return true; 319 319 } … … 360 360 361 361 if (i < m_vectorLength) { 362 WriteBarrier<Unknown>& valueSlot = storage->m_vector[i];362 JSValue& valueSlot = storage->m_vector[i]; 363 363 if (valueSlot) { 364 valueSlot .set(exec->globalData(), this, value);364 valueSlot = value; 365 365 checkConsistency(); 366 366 return; 367 367 } 368 valueSlot .set(exec->globalData(), this, value);368 valueSlot = value; 369 369 ++storage->m_numValuesInVector; 370 370 checkConsistency(); … … 396 396 } 397 397 398 WriteBarrier<Unknown> temp; 399 pair<SparseArrayValueMap::iterator, bool> result = map->add(i, temp); 400 result.first->second.set(exec->globalData(), this, value); 401 if (!result.second) // pre-existing entry 398 pair<SparseArrayValueMap::iterator, bool> result = map->add(i, value); 399 if (!result.second) { // pre-existing entry 400 result.first->second = value; 402 401 return; 402 } 403 403 404 404 size_t capacity = map->capacity(); … … 416 416 if (increaseVectorLength(i + 1)) { 417 417 storage = m_storage; 418 storage->m_vector[i] .set(exec->globalData(), this, value);418 storage->m_vector[i] = value; 419 419 ++storage->m_numValuesInVector; 420 420 checkConsistency(); … … 458 458 459 459 unsigned vectorLength = m_vectorLength; 460 WriteBarrier<Unknown>* vector = storage->m_vector;460 JSValue* vector = storage->m_vector; 461 461 462 462 if (newNumValuesInVector == storage->m_numValuesInVector + 1) { 463 463 for (unsigned j = vectorLength; j < newVectorLength; ++j) 464 vector[j] .clear();464 vector[j] = JSValue(); 465 465 if (i > MIN_SPARSE_ARRAY_INDEX) 466 466 map->remove(i); 467 467 } else { 468 468 for (unsigned j = vectorLength; j < max(vectorLength, MIN_SPARSE_ARRAY_INDEX); ++j) 469 vector[j].clear(); 470 JSGlobalData& globalData = exec->globalData(); 469 vector[j] = JSValue(); 471 470 for (unsigned j = max(vectorLength, MIN_SPARSE_ARRAY_INDEX); j < newVectorLength; ++j) 472 vector[j] .set(globalData, this, map->take(j).get());471 vector[j] = map->take(j); 473 472 } 474 473 … … 478 477 storage->m_numValuesInVector = newNumValuesInVector; 479 478 480 storage->m_vector[i] .set(exec->globalData(), this, value);479 storage->m_vector[i] = value; 481 480 482 481 checkConsistency(); … … 505 504 506 505 if (i < m_vectorLength) { 507 WriteBarrier<Unknown>& valueSlot = storage->m_vector[i];506 JSValue& valueSlot = storage->m_vector[i]; 508 507 if (!valueSlot) { 509 508 checkConsistency(); 510 509 return false; 511 510 } 512 valueSlot .clear();511 valueSlot = JSValue(); 513 512 --storage->m_numValuesInVector; 514 513 checkConsistency(); … … 607 606 m_storage->m_allocBase = baseStorage; 608 607 609 WriteBarrier<Unknown>* vector = storage->m_vector;608 JSValue* vector = storage->m_vector; 610 609 for (unsigned i = vectorLength; i < newVectorLength; ++i) 611 vector[i] .clear();610 vector[i] = JSValue(); 612 611 613 612 m_vectorLength = newVectorLength; … … 668 667 unsigned usedVectorLength = min(length, m_vectorLength); 669 668 for (unsigned i = newLength; i < usedVectorLength; ++i) { 670 WriteBarrier<Unknown>& valueSlot = storage->m_vector[i];669 JSValue& valueSlot = storage->m_vector[i]; 671 670 bool hadValue = valueSlot; 672 valueSlot .clear();671 valueSlot = JSValue(); 673 672 storage->m_numValuesInVector -= hadValue; 674 673 } … … 708 707 709 708 if (length < m_vectorLength) { 710 WriteBarrier<Unknown>& valueSlot = storage->m_vector[length];709 JSValue& valueSlot = storage->m_vector[length]; 711 710 if (valueSlot) { 712 711 --storage->m_numValuesInVector; 713 result = valueSlot .get();714 valueSlot .clear();712 result = valueSlot; 713 valueSlot = JSValue(); 715 714 } else 716 715 result = jsUndefined(); … … 720 719 SparseArrayValueMap::iterator it = map->find(length); 721 720 if (it != map->end()) { 722 result = it->second .get();721 result = it->second; 723 722 map->remove(it); 724 723 if (map->isEmpty()) { … … 744 743 745 744 if (storage->m_length < m_vectorLength) { 746 storage->m_vector[storage->m_length] .set(exec->globalData(), this, value);745 storage->m_vector[storage->m_length] = value; 747 746 ++storage->m_numValuesInVector; 748 747 ++storage->m_length; … … 756 755 if (increaseVectorLength(storage->m_length + 1)) { 757 756 storage = m_storage; 758 storage->m_vector[storage->m_length] .set(exec->globalData(), this, value);757 storage->m_vector[storage->m_length] = value; 759 758 ++storage->m_numValuesInVector; 760 759 ++storage->m_length; … … 859 858 } 860 859 861 WriteBarrier<Unknown>* vector = m_storage->m_vector;860 JSValue* vector = m_storage->m_vector; 862 861 for (int i = 0; i < count; i++) 863 vector[i] .clear();862 vector[i] = JSValue(); 864 863 } 865 864 … … 943 942 944 943 for (size_t i = 0; i < lengthNotIncludingUndefined; i++) { 945 JSValue value = storage->m_vector[i] .get();944 JSValue value = storage->m_vector[i]; 946 945 ASSERT(!value.isUndefined()); 947 946 values[i].first = value; … … 976 975 if (storage->m_length < lengthNotIncludingUndefined) 977 976 storage->m_length = lengthNotIncludingUndefined; 978 979 JSGlobalData& globalData = exec->globalData(); 977 980 978 for (size_t i = 0; i < lengthNotIncludingUndefined; i++) 981 storage->m_vector[i] .set(globalData, this, values[i].first);979 storage->m_vector[i] = values[i].first; 982 980 983 981 Heap::heap(this)->popTempSortVector(&values); … … 1108 1106 // Iterate over the array, ignoring missing values, counting undefined ones, and inserting all other ones into the tree. 1109 1107 for (; numDefined < usedVectorLength; ++numDefined) { 1110 JSValue v = storage->m_vector[numDefined] .get();1108 JSValue v = storage->m_vector[numDefined]; 1111 1109 if (!v || v.isUndefined()) 1112 1110 break; … … 1115 1113 } 1116 1114 for (unsigned i = numDefined; i < usedVectorLength; ++i) { 1117 JSValue v = storage->m_vector[i] .get();1115 JSValue v = storage->m_vector[i]; 1118 1116 if (v) { 1119 1117 if (v.isUndefined()) … … 1143 1141 SparseArrayValueMap::iterator end = map->end(); 1144 1142 for (SparseArrayValueMap::iterator it = map->begin(); it != end; ++it) { 1145 tree.abstractor().m_nodes[numDefined].value = it->second .get();1143 tree.abstractor().m_nodes[numDefined].value = it->second; 1146 1144 tree.insert(numDefined); 1147 1145 ++numDefined; … … 1160 1158 AVLTree<AVLTreeAbstractorForArrayCompare, 44>::Iterator iter; 1161 1159 iter.start_iter_least(tree); 1162 JSGlobalData& globalData = exec->globalData();1163 1160 for (unsigned i = 0; i < numDefined; ++i) { 1164 storage->m_vector[i] .set(globalData, this, tree.abstractor().m_nodes[*iter].value);1161 storage->m_vector[i] = tree.abstractor().m_nodes[*iter].value; 1165 1162 ++iter; 1166 1163 } … … 1168 1165 // Put undefined values back in. 1169 1166 for (unsigned i = numDefined; i < newUsedVectorLength; ++i) 1170 storage->m_vector[i] .setUndefined();1167 storage->m_vector[i] = jsUndefined(); 1171 1168 1172 1169 // Ensure that unused values in the vector are zeroed out. 1173 1170 for (unsigned i = newUsedVectorLength; i < usedVectorLength; ++i) 1174 storage->m_vector[i] .clear();1171 storage->m_vector[i] = JSValue(); 1175 1172 1176 1173 storage->m_numValuesInVector = newUsedVectorLength; … … 1183 1180 ArrayStorage* storage = m_storage; 1184 1181 1185 WriteBarrier<Unknown>* vector = storage->m_vector;1182 JSValue* vector = storage->m_vector; 1186 1183 unsigned vectorEnd = min(storage->m_length, m_vectorLength); 1187 1184 unsigned i = 0; 1188 1185 for (; i < vectorEnd; ++i) { 1189 WriteBarrier<Unknown>& v = vector[i];1186 JSValue& v = vector[i]; 1190 1187 if (!v) 1191 1188 break; 1192 args.append(v .get());1189 args.append(v); 1193 1190 } 1194 1191 … … 1201 1198 ASSERT(m_storage->m_length >= maxSize); 1202 1199 UNUSED_PARAM(maxSize); 1203 WriteBarrier<Unknown>* vector = m_storage->m_vector;1200 JSValue* vector = m_storage->m_vector; 1204 1201 unsigned vectorEnd = min(maxSize, m_vectorLength); 1205 1202 unsigned i = 0; 1206 1203 for (; i < vectorEnd; ++i) { 1207 WriteBarrier<Unknown>& v = vector[i];1204 JSValue& v = vector[i]; 1208 1205 if (!v) 1209 1206 break; 1210 buffer[i] = v .get();1207 buffer[i] = v; 1211 1208 } 1212 1209 … … 1227 1224 1228 1225 for (; numDefined < usedVectorLength; ++numDefined) { 1229 JSValue v = storage->m_vector[numDefined] .get();1226 JSValue v = storage->m_vector[numDefined]; 1230 1227 if (!v || v.isUndefined()) 1231 1228 break; 1232 1229 } 1233 1234 1230 for (unsigned i = numDefined; i < usedVectorLength; ++i) { 1235 JSValue v = storage->m_vector[i] .get();1231 JSValue v = storage->m_vector[i]; 1236 1232 if (v) { 1237 1233 if (v.isUndefined()) 1238 1234 ++numUndefined; 1239 1235 else 1240 storage->m_vector[numDefined++] .setWithoutWriteBarrier(v);1236 storage->m_vector[numDefined++] = v; 1241 1237 } 1242 1238 } … … 1257 1253 SparseArrayValueMap::iterator end = map->end(); 1258 1254 for (SparseArrayValueMap::iterator it = map->begin(); it != end; ++it) 1259 storage->m_vector[numDefined++] .setWithoutWriteBarrier(it->second.get());1255 storage->m_vector[numDefined++] = it->second; 1260 1256 1261 1257 delete map; … … 1264 1260 1265 1261 for (unsigned i = numDefined; i < newUsedVectorLength; ++i) 1266 storage->m_vector[i] .setUndefined();1262 storage->m_vector[i] = jsUndefined(); 1267 1263 for (unsigned i = newUsedVectorLength; i < usedVectorLength; ++i) 1268 storage->m_vector[i] .clear();1264 storage->m_vector[i] = JSValue(); 1269 1265 1270 1266 storage->m_numValuesInVector = newUsedVectorLength; -
trunk/Source/JavaScriptCore/runtime/JSArray.h
r77098 r77113 28 28 namespace JSC { 29 29 30 typedef HashMap<unsigned, WriteBarrier<Unknown>> SparseArrayValueMap;30 typedef HashMap<unsigned, JSValue> SparseArrayValueMap; 31 31 32 32 // This struct holds the actual data values of an array. A JSArray object points to it's contained ArrayStorage … … 45 45 bool m_inCompactInitialization; 46 46 #endif 47 WriteBarrier<Unknown>m_vector[1];47 JSValue m_vector[1]; 48 48 }; 49 49 … … 68 68 explicit JSArray(NonNullPassRefPtr<Structure>); 69 69 JSArray(NonNullPassRefPtr<Structure>, unsigned initialLength, ArrayCreationMode); 70 JSArray( JSGlobalData&,NonNullPassRefPtr<Structure>, const ArgList& initialValues);70 JSArray(NonNullPassRefPtr<Structure>, const ArgList& initialValues); 71 71 virtual ~JSArray(); 72 72 … … 95 95 { 96 96 ASSERT(canGetIndex(i)); 97 return m_storage->m_vector[i] .get();97 return m_storage->m_vector[i]; 98 98 } 99 99 100 100 bool canSetIndex(unsigned i) { return i < m_vectorLength; } 101 void setIndex( JSGlobalData& globalData,unsigned i, JSValue v)101 void setIndex(unsigned i, JSValue v) 102 102 { 103 103 ASSERT(canSetIndex(i)); 104 104 105 WriteBarrier<Unknown>& x = m_storage->m_vector[i];105 JSValue& x = m_storage->m_vector[i]; 106 106 if (!x) { 107 107 ArrayStorage *storage = m_storage; … … 110 110 storage->m_length = i + 1; 111 111 } 112 x .set(globalData, this, v);113 } 114 115 void uncheckedSetIndex( JSGlobalData& globalData,unsigned i, JSValue v)112 x = v; 113 } 114 115 void uncheckedSetIndex(unsigned i, JSValue v) 116 116 { 117 117 ASSERT(canSetIndex(i)); … … 120 120 ASSERT(storage->m_inCompactInitialization); 121 121 #endif 122 storage->m_vector[i] .set(globalData, this, v);122 storage->m_vector[i] = v; 123 123 } 124 124 … … 195 195 SparseArrayValueMap::iterator end = map->end(); 196 196 for (SparseArrayValueMap::iterator it = map->begin(); it != end; ++it) 197 markStack.append( &it->second);197 markStack.append(it->second); 198 198 } 199 199 } -
trunk/Source/JavaScriptCore/runtime/JSByteArray.cpp
r77098 r77113 41 41 , m_classInfo(classInfo) 42 42 { 43 putDirect(exec->globalData() , exec->globalData().propertyNames->length, jsNumber(m_storage->length()), ReadOnly | DontDelete);43 putDirect(exec->globalData().propertyNames->length, jsNumber(m_storage->length()), ReadOnly | DontDelete); 44 44 } 45 45 -
trunk/Source/JavaScriptCore/runtime/JSCell.h
r77098 r77113 337 337 return isCell() ? asCell()->toThisObject(exec) : toThisObjectSlowCase(exec); 338 338 } 339 340 template <typename T> void MarkStack::append(DeprecatedPtr<T>* slot) 341 { 342 internalAppend(slot->get()); 343 } 344 345 template <typename T> void MarkStack::append(WriteBarrierBase<T>* slot) 346 { 347 internalAppend(slot->get()); 348 } 349 350 ALWAYS_INLINE void MarkStack::internalAppend(JSCell* cell) 339 340 ALWAYS_INLINE void MarkStack::append(JSCell* cell) 351 341 { 352 342 ASSERT(!m_isCheckingForDefaultMarkViolation); … … 358 348 } 359 349 360 ALWAYS_INLINE void MarkStack::deprecatedAppend(JSCell** value) 361 { 362 ASSERT(value); 363 internalAppend(*value); 364 } 365 366 ALWAYS_INLINE void MarkStack::deprecatedAppend(JSValue* value) 367 { 368 ASSERT(value); 369 internalAppend(*value); 370 } 371 372 ALWAYS_INLINE void MarkStack::deprecatedAppend(Register* value) 373 { 374 ASSERT(value); 375 internalAppend(value->jsValue()); 376 } 377 378 ALWAYS_INLINE void MarkStack::internalAppend(JSValue value) 350 ALWAYS_INLINE void MarkStack::append(JSValue value) 379 351 { 380 352 ASSERT(value); 381 353 if (value.isCell()) 382 internalAppend(value.asCell());354 append(value.asCell()); 383 355 } 384 356 -
trunk/Source/JavaScriptCore/runtime/JSFunction.cpp
r77098 r77113 72 72 , m_scopeChain(globalObject->globalScopeChain()) 73 73 { 74 putDirect(exec->globalData() , exec->globalData().propertyNames->name, jsString(exec, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum);75 putDirect(exec-> globalData(), exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum);74 putDirect(exec->globalData().propertyNames->name, jsString(exec, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum); 75 putDirect(exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum); 76 76 } 77 77 #endif … … 84 84 , m_scopeChain(globalObject->globalScopeChain()) 85 85 { 86 putDirect(exec->globalData() , exec->globalData().propertyNames->name, jsString(exec, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum);87 #if ENABLE(JIT) 88 putDirect(exec-> globalData(), exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum);86 putDirect(exec->globalData().propertyNames->name, jsString(exec, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum); 87 #if ENABLE(JIT) 88 putDirect(exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum); 89 89 #else 90 90 UNUSED_PARAM(length); … … 100 100 { 101 101 const Identifier& name = static_cast<FunctionExecutable*>(m_executable.get())->name(); 102 putDirect(exec->globalData() , exec->globalData().propertyNames->name, jsString(exec, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum);102 putDirect(exec->globalData().propertyNames->name, jsString(exec, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum); 103 103 } 104 104 … … 208 208 if (!location) { 209 209 JSObject* prototype = new (exec) JSObject(scope().globalObject()->emptyObjectStructure()); 210 prototype->putDirect(exec-> globalData(), exec->propertyNames().constructor, this, DontEnum);211 putDirect(exec-> globalData(), exec->propertyNames().prototype, prototype, DontDelete | DontEnum);210 prototype->putDirect(exec->propertyNames().constructor, this, DontEnum); 211 putDirect(exec->propertyNames().prototype, prototype, DontDelete | DontEnum); 212 212 location = getDirectLocation(propertyName); 213 213 } -
trunk/Source/JavaScriptCore/runtime/JSGlobalData.h
r77098 r77113 204 204 Heap heap; 205 205 206 DeprecatedPtr<Unknown>exception;206 JSValue exception; 207 207 #if ENABLE(JIT) 208 208 ReturnAddressPtr exceptionLocation; -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
r77098 r77113 81 81 static const int preferredScriptCheckTimeInterval = 1000; 82 82 83 template <typename T> static inline void markIfNeeded(MarkStack& markStack, WriteBarrier<T>*v)84 { 85 if ( *v)83 static inline void markIfNeeded(MarkStack& markStack, JSValue v) 84 { 85 if (v) 86 86 markStack.append(v); 87 87 } … … 89 89 static inline void markIfNeeded(MarkStack& markStack, const RefPtr<Structure>& s) 90 90 { 91 if (s && s->storedPrototype())92 mark Stack.append(s->storedPrototypeSlot());91 if (s) 92 markIfNeeded(markStack, s->storedPrototype()); 93 93 } 94 94 … … 203 203 // Prototypes 204 204 205 d()->functionPrototype .set(exec->globalData(), this, new (exec) FunctionPrototype(exec, this, FunctionPrototype::createStructure(jsNull()))); // The real prototype will be set once ObjectPrototype is created.206 d()->prototypeFunctionStructure = PrototypeFunction::createStructure(d()->functionPrototype .get());207 d()->internalFunctionStructure = InternalFunction::createStructure(d()->functionPrototype .get());205 d()->functionPrototype = new (exec) FunctionPrototype(exec, this, FunctionPrototype::createStructure(jsNull())); // The real prototype will be set once ObjectPrototype is created. 206 d()->prototypeFunctionStructure = PrototypeFunction::createStructure(d()->functionPrototype); 207 d()->internalFunctionStructure = InternalFunction::createStructure(d()->functionPrototype); 208 208 NativeFunctionWrapper* callFunction = 0; 209 209 NativeFunctionWrapper* applyFunction = 0; 210 210 d()->functionPrototype->addFunctionProperties(exec, this, d()->prototypeFunctionStructure.get(), &callFunction, &applyFunction); 211 d()->callFunction .set(exec->globalData(), this, callFunction);212 d()->applyFunction .set(exec->globalData(), this, applyFunction);213 d()->objectPrototype .set(exec->globalData(), this, new (exec) ObjectPrototype(exec, this, ObjectPrototype::createStructure(jsNull()), d()->prototypeFunctionStructure.get()));214 d()->functionPrototype->structure()->setPrototypeWithoutTransition(d()->objectPrototype .get());211 d()->callFunction = callFunction; 212 d()->applyFunction = applyFunction; 213 d()->objectPrototype = new (exec) ObjectPrototype(exec, this, ObjectPrototype::createStructure(jsNull()), d()->prototypeFunctionStructure.get()); 214 d()->functionPrototype->structure()->setPrototypeWithoutTransition(d()->objectPrototype); 215 215 216 216 d()->emptyObjectStructure = d()->objectPrototype->inheritorID(); 217 217 218 d()->functionStructure = JSFunction::createStructure(d()->functionPrototype .get());219 d()->callbackFunctionStructure = JSCallbackFunction::createStructure(d()->functionPrototype .get());220 d()->argumentsStructure = Arguments::createStructure(d()->objectPrototype .get());221 d()->callbackConstructorStructure = JSCallbackConstructor::createStructure(d()->objectPrototype .get());222 d()->callbackObjectStructure = JSCallbackObject<JSObjectWithGlobalObject>::createStructure(d()->objectPrototype .get());223 224 d()->arrayPrototype .set(exec->globalData(), this, new (exec) ArrayPrototype(this, ArrayPrototype::createStructure(d()->objectPrototype.get())));225 d()->arrayStructure = JSArray::createStructure(d()->arrayPrototype .get());226 d()->regExpMatchesArrayStructure = RegExpMatchesArray::createStructure(d()->arrayPrototype .get());227 228 d()->stringPrototype .set(exec->globalData(), this, new (exec) StringPrototype(exec, this, StringPrototype::createStructure(d()->objectPrototype.get())));229 d()->stringObjectStructure = StringObject::createStructure(d()->stringPrototype .get());230 231 d()->booleanPrototype .set(exec->globalData(), this, new (exec) BooleanPrototype(exec, this, BooleanPrototype::createStructure(d()->objectPrototype.get()), d()->prototypeFunctionStructure.get()));232 d()->booleanObjectStructure = BooleanObject::createStructure(d()->booleanPrototype .get());233 234 d()->numberPrototype .set(exec->globalData(), this, new (exec) NumberPrototype(exec, this, NumberPrototype::createStructure(d()->objectPrototype.get()), d()->prototypeFunctionStructure.get()));235 d()->numberObjectStructure = NumberObject::createStructure(d()->numberPrototype .get());236 237 d()->datePrototype .set(exec->globalData(), this, new (exec) DatePrototype(exec, this, DatePrototype::createStructure(d()->objectPrototype.get())));238 d()->dateStructure = DateInstance::createStructure(d()->datePrototype .get());239 240 d()->regExpPrototype .set(exec->globalData(), this, new (exec) RegExpPrototype(exec, this, RegExpPrototype::createStructure(d()->objectPrototype.get()), d()->prototypeFunctionStructure.get()));241 d()->regExpStructure = RegExpObject::createStructure(d()->regExpPrototype .get());242 243 d()->methodCallDummy .set(exec->globalData(), this, constructEmptyObject(exec));244 245 ErrorPrototype* errorPrototype = new (exec) ErrorPrototype(exec, this, ErrorPrototype::createStructure(d()->objectPrototype .get()), d()->prototypeFunctionStructure.get());218 d()->functionStructure = JSFunction::createStructure(d()->functionPrototype); 219 d()->callbackFunctionStructure = JSCallbackFunction::createStructure(d()->functionPrototype); 220 d()->argumentsStructure = Arguments::createStructure(d()->objectPrototype); 221 d()->callbackConstructorStructure = JSCallbackConstructor::createStructure(d()->objectPrototype); 222 d()->callbackObjectStructure = JSCallbackObject<JSObjectWithGlobalObject>::createStructure(d()->objectPrototype); 223 224 d()->arrayPrototype = new (exec) ArrayPrototype(this, ArrayPrototype::createStructure(d()->objectPrototype)); 225 d()->arrayStructure = JSArray::createStructure(d()->arrayPrototype); 226 d()->regExpMatchesArrayStructure = RegExpMatchesArray::createStructure(d()->arrayPrototype); 227 228 d()->stringPrototype = new (exec) StringPrototype(exec, this, StringPrototype::createStructure(d()->objectPrototype)); 229 d()->stringObjectStructure = StringObject::createStructure(d()->stringPrototype); 230 231 d()->booleanPrototype = new (exec) BooleanPrototype(exec, this, BooleanPrototype::createStructure(d()->objectPrototype), d()->prototypeFunctionStructure.get()); 232 d()->booleanObjectStructure = BooleanObject::createStructure(d()->booleanPrototype); 233 234 d()->numberPrototype = new (exec) NumberPrototype(exec, this, NumberPrototype::createStructure(d()->objectPrototype), d()->prototypeFunctionStructure.get()); 235 d()->numberObjectStructure = NumberObject::createStructure(d()->numberPrototype); 236 237 d()->datePrototype = new (exec) DatePrototype(exec, this, DatePrototype::createStructure(d()->objectPrototype)); 238 d()->dateStructure = DateInstance::createStructure(d()->datePrototype); 239 240 d()->regExpPrototype = new (exec) RegExpPrototype(exec, this, RegExpPrototype::createStructure(d()->objectPrototype), d()->prototypeFunctionStructure.get()); 241 d()->regExpStructure = RegExpObject::createStructure(d()->regExpPrototype); 242 243 d()->methodCallDummy = constructEmptyObject(exec); 244 245 ErrorPrototype* errorPrototype = new (exec) ErrorPrototype(exec, this, ErrorPrototype::createStructure(d()->objectPrototype), d()->prototypeFunctionStructure.get()); 246 246 d()->errorStructure = ErrorInstance::createStructure(errorPrototype); 247 247 248 248 // Constructors 249 249 250 JSCell* objectConstructor = new (exec) ObjectConstructor(exec, this, ObjectConstructor::createStructure(d()->functionPrototype .get()), d()->objectPrototype.get(), d()->prototypeFunctionStructure.get());251 JSCell* functionConstructor = new (exec) FunctionConstructor(exec, this, FunctionConstructor::createStructure(d()->functionPrototype .get()), d()->functionPrototype.get());252 JSCell* arrayConstructor = new (exec) ArrayConstructor(exec, this, ArrayConstructor::createStructure(d()->functionPrototype .get()), d()->arrayPrototype.get(), d()->prototypeFunctionStructure.get());253 JSCell* stringConstructor = new (exec) StringConstructor(exec, this, StringConstructor::createStructure(d()->functionPrototype .get()), d()->prototypeFunctionStructure.get(), d()->stringPrototype.get());254 JSCell* booleanConstructor = new (exec) BooleanConstructor(exec, this, BooleanConstructor::createStructure(d()->functionPrototype .get()), d()->booleanPrototype.get());255 JSCell* numberConstructor = new (exec) NumberConstructor(exec, this, NumberConstructor::createStructure(d()->functionPrototype .get()), d()->numberPrototype.get());256 JSCell* dateConstructor = new (exec) DateConstructor(exec, this, DateConstructor::createStructure(d()->functionPrototype .get()), d()->prototypeFunctionStructure.get(), d()->datePrototype.get());257 258 d()->regExpConstructor .set(exec->globalData(), this, new (exec) RegExpConstructor(exec, this, RegExpConstructor::createStructure(d()->functionPrototype.get()), d()->regExpPrototype.get()));259 260 d()->errorConstructor .set(exec->globalData(), this, new (exec) ErrorConstructor(exec, this, ErrorConstructor::createStructure(d()->functionPrototype.get()), errorPrototype));250 JSCell* objectConstructor = new (exec) ObjectConstructor(exec, this, ObjectConstructor::createStructure(d()->functionPrototype), d()->objectPrototype, d()->prototypeFunctionStructure.get()); 251 JSCell* functionConstructor = new (exec) FunctionConstructor(exec, this, FunctionConstructor::createStructure(d()->functionPrototype), d()->functionPrototype); 252 JSCell* arrayConstructor = new (exec) ArrayConstructor(exec, this, ArrayConstructor::createStructure(d()->functionPrototype), d()->arrayPrototype, d()->prototypeFunctionStructure.get()); 253 JSCell* stringConstructor = new (exec) StringConstructor(exec, this, StringConstructor::createStructure(d()->functionPrototype), d()->prototypeFunctionStructure.get(), d()->stringPrototype); 254 JSCell* booleanConstructor = new (exec) BooleanConstructor(exec, this, BooleanConstructor::createStructure(d()->functionPrototype), d()->booleanPrototype); 255 JSCell* numberConstructor = new (exec) NumberConstructor(exec, this, NumberConstructor::createStructure(d()->functionPrototype), d()->numberPrototype); 256 JSCell* dateConstructor = new (exec) DateConstructor(exec, this, DateConstructor::createStructure(d()->functionPrototype), d()->prototypeFunctionStructure.get(), d()->datePrototype); 257 258 d()->regExpConstructor = new (exec) RegExpConstructor(exec, this, RegExpConstructor::createStructure(d()->functionPrototype), d()->regExpPrototype); 259 260 d()->errorConstructor = new (exec) ErrorConstructor(exec, this, ErrorConstructor::createStructure(d()->functionPrototype), errorPrototype); 261 261 262 262 RefPtr<Structure> nativeErrorPrototypeStructure = NativeErrorPrototype::createStructure(errorPrototype); 263 RefPtr<Structure> nativeErrorStructure = NativeErrorConstructor::createStructure(d()->functionPrototype .get());264 d()->evalErrorConstructor .set(exec->globalData(), this, new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "EvalError"));265 d()->rangeErrorConstructor .set(exec->globalData(), this, new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "RangeError"));266 d()->referenceErrorConstructor .set(exec->globalData(), this, new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "ReferenceError"));267 d()->syntaxErrorConstructor .set(exec->globalData(), this, new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "SyntaxError"));268 d()->typeErrorConstructor .set(exec->globalData(), this, new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "TypeError"));269 d()->URIErrorConstructor .set(exec->globalData(), this, new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "URIError"));270 271 d()->objectPrototype->putDirectFunctionWithoutTransition(exec-> globalData(), exec->propertyNames().constructor, objectConstructor, DontEnum);272 d()->functionPrototype->putDirectFunctionWithoutTransition(exec-> globalData(), exec->propertyNames().constructor, functionConstructor, DontEnum);273 d()->arrayPrototype->putDirectFunctionWithoutTransition(exec-> globalData(), exec->propertyNames().constructor, arrayConstructor, DontEnum);274 d()->booleanPrototype->putDirectFunctionWithoutTransition(exec-> globalData(), exec->propertyNames().constructor, booleanConstructor, DontEnum);275 d()->stringPrototype->putDirectFunctionWithoutTransition(exec-> globalData(), exec->propertyNames().constructor, stringConstructor, DontEnum);276 d()->numberPrototype->putDirectFunctionWithoutTransition(exec-> globalData(), exec->propertyNames().constructor, numberConstructor, DontEnum);277 d()->datePrototype->putDirectFunctionWithoutTransition(exec-> globalData(), exec->propertyNames().constructor, dateConstructor, DontEnum);278 d()->regExpPrototype->putDirectFunctionWithoutTransition(exec-> globalData(), exec->propertyNames().constructor, d()->regExpConstructor.get(), DontEnum);279 errorPrototype->putDirectFunctionWithoutTransition(exec-> globalData(), exec->propertyNames().constructor, d()->errorConstructor.get(), DontEnum);263 RefPtr<Structure> nativeErrorStructure = NativeErrorConstructor::createStructure(d()->functionPrototype); 264 d()->evalErrorConstructor = new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "EvalError"); 265 d()->rangeErrorConstructor = new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "RangeError"); 266 d()->referenceErrorConstructor = new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "ReferenceError"); 267 d()->syntaxErrorConstructor = new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "SyntaxError"); 268 d()->typeErrorConstructor = new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "TypeError"); 269 d()->URIErrorConstructor = new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "URIError"); 270 271 d()->objectPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, objectConstructor, DontEnum); 272 d()->functionPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, functionConstructor, DontEnum); 273 d()->arrayPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, arrayConstructor, DontEnum); 274 d()->booleanPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, booleanConstructor, DontEnum); 275 d()->stringPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, stringConstructor, DontEnum); 276 d()->numberPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, numberConstructor, DontEnum); 277 d()->datePrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, dateConstructor, DontEnum); 278 d()->regExpPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, d()->regExpConstructor, DontEnum); 279 errorPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, d()->errorConstructor, DontEnum); 280 280 281 281 // Set global constructors … … 283 283 // FIXME: These properties could be handled by a static hash table. 284 284 285 putDirectFunctionWithoutTransition( exec->globalData(),Identifier(exec, "Object"), objectConstructor, DontEnum);286 putDirectFunctionWithoutTransition( exec->globalData(),Identifier(exec, "Function"), functionConstructor, DontEnum);287 putDirectFunctionWithoutTransition( exec->globalData(),Identifier(exec, "Array"), arrayConstructor, DontEnum);288 putDirectFunctionWithoutTransition( exec->globalData(),Identifier(exec, "Boolean"), booleanConstructor, DontEnum);289 putDirectFunctionWithoutTransition( exec->globalData(),Identifier(exec, "String"), stringConstructor, DontEnum);290 putDirectFunctionWithoutTransition( exec->globalData(),Identifier(exec, "Number"), numberConstructor, DontEnum);291 putDirectFunctionWithoutTransition( exec->globalData(),Identifier(exec, "Date"), dateConstructor, DontEnum);292 putDirectFunctionWithoutTransition( exec->globalData(), Identifier(exec, "RegExp"), d()->regExpConstructor.get(), DontEnum);293 putDirectFunctionWithoutTransition( exec->globalData(), Identifier(exec, "Error"), d()->errorConstructor.get(), DontEnum);294 putDirectFunctionWithoutTransition( exec->globalData(), Identifier(exec, "EvalError"), d()->evalErrorConstructor.get(), DontEnum);295 putDirectFunctionWithoutTransition( exec->globalData(), Identifier(exec, "RangeError"), d()->rangeErrorConstructor.get(), DontEnum);296 putDirectFunctionWithoutTransition( exec->globalData(), Identifier(exec, "ReferenceError"), d()->referenceErrorConstructor.get(), DontEnum);297 putDirectFunctionWithoutTransition( exec->globalData(), Identifier(exec, "SyntaxError"), d()->syntaxErrorConstructor.get(), DontEnum);298 putDirectFunctionWithoutTransition( exec->globalData(), Identifier(exec, "TypeError"), d()->typeErrorConstructor.get(), DontEnum);299 putDirectFunctionWithoutTransition( exec->globalData(), Identifier(exec, "URIError"), d()->URIErrorConstructor.get(), DontEnum);285 putDirectFunctionWithoutTransition(Identifier(exec, "Object"), objectConstructor, DontEnum); 286 putDirectFunctionWithoutTransition(Identifier(exec, "Function"), functionConstructor, DontEnum); 287 putDirectFunctionWithoutTransition(Identifier(exec, "Array"), arrayConstructor, DontEnum); 288 putDirectFunctionWithoutTransition(Identifier(exec, "Boolean"), booleanConstructor, DontEnum); 289 putDirectFunctionWithoutTransition(Identifier(exec, "String"), stringConstructor, DontEnum); 290 putDirectFunctionWithoutTransition(Identifier(exec, "Number"), numberConstructor, DontEnum); 291 putDirectFunctionWithoutTransition(Identifier(exec, "Date"), dateConstructor, DontEnum); 292 putDirectFunctionWithoutTransition(Identifier(exec, "RegExp"), d()->regExpConstructor, DontEnum); 293 putDirectFunctionWithoutTransition(Identifier(exec, "Error"), d()->errorConstructor, DontEnum); 294 putDirectFunctionWithoutTransition(Identifier(exec, "EvalError"), d()->evalErrorConstructor, DontEnum); 295 putDirectFunctionWithoutTransition(Identifier(exec, "RangeError"), d()->rangeErrorConstructor, DontEnum); 296 putDirectFunctionWithoutTransition(Identifier(exec, "ReferenceError"), d()->referenceErrorConstructor, DontEnum); 297 putDirectFunctionWithoutTransition(Identifier(exec, "SyntaxError"), d()->syntaxErrorConstructor, DontEnum); 298 putDirectFunctionWithoutTransition(Identifier(exec, "TypeError"), d()->typeErrorConstructor, DontEnum); 299 putDirectFunctionWithoutTransition(Identifier(exec, "URIError"), d()->URIErrorConstructor, DontEnum); 300 300 301 301 // Set global values. 302 302 GlobalPropertyInfo staticGlobals[] = { 303 GlobalPropertyInfo(Identifier(exec, "Math"), new (exec) MathObject(exec, this, MathObject::createStructure(d()->objectPrototype .get())), DontEnum | DontDelete),303 GlobalPropertyInfo(Identifier(exec, "Math"), new (exec) MathObject(exec, this, MathObject::createStructure(d()->objectPrototype)), DontEnum | DontDelete), 304 304 GlobalPropertyInfo(Identifier(exec, "NaN"), jsNaN(), DontEnum | DontDelete | ReadOnly), 305 305 GlobalPropertyInfo(Identifier(exec, "Infinity"), jsNumber(Inf), DontEnum | DontDelete | ReadOnly), 306 306 GlobalPropertyInfo(Identifier(exec, "undefined"), jsUndefined(), DontEnum | DontDelete | ReadOnly), 307 GlobalPropertyInfo(Identifier(exec, "JSON"), new (exec) JSONObject(this, JSONObject::createStructure(d()->objectPrototype .get())), DontEnum | DontDelete)307 GlobalPropertyInfo(Identifier(exec, "JSON"), new (exec) JSONObject(this, JSONObject::createStructure(d()->objectPrototype)), DontEnum | DontDelete) 308 308 }; 309 309 … … 312 312 // Set global functions. 313 313 314 d()->evalFunction .set(exec->globalData(), this, new (exec) GlobalEvalFunction(exec, this, GlobalEvalFunction::createStructure(d()->functionPrototype.get()), 1, exec->propertyNames().eval, globalFuncEval, this));315 putDirectFunctionWithoutTransition(exec, d()->evalFunction .get(), DontEnum);314 d()->evalFunction = new (exec) GlobalEvalFunction(exec, this, GlobalEvalFunction::createStructure(d()->functionPrototype), 1, exec->propertyNames().eval, globalFuncEval, this); 315 putDirectFunctionWithoutTransition(exec, d()->evalFunction, DontEnum); 316 316 putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, this, d()->prototypeFunctionStructure.get(), 2, Identifier(exec, "parseInt"), globalFuncParseInt), DontEnum); 317 317 putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, this, d()->prototypeFunctionStructure.get(), 1, Identifier(exec, "parseFloat"), globalFuncParseFloat), DontEnum); … … 337 337 338 338 JSObject* oldLastInPrototypeChain = lastInPrototypeChain(this); 339 JSObject* objectPrototype = d()->objectPrototype .get();339 JSObject* objectPrototype = d()->objectPrototype; 340 340 if (oldLastInPrototypeChain != objectPrototype) 341 341 oldLastInPrototypeChain->setPrototype(objectPrototype); … … 350 350 (*it)->markAggregate(markStack); 351 351 352 markIfNeeded(markStack, &d()->regExpConstructor);353 markIfNeeded(markStack, &d()->errorConstructor);354 markIfNeeded(markStack, &d()->evalErrorConstructor);355 markIfNeeded(markStack, &d()->rangeErrorConstructor);356 markIfNeeded(markStack, &d()->referenceErrorConstructor);357 markIfNeeded(markStack, &d()->syntaxErrorConstructor);358 markIfNeeded(markStack, &d()->typeErrorConstructor);359 markIfNeeded(markStack, &d()->URIErrorConstructor);360 361 markIfNeeded(markStack, &d()->evalFunction);362 markIfNeeded(markStack, &d()->callFunction);363 markIfNeeded(markStack, &d()->applyFunction);364 365 markIfNeeded(markStack, &d()->objectPrototype);366 markIfNeeded(markStack, &d()->functionPrototype);367 markIfNeeded(markStack, &d()->arrayPrototype);368 markIfNeeded(markStack, &d()->booleanPrototype);369 markIfNeeded(markStack, &d()->stringPrototype);370 markIfNeeded(markStack, &d()->numberPrototype);371 markIfNeeded(markStack, &d()->datePrototype);372 markIfNeeded(markStack, &d()->regExpPrototype);373 374 markIfNeeded(markStack, &d()->methodCallDummy);352 markIfNeeded(markStack, d()->regExpConstructor); 353 markIfNeeded(markStack, d()->errorConstructor); 354 markIfNeeded(markStack, d()->evalErrorConstructor); 355 markIfNeeded(markStack, d()->rangeErrorConstructor); 356 markIfNeeded(markStack, d()->referenceErrorConstructor); 357 markIfNeeded(markStack, d()->syntaxErrorConstructor); 358 markIfNeeded(markStack, d()->typeErrorConstructor); 359 markIfNeeded(markStack, d()->URIErrorConstructor); 360 361 markIfNeeded(markStack, d()->evalFunction); 362 markIfNeeded(markStack, d()->callFunction); 363 markIfNeeded(markStack, d()->applyFunction); 364 365 markIfNeeded(markStack, d()->objectPrototype); 366 markIfNeeded(markStack, d()->functionPrototype); 367 markIfNeeded(markStack, d()->arrayPrototype); 368 markIfNeeded(markStack, d()->booleanPrototype); 369 markIfNeeded(markStack, d()->stringPrototype); 370 markIfNeeded(markStack, d()->numberPrototype); 371 markIfNeeded(markStack, d()->datePrototype); 372 markIfNeeded(markStack, d()->regExpPrototype); 373 374 markIfNeeded(markStack, d()->methodCallDummy); 375 375 376 376 markIfNeeded(markStack, d()->errorStructure); … … 397 397 // Outside the execution of global code, when our variables are torn off, 398 398 // we can mark the torn-off array. 399 markStack. deprecatedAppendValues(d()->registerArray.get(), d()->registerArraySize);399 markStack.appendValues(d()->registerArray.get(), d()->registerArraySize); 400 400 } else if (d()->registers) { 401 401 // During execution of global code, when our variables are in the register file, 402 402 // the symbol table tells us how many variables there are, and registers 403 403 // points to where they end, and the registers used for execution begin. 404 markStack. deprecatedAppendValues(d()->registers - symbolTable().size(), symbolTable().size());404 markStack.appendValues(d()->registers - symbolTable().size(), symbolTable().size()); 405 405 } 406 406 } -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h
r77098 r77113 74 74 , registerArraySize(0) 75 75 , globalScopeChain(NoScopeChain()) 76 , regExpConstructor(0) 77 , errorConstructor(0) 78 , evalErrorConstructor(0) 79 , rangeErrorConstructor(0) 80 , referenceErrorConstructor(0) 81 , syntaxErrorConstructor(0) 82 , typeErrorConstructor(0) 83 , URIErrorConstructor(0) 84 , evalFunction(0) 85 , callFunction(0) 86 , applyFunction(0) 87 , objectPrototype(0) 88 , functionPrototype(0) 89 , arrayPrototype(0) 90 , booleanPrototype(0) 91 , stringPrototype(0) 92 , numberPrototype(0) 93 , datePrototype(0) 94 , regExpPrototype(0) 95 , methodCallDummy(0) 76 96 , weakRandom(static_cast<unsigned>(randomNumber() * (std::numeric_limits<unsigned>::max() + 1.0))) 77 97 { … … 90 110 Register globalCallFrame[RegisterFile::CallFrameHeaderSize]; 91 111 92 WriteBarrier<RegExpConstructor>regExpConstructor;93 WriteBarrier<ErrorConstructor>errorConstructor;94 WriteBarrier<NativeErrorConstructor>evalErrorConstructor;95 WriteBarrier<NativeErrorConstructor>rangeErrorConstructor;96 WriteBarrier<NativeErrorConstructor>referenceErrorConstructor;97 WriteBarrier<NativeErrorConstructor>syntaxErrorConstructor;98 WriteBarrier<NativeErrorConstructor>typeErrorConstructor;99 WriteBarrier<NativeErrorConstructor>URIErrorConstructor;100 101 WriteBarrier<GlobalEvalFunction>evalFunction;102 WriteBarrier<NativeFunctionWrapper>callFunction;103 WriteBarrier<NativeFunctionWrapper>applyFunction;104 105 WriteBarrier<ObjectPrototype>objectPrototype;106 WriteBarrier<FunctionPrototype>functionPrototype;107 WriteBarrier<ArrayPrototype>arrayPrototype;108 WriteBarrier<BooleanPrototype>booleanPrototype;109 WriteBarrier<StringPrototype>stringPrototype;110 WriteBarrier<NumberPrototype>numberPrototype;111 WriteBarrier<DatePrototype>datePrototype;112 WriteBarrier<RegExpPrototype>regExpPrototype;113 114 WriteBarrier<JSObject>methodCallDummy;112 RegExpConstructor* regExpConstructor; 113 ErrorConstructor* errorConstructor; 114 NativeErrorConstructor* evalErrorConstructor; 115 NativeErrorConstructor* rangeErrorConstructor; 116 NativeErrorConstructor* referenceErrorConstructor; 117 NativeErrorConstructor* syntaxErrorConstructor; 118 NativeErrorConstructor* typeErrorConstructor; 119 NativeErrorConstructor* URIErrorConstructor; 120 121 GlobalEvalFunction* evalFunction; 122 NativeFunctionWrapper* callFunction; 123 NativeFunctionWrapper* applyFunction; 124 125 ObjectPrototype* objectPrototype; 126 FunctionPrototype* functionPrototype; 127 ArrayPrototype* arrayPrototype; 128 BooleanPrototype* booleanPrototype; 129 StringPrototype* stringPrototype; 130 NumberPrototype* numberPrototype; 131 DatePrototype* datePrototype; 132 RegExpPrototype* regExpPrototype; 133 134 JSObject* methodCallDummy; 115 135 116 136 RefPtr<Structure> argumentsStructure; … … 190 210 // replaces the global object's associated property. 191 211 192 RegExpConstructor* regExpConstructor() const { return d()->regExpConstructor .get(); }193 194 ErrorConstructor* errorConstructor() const { return d()->errorConstructor .get(); }195 NativeErrorConstructor* evalErrorConstructor() const { return d()->evalErrorConstructor .get(); }196 NativeErrorConstructor* rangeErrorConstructor() const { return d()->rangeErrorConstructor .get(); }197 NativeErrorConstructor* referenceErrorConstructor() const { return d()->referenceErrorConstructor .get(); }198 NativeErrorConstructor* syntaxErrorConstructor() const { return d()->syntaxErrorConstructor .get(); }199 NativeErrorConstructor* typeErrorConstructor() const { return d()->typeErrorConstructor .get(); }200 NativeErrorConstructor* URIErrorConstructor() const { return d()->URIErrorConstructor .get(); }201 202 GlobalEvalFunction* evalFunction() const { return d()->evalFunction .get(); }203 204 ObjectPrototype* objectPrototype() const { return d()->objectPrototype .get(); }205 FunctionPrototype* functionPrototype() const { return d()->functionPrototype .get(); }206 ArrayPrototype* arrayPrototype() const { return d()->arrayPrototype .get(); }207 BooleanPrototype* booleanPrototype() const { return d()->booleanPrototype .get(); }208 StringPrototype* stringPrototype() const { return d()->stringPrototype .get(); }209 NumberPrototype* numberPrototype() const { return d()->numberPrototype .get(); }210 DatePrototype* datePrototype() const { return d()->datePrototype .get(); }211 RegExpPrototype* regExpPrototype() const { return d()->regExpPrototype .get(); }212 213 JSObject* methodCallDummy() const { return d()->methodCallDummy .get(); }212 RegExpConstructor* regExpConstructor() const { return d()->regExpConstructor; } 213 214 ErrorConstructor* errorConstructor() const { return d()->errorConstructor; } 215 NativeErrorConstructor* evalErrorConstructor() const { return d()->evalErrorConstructor; } 216 NativeErrorConstructor* rangeErrorConstructor() const { return d()->rangeErrorConstructor; } 217 NativeErrorConstructor* referenceErrorConstructor() const { return d()->referenceErrorConstructor; } 218 NativeErrorConstructor* syntaxErrorConstructor() const { return d()->syntaxErrorConstructor; } 219 NativeErrorConstructor* typeErrorConstructor() const { return d()->typeErrorConstructor; } 220 NativeErrorConstructor* URIErrorConstructor() const { return d()->URIErrorConstructor; } 221 222 GlobalEvalFunction* evalFunction() const { return d()->evalFunction; } 223 224 ObjectPrototype* objectPrototype() const { return d()->objectPrototype; } 225 FunctionPrototype* functionPrototype() const { return d()->functionPrototype; } 226 ArrayPrototype* arrayPrototype() const { return d()->arrayPrototype; } 227 BooleanPrototype* booleanPrototype() const { return d()->booleanPrototype; } 228 StringPrototype* stringPrototype() const { return d()->stringPrototype; } 229 NumberPrototype* numberPrototype() const { return d()->numberPrototype; } 230 DatePrototype* datePrototype() const { return d()->datePrototype; } 231 RegExpPrototype* regExpPrototype() const { return d()->regExpPrototype; } 232 233 JSObject* methodCallDummy() const { return d()->methodCallDummy; } 214 234 215 235 Structure* argumentsStructure() const { return d()->argumentsStructure.get(); } … … 366 386 { 367 387 if (typeInfo().type() == ObjectType) 368 return m_prototype .get();388 return m_prototype; 369 389 370 390 ASSERT(typeInfo().type() == StringType); … … 438 458 MarkedArgumentBuffer values; 439 459 values.append(singleItemValue); 440 return new (exec) JSArray(exec-> globalData(), exec->lexicalGlobalObject()->arrayStructure(), values);460 return new (exec) JSArray(exec->lexicalGlobalObject()->arrayStructure(), values); 441 461 } 442 462 443 463 inline JSArray* constructArray(ExecState* exec, const ArgList& values) 444 464 { 445 return new (exec) JSArray(exec-> globalData(), exec->lexicalGlobalObject()->arrayStructure(), values);465 return new (exec) JSArray(exec->lexicalGlobalObject()->arrayStructure(), values); 446 466 } 447 467 -
trunk/Source/JavaScriptCore/runtime/JSONObject.cpp
r77098 r77113 85 85 Holder(JSObject*); 86 86 87 JSObject* object() const { return m_object.get(); } 88 DeprecatedPtr<JSObject>* objectSlot() { return &m_object; } 87 JSObject* object() const { return m_object; } 89 88 90 89 bool appendNextProperty(Stringifier&, UStringBuilder&); 91 90 92 91 private: 93 DeprecatedPtr<JSObject>m_object;92 JSObject* const m_object; 94 93 const bool m_isArray; 95 94 bool m_isJSArray; … … 260 259 size_t size = m_holderStack.size(); 261 260 for (size_t i = 0; i < size; ++i) 262 markStack.append(m_holderStack[i].object Slot());261 markStack.append(m_holderStack[i].object()); 263 262 } 264 263 } … … 271 270 272 271 PropertyNameForFunctionCall emptyPropertyName(m_exec->globalData().propertyNames->emptyIdentifier); 273 object->putDirect(m_exec->globalData() , m_exec->globalData().propertyNames->emptyIdentifier, value);272 object->putDirect(m_exec->globalData().propertyNames->emptyIdentifier, value); 274 273 275 274 UStringBuilder result; … … 501 500 if (!m_index) { 502 501 if (m_isArray) { 503 m_isJSArray = isJSArray(&exec->globalData(), m_object .get());502 m_isJSArray = isJSArray(&exec->globalData(), m_object); 504 503 m_size = m_object->get(exec, exec->globalData().propertyNames->length).toUInt32(exec); 505 504 builder.append('['); … … 534 533 // Get the value. 535 534 JSValue value; 536 if (m_isJSArray && asArray(m_object .get())->canGetIndex(index))537 value = asArray(m_object .get())->getIndex(index);535 if (m_isJSArray && asArray(m_object)->canGetIndex(index)) 536 value = asArray(m_object)->getIndex(index); 538 537 else { 539 PropertySlot slot(m_object .get());538 PropertySlot slot(m_object); 540 539 if (!m_object->getOwnPropertySlot(exec, index, slot)) 541 540 slot.setUndefined(); … … 551 550 552 551 // Append the stringified value. 553 stringifyResult = stringifier.appendStringifiedValue(builder, value, m_object .get(), index);552 stringifyResult = stringifier.appendStringifiedValue(builder, value, m_object, index); 554 553 } else { 555 554 // Get the value. 556 PropertySlot slot(m_object .get());555 PropertySlot slot(m_object); 557 556 Identifier& propertyName = m_propertyNames->propertyNameVector()[index]; 558 557 if (!m_object->getOwnPropertySlot(exec, propertyName, slot)) … … 576 575 577 576 // Append the stringified value. 578 stringifyResult = stringifier.appendStringifiedValue(builder, value, m_object .get(), propertyName);577 stringifyResult = stringifier.appendStringifiedValue(builder, value, m_object, propertyName); 579 578 } 580 579 … … 643 642 JSValue args[] = { property, unfiltered }; 644 643 ArgList argList(args, 2); 645 return call(m_exec, m_function .get(), m_callType, m_callData, thisObj, argList);644 return call(m_exec, m_function, m_callType, m_callData, thisObj, argList); 646 645 } 647 646 … … 649 648 650 649 ExecState* m_exec; 651 DeprecatedPtr<JSObject>m_function;650 JSObject* m_function; 652 651 CallType m_callType; 653 652 CallData m_callData; … … 728 727 else { 729 728 if (isJSArray(&m_exec->globalData(), array) && array->canSetIndex(indexStack.last())) 730 array->setIndex( m_exec->globalData(),indexStack.last(), filteredValue);729 array->setIndex(indexStack.last(), filteredValue); 731 730 else 732 731 array->put(m_exec, indexStack.last(), filteredValue); -
trunk/Source/JavaScriptCore/runtime/JSObject.cpp
r77098 r77113 313 313 if (object && object.isGetterSetter()) { 314 314 ASSERT(m_structure->hasGetterSetterProperties()); 315 asGetterSetter(object)->setGetter( exec->globalData(),getterFunction);315 asGetterSetter(object)->setGetter(getterFunction); 316 316 return; 317 317 } … … 332 332 333 333 m_structure->setHasGetterSetterProperties(true); 334 getterSetter->setGetter( exec->globalData(),getterFunction);334 getterSetter->setGetter(getterFunction); 335 335 } 336 336 … … 340 340 if (object && object.isGetterSetter()) { 341 341 ASSERT(m_structure->hasGetterSetterProperties()); 342 asGetterSetter(object)->setSetter( exec->globalData(),setterFunction);342 asGetterSetter(object)->setSetter(setterFunction); 343 343 return; 344 344 } … … 359 359 360 360 m_structure->setHasGetterSetterProperties(true); 361 getterSetter->setSetter( exec->globalData(),setterFunction);361 getterSetter->setSetter(setterFunction); 362 362 } 363 363 … … 513 513 offset = m_structure->removePropertyWithoutTransition(propertyName); 514 514 if (offset != WTF::notFound) 515 put UndefinedAtDirectOffset(offset);515 putDirectOffset(offset, jsUndefined()); 516 516 return; 517 517 } … … 520 520 setStructure(structure.release()); 521 521 if (offset != WTF::notFound) 522 put UndefinedAtDirectOffset(offset);522 putDirectOffset(offset, jsUndefined()); 523 523 } 524 524 525 525 void JSObject::putDirectFunction(ExecState* exec, InternalFunction* function, unsigned attr) 526 526 { 527 putDirectFunction( exec->globalData(),Identifier(exec, function->name(exec)), function, attr);527 putDirectFunction(Identifier(exec, function->name(exec)), function, attr); 528 528 } 529 529 530 530 void JSObject::putDirectFunction(ExecState* exec, JSFunction* function, unsigned attr) 531 531 { 532 putDirectFunction( exec->globalData(),Identifier(exec, function->name(exec)), function, attr);532 putDirectFunction(Identifier(exec, function->name(exec)), function, attr); 533 533 } 534 534 535 535 void JSObject::putDirectFunctionWithoutTransition(ExecState* exec, InternalFunction* function, unsigned attr) 536 536 { 537 putDirectFunctionWithoutTransition( exec->globalData(),Identifier(exec, function->name(exec)), function, attr);537 putDirectFunctionWithoutTransition(Identifier(exec, function->name(exec)), function, attr); 538 538 } 539 539 540 540 void JSObject::putDirectFunctionWithoutTransition(ExecState* exec, JSFunction* function, unsigned attr) 541 541 { 542 putDirectFunctionWithoutTransition( exec->globalData(),Identifier(exec, function->name(exec)), function, attr);542 putDirectFunctionWithoutTransition(Identifier(exec, function->name(exec)), function, attr); 543 543 } 544 544 … … 596 596 if (oldDescriptor.getter()) { 597 597 attributes |= Getter; 598 accessor->setGetter( exec->globalData(),asObject(oldDescriptor.getter()));598 accessor->setGetter(asObject(oldDescriptor.getter())); 599 599 } 600 600 if (oldDescriptor.setter()) { 601 601 attributes |= Setter; 602 accessor->setSetter( exec->globalData(),asObject(oldDescriptor.setter()));602 accessor->setSetter(asObject(oldDescriptor.setter())); 603 603 } 604 604 target->putWithAttributes(exec, propertyName, accessor, attributes); … … 721 721 if (current.attributesEqual(descriptor)) { 722 722 if (descriptor.setter()) 723 getterSetter->setSetter( exec->globalData(),asObject(descriptor.setter()));723 getterSetter->setSetter(asObject(descriptor.setter())); 724 724 if (descriptor.getter()) 725 getterSetter->setGetter( exec->globalData(),asObject(descriptor.getter()));725 getterSetter->setGetter(asObject(descriptor.getter())); 726 726 return true; 727 727 } … … 732 732 if (descriptor.getter()) 733 733 attrs |= Getter; 734 putDirect( exec->globalData(),propertyName, getterSetter, attrs);734 putDirect(propertyName, getterSetter, attrs); 735 735 return true; 736 736 } -
trunk/Source/JavaScriptCore/runtime/JSObject.h
r77098 r77113 71 71 }; 72 72 73 typedef WriteBarrierBase<Unknown>* PropertyStorage;74 typedef const WriteBarrierBase<Unknown>* ConstPropertyStorage;73 typedef EncodedJSValue* PropertyStorage; 74 typedef const EncodedJSValue* ConstPropertyStorage; 75 75 76 76 class JSObject : public JSCell { … … 180 180 bool hasGetterSetterProperties() { return m_structure->hasGetterSetterProperties(); } 181 181 182 bool putDirect( JSGlobalData&, const Identifier& propertyName, JSValue, unsigned attr, bool checkReadOnly, PutPropertySlot&);183 void putDirect( JSGlobalData&, const Identifier& propertyName, JSValue, unsigned attr = 0);184 bool putDirect( JSGlobalData&, const Identifier& propertyName, JSValue, PutPropertySlot&);185 186 void putDirectFunction( JSGlobalData&, const Identifier& propertyName, JSCell*, unsigned attr = 0);187 void putDirectFunction( JSGlobalData&, const Identifier& propertyName, JSCell*, unsigned attr, bool checkReadOnly, PutPropertySlot&);182 bool putDirect(const Identifier& propertyName, JSValue value, unsigned attr, bool checkReadOnly, PutPropertySlot& slot); 183 void putDirect(const Identifier& propertyName, JSValue value, unsigned attr = 0); 184 bool putDirect(const Identifier& propertyName, JSValue value, PutPropertySlot&); 185 186 void putDirectFunction(const Identifier& propertyName, JSCell* value, unsigned attr = 0); 187 void putDirectFunction(const Identifier& propertyName, JSCell* value, unsigned attr, bool checkReadOnly, PutPropertySlot& slot); 188 188 void putDirectFunction(ExecState* exec, InternalFunction* function, unsigned attr = 0); 189 189 void putDirectFunction(ExecState* exec, JSFunction* function, unsigned attr = 0); 190 190 191 void putDirectWithoutTransition( JSGlobalData&, const Identifier& propertyName, JSValue, unsigned attr = 0);192 void putDirectFunctionWithoutTransition( JSGlobalData&,const Identifier& propertyName, JSCell* value, unsigned attr = 0);191 void putDirectWithoutTransition(const Identifier& propertyName, JSValue value, unsigned attr = 0); 192 void putDirectFunctionWithoutTransition(const Identifier& propertyName, JSCell* value, unsigned attr = 0); 193 193 void putDirectFunctionWithoutTransition(ExecState* exec, InternalFunction* function, unsigned attr = 0); 194 194 void putDirectFunctionWithoutTransition(ExecState* exec, JSFunction* function, unsigned attr = 0); 195 195 196 196 // Fast access to known property offsets. 197 JSValue getDirectOffset(size_t offset) const { return propertyStorage()[offset].get(); } 198 void putDirectOffset(JSGlobalData& globalData, size_t offset, JSValue value) { propertyStorage()[offset].set(globalData, this, value); } 199 void putUndefinedAtDirectOffset(size_t offset) { propertyStorage()[offset].setUndefined(); } 197 JSValue getDirectOffset(size_t offset) const { return JSValue::decode(propertyStorage()[offset]); } 198 void putDirectOffset(size_t offset, JSValue value) { propertyStorage()[offset] = JSValue::encode(value); } 200 199 201 200 void fillGetterPropertySlot(PropertySlot&, JSValue* location); … … 227 226 } 228 227 229 void flattenDictionaryObject( JSGlobalData& globalData)230 { 231 m_structure->flattenDictionaryStructure( globalData,this);228 void flattenDictionaryObject() 229 { 230 m_structure->flattenDictionaryStructure(this); 232 231 } 233 232 … … 269 268 } 270 269 271 bool putDirectInternal( JSGlobalData&, const Identifier& propertyName, JSValue, unsigned attr, bool checkReadOnly, PutPropertySlot&, JSCell*);272 bool putDirectInternal(JSGlobalData&, const Identifier& propertyName, JSValue , unsigned attr, bool checkReadOnly, PutPropertySlot&);270 bool putDirectInternal(const Identifier& propertyName, JSValue value, unsigned attr, bool checkReadOnly, PutPropertySlot& slot, JSCell*); 271 bool putDirectInternal(JSGlobalData&, const Identifier& propertyName, JSValue value, unsigned attr, bool checkReadOnly, PutPropertySlot& slot); 273 272 void putDirectInternal(JSGlobalData&, const Identifier& propertyName, JSValue value, unsigned attr = 0); 274 273 … … 280 279 union { 281 280 PropertyStorage m_externalStorage; 282 WriteBarrierBase<Unknown>m_inlineStorage[inlineStorageCapacity];281 EncodedJSValue m_inlineStorage[inlineStorageCapacity]; 283 282 }; 284 283 … … 452 451 } 453 452 454 inline bool JSObject::putDirectInternal( JSGlobalData& globalData,const Identifier& propertyName, JSValue value, unsigned attributes, bool checkReadOnly, PutPropertySlot& slot, JSCell* specificFunction)453 inline bool JSObject::putDirectInternal(const Identifier& propertyName, JSValue value, unsigned attributes, bool checkReadOnly, PutPropertySlot& slot, JSCell* specificFunction) 455 454 { 456 455 ASSERT(value); … … 469 468 return false; 470 469 471 putDirectOffset( globalData,offset, value);470 putDirectOffset(offset, value); 472 471 // At this point, the objects structure only has a specific value set if previously there 473 472 // had been one set, and if the new value being specified is the same (otherwise we would … … 487 486 488 487 ASSERT(offset < m_structure->propertyStorageCapacity()); 489 putDirectOffset( globalData,offset, value);488 putDirectOffset(offset, value); 490 489 // See comment on setNewProperty call below. 491 490 if (!specificFunction) … … 502 501 ASSERT(offset < structure->propertyStorageCapacity()); 503 502 setStructure(structure.release()); 504 putDirectOffset( globalData,offset, value);503 putDirectOffset(offset, value); 505 504 // This is a new property; transitions with specific values are not currently cachable, 506 505 // so leave the slot in an uncachable state. … … 529 528 // case (1) Do the put, then return leaving the slot uncachable. 530 529 if (specificFunction == currentSpecificFunction) { 531 putDirectOffset( globalData,offset, value);530 putDirectOffset(offset, value); 532 531 return true; 533 532 } … … 538 537 // case (3) set the slot, do the put, return. 539 538 slot.setExistingProperty(this, offset); 540 putDirectOffset( globalData,offset, value);539 putDirectOffset(offset, value); 541 540 return true; 542 541 } … … 559 558 ASSERT(offset < structure->propertyStorageCapacity()); 560 559 setStructure(structure.release()); 561 putDirectOffset( globalData,offset, value);560 putDirectOffset(offset, value); 562 561 // This is a new property; transitions with specific values are not currently cachable, 563 562 // so leave the slot in an uncachable state. … … 572 571 ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(this)); 573 572 574 return putDirectInternal( globalData,propertyName, value, attributes, checkReadOnly, slot, getJSFunction(globalData, value));573 return putDirectInternal(propertyName, value, attributes, checkReadOnly, slot, getJSFunction(globalData, value)); 575 574 } 576 575 … … 578 577 { 579 578 PutPropertySlot slot; 580 putDirectInternal( globalData,propertyName, value, attributes, false, slot, getJSFunction(globalData, value));581 } 582 583 inline bool JSObject::putDirect( JSGlobalData& globalData,const Identifier& propertyName, JSValue value, unsigned attributes, bool checkReadOnly, PutPropertySlot& slot)579 putDirectInternal(propertyName, value, attributes, false, slot, getJSFunction(globalData, value)); 580 } 581 582 inline bool JSObject::putDirect(const Identifier& propertyName, JSValue value, unsigned attributes, bool checkReadOnly, PutPropertySlot& slot) 584 583 { 585 584 ASSERT(value); 586 585 ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(this)); 587 586 588 return putDirectInternal( globalData,propertyName, value, attributes, checkReadOnly, slot, 0);589 } 590 591 inline void JSObject::putDirect( JSGlobalData& globalData,const Identifier& propertyName, JSValue value, unsigned attributes)587 return putDirectInternal(propertyName, value, attributes, checkReadOnly, slot, 0); 588 } 589 590 inline void JSObject::putDirect(const Identifier& propertyName, JSValue value, unsigned attributes) 592 591 { 593 592 PutPropertySlot slot; 594 putDirectInternal( globalData,propertyName, value, attributes, false, slot, 0);595 } 596 597 inline bool JSObject::putDirect( JSGlobalData& globalData,const Identifier& propertyName, JSValue value, PutPropertySlot& slot)598 { 599 return putDirectInternal( globalData,propertyName, value, 0, false, slot, 0);600 } 601 602 inline void JSObject::putDirectFunction( JSGlobalData& globalData,const Identifier& propertyName, JSCell* value, unsigned attributes, bool checkReadOnly, PutPropertySlot& slot)603 { 604 putDirectInternal( globalData,propertyName, value, attributes, checkReadOnly, slot, value);605 } 606 607 inline void JSObject::putDirectFunction( JSGlobalData& globalData,const Identifier& propertyName, JSCell* value, unsigned attr)593 putDirectInternal(propertyName, value, attributes, false, slot, 0); 594 } 595 596 inline bool JSObject::putDirect(const Identifier& propertyName, JSValue value, PutPropertySlot& slot) 597 { 598 return putDirectInternal(propertyName, value, 0, false, slot, 0); 599 } 600 601 inline void JSObject::putDirectFunction(const Identifier& propertyName, JSCell* value, unsigned attributes, bool checkReadOnly, PutPropertySlot& slot) 602 { 603 putDirectInternal(propertyName, value, attributes, checkReadOnly, slot, value); 604 } 605 606 inline void JSObject::putDirectFunction(const Identifier& propertyName, JSCell* value, unsigned attr) 608 607 { 609 608 PutPropertySlot slot; 610 putDirectInternal( globalData,propertyName, value, attr, false, slot, value);611 } 612 613 inline void JSObject::putDirectWithoutTransition( JSGlobalData& globalData,const Identifier& propertyName, JSValue value, unsigned attributes)609 putDirectInternal(propertyName, value, attr, false, slot, value); 610 } 611 612 inline void JSObject::putDirectWithoutTransition(const Identifier& propertyName, JSValue value, unsigned attributes) 614 613 { 615 614 size_t currentCapacity = m_structure->propertyStorageCapacity(); … … 617 616 if (currentCapacity != m_structure->propertyStorageCapacity()) 618 617 allocatePropertyStorage(currentCapacity, m_structure->propertyStorageCapacity()); 619 putDirectOffset( globalData,offset, value);620 } 621 622 inline void JSObject::putDirectFunctionWithoutTransition( JSGlobalData& globalData,const Identifier& propertyName, JSCell* value, unsigned attributes)618 putDirectOffset(offset, value); 619 } 620 621 inline void JSObject::putDirectFunctionWithoutTransition(const Identifier& propertyName, JSCell* value, unsigned attributes) 623 622 { 624 623 size_t currentCapacity = m_structure->propertyStorageCapacity(); … … 626 625 if (currentCapacity != m_structure->propertyStorageCapacity()) 627 626 allocatePropertyStorage(currentCapacity, m_structure->propertyStorageCapacity()); 628 putDirectOffset( globalData,offset, value);627 putDirectOffset(offset, value); 629 628 } 630 629 … … 705 704 { 706 705 ASSERT(isCell() && isObject()); 707 if (!asObject(asCell())->putDirect( exec->globalData(),propertyName, value, slot) && slot.isStrictMode())706 if (!asObject(asCell())->putDirect(propertyName, value, slot) && slot.isStrictMode()) 708 707 throwTypeError(exec, StrictModeReadonlyPropertyWriteError); 709 708 } … … 727 726 728 727 PropertyStorage oldPropertyStorage = (wasInline ? m_inlineStorage : m_externalStorage); 729 PropertyStorage newPropertyStorage = new WriteBarrierBase<Unknown>[newSize];728 PropertyStorage newPropertyStorage = new EncodedJSValue[newSize]; 730 729 731 730 for (unsigned i = 0; i < oldSize; ++i) … … 742 741 JSCell::markChildren(markStack); 743 742 744 markStack.append(m_structure->storedPrototypeSlot()); 743 markStack.append(prototype()); 744 745 745 PropertyStorage storage = propertyStorage(); 746 746 size_t storageSize = m_structure->propertyStorageSize(); 747 markStack.appendValues( storage, storageSize);747 markStack.appendValues(reinterpret_cast<JSValue*>(storage), storageSize); 748 748 } 749 749 -
trunk/Source/JavaScriptCore/runtime/JSPropertyNameIterator.cpp
r77098 r77113 41 41 , m_numCacheableSlots(numCacheableSlots) 42 42 , m_jsStringsSize(propertyNameArrayData->propertyNameVector().size()) 43 , m_jsStrings(new WriteBarrier<Unknown>[m_jsStringsSize])43 , m_jsStrings(new JSValue[m_jsStringsSize]) 44 44 { 45 45 PropertyNameArrayData::PropertyNameVector& propertyNameVector = propertyNameArrayData->propertyNameVector(); 46 46 for (size_t i = 0; i < m_jsStringsSize; ++i) 47 m_jsStrings[i] .set(exec->globalData(), this, jsOwnedString(exec, propertyNameVector[i].ustring()));47 m_jsStrings[i] = jsOwnedString(exec, propertyNameVector[i].ustring()); 48 48 } 49 49 … … 92 92 JSValue JSPropertyNameIterator::get(ExecState* exec, JSObject* base, size_t i) 93 93 { 94 JSValue identifier = m_jsStrings[i].get();94 JSValue& identifier = m_jsStrings[i]; 95 95 if (m_cachedStructure == base->structure() && m_cachedPrototypeChain == base->structure()->prototypeChain(exec)) 96 96 return identifier; -
trunk/Source/JavaScriptCore/runtime/JSPropertyNameIterator.h
r77098 r77113 86 86 uint32_t m_numCacheableSlots; 87 87 uint32_t m_jsStringsSize; 88 OwnArrayPtr< WriteBarrier<Unknown>> m_jsStrings;88 OwnArrayPtr<JSValue> m_jsStrings; 89 89 }; 90 90 -
trunk/Source/JavaScriptCore/runtime/JSStaticScopeObject.cpp
r77098 r77113 35 35 { 36 36 JSVariableObject::markChildren(markStack); 37 markStack. deprecatedAppend(&d()->registerStore);37 markStack.append(d()->registerStore.jsValue()); 38 38 } 39 39 -
trunk/Source/JavaScriptCore/runtime/JSString.cpp
r77098 r77113 256 256 inline StringObject* StringObject::create(ExecState* exec, JSString* string) 257 257 { 258 return new (exec) StringObject(exec-> globalData(), exec->lexicalGlobalObject()->stringObjectStructure(), string);258 return new (exec) StringObject(exec->lexicalGlobalObject()->stringObjectStructure(), string); 259 259 } 260 260 -
trunk/Source/JavaScriptCore/runtime/JSValue.h
r77098 r77113 48 48 struct Instruction; 49 49 50 template <class T> class DeprecatedPtr;51 template <class T> class WriteBarrierBase;52 53 50 enum PreferredPrimitiveType { NoPreference, PreferNumber, PreferString }; 54 51 … … 216 213 217 214 private: 218 template <class T> JSValue(DeprecatedPtr<T>);219 template <class T> JSValue(WriteBarrierBase<T>);220 221 215 enum HashTableDeletedValueTag { HashTableDeletedValue }; 222 216 JSValue(HashTableDeletedValueTag); -
trunk/Source/JavaScriptCore/runtime/JSWrapperObject.cpp
r77098 r77113 31 31 JSObject::markChildren(markStack); 32 32 if (m_internalValue) 33 markStack.append( &m_internalValue);33 markStack.append(m_internalValue); 34 34 } 35 35 -
trunk/Source/JavaScriptCore/runtime/JSWrapperObject.h
r77098 r77113 34 34 35 35 public: 36 JSValue internalValue() const { return m_internalValue .get(); }37 void setInternalValue(JS GlobalData&, JSValue);36 JSValue internalValue() const { return m_internalValue; } 37 void setInternalValue(JSValue); 38 38 39 39 static PassRefPtr<Structure> createStructure(JSValue prototype) … … 48 48 virtual void markChildren(MarkStack&); 49 49 50 WriteBarrier<Unknown>m_internalValue;50 JSValue m_internalValue; 51 51 }; 52 52 … … 57 57 } 58 58 59 inline void JSWrapperObject::setInternalValue(JS GlobalData& globalData, JSValue value)59 inline void JSWrapperObject::setInternalValue(JSValue value) 60 60 { 61 61 ASSERT(value); 62 62 ASSERT(!value.isObject()); 63 m_internalValue .set(globalData, this, value);63 m_internalValue = value; 64 64 putAnonymousValue(0, value); 65 65 } -
trunk/Source/JavaScriptCore/runtime/LiteralParser.cpp
r77098 r77113 374 374 case DoParseObjectEndExpression: 375 375 { 376 asObject(objectStack.last())->putDirect( m_exec->globalData(),identifierStack.last(), lastValue);376 asObject(objectStack.last())->putDirect(identifierStack.last(), lastValue); 377 377 identifierStack.removeLast(); 378 378 if (m_lexer.currentToken().type == TokComma) -
trunk/Source/JavaScriptCore/runtime/Lookup.cpp
r77098 r77113 87 87 function = new (exec) NativeFunctionWrapper(exec, globalObject, globalObject->prototypeFunctionStructure(), entry->functionLength(), propertyName, entry->function()); 88 88 89 thisObj->putDirectFunction( exec->globalData(),propertyName, function, entry->attributes());89 thisObj->putDirectFunction(propertyName, function, entry->attributes()); 90 90 location = thisObj->getDirectLocation(propertyName); 91 91 } -
trunk/Source/JavaScriptCore/runtime/Lookup.h
r77098 r77113 313 313 if (entry->attributes() & Function) { // function: put as override property 314 314 if (LIKELY(value.isCell())) 315 thisObj->putDirectFunction( exec->globalData(),propertyName, value.asCell());315 thisObj->putDirectFunction(propertyName, value.asCell()); 316 316 else 317 thisObj->putDirect( exec->globalData(),propertyName, value);317 thisObj->putDirect(propertyName, value); 318 318 } else if (!(entry->attributes() & ReadOnly)) 319 319 entry->propertyPutter()(exec, thisObj, value); -
trunk/Source/JavaScriptCore/runtime/MarkStack.h
r77098 r77113 28 28 29 29 #include "JSValue.h" 30 #include "WriteBarrier.h"31 30 #include <wtf/Vector.h> 32 31 #include <wtf/Noncopyable.h> … … 51 50 { 52 51 } 52 53 ALWAYS_INLINE void append(JSValue); 54 void append(JSCell*); 53 55 54 void deprecatedAppend(JSValue*); 55 void deprecatedAppend(JSCell**); 56 void deprecatedAppend(Register*); 57 template <typename T> void append(WriteBarrierBase<T>*); 58 template <typename T> void append(DeprecatedPtr<T>*); 59 60 ALWAYS_INLINE void deprecatedAppendValues(Register* registers, size_t count, MarkSetProperties properties = NoNullValues) 56 ALWAYS_INLINE void appendValues(Register* values, size_t count, MarkSetProperties properties = NoNullValues) 61 57 { 62 JSValue* values = reinterpret_cast<JSValue*>(registers); 63 if (count) 64 m_markSets.append(MarkSet(values, values + count, properties)); 58 appendValues(reinterpret_cast<JSValue*>(values), count, properties); 65 59 } 66 60 67 void appendValues(WriteBarrierBase<Unknown>* barriers, size_t count, MarkSetProperties properties = NoNullValues)61 ALWAYS_INLINE void appendValues(JSValue* values, size_t count, MarkSetProperties properties = NoNullValues) 68 62 { 69 JSValue* values = barriers->slot();70 63 if (count) 71 64 m_markSets.append(MarkSet(values, values + count, properties)); … … 82 75 83 76 private: 84 void internalAppend(JSCell*);85 void internalAppend(JSValue);86 77 void markChildren(JSCell*); 87 78 -
trunk/Source/JavaScriptCore/runtime/MathObject.cpp
r77098 r77113 90 90 : JSObjectWithGlobalObject(globalObject, structure) 91 91 { 92 putDirectWithoutTransition( exec->globalData(),Identifier(exec, "E"), jsNumber(exp(1.0)), DontDelete | DontEnum | ReadOnly);93 putDirectWithoutTransition( exec->globalData(),Identifier(exec, "LN2"), jsNumber(log(2.0)), DontDelete | DontEnum | ReadOnly);94 putDirectWithoutTransition( exec->globalData(),Identifier(exec, "LN10"), jsNumber(log(10.0)), DontDelete | DontEnum | ReadOnly);95 putDirectWithoutTransition( exec->globalData(),Identifier(exec, "LOG2E"), jsNumber(1.0 / log(2.0)), DontDelete | DontEnum | ReadOnly);96 putDirectWithoutTransition( exec->globalData(),Identifier(exec, "LOG10E"), jsNumber(1.0 / log(10.0)), DontDelete | DontEnum | ReadOnly);97 putDirectWithoutTransition( exec->globalData(),Identifier(exec, "PI"), jsNumber(piDouble), DontDelete | DontEnum | ReadOnly);98 putDirectWithoutTransition( exec->globalData(),Identifier(exec, "SQRT1_2"), jsNumber(sqrt(0.5)), DontDelete | DontEnum | ReadOnly);99 putDirectWithoutTransition( exec->globalData(),Identifier(exec, "SQRT2"), jsNumber(sqrt(2.0)), DontDelete | DontEnum | ReadOnly);92 putDirectWithoutTransition(Identifier(exec, "E"), jsNumber(exp(1.0)), DontDelete | DontEnum | ReadOnly); 93 putDirectWithoutTransition(Identifier(exec, "LN2"), jsNumber(log(2.0)), DontDelete | DontEnum | ReadOnly); 94 putDirectWithoutTransition(Identifier(exec, "LN10"), jsNumber(log(10.0)), DontDelete | DontEnum | ReadOnly); 95 putDirectWithoutTransition(Identifier(exec, "LOG2E"), jsNumber(1.0 / log(2.0)), DontDelete | DontEnum | ReadOnly); 96 putDirectWithoutTransition(Identifier(exec, "LOG10E"), jsNumber(1.0 / log(10.0)), DontDelete | DontEnum | ReadOnly); 97 putDirectWithoutTransition(Identifier(exec, "PI"), jsNumber(piDouble), DontDelete | DontEnum | ReadOnly); 98 putDirectWithoutTransition(Identifier(exec, "SQRT1_2"), jsNumber(sqrt(0.5)), DontDelete | DontEnum | ReadOnly); 99 putDirectWithoutTransition(Identifier(exec, "SQRT2"), jsNumber(sqrt(2.0)), DontDelete | DontEnum | ReadOnly); 100 100 } 101 101 -
trunk/Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp
r77098 r77113 38 38 NativeErrorPrototype* prototype = new (exec) NativeErrorPrototype(exec, globalObject, prototypeStructure, nameAndMessage, this); 39 39 40 putDirect(exec-> globalData(), exec->propertyNames().length, jsNumber(1), DontDelete | ReadOnly | DontEnum); // ECMA 15.11.7.541 putDirect(exec-> globalData(), exec->propertyNames().prototype, prototype, DontDelete | ReadOnly | DontEnum);40 putDirect(exec->propertyNames().length, jsNumber(1), DontDelete | ReadOnly | DontEnum); // ECMA 15.11.7.5 41 putDirect(exec->propertyNames().prototype, prototype, DontDelete | ReadOnly | DontEnum); 42 42 m_errorStructure = ErrorInstance::createStructure(prototype); 43 43 } -
trunk/Source/JavaScriptCore/runtime/NativeErrorPrototype.cpp
r77098 r77113 35 35 : JSObjectWithGlobalObject(globalObject, structure) 36 36 { 37 putDirect(exec-> globalData(), exec->propertyNames().name, jsString(exec, nameAndMessage), 0);38 putDirect(exec-> globalData(), exec->propertyNames().message, jsString(exec, nameAndMessage), 0);39 putDirect(exec-> globalData(), exec->propertyNames().constructor, constructor, DontEnum);37 putDirect(exec->propertyNames().name, jsString(exec, nameAndMessage), 0); 38 putDirect(exec->propertyNames().message, jsString(exec, nameAndMessage), 0); 39 putDirect(exec->propertyNames().constructor, constructor, DontEnum); 40 40 } 41 41 -
trunk/Source/JavaScriptCore/runtime/NumberConstructor.cpp
r77098 r77113 59 59 { 60 60 // Number.Prototype 61 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().prototype, numberPrototype, DontEnum | DontDelete | ReadOnly);61 putDirectWithoutTransition(exec->propertyNames().prototype, numberPrototype, DontEnum | DontDelete | ReadOnly); 62 62 63 63 // no. of arguments for constructor 64 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete);64 putDirectWithoutTransition(exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete); 65 65 } 66 66 … … 105 105 NumberObject* object = new (exec) NumberObject(exec->lexicalGlobalObject()->numberObjectStructure()); 106 106 double n = exec->argumentCount() ? exec->argument(0).toNumber(exec) : 0; 107 object->setInternalValue( exec->globalData(),jsNumber(n));107 object->setInternalValue(jsNumber(n)); 108 108 return JSValue::encode(object); 109 109 } -
trunk/Source/JavaScriptCore/runtime/NumberObject.cpp
r77098 r77113 45 45 { 46 46 NumberObject* object = new (exec) NumberObject(exec->lexicalGlobalObject()->numberObjectStructure()); 47 object->setInternalValue( exec->globalData(),number);47 object->setInternalValue(number); 48 48 return object; 49 49 } -
trunk/Source/JavaScriptCore/runtime/NumberPrototype.cpp
r77098 r77113 50 50 : NumberObject(structure) 51 51 { 52 setInternalValue( exec->globalData(),jsNumber(0));52 setInternalValue(jsNumber(0)); 53 53 54 54 // The constructor will be added later, after NumberConstructor has been constructed -
trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp
r77098 r77113 48 48 { 49 49 // ECMA 15.2.3.1 50 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().prototype, objectPrototype, DontEnum | DontDelete | ReadOnly);50 putDirectWithoutTransition(exec->propertyNames().prototype, objectPrototype, DontEnum | DontDelete | ReadOnly); 51 51 52 52 // no. of arguments for constructor 53 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete);53 putDirectWithoutTransition(exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete); 54 54 55 55 putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 1, exec->propertyNames().getPrototypeOf, objectConstructorGetPrototypeOf), DontEnum); … … 118 118 JSObject* description = constructEmptyObject(exec); 119 119 if (!descriptor.isAccessorDescriptor()) { 120 description->putDirect(exec-> globalData(), exec->propertyNames().value, descriptor.value() ? descriptor.value() : jsUndefined(), 0);121 description->putDirect(exec-> globalData(), exec->propertyNames().writable, jsBoolean(descriptor.writable()), 0);120 description->putDirect(exec->propertyNames().value, descriptor.value() ? descriptor.value() : jsUndefined(), 0); 121 description->putDirect(exec->propertyNames().writable, jsBoolean(descriptor.writable()), 0); 122 122 } else { 123 description->putDirect(exec-> globalData(), exec->propertyNames().get, descriptor.getter() ? descriptor.getter() : jsUndefined(), 0);124 description->putDirect(exec-> globalData(), exec->propertyNames().set, descriptor.setter() ? descriptor.setter() : jsUndefined(), 0);123 description->putDirect(exec->propertyNames().get, descriptor.getter() ? descriptor.getter() : jsUndefined(), 0); 124 description->putDirect(exec->propertyNames().set, descriptor.setter() ? descriptor.setter() : jsUndefined(), 0); 125 125 } 126 126 127 description->putDirect(exec-> globalData(), exec->propertyNames().enumerable, jsBoolean(descriptor.enumerable()), 0);128 description->putDirect(exec-> globalData(), exec->propertyNames().configurable, jsBoolean(descriptor.configurable()), 0);127 description->putDirect(exec->propertyNames().enumerable, jsBoolean(descriptor.enumerable()), 0); 128 description->putDirect(exec->propertyNames().configurable, jsBoolean(descriptor.configurable()), 0); 129 129 130 130 return JSValue::encode(description); -
trunk/Source/JavaScriptCore/runtime/Operations.h
r77098 r77113 430 430 // should not be treated as a dictionary. 431 431 if (cell->structure()->isDictionary()) { 432 asObject(cell)->flattenDictionaryObject( callFrame->globalData());432 asObject(cell)->flattenDictionaryObject(); 433 433 if (slotBase == cell) 434 434 slotOffset = cell->structure()->get(propertyName); … … 455 455 // should not be treated as a dictionary. 456 456 if (base->structure()->isDictionary()) 457 asObject(base)->flattenDictionaryObject( callFrame->globalData());457 asObject(base)->flattenDictionaryObject(); 458 458 459 459 ++count; … … 472 472 JSObject* base; 473 473 while (true) { 474 base = iter->get();474 base = *iter; 475 475 if (next == end) 476 476 return isStrictPut ? JSValue() : base; -
trunk/Source/JavaScriptCore/runtime/PrototypeFunction.cpp
r77098 r77113 38 38 { 39 39 ASSERT_ARG(function, function); 40 putDirect(exec-> globalData(), exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum);40 putDirect(exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum); 41 41 } 42 42 … … 46 46 { 47 47 ASSERT_ARG(function, function); 48 putDirect(exec-> globalData(), exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum);48 putDirect(exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum); 49 49 } 50 50 -
trunk/Source/JavaScriptCore/runtime/PutPropertySlot.h
r77098 r77113 46 46 } 47 47 48 void setExistingProperty( DeprecatedPtr<JSObject>base, size_t offset)48 void setExistingProperty(JSObject* base, size_t offset) 49 49 { 50 50 m_type = ExistingProperty; … … 53 53 } 54 54 55 void setNewProperty( DeprecatedPtr<JSObject>base, size_t offset)55 void setNewProperty(JSObject* base, size_t offset) 56 56 { 57 57 m_type = NewProperty; … … 61 61 62 62 Type type() const { return m_type; } 63 JSObject* base() const { return m_base .get(); }63 JSObject* base() const { return m_base; } 64 64 65 65 bool isStrictMode() const { return m_isStrictMode; } … … 71 71 private: 72 72 Type m_type; 73 DeprecatedPtr<JSObject>m_base;73 JSObject* m_base; 74 74 size_t m_offset; 75 75 bool m_isStrictMode; -
trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp
r77098 r77113 101 101 { 102 102 // ECMA 15.10.5.1 RegExp.prototype 103 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().prototype, regExpPrototype, DontEnum | DontDelete | ReadOnly);103 putDirectWithoutTransition(exec->propertyNames().prototype, regExpPrototype, DontEnum | DontDelete | ReadOnly); 104 104 105 105 // no. of arguments for constructor 106 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().length, jsNumber(2), ReadOnly | DontDelete | DontEnum);106 putDirectWithoutTransition(exec->propertyNames().length, jsNumber(2), ReadOnly | DontDelete | DontEnum); 107 107 } 108 108 -
trunk/Source/JavaScriptCore/runtime/ScopeChain.cpp
r77098 r77113 36 36 ScopeChainIterator scopeEnd = end(); 37 37 for (ScopeChainIterator scopeIter = begin(); scopeIter != scopeEnd; ++scopeIter) { 38 DeprecatedPtr<JSObject>o = *scopeIter;38 JSObject* o = *scopeIter; 39 39 PropertyNameArray propertyNames(globalObject->globalExec()); 40 40 o->getPropertyNames(globalObject->globalExec(), propertyNames); 41 41 PropertyNameArray::const_iterator propEnd = propertyNames.end(); 42 42 43 fprintf(stderr, "----- [scope %p] -----\n", o .get());43 fprintf(stderr, "----- [scope %p] -----\n", o); 44 44 for (PropertyNameArray::const_iterator propIter = propertyNames.begin(); propIter != propEnd; propIter++) { 45 45 Identifier name = *propIter; -
trunk/Source/JavaScriptCore/runtime/ScopeChain.h
r77098 r77113 22 22 #define ScopeChain_h 23 23 24 #include "WriteBarrier.h"25 24 #include <wtf/FastAllocBase.h> 26 25 … … 54 53 { 55 54 next = 0; 55 object = 0; 56 56 globalData = 0; 57 57 globalObject = 0; … … 61 61 62 62 ScopeChainNode* next; 63 DeprecatedPtr<JSObject>object;63 JSObject* object; 64 64 JSGlobalData* globalData; 65 65 JSGlobalObject* globalObject; … … 132 132 } 133 133 134 DeprecatedPtr<JSObject>const & operator*() const { return m_node->object; }135 DeprecatedPtr<JSObject>const * operator->() const { return &(operator*()); }134 JSObject* const & operator*() const { return m_node->object; } 135 JSObject* const * operator->() const { return &(operator*()); } 136 136 137 137 ScopeChainIterator& operator++() { m_node = m_node->next; return *this; } … … 196 196 ScopeChainNode* node() const { return m_node; } 197 197 198 JSObject* top() const { return m_node->object .get(); }198 JSObject* top() const { return m_node->object; } 199 199 200 200 ScopeChainIterator begin() const { return m_node->begin(); } -
trunk/Source/JavaScriptCore/runtime/ScopeChainMark.h
r77098 r77113 29 29 { 30 30 for (ScopeChainNode* n = m_node; n; n = n->next) 31 markStack.append( &n->object);31 markStack.append(n->object); 32 32 } 33 33 -
trunk/Source/JavaScriptCore/runtime/SmallStrings.cpp
r77098 r77113 36 36 static const unsigned numCharactersToStore = 0x100; 37 37 38 static inline bool isMarked(JS Cell* string)38 static inline bool isMarked(JSString* string) 39 39 { 40 40 return string && Heap::isCellMarked(string); … … 84 84 */ 85 85 86 bool isAnyStringMarked = isMarked(m_emptyString .get());86 bool isAnyStringMarked = isMarked(m_emptyString); 87 87 for (unsigned i = 0; i < numCharactersToStore && !isAnyStringMarked; ++i) 88 isAnyStringMarked = isMarked(m_singleCharacterStrings[i] .get());88 isAnyStringMarked = isMarked(m_singleCharacterStrings[i]); 89 89 90 90 if (!isAnyStringMarked) { … … 94 94 95 95 if (m_emptyString) 96 markStack.append( &m_emptyString);96 markStack.append(m_emptyString); 97 97 for (unsigned i = 0; i < numCharactersToStore; ++i) { 98 98 if (m_singleCharacterStrings[i]) 99 markStack.append( &m_singleCharacterStrings[i]);99 markStack.append(m_singleCharacterStrings[i]); 100 100 } 101 101 } -
trunk/Source/JavaScriptCore/runtime/SmallStrings.h
r77098 r77113 28 28 29 29 #include "UString.h" 30 #include "WriteBarrier.h"31 30 #include <wtf/FixedArray.h> 32 31 #include <wtf/OwnPtr.h> … … 49 48 if (!m_emptyString) 50 49 createEmptyString(globalData); 51 return m_emptyString .get();50 return m_emptyString; 52 51 } 53 52 JSString* singleCharacterString(JSGlobalData* globalData, unsigned char character) … … 55 54 if (!m_singleCharacterStrings[character]) 56 55 createSingleCharacterString(globalData, character); 57 return m_singleCharacterStrings[character] .get();56 return m_singleCharacterStrings[character]; 58 57 } 59 58 … … 65 64 unsigned count() const; 66 65 #if ENABLE(JIT) 67 JS Cell** singleCharacterStrings() { return m_singleCharacterStrings[0].slot(); }66 JSString** singleCharacterStrings() { return m_singleCharacterStrings.data(); } 68 67 #endif 69 68 private: … … 71 70 void createSingleCharacterString(JSGlobalData*, unsigned char); 72 71 73 DeprecatedPtr<JSString>m_emptyString;74 FixedArray< DeprecatedPtr<JSString>, 0x100> m_singleCharacterStrings;72 JSString* m_emptyString; 73 FixedArray<JSString*, 0x100> m_singleCharacterStrings; 75 74 OwnPtr<SmallStringsStorage> m_storage; 76 75 }; -
trunk/Source/JavaScriptCore/runtime/StringConstructor.cpp
r77098 r77113 54 54 { 55 55 // ECMA 15.5.3.1 String.prototype 56 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().prototype, stringPrototype, ReadOnly | DontEnum | DontDelete);56 putDirectWithoutTransition(exec->propertyNames().prototype, stringPrototype, ReadOnly | DontEnum | DontDelete); 57 57 58 58 // ECMA 15.5.3.2 fromCharCode() … … 63 63 #endif 64 64 // no. of arguments for constructor 65 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete);65 putDirectWithoutTransition(exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete); 66 66 } 67 67 -
trunk/Source/JavaScriptCore/runtime/StringObject.cpp
r77098 r77113 33 33 : JSWrapperObject(structure) 34 34 { 35 setInternalValue( exec->globalData(),jsEmptyString(exec));35 setInternalValue(jsEmptyString(exec)); 36 36 } 37 37 38 StringObject::StringObject( JSGlobalData& globalData,NonNullPassRefPtr<Structure> structure, JSString* string)38 StringObject::StringObject(NonNullPassRefPtr<Structure> structure, JSString* string) 39 39 : JSWrapperObject(structure) 40 40 { 41 setInternalValue( globalData,string);41 setInternalValue(string); 42 42 } 43 43 … … 45 45 : JSWrapperObject(structure) 46 46 { 47 setInternalValue( exec->globalData(),jsString(exec, string));47 setInternalValue(jsString(exec, string)); 48 48 } 49 49 -
trunk/Source/JavaScriptCore/runtime/StringObject.h
r77098 r77113 54 54 protected: 55 55 static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesMarkChildren | OverridesGetPropertyNames | JSWrapperObject::StructureFlags; 56 StringObject( JSGlobalData&,NonNullPassRefPtr<Structure>, JSString*);56 StringObject(NonNullPassRefPtr<Structure>, JSString*); 57 57 }; 58 58 -
trunk/Source/JavaScriptCore/runtime/StringPrototype.cpp
r77098 r77113 137 137 putAnonymousValue(0, globalObject); 138 138 // The constructor will be added later, after StringConstructor has been built 139 putDirectWithoutTransition(exec-> globalData(), exec->propertyNames().length, jsNumber(0), DontDelete | ReadOnly | DontEnum);139 putDirectWithoutTransition(exec->propertyNames().length, jsNumber(0), DontDelete | ReadOnly | DontEnum); 140 140 } 141 141 -
trunk/Source/JavaScriptCore/runtime/Structure.cpp
r77098 r77113 243 243 244 244 ASSERT(m_prototype); 245 ASSERT(m_prototype ->isObject() || m_prototype->isNull());245 ASSERT(m_prototype.isObject() || m_prototype.isNull()); 246 246 247 247 #ifndef NDEBUG … … 477 477 } 478 478 479 RefPtr<Structure> transition = create(structure->m_prototype .get(), structure->typeInfo(), structure->anonymousSlotCount());479 RefPtr<Structure> transition = create(structure->m_prototype, structure->typeInfo(), structure->anonymousSlotCount()); 480 480 481 481 transition->m_cachedPrototypeChain = structure->m_cachedPrototypeChain; … … 596 596 ASSERT(!structure->isUncacheableDictionary()); 597 597 598 RefPtr<Structure> transition = create(structure->m_prototype .get(), structure->typeInfo(), structure->anonymousSlotCount());598 RefPtr<Structure> transition = create(structure->m_prototype, structure->typeInfo(), structure->anonymousSlotCount()); 599 599 transition->m_dictionaryKind = kind; 600 600 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity; … … 621 621 } 622 622 623 PassRefPtr<Structure> Structure::flattenDictionaryStructure(JS GlobalData& globalData, JSObject* object)623 PassRefPtr<Structure> Structure::flattenDictionaryStructure(JSObject* object) 624 624 { 625 625 ASSERT(isDictionary()); … … 652 652 // Copy the original property values into their final locations 653 653 for (unsigned i = 0; i < propertyCount; i++) 654 object->putDirectOffset( globalData,anonymousSlotCount + i, values[i]);654 object->putDirectOffset(anonymousSlotCount + i, values[i]); 655 655 656 656 if (m_propertyTable->deletedOffsets) { -
trunk/Source/JavaScriptCore/runtime/Structure.h
r77098 r77113 81 81 static PassRefPtr<Structure> toUncacheableDictionaryTransition(Structure*); 82 82 83 PassRefPtr<Structure> flattenDictionaryStructure(JS GlobalData&, JSObject*);83 PassRefPtr<Structure> flattenDictionaryStructure(JSObject*); 84 84 85 85 ~Structure(); … … 95 95 const TypeInfo& typeInfo() const { return m_typeInfo; } 96 96 97 JSValue storedPrototype() const { return m_prototype.get(); } 98 DeprecatedPtr<Unknown>* storedPrototypeSlot() { return &m_prototype; } 97 JSValue storedPrototype() const { return m_prototype; } 99 98 JSValue prototypeForLookup(ExecState*) const; 100 99 StructureChain* prototypeChain(ExecState*) const; … … 208 207 TypeInfo m_typeInfo; 209 208 210 DeprecatedPtr<Unknown>m_prototype;209 JSValue m_prototype; 211 210 mutable RefPtr<StructureChain> m_cachedPrototypeChain; 212 211 -
trunk/Source/JavaScriptCore/runtime/WeakGCMap.h
r77098 r77113 47 47 48 48 public: 49 typedef typename HashMap<KeyType, DeprecatedPtr<MappedType>>::iterator iterator;50 typedef typename HashMap<KeyType, DeprecatedPtr<MappedType>>::const_iterator const_iterator;49 typedef typename HashMap<KeyType, MappedType>::iterator iterator; 50 typedef typename HashMap<KeyType, MappedType>::const_iterator const_iterator; 51 51 52 52 bool isEmpty() { return m_map.isEmpty(); } 53 53 void clear() { m_map.clear(); } 54 54 55 MappedType * get(const KeyType&) const;56 pair<iterator, bool> set(const KeyType&, MappedType*);57 MappedType * take(const KeyType&);55 MappedType get(const KeyType& key) const; 56 pair<iterator, bool> set(const KeyType&, const MappedType&); 57 MappedType take(const KeyType& key); 58 58 59 59 // These unchecked functions provide access to a value even if the value's … … 61 61 // during the GC mark phase, which begins by clearing all mark bits. 62 62 63 MappedType* uncheckedGet(const KeyType& key) const { return m_map.get(key).get(); } 64 DeprecatedPtr<MappedType>* uncheckedGetSlot(const KeyType& key) 65 { 66 iterator iter = m_map.find(key); 67 if (iter == m_map.end()) 68 return 0; 69 return &iter->second; 70 } 71 bool uncheckedRemove(const KeyType&, MappedType*); 63 MappedType uncheckedGet(const KeyType& key) const { return m_map.get(key); } 64 bool uncheckedRemove(const KeyType&, const MappedType&); 72 65 73 66 iterator uncheckedBegin() { return m_map.begin(); } … … 77 70 const_iterator uncheckedEnd() const { return m_map.end(); } 78 71 79 bool isValid(iterator it) const { return Heap::isCellMarked(it->second .get()); }80 bool isValid(const_iterator it) const { return Heap::isCellMarked(it->second .get()); }72 bool isValid(iterator it) const { return Heap::isCellMarked(it->second); } 73 bool isValid(const_iterator it) const { return Heap::isCellMarked(it->second); } 81 74 82 75 private: 83 HashMap<KeyType, DeprecatedPtr<MappedType>> m_map;76 HashMap<KeyType, MappedType> m_map; 84 77 }; 85 78 86 79 template<typename KeyType, typename MappedType> 87 inline MappedType *WeakGCMap<KeyType, MappedType>::get(const KeyType& key) const80 inline MappedType WeakGCMap<KeyType, MappedType>::get(const KeyType& key) const 88 81 { 89 MappedType * result = m_map.get(key).get();90 if (result == HashTraits<MappedType *>::emptyValue())82 MappedType result = m_map.get(key); 83 if (result == HashTraits<MappedType>::emptyValue()) 91 84 return result; 92 85 if (!Heap::isCellMarked(result)) 93 return HashTraits<MappedType *>::emptyValue();86 return HashTraits<MappedType>::emptyValue(); 94 87 return result; 95 88 } 96 89 97 90 template<typename KeyType, typename MappedType> 98 MappedType *WeakGCMap<KeyType, MappedType>::take(const KeyType& key)91 MappedType WeakGCMap<KeyType, MappedType>::take(const KeyType& key) 99 92 { 100 MappedType * result = m_map.take(key).get();101 if (result == HashTraits<MappedType *>::emptyValue())93 MappedType result = m_map.take(key); 94 if (result == HashTraits<MappedType>::emptyValue()) 102 95 return result; 103 96 if (!Heap::isCellMarked(result)) 104 return HashTraits<MappedType *>::emptyValue();97 return HashTraits<MappedType>::emptyValue(); 105 98 return result; 106 99 } 107 100 108 101 template<typename KeyType, typename MappedType> 109 pair<typename WeakGCMap<KeyType, MappedType>::iterator, bool> WeakGCMap<KeyType, MappedType>::set(const KeyType& key, MappedType*value)102 pair<typename HashMap<KeyType, MappedType>::iterator, bool> WeakGCMap<KeyType, MappedType>::set(const KeyType& key, const MappedType& value) 110 103 { 111 104 Heap::markCell(value); // If value is newly allocated, it's not marked, so mark it now. 112 105 pair<iterator, bool> result = m_map.add(key, value); 113 106 if (!result.second) { // pre-existing entry 114 result.second = !Heap::isCellMarked(result.first->second .get());107 result.second = !Heap::isCellMarked(result.first->second); 115 108 result.first->second = value; 116 109 } … … 119 112 120 113 template<typename KeyType, typename MappedType> 121 bool WeakGCMap<KeyType, MappedType>::uncheckedRemove(const KeyType& key, MappedType*value)114 bool WeakGCMap<KeyType, MappedType>::uncheckedRemove(const KeyType& key, const MappedType& value) 122 115 { 123 116 iterator it = m_map.find(key); 124 117 if (it == m_map.end()) 125 118 return false; 126 if (it->second .get()!= value)119 if (it->second != value) 127 120 return false; 128 121 m_map.remove(it);
Note:
See TracChangeset
for help on using the changeset viewer.