Changeset 36821 in webkit for trunk/JavaScriptCore/kjs
- Timestamp:
- Sep 23, 2008, 5:27:18 PM (17 years ago)
- Location:
- trunk/JavaScriptCore/kjs
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/Arguments.cpp
r36804 r36821 39 39 40 40 struct ArgumentsData : Noncopyable { 41 ArgumentsData(JSActivation* activation, unsigned numParameters, unsigned firstArgumentIndex, unsigned numArguments, JSFunction* callee)41 ArgumentsData(JSActivation* activation, unsigned numParameters, int firstParameterIndex, unsigned numArguments, JSFunction* callee) 42 42 : activation(activation) 43 43 , numParameters(numParameters) 44 , first ArgumentIndex(firstArgumentIndex)44 , firstParameterIndex(firstParameterIndex) 45 45 , numArguments(numArguments) 46 46 , extraArguments(0) … … 54 54 55 55 unsigned numParameters; 56 unsigned firstArgumentIndex;56 int firstParameterIndex; 57 57 unsigned numArguments; 58 58 Register* extraArguments; … … 66 66 67 67 // ECMA 10.1.8 68 Arguments::Arguments(ExecState* exec, JSFunction* function, JSActivation* activation, int first ArgumentIndex, Register* argv, int argc)68 Arguments::Arguments(ExecState* exec, JSFunction* function, JSActivation* activation, int firstParameterIndex, Register* argv, int argc) 69 69 : JSObject(exec->lexicalGlobalObject()->argumentsStructure()) 70 , d(new ArgumentsData(activation, function->numParameters(), first ArgumentIndex, argc, function))70 , d(new ArgumentsData(activation, function->numParameters(), firstParameterIndex, argc, function)) 71 71 { 72 72 ASSERT(activation); … … 119 119 120 120 if (d->numParameters == d->numArguments) { 121 args.initialize(&d->activation->registerAt(d->first ArgumentIndex), d->numArguments);121 args.initialize(&d->activation->registerAt(d->firstParameterIndex), d->numArguments); 122 122 return; 123 123 } … … 126 126 unsigned i = 0; 127 127 for (; i < parametersLength; ++i) 128 args.append(d->activation->uncheckedSymbolTableGetValue(d->first ArgumentIndex + i));128 args.append(d->activation->uncheckedSymbolTableGetValue(d->firstParameterIndex + i)); 129 129 for (; i < d->numArguments; ++i) 130 130 args.append(d->extraArguments[i - d->numParameters].getJSValue()); … … 136 136 for (; i < parametersLength; ++i) { 137 137 if (!d->deletedArguments[i]) 138 args.append(d->activation->uncheckedSymbolTableGetValue(d->first ArgumentIndex + i));138 args.append(d->activation->uncheckedSymbolTableGetValue(d->firstParameterIndex + i)); 139 139 else 140 140 args.append(get(exec, i)); … … 152 152 if (i < d->numArguments && (!d->deletedArguments || !d->deletedArguments[i])) { 153 153 if (i < d->numParameters) 154 d->activation->uncheckedSymbolTableGet(d->first ArgumentIndex + i, slot);154 d->activation->uncheckedSymbolTableGet(d->firstParameterIndex + i, slot); 155 155 else 156 156 slot.setValue(d->extraArguments[i - d->numParameters].getJSValue()); … … 167 167 if (isArrayIndex && i < d->numArguments && (!d->deletedArguments || !d->deletedArguments[i])) { 168 168 if (i < d->numParameters) 169 d->activation->uncheckedSymbolTableGet(d->first ArgumentIndex + i, slot);169 d->activation->uncheckedSymbolTableGet(d->firstParameterIndex + i, slot); 170 170 else 171 171 slot.setValue(d->extraArguments[i - d->numParameters].getJSValue()); … … 190 190 if (i < d->numArguments && (!d->deletedArguments || !d->deletedArguments[i])) { 191 191 if (i < d->numParameters) 192 d->activation->uncheckedSymbolTablePut(d->first ArgumentIndex + i, value);192 d->activation->uncheckedSymbolTablePut(d->firstParameterIndex + i, value); 193 193 else 194 194 d->extraArguments[i - d->numParameters] = value; … … 205 205 if (isArrayIndex && i < d->numArguments && (!d->deletedArguments || !d->deletedArguments[i])) { 206 206 if (i < d->numParameters) 207 d->activation->uncheckedSymbolTablePut(d->first ArgumentIndex + i, value);207 d->activation->uncheckedSymbolTablePut(d->firstParameterIndex + i, value); 208 208 else 209 209 d->extraArguments[i - d->numParameters] = value; -
trunk/JavaScriptCore/kjs/DebuggerCallFrame.cpp
r36263 r36821 37 37 namespace JSC { 38 38 39 Register* DebuggerCallFrame::callFrame() const40 {41 return m_registers - m_codeBlock->numLocals - RegisterFile::CallFrameHeaderSize;42 }43 44 39 const UString* DebuggerCallFrame::functionName() const 45 40 { … … 47 42 return 0; 48 43 49 JSFunction* function = static_cast<JSFunction*>( callFrame()[RegisterFile::Callee].getJSValue());44 JSFunction* function = static_cast<JSFunction*>(m_registers[RegisterFile::Callee].getJSValue()); 50 45 if (!function) 51 46 return 0; … … 55 50 DebuggerCallFrame::Type DebuggerCallFrame::type() const 56 51 { 57 if ( callFrame()[RegisterFile::Callee].getJSValue())52 if (m_registers[RegisterFile::Callee].getJSValue()) 58 53 return FunctionType; 59 54 -
trunk/JavaScriptCore/kjs/DebuggerCallFrame.h
r36263 r36821 68 68 69 69 private: 70 Register* callFrame() const;71 72 70 ExecState* m_exec; 73 71 JSGlobalObject* m_dynamicGlobalObject; -
trunk/JavaScriptCore/kjs/JSActivation.cpp
r36743 r36821 52 52 } 53 53 54 void JSActivation::mark() 55 { 56 Base::mark(); 57 58 if (d()->argumentsObject) 59 d()->argumentsObject->mark(); 60 61 Register* registerArray = d()->registerArray.get(); 62 if (!registerArray) 63 return; 64 65 size_t numParametersMinusThis = d()->functionBody->generatedByteCode().numParameters - 1; 66 67 size_t i = 0; 68 size_t count = numParametersMinusThis; 69 for ( ; i < count; ++i) { 70 Register& r = registerArray[i]; 71 if (!r.marked()) 72 r.mark(); 73 } 74 75 size_t numVars = d()->functionBody->generatedByteCode().numVars; 76 77 // Skip the call frame, which sits between the parameters and vars. 78 i += RegisterFile::CallFrameHeaderSize; 79 count += RegisterFile::CallFrameHeaderSize + numVars; 80 81 for ( ; i < count; ++i) { 82 Register& r = registerArray[i]; 83 if (!r.marked()) 84 r.mark(); 85 } 86 } 87 54 88 void JSActivation::copyRegisters() 55 89 { 56 int numLocals = d()->functionBody->generatedByteCode().numLocals; 90 ASSERT(!d()->registerArray); 91 ASSERT(!d()->registerArraySize); 92 93 size_t numParametersMinusThis = d()->functionBody->generatedByteCode().numParameters - 1; 94 size_t numVars = d()->functionBody->generatedByteCode().numVars; 95 size_t numLocals = numVars + numParametersMinusThis; 96 57 97 if (!numLocals) 58 98 return; 59 99 60 copyRegisterArray(d()->registers - numLocals, numLocals); 100 int registerOffset = numParametersMinusThis + RegisterFile::CallFrameHeaderSize; 101 size_t registerArraySize = numLocals + RegisterFile::CallFrameHeaderSize; 102 103 Register* registerArray = copyRegisterArray(d()->registers - registerOffset, registerArraySize); 104 setRegisters(registerArray + registerOffset, registerArray, registerArraySize); 61 105 } 62 106 … … 127 171 } 128 172 129 void JSActivation::mark()130 {131 Base::mark();132 133 if (d()->argumentsObject)134 d()->argumentsObject->mark();135 }136 137 173 bool JSActivation::isActivationObject() const 138 174 { … … 164 200 Arguments* JSActivation::createArgumentsObject(ExecState* exec) 165 201 { 166 Register* callFrame = d()->registers - d()->functionBody->generatedByteCode().numLocals - RegisterFile::CallFrameHeaderSize;167 168 202 JSFunction* function; 169 203 Register* argv; 170 204 int argc; 171 exec->machine()->getArgumentsData(callFrame, function, argv, argc);172 173 int firstArgumentIndex = -d()->functionBody->generatedByteCode().numLocals + 1; 174 return new (exec) Arguments(exec, function, this, first ArgumentIndex, argv, argc);205 int firstParameterIndex; 206 exec->machine()->getArgumentsData(d()->registers, function, firstParameterIndex, argv, argc); 207 208 return new (exec) Arguments(exec, function, this, firstParameterIndex, argv, argc); 175 209 } 176 210 -
trunk/JavaScriptCore/kjs/JSActivation.h
r36735 r36821 45 45 virtual ~JSActivation(); 46 46 47 virtual void mark(); 48 47 49 virtual bool isActivationObject() const; 48 50 virtual bool isDynamicScope() const; … … 72 74 virtual JSObject* toThisObject(ExecState*) const; 73 75 74 virtual void mark();75 76 76 void copyRegisters(); 77 77 -
trunk/JavaScriptCore/kjs/JSGlobalObject.cpp
r36757 r36821 203 203 ASSERT(!hasCustomProperties()); 204 204 symbolTable().clear(); 205 setRegister Array(0, 0);205 setRegisters(0, 0, 0); 206 206 207 207 ExecState* exec = d()->globalExec.get(); … … 397 397 // No need to mark the other structures, because their prototypes are all 398 398 // guaranteed to be referenced elsewhere. 399 400 Register* registerArray = d()->registerArray.get(); 401 if (!registerArray) 402 return; 403 404 size_t size = d()->registerArraySize; 405 for (size_t i = 0; i < size; ++i) { 406 Register& r = registerArray[i]; 407 if (!r.marked()) 408 r.mark(); 409 } 399 410 } 400 411 … … 424 435 return; 425 436 } 426 copyRegisterArray(registerFile.lastGlobal(), numGlobals); 437 438 Register* registerArray = copyRegisterArray(registerFile.lastGlobal(), numGlobals); 439 setRegisters(registerArray + numGlobals, registerArray, numGlobals); 427 440 } 428 441 … … 438 451 if (d()->registerArray) { 439 452 memcpy(registerFile.base() - d()->registerArraySize, d()->registerArray.get(), d()->registerArraySize * sizeof(Register)); 440 setRegisterArray(0, 0); 441 } 442 443 d()->registers = registerFile.base(); 453 setRegisters(registerFile.base(), 0, 0); 454 } 444 455 } 445 456 -
trunk/JavaScriptCore/kjs/JSGlobalObject.h
r36755 r36821 157 157 virtual ~JSGlobalObject(); 158 158 159 virtual void mark(); 160 159 161 virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&); 160 162 virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&, bool& slotIsWriteable); … … 225 227 ScopeChain& globalScopeChain() { return d()->globalScopeChain; } 226 228 227 virtual void mark();228 229 229 virtual bool isGlobalObject() const { return true; } 230 230 virtual JSGlobalObject* toGlobalObject(ExecState*) const; … … 275 275 inline void JSGlobalObject::addStaticGlobals(GlobalPropertyInfo* globals, int count) 276 276 { 277 size_t registerArraySize = d()->registerArraySize; 278 Register* registerArray = new Register[registerArraySize + count]; 277 size_t oldSize = d()->registerArraySize; 278 size_t newSize = oldSize + count; 279 Register* registerArray = new Register[newSize]; 279 280 if (d()->registerArray) 280 memcpy(registerArray + count, d()->registerArray.get(), registerArraySize * sizeof(Register));281 setRegister Array(registerArray, registerArraySize + count);282 283 for (int i = 0, index = -static_cast<int>( registerArraySize) - 1; i < count; ++i, --index) {281 memcpy(registerArray + count, d()->registerArray.get(), oldSize * sizeof(Register)); 282 setRegisters(registerArray + newSize, registerArray, newSize); 283 284 for (int i = 0, index = -static_cast<int>(oldSize) - 1; i < count; ++i, --index) { 284 285 GlobalPropertyInfo& global = globals[i]; 285 286 ASSERT(global.attributes & DontDelete); -
trunk/JavaScriptCore/kjs/JSStaticScopeObject.cpp
r36263 r36821 32 32 ASSERT_CLASS_FITS_IN_CELL(JSStaticScopeObject); 33 33 34 void JSStaticScopeObject::mark() 35 { 36 JSVariableObject::mark(); 37 38 if (!d()->registerStore.marked()) 39 d()->registerStore.mark(); 40 } 41 34 42 JSObject* JSStaticScopeObject::toThisObject(ExecState* exec) const 35 43 { … … 60 68 JSStaticScopeObject::~JSStaticScopeObject() 61 69 { 62 ASSERT(d );63 delete static_cast<JSStaticScopeObjectData*>(d);70 ASSERT(d()); 71 delete d(); 64 72 } 65 73 -
trunk/JavaScriptCore/kjs/JSStaticScopeObject.h
r36263 r36821 48 48 : JSVariableObject(exec->globalData().nullProtoStructureID, new JSStaticScopeObjectData()) 49 49 { 50 JSStaticScopeObjectData* data = static_cast<JSStaticScopeObjectData*>(d); 51 data->registerStore = value; 50 d()->registerStore = value; 52 51 symbolTable().add(ident.ustring().rep(), SymbolTableEntry(-1, attributes)); 53 52 } 54 53 virtual ~JSStaticScopeObject(); 54 virtual void mark(); 55 55 bool isDynamicScope() const; 56 56 virtual JSObject* toThisObject(ExecState*) const; … … 59 59 virtual void put(ExecState*, const Identifier&, JSValue*, PutPropertySlot&); 60 60 void putWithAttributes(ExecState*, const Identifier&, JSValue*, unsigned attributes); 61 62 private: 63 JSStaticScopeObjectData* d() { return static_cast<JSStaticScopeObjectData*>(JSVariableObject::d); } 61 64 }; 62 65 -
trunk/JavaScriptCore/kjs/JSVariableObject.cpp
r36263 r36821 64 64 } 65 65 66 void JSVariableObject::mark()67 {68 JSObject::mark();69 70 if (!d->registerArray)71 return;72 73 Register* end = d->registerArray.get() + d->registerArraySize;74 for (Register* it = d->registerArray.get(); it != end; ++it)75 if (!(*it).marked())76 (*it).mark();77 }78 79 66 bool JSVariableObject::isVariableObject() const 80 67 { … … 82 69 } 83 70 84 voidJSVariableObject::copyRegisterArray(Register* src, size_t count)71 Register* JSVariableObject::copyRegisterArray(Register* src, size_t count) 85 72 { 86 ASSERT(!d->registerArray);87 88 73 Register* registerArray = new Register[count]; 89 74 memcpy(registerArray, src, count * sizeof(Register)); 90 75 91 setRegisterArray(registerArray, count);76 return registerArray; 92 77 } 93 78 94 void JSVariableObject::setRegister Array(Register* registerArray, size_t count)79 void JSVariableObject::setRegisters(Register* r, Register* registerArray, size_t count) 95 80 { 96 81 if (registerArray != d->registerArray.get()) 97 82 d->registerArray.set(registerArray); 98 83 d->registerArraySize = count; 99 d->registers = r egisterArray + count;84 d->registers = r; 100 85 } 101 86 -
trunk/JavaScriptCore/kjs/JSVariableObject.h
r36675 r36821 49 49 virtual bool deleteProperty(ExecState*, const Identifier&); 50 50 virtual void getPropertyNames(ExecState*, PropertyNameArray&); 51 virtual void mark();52 51 53 52 virtual bool isVariableObject() const; … … 72 71 73 72 SymbolTable* symbolTable; // Maps name -> offset from "r" in register file. 74 Register* registers; // Pointers to the register past the end of local storage. (Local storage indexes are negative.)73 Register* registers; // "r" in the register file. 75 74 OwnArrayPtr<Register> registerArray; // Independent copy of registers, used when a variable object copies its registers out of the register file. 76 75 size_t registerArraySize; … … 92 91 } 93 92 94 voidcopyRegisterArray(Register* src, size_t count);95 void setRegister Array(Register* registerArray, size_t count);93 Register* copyRegisterArray(Register* src, size_t count); 94 void setRegisters(Register* r, Register* registerArray, size_t count); 96 95 97 96 bool symbolTableGet(const Identifier&, PropertySlot&); -
trunk/JavaScriptCore/kjs/SymbolTable.h
r36263 r36821 39 39 40 40 // The bit twiddling in this class assumes that every register index is a 41 // reasonably small negative number, and therefore has its high two bits set. 41 // reasonably small positive or negative number, and therefore has its high 42 // four bits all set or all unset. 42 43 43 44 struct SymbolTableEntry { 44 45 SymbolTableEntry() 45 : rawValue(0)46 : m_bits(0) 46 47 { 47 48 } 48 49 49 50 SymbolTableEntry(int index) 50 51 { 51 ASSERT(index & 0x80000000); 52 ASSERT(index & 0x40000000); 52 ASSERT(isValidIndex(index)); 53 pack(index, false, false); 54 } 53 55 54 rawValue = index & ~0x80000000 & ~0x40000000; 56 SymbolTableEntry(int index, unsigned attributes) 57 { 58 ASSERT(isValidIndex(index)); 59 pack(index, attributes & ReadOnly, attributes & DontEnum); 55 60 } 56 61 57 SymbolTableEntry(int index, unsigned attributes)58 {59 ASSERT(index & 0x80000000);60 ASSERT(index & 0x40000000);61 62 rawValue = index;63 64 if (!(attributes & ReadOnly))65 rawValue &= ~0x80000000;66 67 if (!(attributes & DontEnum))68 rawValue &= ~0x40000000;69 }70 71 62 bool isNull() const 72 63 { 73 return ! rawValue;64 return !m_bits; 74 65 } 75 66 76 67 int getIndex() const 77 68 { 78 ASSERT(!isNull()); 79 return rawValue | 0x80000000 | 0x40000000; 69 return m_bits >> FlagBits; 80 70 } 81 71 … … 83 73 { 84 74 unsigned attributes = 0; 85 86 if (rawValue & 0x80000000) 75 if (m_bits & ReadOnlyFlag) 87 76 attributes |= ReadOnly; 88 89 if (rawValue & 0x40000000) 77 if (m_bits & DontEnumFlag) 90 78 attributes |= DontEnum; 91 92 79 return attributes; 93 80 } … … 95 82 void setAttributes(unsigned attributes) 96 83 { 97 rawValue = getIndex(); 98 99 if (!(attributes & ReadOnly)) 100 rawValue &= ~0x80000000; 101 102 if (!(attributes & DontEnum)) 103 rawValue &= ~0x40000000; 84 pack(getIndex(), attributes & ReadOnly, attributes & DontEnum); 104 85 } 105 86 106 87 bool isReadOnly() const 107 88 { 108 return rawValue & 0x80000000;89 return m_bits & ReadOnlyFlag; 109 90 } 110 91 111 int rawValue; 92 private: 93 static const unsigned ReadOnlyFlag = 0x1; 94 static const unsigned DontEnumFlag = 0x2; 95 static const unsigned NotNullFlag = 0x4; 96 static const unsigned FlagBits = 3; 97 98 void pack(int index, bool readOnly, bool dontEnum) 99 { 100 m_bits = (index << FlagBits) | NotNullFlag; 101 if (readOnly) 102 m_bits |= ReadOnlyFlag; 103 if (dontEnum) 104 m_bits |= DontEnumFlag; 105 } 106 107 bool isValidIndex(int index) 108 { 109 return ((index << FlagBits) >> FlagBits) == index; 110 } 111 112 int m_bits; 112 113 }; 113 114 … … 115 116 typedef SymbolTableEntry TraitType; 116 117 static SymbolTableEntry emptyValue() { return SymbolTableEntry(); } 117 static const bool emptyValueIsZero = false;118 static const bool emptyValueIsZero = true; 118 119 static const bool needsDestruction = false; 119 120 }; -
trunk/JavaScriptCore/kjs/nodes.cpp
r36809 r36821 287 287 RegisterID* ResolveNode::emitCode(CodeGenerator& generator, RegisterID* dst) 288 288 { 289 if (RegisterID* local = generator.registerFor Local(m_ident)) {289 if (RegisterID* local = generator.registerFor(m_ident)) { 290 290 if (dst == ignoredResult()) 291 291 return 0; … … 405 405 RegisterID* NewExprNode::emitCode(CodeGenerator& generator, RegisterID* dst) 406 406 { 407 RefPtr<RegisterID> r0= generator.emitNode(m_expr.get());408 return generator.emitConstruct(generator.finalDestination(dst , r0.get()), r0.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);407 RefPtr<RegisterID> func = generator.emitNode(m_expr.get()); 408 return generator.emitConstruct(generator.finalDestination(dst), func.get(), m_args.get(), m_divot, m_startOffset, m_endOffset); 409 409 } 410 410 … … 412 412 { 413 413 RefPtr<RegisterID> base = generator.tempDestination(dst); 414 Re gisterID*func = generator.newTemporary();415 generator.emitResolveWithBase(base.get(), func , generator.propertyNames().eval);416 return generator.emitCallEval(generator.finalDestination(dst, base.get()), func , base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);414 RefPtr<RegisterID> func = generator.newTemporary(); 415 generator.emitResolveWithBase(base.get(), func.get(), generator.propertyNames().eval); 416 return generator.emitCallEval(generator.finalDestination(dst, base.get()), func.get(), base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset); 417 417 } 418 418 419 419 RegisterID* FunctionCallValueNode::emitCode(CodeGenerator& generator, RegisterID* dst) 420 420 { 421 Re gisterID*func = generator.emitNode(m_expr.get());422 return generator.emitCall(generator.finalDestination(dst), func , 0, m_args.get(), m_divot, m_startOffset, m_endOffset);421 RefPtr<RegisterID> func = generator.emitNode(m_expr.get()); 422 return generator.emitCall(generator.finalDestination(dst), func.get(), 0, m_args.get(), m_divot, m_startOffset, m_endOffset); 423 423 } 424 424 425 425 RegisterID* FunctionCallResolveNode::emitCode(CodeGenerator& generator, RegisterID* dst) 426 426 { 427 if (Re gisterID* local = generator.registerForLocal(m_ident))428 return generator.emitCall(generator.finalDestination(dst), local , 0, m_args.get(), m_divot, m_startOffset, m_endOffset);427 if (RefPtr<RegisterID> local = generator.registerFor(m_ident)) 428 return generator.emitCall(generator.finalDestination(dst), local.get(), 0, m_args.get(), m_divot, m_startOffset, m_endOffset); 429 429 430 430 int index = 0; … … 432 432 JSValue* globalObject = 0; 433 433 if (generator.findScopedProperty(m_ident, index, depth, false, globalObject) && index != missingSymbolMarker()) { 434 Re gisterID*func = generator.emitGetScopedVar(generator.newTemporary(), depth, index, globalObject);435 return generator.emitCall(generator.finalDestination(dst), func , 0, m_args.get(), m_divot, m_startOffset, m_endOffset);434 RefPtr<RegisterID> func = generator.emitGetScopedVar(generator.newTemporary(), depth, index, globalObject); 435 return generator.emitCall(generator.finalDestination(dst), func.get(), 0, m_args.get(), m_divot, m_startOffset, m_endOffset); 436 436 } 437 437 438 438 RefPtr<RegisterID> base = generator.tempDestination(dst); 439 Re gisterID*func = generator.newTemporary();439 RefPtr<RegisterID> func = generator.newTemporary(); 440 440 int identifierStart = m_divot - m_startOffset; 441 441 generator.emitExpressionInfo(identifierStart + m_ident.size(), m_ident.size(), 0); 442 generator.emitResolveFunction(base.get(), func , m_ident);443 return generator.emitCall(generator.finalDestination(dst, base.get()), func , base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);442 generator.emitResolveFunction(base.get(), func.get(), m_ident); 443 return generator.emitCall(generator.finalDestination(dst, base.get()), func.get(), base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset); 444 444 } 445 445 … … 449 449 RegisterID* property = generator.emitNode(m_subscript.get()); 450 450 generator.emitExpressionInfo(m_divot - m_subexpressionDivotOffset, m_startOffset - m_subexpressionDivotOffset, m_subexpressionEndOffset); 451 Re gisterID*function = generator.emitGetByVal(generator.newTemporary(), base.get(), property);452 return generator.emitCall(generator.finalDestination(dst, base.get()), function , base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);451 RefPtr<RegisterID> function = generator.emitGetByVal(generator.newTemporary(), base.get(), property); 452 return generator.emitCall(generator.finalDestination(dst, base.get()), function.get(), base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset); 453 453 } 454 454 … … 457 457 RefPtr<RegisterID> base = generator.emitNode(m_base.get()); 458 458 generator.emitExpressionInfo(m_divot - m_subexpressionDivotOffset, m_startOffset - m_subexpressionDivotOffset, m_subexpressionEndOffset); 459 Re gisterID*function = generator.emitGetById(generator.newTemporary(), base.get(), m_ident);460 return generator.emitCall(generator.finalDestination(dst, base.get()), function , base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);459 RefPtr<RegisterID> function = generator.emitGetById(generator.newTemporary(), base.get(), m_ident); 460 return generator.emitCall(generator.finalDestination(dst, base.get()), function.get(), base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset); 461 461 } 462 462 … … 475 475 RegisterID* PostfixResolveNode::emitCode(CodeGenerator& generator, RegisterID* dst) 476 476 { 477 if (RegisterID* local = generator.registerFor Local(m_ident)) {477 if (RegisterID* local = generator.registerFor(m_ident)) { 478 478 if (generator.isLocalConstant(m_ident)) { 479 479 if (dst == ignoredResult()) … … 575 575 RegisterID* DeleteResolveNode::emitCode(CodeGenerator& generator, RegisterID* dst) 576 576 { 577 if (generator.registerFor Local(m_ident))577 if (generator.registerFor(m_ident)) 578 578 return generator.emitUnexpectedLoad(generator.finalDestination(dst), false); 579 579 … … 630 630 RegisterID* TypeOfResolveNode::emitCode(CodeGenerator& generator, RegisterID* dst) 631 631 { 632 if (RegisterID* local = generator.registerFor Local(m_ident)) {632 if (RegisterID* local = generator.registerFor(m_ident)) { 633 633 if (dst == ignoredResult()) 634 634 return 0; … … 659 659 RegisterID* PrefixResolveNode::emitCode(CodeGenerator& generator, RegisterID* dst) 660 660 { 661 if (RegisterID* local = generator.registerFor Local(m_ident)) {661 if (RegisterID* local = generator.registerFor(m_ident)) { 662 662 if (generator.isLocalConstant(m_ident)) { 663 663 if (dst == ignoredResult()) … … 894 894 RegisterID* ReadModifyResolveNode::emitCode(CodeGenerator& generator, RegisterID* dst) 895 895 { 896 if (RegisterID* local = generator.registerFor Local(m_ident)) {896 if (RegisterID* local = generator.registerFor(m_ident)) { 897 897 if (generator.isLocalConstant(m_ident)) { 898 898 RegisterID* src2 = generator.emitNode(m_right.get()); … … 938 938 RegisterID* AssignResolveNode::emitCode(CodeGenerator& generator, RegisterID* dst) 939 939 { 940 if (RegisterID* local = generator.registerFor Local(m_ident)) {940 if (RegisterID* local = generator.registerFor(m_ident)) { 941 941 if (generator.isLocalConstant(m_ident)) 942 942 return generator.emitNode(dst, m_right.get()); … … 1048 1048 RegisterID* ConstDeclNode::emitCodeSingle(CodeGenerator& generator) 1049 1049 { 1050 if (RegisterID* local = generator. registerForLocalConstInit(m_ident)) {1050 if (RegisterID* local = generator.constRegisterFor(m_ident)) { 1051 1051 if (!m_init) 1052 1052 return local; … … 1339 1339 if (m_lexpr->isResolveNode()) { 1340 1340 const Identifier& ident = static_cast<ResolveNode*>(m_lexpr.get())->identifier(); 1341 propertyName = generator.registerFor Local(ident);1341 propertyName = generator.registerFor(ident); 1342 1342 if (!propertyName) { 1343 1343 propertyName = generator.newTemporary();
Note:
See TracChangeset
for help on using the changeset viewer.