Changeset 38427 in webkit for trunk/JavaScriptCore/bytecompiler/CodeGenerator.cpp
- Timestamp:
- Nov 15, 2008, 1:05:23 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/bytecompiler/CodeGenerator.cpp
r38425 r38427 116 116 117 117 #ifndef NDEBUG 118 bool CodeGenerator::s_dumpsGeneratedCode = false;118 bool BytecodeGenerator::s_dumpsGeneratedCode = false; 119 119 #endif 120 120 121 void CodeGenerator::setDumpsGeneratedCode(bool dumpsGeneratedCode)121 void BytecodeGenerator::setDumpsGeneratedCode(bool dumpsGeneratedCode) 122 122 { 123 123 #ifndef NDEBUG … … 128 128 } 129 129 130 void CodeGenerator::generate()130 void BytecodeGenerator::generate() 131 131 { 132 132 m_codeBlock->thisRegister = m_thisRegister.index(); … … 169 169 } 170 170 171 bool CodeGenerator::addVar(const Identifier& ident, bool isConstant, RegisterID*& r0)171 bool BytecodeGenerator::addVar(const Identifier& ident, bool isConstant, RegisterID*& r0) 172 172 { 173 173 int index = m_calleeRegisters.size(); … … 185 185 } 186 186 187 bool CodeGenerator::addGlobalVar(const Identifier& ident, bool isConstant, RegisterID*& r0)187 bool BytecodeGenerator::addGlobalVar(const Identifier& ident, bool isConstant, RegisterID*& r0) 188 188 { 189 189 int index = m_nextGlobalIndex; … … 202 202 } 203 203 204 void CodeGenerator::allocateConstants(size_t count)204 void BytecodeGenerator::allocateConstants(size_t count) 205 205 { 206 206 m_codeBlock->numConstants = count; … … 215 215 } 216 216 217 CodeGenerator::CodeGenerator(ProgramNode* programNode, const Debugger* debugger, const ScopeChain& scopeChain, SymbolTable* symbolTable, CodeBlock* codeBlock, VarStack& varStack, FunctionStack& functionStack)217 BytecodeGenerator::BytecodeGenerator(ProgramNode* programNode, const Debugger* debugger, const ScopeChain& scopeChain, SymbolTable* symbolTable, CodeBlock* codeBlock, VarStack& varStack, FunctionStack& functionStack) 218 218 : m_shouldEmitDebugHooks(!!debugger) 219 219 , m_shouldEmitProfileHooks(scopeChain.globalObject()->supportsProfiling()) … … 294 294 } 295 295 296 CodeGenerator::CodeGenerator(FunctionBodyNode* functionBody, const Debugger* debugger, const ScopeChain& scopeChain, SymbolTable* symbolTable, CodeBlock* codeBlock)296 BytecodeGenerator::BytecodeGenerator(FunctionBodyNode* functionBody, const Debugger* debugger, const ScopeChain& scopeChain, SymbolTable* symbolTable, CodeBlock* codeBlock) 297 297 : m_shouldEmitDebugHooks(!!debugger) 298 298 , m_shouldEmitProfileHooks(scopeChain.globalObject()->supportsProfiling()) … … 364 364 } 365 365 366 CodeGenerator::CodeGenerator(EvalNode* evalNode, const Debugger* debugger, const ScopeChain& scopeChain, SymbolTable* symbolTable, EvalCodeBlock* codeBlock)366 BytecodeGenerator::BytecodeGenerator(EvalNode* evalNode, const Debugger* debugger, const ScopeChain& scopeChain, SymbolTable* symbolTable, EvalCodeBlock* codeBlock) 367 367 : m_shouldEmitDebugHooks(!!debugger) 368 368 , m_shouldEmitProfileHooks(scopeChain.globalObject()->supportsProfiling()) … … 389 389 } 390 390 391 RegisterID* CodeGenerator::addParameter(const Identifier& ident)391 RegisterID* BytecodeGenerator::addParameter(const Identifier& ident) 392 392 { 393 393 // Parameters overwrite var declarations, but not function declarations. … … 408 408 } 409 409 410 RegisterID* CodeGenerator::registerFor(const Identifier& ident)410 RegisterID* BytecodeGenerator::registerFor(const Identifier& ident) 411 411 { 412 412 if (ident == propertyNames().thisIdentifier) … … 423 423 } 424 424 425 RegisterID* CodeGenerator::constRegisterFor(const Identifier& ident)425 RegisterID* BytecodeGenerator::constRegisterFor(const Identifier& ident) 426 426 { 427 427 if (m_codeType == EvalCode) … … 434 434 } 435 435 436 bool CodeGenerator::isLocal(const Identifier& ident)436 bool BytecodeGenerator::isLocal(const Identifier& ident) 437 437 { 438 438 if (ident == propertyNames().thisIdentifier) … … 442 442 } 443 443 444 bool CodeGenerator::isLocalConstant(const Identifier& ident)444 bool BytecodeGenerator::isLocalConstant(const Identifier& ident) 445 445 { 446 446 return symbolTable().get(ident.ustring().rep()).isReadOnly(); 447 447 } 448 448 449 RegisterID* CodeGenerator::newRegister()449 RegisterID* BytecodeGenerator::newRegister() 450 450 { 451 451 m_calleeRegisters.append(m_calleeRegisters.size()); … … 454 454 } 455 455 456 RegisterID* CodeGenerator::newTemporary()456 RegisterID* BytecodeGenerator::newTemporary() 457 457 { 458 458 // Reclaim free register IDs. … … 465 465 } 466 466 467 RegisterID* CodeGenerator::highestUsedRegister()467 RegisterID* BytecodeGenerator::highestUsedRegister() 468 468 { 469 469 size_t count = m_codeBlock->numCalleeRegisters; … … 473 473 } 474 474 475 PassRefPtr<LabelScope> CodeGenerator::newLabelScope(LabelScope::Type type, const Identifier* name)475 PassRefPtr<LabelScope> BytecodeGenerator::newLabelScope(LabelScope::Type type, const Identifier* name) 476 476 { 477 477 // Reclaim free label scopes. … … 485 485 } 486 486 487 PassRefPtr<LabelID> CodeGenerator::newLabel()487 PassRefPtr<LabelID> BytecodeGenerator::newLabel() 488 488 { 489 489 // Reclaim free label IDs. … … 496 496 } 497 497 498 PassRefPtr<LabelID> CodeGenerator::emitLabel(LabelID* l0)498 PassRefPtr<LabelID> BytecodeGenerator::emitLabel(LabelID* l0) 499 499 { 500 500 unsigned newLabelIndex = instructions().size(); … … 517 517 } 518 518 519 void CodeGenerator::emitBytecode(BytecodeID bytecodeID)519 void BytecodeGenerator::emitBytecode(BytecodeID bytecodeID) 520 520 { 521 521 instructions().append(globalData()->interpreter->getBytecode(bytecodeID)); … … 523 523 } 524 524 525 void CodeGenerator::retrieveLastBinaryOp(int& dstIndex, int& src1Index, int& src2Index)525 void BytecodeGenerator::retrieveLastBinaryOp(int& dstIndex, int& src1Index, int& src2Index) 526 526 { 527 527 ASSERT(instructions().size() >= 4); … … 532 532 } 533 533 534 void CodeGenerator::retrieveLastUnaryOp(int& dstIndex, int& srcIndex)534 void BytecodeGenerator::retrieveLastUnaryOp(int& dstIndex, int& srcIndex) 535 535 { 536 536 ASSERT(instructions().size() >= 3); … … 540 540 } 541 541 542 void ALWAYS_INLINE CodeGenerator::rewindBinaryOp()542 void ALWAYS_INLINE BytecodeGenerator::rewindBinaryOp() 543 543 { 544 544 ASSERT(instructions().size() >= 4); … … 546 546 } 547 547 548 void ALWAYS_INLINE CodeGenerator::rewindUnaryOp()548 void ALWAYS_INLINE BytecodeGenerator::rewindUnaryOp() 549 549 { 550 550 ASSERT(instructions().size() >= 3); … … 552 552 } 553 553 554 PassRefPtr<LabelID> CodeGenerator::emitJump(LabelID* target)554 PassRefPtr<LabelID> BytecodeGenerator::emitJump(LabelID* target) 555 555 { 556 556 emitBytecode(target->isForwardLabel() ? op_jmp : op_loop); … … 559 559 } 560 560 561 PassRefPtr<LabelID> CodeGenerator::emitJumpIfTrue(RegisterID* cond, LabelID* target)561 PassRefPtr<LabelID> BytecodeGenerator::emitJumpIfTrue(RegisterID* cond, LabelID* target) 562 562 { 563 563 if (m_lastBytecodeID == op_less && !target->isForwardLabel()) { … … 625 625 } 626 626 627 PassRefPtr<LabelID> CodeGenerator::emitJumpIfFalse(RegisterID* cond, LabelID* target)627 PassRefPtr<LabelID> BytecodeGenerator::emitJumpIfFalse(RegisterID* cond, LabelID* target) 628 628 { 629 629 ASSERT(target->isForwardLabel()); … … 691 691 } 692 692 693 unsigned CodeGenerator::addConstant(FuncDeclNode* n)693 unsigned BytecodeGenerator::addConstant(FuncDeclNode* n) 694 694 { 695 695 // No need to explicitly unique function body nodes -- they're unique already. … … 699 699 } 700 700 701 unsigned CodeGenerator::addConstant(FuncExprNode* n)701 unsigned BytecodeGenerator::addConstant(FuncExprNode* n) 702 702 { 703 703 // No need to explicitly unique function expression nodes -- they're unique already. … … 707 707 } 708 708 709 unsigned CodeGenerator::addConstant(const Identifier& ident)709 unsigned BytecodeGenerator::addConstant(const Identifier& ident) 710 710 { 711 711 UString::Rep* rep = ident.ustring().rep(); … … 717 717 } 718 718 719 RegisterID* CodeGenerator::addConstant(JSValue* v)719 RegisterID* BytecodeGenerator::addConstant(JSValue* v) 720 720 { 721 721 pair<JSValueMap::iterator, bool> result = m_jsValueMap.add(v, m_nextConstantIndex); … … 732 732 } 733 733 734 unsigned CodeGenerator::addUnexpectedConstant(JSValue* v)734 unsigned BytecodeGenerator::addUnexpectedConstant(JSValue* v) 735 735 { 736 736 int index = m_codeBlock->unexpectedConstants.size(); … … 739 739 } 740 740 741 unsigned CodeGenerator::addRegExp(RegExp* r)741 unsigned BytecodeGenerator::addRegExp(RegExp* r) 742 742 { 743 743 int index = m_codeBlock->regexps.size(); … … 746 746 } 747 747 748 RegisterID* CodeGenerator::emitMove(RegisterID* dst, RegisterID* src)748 RegisterID* BytecodeGenerator::emitMove(RegisterID* dst, RegisterID* src) 749 749 { 750 750 emitBytecode(op_mov); … … 754 754 } 755 755 756 RegisterID* CodeGenerator::emitUnaryOp(BytecodeID bytecode, RegisterID* dst, RegisterID* src, ResultType type)756 RegisterID* BytecodeGenerator::emitUnaryOp(BytecodeID bytecode, RegisterID* dst, RegisterID* src, ResultType type) 757 757 { 758 758 emitBytecode(bytecode); … … 764 764 } 765 765 766 RegisterID* CodeGenerator::emitPreInc(RegisterID* srcDst)766 RegisterID* BytecodeGenerator::emitPreInc(RegisterID* srcDst) 767 767 { 768 768 emitBytecode(op_pre_inc); … … 771 771 } 772 772 773 RegisterID* CodeGenerator::emitPreDec(RegisterID* srcDst)773 RegisterID* BytecodeGenerator::emitPreDec(RegisterID* srcDst) 774 774 { 775 775 emitBytecode(op_pre_dec); … … 778 778 } 779 779 780 RegisterID* CodeGenerator::emitPostInc(RegisterID* dst, RegisterID* srcDst)780 RegisterID* BytecodeGenerator::emitPostInc(RegisterID* dst, RegisterID* srcDst) 781 781 { 782 782 emitBytecode(op_post_inc); … … 786 786 } 787 787 788 RegisterID* CodeGenerator::emitPostDec(RegisterID* dst, RegisterID* srcDst)788 RegisterID* BytecodeGenerator::emitPostDec(RegisterID* dst, RegisterID* srcDst) 789 789 { 790 790 emitBytecode(op_post_dec); … … 794 794 } 795 795 796 RegisterID* CodeGenerator::emitBinaryOp(BytecodeID bytecode, RegisterID* dst, RegisterID* src1, RegisterID* src2, OperandTypes types)796 RegisterID* BytecodeGenerator::emitBinaryOp(BytecodeID bytecode, RegisterID* dst, RegisterID* src1, RegisterID* src2, OperandTypes types) 797 797 { 798 798 emitBytecode(bytecode); … … 809 809 } 810 810 811 RegisterID* CodeGenerator::emitEqualityOp(BytecodeID bytecode, RegisterID* dst, RegisterID* src1, RegisterID* src2)811 RegisterID* BytecodeGenerator::emitEqualityOp(BytecodeID bytecode, RegisterID* dst, RegisterID* src1, RegisterID* src2) 812 812 { 813 813 if (m_lastBytecodeID == op_typeof) { … … 874 874 } 875 875 876 RegisterID* CodeGenerator::emitLoad(RegisterID* dst, bool b)876 RegisterID* BytecodeGenerator::emitLoad(RegisterID* dst, bool b) 877 877 { 878 878 return emitLoad(dst, jsBoolean(b)); 879 879 } 880 880 881 RegisterID* CodeGenerator::emitLoad(RegisterID* dst, double number)881 RegisterID* BytecodeGenerator::emitLoad(RegisterID* dst, double number) 882 882 { 883 883 // FIXME: Our hash tables won't hold infinity, so we make a new JSNumberCell each time. … … 891 891 } 892 892 893 RegisterID* CodeGenerator::emitLoad(RegisterID* dst, const Identifier& identifier)893 RegisterID* BytecodeGenerator::emitLoad(RegisterID* dst, const Identifier& identifier) 894 894 { 895 895 JSString*& valueInMap = m_stringMap.add(identifier.ustring().rep(), 0).first->second; … … 899 899 } 900 900 901 RegisterID* CodeGenerator::emitLoad(RegisterID* dst, JSValue* v)901 RegisterID* BytecodeGenerator::emitLoad(RegisterID* dst, JSValue* v) 902 902 { 903 903 RegisterID* constantID = addConstant(v); … … 907 907 } 908 908 909 RegisterID* CodeGenerator::emitLoad(RegisterID* dst, JSCell* cell)909 RegisterID* BytecodeGenerator::emitLoad(RegisterID* dst, JSCell* cell) 910 910 { 911 911 JSValue* value = cell; … … 913 913 } 914 914 915 RegisterID* CodeGenerator::emitUnexpectedLoad(RegisterID* dst, bool b)915 RegisterID* BytecodeGenerator::emitUnexpectedLoad(RegisterID* dst, bool b) 916 916 { 917 917 emitBytecode(op_unexpected_load); … … 921 921 } 922 922 923 RegisterID* CodeGenerator::emitUnexpectedLoad(RegisterID* dst, double d)923 RegisterID* BytecodeGenerator::emitUnexpectedLoad(RegisterID* dst, double d) 924 924 { 925 925 emitBytecode(op_unexpected_load); … … 929 929 } 930 930 931 bool CodeGenerator::findScopedProperty(const Identifier& property, int& index, size_t& stackDepth, bool forWriting, JSObject*& globalObject)931 bool BytecodeGenerator::findScopedProperty(const Identifier& property, int& index, size_t& stackDepth, bool forWriting, JSObject*& globalObject) 932 932 { 933 933 // Cases where we cannot statically optimize the lookup. … … 983 983 } 984 984 985 RegisterID* CodeGenerator::emitInstanceOf(RegisterID* dst, RegisterID* value, RegisterID* base, RegisterID* basePrototype)985 RegisterID* BytecodeGenerator::emitInstanceOf(RegisterID* dst, RegisterID* value, RegisterID* base, RegisterID* basePrototype) 986 986 { 987 987 emitBytecode(op_instanceof); … … 993 993 } 994 994 995 RegisterID* CodeGenerator::emitResolve(RegisterID* dst, const Identifier& property)995 RegisterID* BytecodeGenerator::emitResolve(RegisterID* dst, const Identifier& property) 996 996 { 997 997 size_t depth = 0; … … 1031 1031 } 1032 1032 1033 RegisterID* CodeGenerator::emitGetScopedVar(RegisterID* dst, size_t depth, int index, JSValue* globalObject)1033 RegisterID* BytecodeGenerator::emitGetScopedVar(RegisterID* dst, size_t depth, int index, JSValue* globalObject) 1034 1034 { 1035 1035 if (globalObject) { … … 1048 1048 } 1049 1049 1050 RegisterID* CodeGenerator::emitPutScopedVar(size_t depth, int index, RegisterID* value, JSValue* globalObject)1050 RegisterID* BytecodeGenerator::emitPutScopedVar(size_t depth, int index, RegisterID* value, JSValue* globalObject) 1051 1051 { 1052 1052 if (globalObject) { … … 1064 1064 } 1065 1065 1066 RegisterID* CodeGenerator::emitResolveBase(RegisterID* dst, const Identifier& property)1066 RegisterID* BytecodeGenerator::emitResolveBase(RegisterID* dst, const Identifier& property) 1067 1067 { 1068 1068 emitBytecode(op_resolve_base); … … 1072 1072 } 1073 1073 1074 RegisterID* CodeGenerator::emitResolveWithBase(RegisterID* baseDst, RegisterID* propDst, const Identifier& property)1074 RegisterID* BytecodeGenerator::emitResolveWithBase(RegisterID* baseDst, RegisterID* propDst, const Identifier& property) 1075 1075 { 1076 1076 emitBytecode(op_resolve_with_base); … … 1081 1081 } 1082 1082 1083 RegisterID* CodeGenerator::emitResolveFunction(RegisterID* baseDst, RegisterID* funcDst, const Identifier& property)1083 RegisterID* BytecodeGenerator::emitResolveFunction(RegisterID* baseDst, RegisterID* funcDst, const Identifier& property) 1084 1084 { 1085 1085 emitBytecode(op_resolve_func); … … 1090 1090 } 1091 1091 1092 RegisterID* CodeGenerator::emitGetById(RegisterID* dst, RegisterID* base, const Identifier& property)1092 RegisterID* BytecodeGenerator::emitGetById(RegisterID* dst, RegisterID* base, const Identifier& property) 1093 1093 { 1094 1094 m_codeBlock->propertyAccessInstructions.append(instructions().size()); … … 1105 1105 } 1106 1106 1107 RegisterID* CodeGenerator::emitPutById(RegisterID* base, const Identifier& property, RegisterID* value)1107 RegisterID* BytecodeGenerator::emitPutById(RegisterID* base, const Identifier& property, RegisterID* value) 1108 1108 { 1109 1109 m_codeBlock->propertyAccessInstructions.append(instructions().size()); … … 1120 1120 } 1121 1121 1122 RegisterID* CodeGenerator::emitPutGetter(RegisterID* base, const Identifier& property, RegisterID* value)1122 RegisterID* BytecodeGenerator::emitPutGetter(RegisterID* base, const Identifier& property, RegisterID* value) 1123 1123 { 1124 1124 emitBytecode(op_put_getter); … … 1129 1129 } 1130 1130 1131 RegisterID* CodeGenerator::emitPutSetter(RegisterID* base, const Identifier& property, RegisterID* value)1131 RegisterID* BytecodeGenerator::emitPutSetter(RegisterID* base, const Identifier& property, RegisterID* value) 1132 1132 { 1133 1133 emitBytecode(op_put_setter); … … 1138 1138 } 1139 1139 1140 RegisterID* CodeGenerator::emitDeleteById(RegisterID* dst, RegisterID* base, const Identifier& property)1140 RegisterID* BytecodeGenerator::emitDeleteById(RegisterID* dst, RegisterID* base, const Identifier& property) 1141 1141 { 1142 1142 emitBytecode(op_del_by_id); … … 1147 1147 } 1148 1148 1149 RegisterID* CodeGenerator::emitGetByVal(RegisterID* dst, RegisterID* base, RegisterID* property)1149 RegisterID* BytecodeGenerator::emitGetByVal(RegisterID* dst, RegisterID* base, RegisterID* property) 1150 1150 { 1151 1151 emitBytecode(op_get_by_val); … … 1156 1156 } 1157 1157 1158 RegisterID* CodeGenerator::emitPutByVal(RegisterID* base, RegisterID* property, RegisterID* value)1158 RegisterID* BytecodeGenerator::emitPutByVal(RegisterID* base, RegisterID* property, RegisterID* value) 1159 1159 { 1160 1160 emitBytecode(op_put_by_val); … … 1165 1165 } 1166 1166 1167 RegisterID* CodeGenerator::emitDeleteByVal(RegisterID* dst, RegisterID* base, RegisterID* property)1167 RegisterID* BytecodeGenerator::emitDeleteByVal(RegisterID* dst, RegisterID* base, RegisterID* property) 1168 1168 { 1169 1169 emitBytecode(op_del_by_val); … … 1174 1174 } 1175 1175 1176 RegisterID* CodeGenerator::emitPutByIndex(RegisterID* base, unsigned index, RegisterID* value)1176 RegisterID* BytecodeGenerator::emitPutByIndex(RegisterID* base, unsigned index, RegisterID* value) 1177 1177 { 1178 1178 emitBytecode(op_put_by_index); … … 1183 1183 } 1184 1184 1185 RegisterID* CodeGenerator::emitNewObject(RegisterID* dst)1185 RegisterID* BytecodeGenerator::emitNewObject(RegisterID* dst) 1186 1186 { 1187 1187 emitBytecode(op_new_object); … … 1190 1190 } 1191 1191 1192 RegisterID* CodeGenerator::emitNewArray(RegisterID* dst, ElementNode* elements)1192 RegisterID* BytecodeGenerator::emitNewArray(RegisterID* dst, ElementNode* elements) 1193 1193 { 1194 1194 Vector<RefPtr<RegisterID>, 16> argv; … … 1206 1206 } 1207 1207 1208 RegisterID* CodeGenerator::emitNewFunction(RegisterID* dst, FuncDeclNode* n)1208 RegisterID* BytecodeGenerator::emitNewFunction(RegisterID* dst, FuncDeclNode* n) 1209 1209 { 1210 1210 emitBytecode(op_new_func); … … 1214 1214 } 1215 1215 1216 RegisterID* CodeGenerator::emitNewRegExp(RegisterID* dst, RegExp* regExp)1216 RegisterID* BytecodeGenerator::emitNewRegExp(RegisterID* dst, RegExp* regExp) 1217 1217 { 1218 1218 emitBytecode(op_new_regexp); … … 1223 1223 1224 1224 1225 RegisterID* CodeGenerator::emitNewFunctionExpression(RegisterID* r0, FuncExprNode* n)1225 RegisterID* BytecodeGenerator::emitNewFunctionExpression(RegisterID* r0, FuncExprNode* n) 1226 1226 { 1227 1227 emitBytecode(op_new_func_exp); … … 1231 1231 } 1232 1232 1233 RegisterID* CodeGenerator::emitCall(RegisterID* dst, RegisterID* func, RegisterID* thisRegister, ArgumentsNode* argumentsNode, unsigned divot, unsigned startOffset, unsigned endOffset)1233 RegisterID* BytecodeGenerator::emitCall(RegisterID* dst, RegisterID* func, RegisterID* thisRegister, ArgumentsNode* argumentsNode, unsigned divot, unsigned startOffset, unsigned endOffset) 1234 1234 { 1235 1235 return emitCall(op_call, dst, func, thisRegister, argumentsNode, divot, startOffset, endOffset); 1236 1236 } 1237 1237 1238 RegisterID* CodeGenerator::emitCallEval(RegisterID* dst, RegisterID* func, RegisterID* thisRegister, ArgumentsNode* argumentsNode, unsigned divot, unsigned startOffset, unsigned endOffset)1238 RegisterID* BytecodeGenerator::emitCallEval(RegisterID* dst, RegisterID* func, RegisterID* thisRegister, ArgumentsNode* argumentsNode, unsigned divot, unsigned startOffset, unsigned endOffset) 1239 1239 { 1240 1240 return emitCall(op_call_eval, dst, func, thisRegister, argumentsNode, divot, startOffset, endOffset); 1241 1241 } 1242 1242 1243 RegisterID* CodeGenerator::emitCall(BytecodeID bytecodeID, RegisterID* dst, RegisterID* func, RegisterID* thisRegister, ArgumentsNode* argumentsNode, unsigned divot, unsigned startOffset, unsigned endOffset)1243 RegisterID* BytecodeGenerator::emitCall(BytecodeID bytecodeID, RegisterID* dst, RegisterID* func, RegisterID* thisRegister, ArgumentsNode* argumentsNode, unsigned divot, unsigned startOffset, unsigned endOffset) 1244 1244 { 1245 1245 ASSERT(bytecodeID == op_call || bytecodeID == op_call_eval); … … 1301 1301 } 1302 1302 1303 RegisterID* CodeGenerator::emitReturn(RegisterID* src)1303 RegisterID* BytecodeGenerator::emitReturn(RegisterID* src) 1304 1304 { 1305 1305 if (m_codeBlock->needsFullScopeChain) { … … 1312 1312 } 1313 1313 1314 RegisterID* CodeGenerator::emitUnaryNoDstOp(BytecodeID bytecode, RegisterID* src)1314 RegisterID* BytecodeGenerator::emitUnaryNoDstOp(BytecodeID bytecode, RegisterID* src) 1315 1315 { 1316 1316 emitBytecode(bytecode); … … 1319 1319 } 1320 1320 1321 RegisterID* CodeGenerator::emitConstruct(RegisterID* dst, RegisterID* func, ArgumentsNode* argumentsNode, unsigned divot, unsigned startOffset, unsigned endOffset)1321 RegisterID* BytecodeGenerator::emitConstruct(RegisterID* dst, RegisterID* func, ArgumentsNode* argumentsNode, unsigned divot, unsigned startOffset, unsigned endOffset) 1322 1322 { 1323 1323 ASSERT(func->refCount()); … … 1383 1383 } 1384 1384 1385 RegisterID* CodeGenerator::emitPushScope(RegisterID* scope)1385 RegisterID* BytecodeGenerator::emitPushScope(RegisterID* scope) 1386 1386 { 1387 1387 ControlFlowContext context; … … 1393 1393 } 1394 1394 1395 void CodeGenerator::emitPopScope()1395 void BytecodeGenerator::emitPopScope() 1396 1396 { 1397 1397 ASSERT(m_scopeContextStack.size()); … … 1404 1404 } 1405 1405 1406 void CodeGenerator::emitDebugHook(DebugHookID debugHookID, int firstLine, int lastLine)1406 void BytecodeGenerator::emitDebugHook(DebugHookID debugHookID, int firstLine, int lastLine) 1407 1407 { 1408 1408 if (!m_shouldEmitDebugHooks) … … 1414 1414 } 1415 1415 1416 void CodeGenerator::pushFinallyContext(LabelID* target, RegisterID* retAddrDst)1416 void BytecodeGenerator::pushFinallyContext(LabelID* target, RegisterID* retAddrDst) 1417 1417 { 1418 1418 ControlFlowContext scope; … … 1424 1424 } 1425 1425 1426 void CodeGenerator::popFinallyContext()1426 void BytecodeGenerator::popFinallyContext() 1427 1427 { 1428 1428 ASSERT(m_scopeContextStack.size()); … … 1433 1433 } 1434 1434 1435 LabelScope* CodeGenerator::breakTarget(const Identifier& name)1435 LabelScope* BytecodeGenerator::breakTarget(const Identifier& name) 1436 1436 { 1437 1437 // Reclaim free label scopes. … … 1466 1466 } 1467 1467 1468 LabelScope* CodeGenerator::continueTarget(const Identifier& name)1468 LabelScope* BytecodeGenerator::continueTarget(const Identifier& name) 1469 1469 { 1470 1470 // Reclaim free label scopes. … … 1501 1501 } 1502 1502 1503 PassRefPtr<LabelID> CodeGenerator::emitComplexJumpScopes(LabelID* target, ControlFlowContext* topScope, ControlFlowContext* bottomScope)1503 PassRefPtr<LabelID> BytecodeGenerator::emitComplexJumpScopes(LabelID* target, ControlFlowContext* topScope, ControlFlowContext* bottomScope) 1504 1504 { 1505 1505 while (topScope > bottomScope) { … … 1546 1546 } 1547 1547 1548 PassRefPtr<LabelID> CodeGenerator::emitJumpScopes(LabelID* target, int targetScopeDepth)1548 PassRefPtr<LabelID> BytecodeGenerator::emitJumpScopes(LabelID* target, int targetScopeDepth) 1549 1549 { 1550 1550 ASSERT(scopeDepth() - targetScopeDepth >= 0); … … 1565 1565 } 1566 1566 1567 RegisterID* CodeGenerator::emitNextPropertyName(RegisterID* dst, RegisterID* iter, LabelID* target)1567 RegisterID* BytecodeGenerator::emitNextPropertyName(RegisterID* dst, RegisterID* iter, LabelID* target) 1568 1568 { 1569 1569 emitBytecode(op_next_pname); … … 1574 1574 } 1575 1575 1576 RegisterID* CodeGenerator::emitCatch(RegisterID* targetRegister, LabelID* start, LabelID* end)1576 RegisterID* BytecodeGenerator::emitCatch(RegisterID* targetRegister, LabelID* start, LabelID* end) 1577 1577 { 1578 1578 HandlerInfo info = { start->offsetFrom(0), end->offsetFrom(0), instructions().size(), m_dynamicScopeDepth, 0 }; … … 1583 1583 } 1584 1584 1585 RegisterID* CodeGenerator::emitNewError(RegisterID* dst, ErrorType type, JSValue* message)1585 RegisterID* BytecodeGenerator::emitNewError(RegisterID* dst, ErrorType type, JSValue* message) 1586 1586 { 1587 1587 emitBytecode(op_new_error); … … 1592 1592 } 1593 1593 1594 PassRefPtr<LabelID> CodeGenerator::emitJumpSubroutine(RegisterID* retAddrDst, LabelID* finally)1594 PassRefPtr<LabelID> BytecodeGenerator::emitJumpSubroutine(RegisterID* retAddrDst, LabelID* finally) 1595 1595 { 1596 1596 emitBytecode(op_jsr); … … 1600 1600 } 1601 1601 1602 void CodeGenerator::emitSubroutineReturn(RegisterID* retAddrSrc)1602 void BytecodeGenerator::emitSubroutineReturn(RegisterID* retAddrSrc) 1603 1603 { 1604 1604 emitBytecode(op_sret); … … 1606 1606 } 1607 1607 1608 void CodeGenerator::emitPushNewScope(RegisterID* dst, Identifier& property, RegisterID* value)1608 void BytecodeGenerator::emitPushNewScope(RegisterID* dst, Identifier& property, RegisterID* value) 1609 1609 { 1610 1610 ControlFlowContext context; … … 1619 1619 } 1620 1620 1621 void CodeGenerator::beginSwitch(RegisterID* scrutineeRegister, SwitchInfo::SwitchType type)1621 void BytecodeGenerator::beginSwitch(RegisterID* scrutineeRegister, SwitchInfo::SwitchType type) 1622 1622 { 1623 1623 SwitchInfo info = { instructions().size(), type }; … … 1712 1712 } 1713 1713 1714 void CodeGenerator::endSwitch(uint32_t clauseCount, RefPtr<LabelID>* labels, ExpressionNode** nodes, LabelID* defaultLabel, int32_t min, int32_t max)1714 void BytecodeGenerator::endSwitch(uint32_t clauseCount, RefPtr<LabelID>* labels, ExpressionNode** nodes, LabelID* defaultLabel, int32_t min, int32_t max) 1715 1715 { 1716 1716 SwitchInfo switchInfo = m_switchContextStack.last(); … … 1744 1744 } 1745 1745 1746 RegisterID* CodeGenerator::emitThrowExpressionTooDeepException()1746 RegisterID* BytecodeGenerator::emitThrowExpressionTooDeepException() 1747 1747 { 1748 1748 // It would be nice to do an even better job of identifying exactly where the expression is.
Note:
See TracChangeset
for help on using the changeset viewer.