Changeset 35593 in webkit for trunk/JavaScriptCore/VM/CodeGenerator.cpp
- Timestamp:
- Aug 6, 2008, 3:37:34 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/VM/CodeGenerator.cpp
r35533 r35593 203 203 // FIXME: Move code that modifies the global object to Machine::execute. 204 204 205 m_codeBlock->numConstants = programNode->neededConstants(); 205 206 m_codeBlock->numVars = 1; // Allocate space for "this" 206 207 … … 263 264 , m_lastOpcodeID(op_end) 264 265 { 266 m_codeBlock->numConstants = functionBody->neededConstants(); 267 265 268 const Node::FunctionStack& functionStack = functionBody->functionStack(); 266 269 for (size_t i = 0; i < functionStack.size(); ++i) { … … 307 310 , m_lastOpcodeID(op_end) 308 311 { 312 m_codeBlock->numConstants = evalNode->neededConstants(); 309 313 m_codeBlock->numVars = 1; // Allocate space for "this" 310 314 } … … 382 386 383 387 // Allocate new register ID. 384 m_temporaries.append(m_temporaries.size() );388 m_temporaries.append(m_temporaries.size() + m_codeBlock->numConstants); 385 389 m_codeBlock->numTemporaries = max<int>(m_codeBlock->numTemporaries, m_temporaries.size()); 386 390 return &m_temporaries.last(); … … 521 525 } 522 526 523 unsigned CodeGenerator::addConstant(JSValue* v) 524 { 525 pair<JSValueMap::iterator, bool> result = m_jsValueMap.add(v, m_codeBlock->registers.size()); 526 if (result.second) // new entry 527 m_codeBlock->registers.append(v); 528 529 return result.first->second; 527 RegisterID* CodeGenerator::addConstant(JSValue* v) 528 { 529 pair<JSValueMap::iterator, bool> result = m_jsValueMap.add(v, m_codeBlock->constantRegisters.size()); 530 if (result.second) { 531 m_constants.append(m_codeBlock->constantRegisters.size()); 532 m_constants.last().makeConstant(); 533 m_codeBlock->constantRegisters.append(v); 534 ASSERT(m_codeBlock->constantRegisters.size() <= (unsigned) m_codeBlock->numConstants); 535 return &m_constants.last(); 536 } 537 538 return &m_constants[result.first->second]; 539 } 540 541 unsigned CodeGenerator::addUnexpectedConstant(JSValue* v) 542 { 543 int index = m_codeBlock->regexps.size(); 544 m_codeBlock->unexpectedConstants.append(v); 545 return index; 530 546 } 531 547 … … 594 610 RegisterID* CodeGenerator::emitLoad(RegisterID* dst, bool b) 595 611 { 596 emitOpcode(op_load); 597 instructions().append(dst->index()); 598 instructions().append(addConstant(jsBoolean(b))); 599 return dst; 612 return emitLoad(dst, jsBoolean(b)); 600 613 } 601 614 602 615 RegisterID* CodeGenerator::emitLoad(RegisterID* dst, double d) 603 616 { 604 emitOpcode(op_load); 605 instructions().append(dst->index()); 606 instructions().append(addConstant(jsNumber(globalExec(), d))); 607 return dst; 617 return emitLoad(dst, jsNumber(globalExec(), d)); 608 618 } 609 619 610 620 RegisterID* CodeGenerator::emitLoad(RegisterID* dst, JSValue* v) 611 621 { 612 emitOpcode(op_load); 613 instructions().append(dst->index()); 614 instructions().append(addConstant(v)); 622 RegisterID* constantID = addConstant(v); 623 if (dst) 624 return emitMove(dst, constantID); 625 return constantID; 626 } 627 628 RegisterID* CodeGenerator::emitUnexpectedLoad(RegisterID* dst, bool b) 629 { 630 emitOpcode(op_unexpected_load); 631 instructions().append(dst->index()); 632 instructions().append(addUnexpectedConstant(jsBoolean(b))); 615 633 return dst; 616 634 } … … 1133 1151 instructions().append(dst->index()); 1134 1152 instructions().append(static_cast<int>(type)); 1135 instructions().append(add Constant(message));1153 instructions().append(addUnexpectedConstant(message)); 1136 1154 return dst; 1137 1155 }
Note:
See TracChangeset
for help on using the changeset viewer.