Changeset 38349 in webkit for trunk/JavaScriptCore/parser/Nodes.cpp
- Timestamp:
- Nov 12, 2008, 4:48:23 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/parser/Nodes.cpp
r38330 r38349 586 586 RegisterID* EvalFunctionCallNode::emitCode(CodeGenerator& generator, RegisterID* dst) 587 587 { 588 RefPtr<RegisterID> base= generator.tempDestination(dst);589 RefPtr<RegisterID> func= generator.newTemporary();590 generator.emitResolveWithBase( base.get(), func.get(), generator.propertyNames().eval);591 return generator.emitCallEval(generator.finalDestination(dst, base.get()), func.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset());588 RefPtr<RegisterID> func = generator.tempDestination(dst); 589 RefPtr<RegisterID> thisRegister = generator.newTemporary(); 590 generator.emitResolveWithBase(thisRegister.get(), func.get(), generator.propertyNames().eval); 591 return generator.emitCallEval(generator.finalDestination(dst, func.get()), func.get(), thisRegister.get(), m_args.get(), divot(), startOffset(), endOffset()); 592 592 } 593 593 … … 608 608 { 609 609 RefPtr<RegisterID> func = generator.emitNode(m_expr.get()); 610 return generator.emitCall(generator.finalDestination(dst), func.get(), 0, m_args.get(), divot(), startOffset(), endOffset()); 610 RefPtr<RegisterID> thisRegister = generator.emitLoad(generator.newTemporary(), jsNull()); 611 return generator.emitCall(generator.finalDestination(dst, func.get()), func.get(), thisRegister.get(), m_args.get(), divot(), startOffset(), endOffset()); 611 612 } 612 613 … … 625 626 RegisterID* FunctionCallResolveNode::emitCode(CodeGenerator& generator, RegisterID* dst) 626 627 { 627 if (RefPtr<RegisterID> local = generator.registerFor(m_ident)) 628 return generator.emitCall(generator.finalDestination(dst), local.get(), 0, m_args.get(), divot(), startOffset(), endOffset()); 628 if (RefPtr<RegisterID> local = generator.registerFor(m_ident)) { 629 RefPtr<RegisterID> thisRegister = generator.emitLoad(generator.newTemporary(), jsNull()); 630 return generator.emitCall(generator.finalDestination(dst, thisRegister.get()), local.get(), thisRegister.get(), m_args.get(), divot(), startOffset(), endOffset()); 631 } 629 632 630 633 int index = 0; … … 633 636 if (generator.findScopedProperty(m_ident, index, depth, false, globalObject) && index != missingSymbolMarker()) { 634 637 RefPtr<RegisterID> func = generator.emitGetScopedVar(generator.newTemporary(), depth, index, globalObject); 635 return generator.emitCall(generator.finalDestination(dst), func.get(), 0, m_args.get(), divot(), startOffset(), endOffset()); 636 } 637 638 RefPtr<RegisterID> base = generator.tempDestination(dst); 639 RefPtr<RegisterID> func = generator.newTemporary(); 638 RefPtr<RegisterID> thisRegister = generator.emitLoad(generator.newTemporary(), jsNull()); 639 return generator.emitCall(generator.finalDestination(dst, func.get()), func.get(), thisRegister.get(), m_args.get(), divot(), startOffset(), endOffset()); 640 } 641 642 RefPtr<RegisterID> func = generator.tempDestination(dst); 643 RefPtr<RegisterID> thisRegister = generator.newTemporary(); 640 644 int identifierStart = divot() - startOffset(); 641 645 generator.emitExpressionInfo(identifierStart + m_ident.size(), m_ident.size(), 0); 642 generator.emitResolveFunction( base.get(), func.get(), m_ident);643 return generator.emitCall(generator.finalDestination(dst, base.get()), func.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset());646 generator.emitResolveFunction(thisRegister.get(), func.get(), m_ident); 647 return generator.emitCall(generator.finalDestination(dst, func.get()), func.get(), thisRegister.get(), m_args.get(), divot(), startOffset(), endOffset()); 644 648 } 645 649 … … 663 667 RegisterID* property = generator.emitNode(m_subscript.get()); 664 668 generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset); 665 RefPtr<RegisterID> function = generator.emitGetByVal(generator.newTemporary(), base.get(), property); 666 return generator.emitCall(generator.finalDestination(dst, base.get()), function.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset()); 669 RefPtr<RegisterID> function = generator.emitGetByVal(generator.tempDestination(dst), base.get(), property); 670 RefPtr<RegisterID> thisRegister = generator.emitMove(generator.newTemporary(), base.get()); 671 return generator.emitCall(generator.finalDestination(dst, function.get()), function.get(), thisRegister.get(), m_args.get(), divot(), startOffset(), endOffset()); 667 672 } 668 673 … … 684 689 RefPtr<RegisterID> base = generator.emitNode(m_base.get()); 685 690 generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset); 686 RefPtr<RegisterID> function = generator.emitGetById(generator.newTemporary(), base.get(), m_ident); 687 return generator.emitCall(generator.finalDestination(dst, base.get()), function.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset()); 691 RefPtr<RegisterID> function = generator.emitGetById(generator.tempDestination(dst), base.get(), m_ident); 692 RefPtr<RegisterID> thisRegister = generator.emitMove(generator.newTemporary(), base.get()); 693 return generator.emitCall(generator.finalDestination(dst, function.get()), function.get(), thisRegister.get(), m_args.get(), divot(), startOffset(), endOffset()); 688 694 } 689 695
Note:
See TracChangeset
for help on using the changeset viewer.