Changeset 34659 in webkit for trunk/JavaScriptCore/VM/Machine.cpp
- Timestamp:
- Jun 19, 2008, 10:29:29 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/VM/Machine.cpp
r34607 r34659 132 132 if (value.isNull()) 133 133 return throwOutOfMemoryError(exec); 134 return jsString( value);135 } 136 137 return jsNumber( p1->toNumber(exec) + p2->toNumber(exec));134 return jsString(exec, value); 135 } 136 137 return jsNumber(exec, p1->toNumber(exec) + p2->toNumber(exec)); 138 138 } 139 139 … … 154 154 155 155 if (bothTypes == ((NumberType << 3) | NumberType)) 156 return jsNumber( v1->uncheckedGetNumber() + v2->uncheckedGetNumber());156 return jsNumber(exec, v1->uncheckedGetNumber() + v2->uncheckedGetNumber()); 157 157 if (bothTypes == ((StringType << 3) | StringType)) { 158 158 UString value = static_cast<JSString*>(v1)->value() + static_cast<JSString*>(v2)->value(); 159 159 if (value.isNull()) 160 160 return throwOutOfMemoryError(exec); 161 return jsString( value);161 return jsString(exec, value); 162 162 } 163 163 … … 166 166 } 167 167 168 static JSValue* jsTypeStringForValue( JSValue* v)168 static JSValue* jsTypeStringForValue(ExecState* exec, JSValue* v) 169 169 { 170 170 switch (v->type()) { 171 171 case UndefinedType: 172 return jsString( "undefined");172 return jsString(exec, "undefined"); 173 173 case NullType: 174 return jsString( "object");174 return jsString(exec, "object"); 175 175 case BooleanType: 176 return jsString( "boolean");176 return jsString(exec, "boolean"); 177 177 case NumberType: 178 return jsString( "number");178 return jsString(exec, "number"); 179 179 case StringType: 180 return jsString( "string");180 return jsString(exec, "string"); 181 181 default: 182 182 if (v->isObject()) { … … 184 184 // as null when doing comparisons. 185 185 if (static_cast<JSObject*>(v)->masqueradeAsUndefined()) 186 return jsString( "undefined");186 return jsString(exec, "undefined"); 187 187 else if (static_cast<JSObject*>(v)->implementsCall()) 188 return jsString( "function");188 return jsString(exec, "function"); 189 189 } 190 190 191 return jsString( "object");191 return jsString(exec, "object"); 192 192 } 193 193 } … … 413 413 } 414 414 415 ALWAYS_INLINE ScopeChainNode* scopeChainForCall( FunctionBodyNode* functionBodyNode, CodeBlock* newCodeBlock, ScopeChainNode* callDataScopeChain, Register** registerBase, Register* r)415 ALWAYS_INLINE ScopeChainNode* scopeChainForCall(ExecState* exec, FunctionBodyNode* functionBodyNode, CodeBlock* newCodeBlock, ScopeChainNode* callDataScopeChain, Register** registerBase, Register* r) 416 416 { 417 417 if (newCodeBlock->needsFullScopeChain) { 418 JSActivation* activation = new JSActivation(functionBodyNode, registerBase, r - (*registerBase));418 JSActivation* activation = new (exec) JSActivation(functionBodyNode, registerBase, r - (*registerBase)); 419 419 r[Machine::OptionalCalleeActivation - Machine::CallFrameHeaderSize - newCodeBlock->numLocals].u.jsValue = activation; 420 420 … … 611 611 JSObject* exception = static_cast<JSObject*>(exceptionValue); 612 612 if (!exception->hasProperty(exec, Identifier(exec, "line")) && !exception->hasProperty(exec, Identifier(exec, "sourceURL"))) { 613 exception->put(exec, Identifier(exec, "line"), jsNumber( codeBlock->lineNumberForVPC(vPC)));614 exception->put(exec, Identifier(exec, "sourceURL"), jsOwnedString( codeBlock->ownerNode->sourceURL()));613 exception->put(exec, Identifier(exec, "line"), jsNumber(exec, codeBlock->lineNumberForVPC(vPC))); 614 exception->put(exec, Identifier(exec, "sourceURL"), jsOwnedString(exec, codeBlock->ownerNode->sourceURL())); 615 615 } 616 616 } … … 726 726 } 727 727 728 scopeChain = scopeChainForCall( functionBodyNode, newCodeBlock, scopeChain, registerBase, r);728 scopeChain = scopeChainForCall(exec, functionBodyNode, newCodeBlock, scopeChain, registerBase, r); 729 729 730 730 ExecState newExec(exec, this, registerFile, scopeChain, callFrameOffset); … … 971 971 int dst = (++vPC)->u.operand; 972 972 int regExp = (++vPC)->u.operand; 973 r[dst].u.jsValue = new RegExpObject(scopeChain->globalObject()->regExpPrototype(), codeBlock->regexps[regExp]);973 r[dst].u.jsValue = new (exec) RegExpObject(scopeChain->globalObject()->regExpPrototype(), codeBlock->regexps[regExp]); 974 974 975 975 ++vPC; … … 1114 1114 result = JSImmediate::incImmediateNumber(v); 1115 1115 else 1116 result = jsNumber( v->toNumber(exec) + 1);1116 result = jsNumber(exec, v->toNumber(exec) + 1); 1117 1117 VM_CHECK_EXCEPTION(); 1118 1118 r[srcDst].u.jsValue = result; … … 1133 1133 result = JSImmediate::decImmediateNumber(v); 1134 1134 else 1135 result = jsNumber( v->toNumber(exec) - 1);1135 result = jsNumber(exec, v->toNumber(exec) - 1); 1136 1136 VM_CHECK_EXCEPTION(); 1137 1137 r[srcDst].u.jsValue = result; … … 1157 1157 } else { 1158 1158 number = r[srcDst].u.jsValue->toJSNumber(exec); 1159 result = jsNumber( number->uncheckedGetNumber() + 1);1159 result = jsNumber(exec, number->uncheckedGetNumber() + 1); 1160 1160 } 1161 1161 VM_CHECK_EXCEPTION(); … … 1184 1184 } else { 1185 1185 number = r[srcDst].u.jsValue->toJSNumber(exec); 1186 result = jsNumber( number->uncheckedGetNumber() - 1);1186 result = jsNumber(exec, number->uncheckedGetNumber() - 1); 1187 1187 } 1188 1188 VM_CHECK_EXCEPTION(); … … 1218 1218 int dst = (++vPC)->u.operand; 1219 1219 int src = (++vPC)->u.operand; 1220 JSValue* result = jsNumber( -r[src].u.jsValue->toNumber(exec));1220 JSValue* result = jsNumber(exec, -r[src].u.jsValue->toNumber(exec)); 1221 1221 VM_CHECK_EXCEPTION(); 1222 1222 r[dst].u.jsValue = result; … … 1255 1255 JSValue* src1 = r[(++vPC)->u.operand].u.jsValue; 1256 1256 JSValue* src2 = r[(++vPC)->u.operand].u.jsValue; 1257 JSValue* result = jsNumber( src1->toNumber(exec) * src2->toNumber(exec));1257 JSValue* result = jsNumber(exec, src1->toNumber(exec) * src2->toNumber(exec)); 1258 1258 VM_CHECK_EXCEPTION(); 1259 1259 dst = result; … … 1272 1272 int dividend = (++vPC)->u.operand; 1273 1273 int divisor = (++vPC)->u.operand; 1274 JSValue* result = jsNumber( r[dividend].u.jsValue->toNumber(exec) / r[divisor].u.jsValue->toNumber(exec));1274 JSValue* result = jsNumber(exec, r[dividend].u.jsValue->toNumber(exec) / r[divisor].u.jsValue->toNumber(exec)); 1275 1275 VM_CHECK_EXCEPTION(); 1276 1276 r[dst].u.jsValue = result; … … 1289 1289 int divisor = (++vPC)->u.operand; 1290 1290 double d = r[dividend].u.jsValue->toNumber(exec); 1291 JSValue* result = jsNumber( fmod(d, r[divisor].u.jsValue->toNumber(exec)));1291 JSValue* result = jsNumber(exec, fmod(d, r[divisor].u.jsValue->toNumber(exec))); 1292 1292 VM_CHECK_EXCEPTION(); 1293 1293 r[dst].u.jsValue = result; … … 1309 1309 result = JSImmediate::subImmediateNumbers(src1, src2); 1310 1310 else { 1311 result = jsNumber( src1->toNumber(exec) - src2->toNumber(exec));1311 result = jsNumber(exec, src1->toNumber(exec) - src2->toNumber(exec)); 1312 1312 VM_CHECK_EXCEPTION(); 1313 1313 } … … 1328 1328 JSValue* result; 1329 1329 if (JSImmediate::areBothImmediateNumbers(val, shift)) 1330 result = jsNumber( JSImmediate::getTruncatedInt32(val) << (JSImmediate::toTruncatedUInt32(shift) & 0x1f));1330 result = jsNumber(exec, JSImmediate::getTruncatedInt32(val) << (JSImmediate::toTruncatedUInt32(shift) & 0x1f)); 1331 1331 else { 1332 result = jsNumber( (val->toInt32(exec)) << (shift->toUInt32(exec) & 0x1f));1332 result = jsNumber(exec, (val->toInt32(exec)) << (shift->toUInt32(exec) & 0x1f)); 1333 1333 VM_CHECK_EXCEPTION(); 1334 1334 } … … 1352 1352 result = JSImmediate::rightShiftImmediateNumbers(val, shift); 1353 1353 else { 1354 result = jsNumber( (val->toInt32(exec)) >> (shift->toUInt32(exec) & 0x1f));1354 result = jsNumber(exec, (val->toInt32(exec)) >> (shift->toUInt32(exec) & 0x1f)); 1355 1355 VM_CHECK_EXCEPTION(); 1356 1356 } … … 1374 1374 result = JSImmediate::rightShiftImmediateNumbers(val, shift); 1375 1375 else { 1376 result = jsNumber( (val->toUInt32(exec)) >> (shift->toUInt32(exec) & 0x1f));1376 result = jsNumber(exec, (val->toUInt32(exec)) >> (shift->toUInt32(exec) & 0x1f)); 1377 1377 VM_CHECK_EXCEPTION(); 1378 1378 } … … 1396 1396 result = JSImmediate::andImmediateNumbers(src1, src2); 1397 1397 else { 1398 result = jsNumber( src1->toInt32(exec) & src2->toInt32(exec));1398 result = jsNumber(exec, src1->toInt32(exec) & src2->toInt32(exec)); 1399 1399 VM_CHECK_EXCEPTION(); 1400 1400 } … … 1418 1418 result = JSImmediate::xorImmediateNumbers(src1, src2); 1419 1419 else { 1420 result = jsNumber( src1->toInt32(exec) ^ src2->toInt32(exec));1420 result = jsNumber(exec, src1->toInt32(exec) ^ src2->toInt32(exec)); 1421 1421 VM_CHECK_EXCEPTION(); 1422 1422 } … … 1440 1440 result = JSImmediate::orImmediateNumbers(src1, src2); 1441 1441 else { 1442 result = jsNumber( src1->toInt32(exec) | src2->toInt32(exec));1442 result = jsNumber(exec, src1->toInt32(exec) | src2->toInt32(exec)); 1443 1443 VM_CHECK_EXCEPTION(); 1444 1444 } … … 1456 1456 int dst = (++vPC)->u.operand; 1457 1457 int src = (++vPC)->u.operand; 1458 JSValue* result = jsNumber( ~r[src].u.jsValue->toInt32(exec));1458 JSValue* result = jsNumber(exec, ~r[src].u.jsValue->toInt32(exec)); 1459 1459 VM_CHECK_EXCEPTION(); 1460 1460 r[dst].u.jsValue = result; … … 1510 1510 int dst = (++vPC)->u.operand; 1511 1511 int src = (++vPC)->u.operand; 1512 r[dst].u.jsValue = jsTypeStringForValue( r[src].u.jsValue);1512 r[dst].u.jsValue = jsTypeStringForValue(exec, r[src].u.jsValue); 1513 1513 1514 1514 ++vPC; … … 2096 2096 codeBlock = newCodeBlock; 2097 2097 exec->m_callFrameOffset = callFrameOffset; 2098 setScopeChain(exec, scopeChain, scopeChainForCall( functionBodyNode, codeBlock, callDataScopeChain, registerBase, r));2098 setScopeChain(exec, scopeChain, scopeChainForCall(exec, functionBodyNode, codeBlock, callDataScopeChain, registerBase, r)); 2099 2099 k = codeBlock->jsValues.data(); 2100 2100 vPC = codeBlock->instructions.begin(); … … 2224 2224 else 2225 2225 prototype = scopeChain->globalObject()->objectPrototype(); 2226 JSObject* newObject = new JSObject(prototype);2226 JSObject* newObject = new (exec) JSObject(prototype); 2227 2227 r[firstArg].u.jsValue = newObject; // "this" value 2228 2228 … … 2239 2239 codeBlock = newCodeBlock; 2240 2240 exec->m_callFrameOffset = callFrameOffset; 2241 setScopeChain(exec, scopeChain, scopeChainForCall( functionBodyNode, codeBlock, callDataScopeChain, registerBase, r));2241 setScopeChain(exec, scopeChain, scopeChainForCall(exec, functionBodyNode, codeBlock, callDataScopeChain, registerBase, r)); 2242 2242 k = codeBlock->jsValues.data(); 2243 2243 vPC = codeBlock->instructions.begin(); … … 2551 2551 if (!activation) { 2552 2552 CodeBlock* codeBlock = &function->body->generatedCode(); 2553 activation = new JSActivation(function->body, registerBase, callFrameOffset + CallFrameHeaderSize + codeBlock->numLocals);2553 activation = new (exec) JSActivation(function->body, registerBase, callFrameOffset + CallFrameHeaderSize + codeBlock->numLocals); 2554 2554 callFrame[OptionalCalleeActivation].u.jsValue = activation; 2555 2555 }
Note:
See TracChangeset
for help on using the changeset viewer.