Changeset 38322 in webkit for trunk/JavaScriptCore/bytecompiler
- Timestamp:
- Nov 11, 2008, 4:32:38 PM (17 years ago)
- Location:
- trunk/JavaScriptCore/bytecompiler
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/bytecompiler/CodeGenerator.cpp
r38298 r38322 1220 1220 } 1221 1221 1222 RegisterID* CodeGenerator::emitCall(RegisterID* dst, RegisterID* func, RegisterID* base, ArgumentsNode* argumentsNode, unsigned divot, unsigned startOffset, unsigned endOffset)1223 { 1224 return emitCall(op_call, dst, func, base, argumentsNode, divot, startOffset, endOffset);1225 } 1226 1227 RegisterID* CodeGenerator::emitCallEval(RegisterID* dst, RegisterID* func, RegisterID* base, ArgumentsNode* argumentsNode, unsigned divot, unsigned startOffset, unsigned endOffset)1228 { 1229 return emitCall(op_call_eval, dst, func, base, argumentsNode, divot, startOffset, endOffset);1230 } 1231 1232 RegisterID* CodeGenerator::emitCall(OpcodeID opcodeID, RegisterID* dst, RegisterID* func, RegisterID* base, ArgumentsNode* argumentsNode, unsigned divot, unsigned startOffset, unsigned endOffset)1222 RegisterID* CodeGenerator::emitCall(RegisterID* dst, RegisterID* func, RegisterID* thisRegister, ArgumentsNode* argumentsNode, unsigned divot, unsigned startOffset, unsigned endOffset) 1223 { 1224 return emitCall(op_call, dst, func, thisRegister, argumentsNode, divot, startOffset, endOffset); 1225 } 1226 1227 RegisterID* CodeGenerator::emitCallEval(RegisterID* dst, RegisterID* func, RegisterID* thisRegister, ArgumentsNode* argumentsNode, unsigned divot, unsigned startOffset, unsigned endOffset) 1228 { 1229 return emitCall(op_call_eval, dst, func, thisRegister, argumentsNode, divot, startOffset, endOffset); 1230 } 1231 1232 RegisterID* CodeGenerator::emitCall(OpcodeID opcodeID, RegisterID* dst, RegisterID* func, RegisterID* thisRegister, ArgumentsNode* argumentsNode, unsigned divot, unsigned startOffset, unsigned endOffset) 1233 1233 { 1234 1234 ASSERT(opcodeID == op_call || opcodeID == op_call_eval); 1235 1235 ASSERT(func->refCount()); 1236 ASSERT(!base || base->refCount());1237 1236 1238 1237 // Generate code for arguments. 1239 1238 Vector<RefPtr<RegisterID>, 16> argv; 1240 argv.append( newTemporary()); // reserve space for "this"1239 argv.append(thisRegister); 1241 1240 for (ArgumentListNode* n = argumentsNode->m_listNode.get(); n; n = n->m_next.get()) { 1242 1241 argv.append(newTemporary()); … … 1256 1255 emitExpressionInfo(divot, startOffset, endOffset); 1257 1256 m_codeBlock->callLinkInfos.append(CallLinkInfo()); 1257 1258 // Emit call. 1258 1259 emitOpcode(opcodeID); 1259 instructions().append(dst->index()); 1260 instructions().append(func->index()); 1261 instructions().append(base ? base->index() : missingThisObjectMarker()); // We encode the "this" value in the instruction stream, to avoid an explicit instruction for copying or loading it. 1262 instructions().append(argv[0]->index()); // argv 1263 instructions().append(argv.size()); // argc 1260 instructions().append(dst->index()); // dst 1261 instructions().append(func->index()); // func 1262 instructions().append(argv.size()); // argCount 1264 1263 instructions().append(argv[0]->index() + argv.size() + RegisterFile::CallFrameHeaderSize); // registerOffset 1265 1264 … … 1320 1319 emitExpressionInfo(divot, startOffset, endOffset); 1321 1320 m_codeBlock->callLinkInfos.append(CallLinkInfo()); 1321 1322 1322 emitOpcode(op_construct); 1323 instructions().append(dst->index()); 1324 instructions().append(func->index()); 1325 instructions().append(funcProto->index()); 1326 instructions().append(argv[0]->index()); // argv 1327 instructions().append(argv.size()); // argc 1323 instructions().append(dst->index()); // dst 1324 instructions().append(func->index()); // func 1325 instructions().append(argv.size()); // argCount 1328 1326 instructions().append(argv[0]->index() + argv.size() + RegisterFile::CallFrameHeaderSize); // registerOffset 1327 instructions().append(funcProto->index()); // proto 1328 instructions().append(argv[0]->index()); // thisRegister 1329 1329 1330 1330 emitOpcode(op_construct_verify); -
trunk/JavaScriptCore/bytecompiler/CodeGenerator.h
r38247 r38322 274 274 RegisterID* emitPutSetter(RegisterID* base, const Identifier& property, RegisterID* value); 275 275 276 RegisterID* emitCall(RegisterID* dst, RegisterID* func, RegisterID* base, ArgumentsNode*, unsigned divot, unsigned startOffset, unsigned endOffset);277 RegisterID* emitCallEval(RegisterID* dst, RegisterID* func, RegisterID* base, ArgumentsNode*, unsigned divot, unsigned startOffset, unsigned endOffset);276 RegisterID* emitCall(RegisterID* dst, RegisterID* func, RegisterID* thisRegister, ArgumentsNode*, unsigned divot, unsigned startOffset, unsigned endOffset); 277 RegisterID* emitCallEval(RegisterID* dst, RegisterID* func, RegisterID* thisRegister, ArgumentsNode*, unsigned divot, unsigned startOffset, unsigned endOffset); 278 278 279 279 RegisterID* emitReturn(RegisterID* src); … … 346 346 typedef HashMap<UString::Rep*, JSString*, IdentifierRepHash> IdentifierStringMap; 347 347 348 RegisterID* emitCall(OpcodeID, RegisterID* , RegisterID*, RegisterID*, ArgumentsNode*, unsigned divot, unsigned startOffset, unsigned endOffset);348 RegisterID* emitCall(OpcodeID, RegisterID* dst, RegisterID* func, RegisterID* thisRegister, ArgumentsNode*, unsigned divot, unsigned startOffset, unsigned endOffset); 349 349 350 350 RegisterID* newRegister();
Note:
See TracChangeset
for help on using the changeset viewer.