Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: third_party/WebKit/JavaScriptCore/parser/Nodes.cpp

Issue 10670: Do another merge using nifty new merge script (CL for that coming soon). (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999-2002 Harri Porten (porten@kde.org) 2 * Copyright (C) 1999-2002 Harri Porten (porten@kde.org)
3 * Copyright (C) 2001 Peter Kelly (pmk@post.com) 3 * Copyright (C) 2001 Peter Kelly (pmk@post.com)
4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserv ed. 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserv ed.
5 * Copyright (C) 2007 Cameron Zwarich (cwzwarich@uwaterloo.ca) 5 * Copyright (C) 2007 Cameron Zwarich (cwzwarich@uwaterloo.ca)
6 * Copyright (C) 2007 Maks Orlovich 6 * Copyright (C) 2007 Maks Orlovich
7 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> 7 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 NodeReleaser::releaseAllNodes(this); 578 NodeReleaser::releaseAllNodes(this);
579 } 579 }
580 580
581 void EvalFunctionCallNode::releaseNodes(NodeReleaser& releaser) 581 void EvalFunctionCallNode::releaseNodes(NodeReleaser& releaser)
582 { 582 {
583 releaser.release(m_args); 583 releaser.release(m_args);
584 } 584 }
585 585
586 RegisterID* EvalFunctionCallNode::emitCode(CodeGenerator& generator, RegisterID* dst) 586 RegisterID* EvalFunctionCallNode::emitCode(CodeGenerator& generator, RegisterID* dst)
587 { 587 {
588 RefPtr<RegisterID> base = generator.tempDestination(dst); 588 RefPtr<RegisterID> func = generator.tempDestination(dst);
589 RefPtr<RegisterID> func = generator.newTemporary(); 589 RefPtr<RegisterID> thisRegister = generator.newTemporary();
590 generator.emitResolveWithBase(base.get(), func.get(), generator.propertyName s().eval); 590 generator.emitResolveWithBase(thisRegister.get(), func.get(), generator.prop ertyNames().eval);
591 return generator.emitCallEval(generator.finalDestination(dst, base.get()), f unc.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset()); 591 return generator.emitCallEval(generator.finalDestination(dst, func.get()), f unc.get(), thisRegister.get(), m_args.get(), divot(), startOffset(), endOffset() );
592 } 592 }
593 593
594 // ------------------------------ FunctionCallValueNode ------------------------ ---------- 594 // ------------------------------ FunctionCallValueNode ------------------------ ----------
595 595
596 FunctionCallValueNode::~FunctionCallValueNode() 596 FunctionCallValueNode::~FunctionCallValueNode()
597 { 597 {
598 NodeReleaser::releaseAllNodes(this); 598 NodeReleaser::releaseAllNodes(this);
599 } 599 }
600 600
601 void FunctionCallValueNode::releaseNodes(NodeReleaser& releaser) 601 void FunctionCallValueNode::releaseNodes(NodeReleaser& releaser)
602 { 602 {
603 releaser.release(m_expr); 603 releaser.release(m_expr);
604 releaser.release(m_args); 604 releaser.release(m_args);
605 } 605 }
606 606
607 RegisterID* FunctionCallValueNode::emitCode(CodeGenerator& generator, RegisterID * dst) 607 RegisterID* FunctionCallValueNode::emitCode(CodeGenerator& generator, RegisterID * dst)
608 { 608 {
609 RefPtr<RegisterID> func = generator.emitNode(m_expr.get()); 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
613 // ------------------------------ FunctionCallResolveNode ---------------------- ------------ 614 // ------------------------------ FunctionCallResolveNode ---------------------- ------------
614 615
615 FunctionCallResolveNode::~FunctionCallResolveNode() 616 FunctionCallResolveNode::~FunctionCallResolveNode()
616 { 617 {
617 NodeReleaser::releaseAllNodes(this); 618 NodeReleaser::releaseAllNodes(this);
618 } 619 }
619 620
620 void FunctionCallResolveNode::releaseNodes(NodeReleaser& releaser) 621 void FunctionCallResolveNode::releaseNodes(NodeReleaser& releaser)
621 { 622 {
622 releaser.release(m_args); 623 releaser.release(m_args);
623 } 624 }
624 625
625 RegisterID* FunctionCallResolveNode::emitCode(CodeGenerator& generator, Register ID* dst) 626 RegisterID* FunctionCallResolveNode::emitCode(CodeGenerator& generator, Register ID* dst)
626 { 627 {
627 if (RefPtr<RegisterID> local = generator.registerFor(m_ident)) 628 if (RefPtr<RegisterID> local = generator.registerFor(m_ident)) {
628 return generator.emitCall(generator.finalDestination(dst), local.get(), 0, m_args.get(), divot(), startOffset(), endOffset()); 629 RefPtr<RegisterID> thisRegister = generator.emitLoad(generator.newTempor ary(), jsNull());
630 return generator.emitCall(generator.finalDestination(dst, thisRegister.g et()), local.get(), thisRegister.get(), m_args.get(), divot(), startOffset(), en dOffset());
631 }
629 632
630 int index = 0; 633 int index = 0;
631 size_t depth = 0; 634 size_t depth = 0;
632 JSObject* globalObject = 0; 635 JSObject* globalObject = 0;
633 if (generator.findScopedProperty(m_ident, index, depth, false, globalObject) && index != missingSymbolMarker()) { 636 if (generator.findScopedProperty(m_ident, index, depth, false, globalObject) && index != missingSymbolMarker()) {
634 RefPtr<RegisterID> func = generator.emitGetScopedVar(generator.newTempor ary(), depth, index, globalObject); 637 RefPtr<RegisterID> func = generator.emitGetScopedVar(generator.newTempor ary(), depth, index, globalObject);
635 return generator.emitCall(generator.finalDestination(dst), func.get(), 0 , m_args.get(), divot(), startOffset(), endOffset()); 638 RefPtr<RegisterID> thisRegister = generator.emitLoad(generator.newTempor ary(), jsNull());
639 return generator.emitCall(generator.finalDestination(dst, func.get()), f unc.get(), thisRegister.get(), m_args.get(), divot(), startOffset(), endOffset() );
636 } 640 }
637 641
638 RefPtr<RegisterID> base = generator.tempDestination(dst); 642 RefPtr<RegisterID> func = generator.tempDestination(dst);
639 RefPtr<RegisterID> func = generator.newTemporary(); 643 RefPtr<RegisterID> thisRegister = generator.newTemporary();
640 int identifierStart = divot() - startOffset(); 644 int identifierStart = divot() - startOffset();
641 generator.emitExpressionInfo(identifierStart + m_ident.size(), m_ident.size( ), 0); 645 generator.emitExpressionInfo(identifierStart + m_ident.size(), m_ident.size( ), 0);
642 generator.emitResolveFunction(base.get(), func.get(), m_ident); 646 generator.emitResolveFunction(thisRegister.get(), func.get(), m_ident);
643 return generator.emitCall(generator.finalDestination(dst, base.get()), func. get(), base.get(), m_args.get(), divot(), startOffset(), endOffset()); 647 return generator.emitCall(generator.finalDestination(dst, func.get()), func. get(), thisRegister.get(), m_args.get(), divot(), startOffset(), endOffset());
644 } 648 }
645 649
646 // ------------------------------ FunctionCallBracketNode ---------------------- ------------ 650 // ------------------------------ FunctionCallBracketNode ---------------------- ------------
647 651
648 FunctionCallBracketNode::~FunctionCallBracketNode() 652 FunctionCallBracketNode::~FunctionCallBracketNode()
649 { 653 {
650 NodeReleaser::releaseAllNodes(this); 654 NodeReleaser::releaseAllNodes(this);
651 } 655 }
652 656
653 void FunctionCallBracketNode::releaseNodes(NodeReleaser& releaser) 657 void FunctionCallBracketNode::releaseNodes(NodeReleaser& releaser)
654 { 658 {
655 releaser.release(m_base); 659 releaser.release(m_base);
656 releaser.release(m_subscript); 660 releaser.release(m_subscript);
657 releaser.release(m_args); 661 releaser.release(m_args);
658 } 662 }
659 663
660 RegisterID* FunctionCallBracketNode::emitCode(CodeGenerator& generator, Register ID* dst) 664 RegisterID* FunctionCallBracketNode::emitCode(CodeGenerator& generator, Register ID* dst)
661 { 665 {
662 RefPtr<RegisterID> base = generator.emitNode(m_base.get()); 666 RefPtr<RegisterID> base = generator.emitNode(m_base.get());
663 RegisterID* property = generator.emitNode(m_subscript.get()); 667 RegisterID* property = generator.emitNode(m_subscript.get());
664 generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffs et() - m_subexpressionDivotOffset, m_subexpressionEndOffset); 668 generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffs et() - m_subexpressionDivotOffset, m_subexpressionEndOffset);
665 RefPtr<RegisterID> function = generator.emitGetByVal(generator.newTemporary( ), base.get(), property); 669 RefPtr<RegisterID> function = generator.emitGetByVal(generator.tempDestinati on(dst), base.get(), property);
666 return generator.emitCall(generator.finalDestination(dst, base.get()), funct ion.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset()); 670 RefPtr<RegisterID> thisRegister = generator.emitMove(generator.newTemporary( ), base.get());
671 return generator.emitCall(generator.finalDestination(dst, function.get()), f unction.get(), thisRegister.get(), m_args.get(), divot(), startOffset(), endOffs et());
667 } 672 }
668 673
669 // ------------------------------ FunctionCallDotNode -------------------------- -------- 674 // ------------------------------ FunctionCallDotNode -------------------------- --------
670 675
671 FunctionCallDotNode::~FunctionCallDotNode() 676 FunctionCallDotNode::~FunctionCallDotNode()
672 { 677 {
673 NodeReleaser::releaseAllNodes(this); 678 NodeReleaser::releaseAllNodes(this);
674 } 679 }
675 680
676 void FunctionCallDotNode::releaseNodes(NodeReleaser& releaser) 681 void FunctionCallDotNode::releaseNodes(NodeReleaser& releaser)
677 { 682 {
678 releaser.release(m_base); 683 releaser.release(m_base);
679 releaser.release(m_args); 684 releaser.release(m_args);
680 } 685 }
681 686
682 RegisterID* FunctionCallDotNode::emitCode(CodeGenerator& generator, RegisterID* dst) 687 RegisterID* FunctionCallDotNode::emitCode(CodeGenerator& generator, RegisterID* dst)
683 { 688 {
684 RefPtr<RegisterID> base = generator.emitNode(m_base.get()); 689 RefPtr<RegisterID> base = generator.emitNode(m_base.get());
685 generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffs et() - m_subexpressionDivotOffset, m_subexpressionEndOffset); 690 generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffs et() - m_subexpressionDivotOffset, m_subexpressionEndOffset);
686 RefPtr<RegisterID> function = generator.emitGetById(generator.newTemporary() , base.get(), m_ident); 691 RefPtr<RegisterID> function = generator.emitGetById(generator.tempDestinatio n(dst), base.get(), m_ident);
687 return generator.emitCall(generator.finalDestination(dst, base.get()), funct ion.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset()); 692 RefPtr<RegisterID> thisRegister = generator.emitMove(generator.newTemporary( ), base.get());
693 return generator.emitCall(generator.finalDestination(dst, function.get()), f unction.get(), thisRegister.get(), m_args.get(), divot(), startOffset(), endOffs et());
688 } 694 }
689 695
690 // ------------------------------ PostfixResolveNode --------------------------- ------- 696 // ------------------------------ PostfixResolveNode --------------------------- -------
691 697
692 static RegisterID* emitPreIncOrDec(CodeGenerator& generator, RegisterID* srcDst, Operator oper) 698 static RegisterID* emitPreIncOrDec(CodeGenerator& generator, RegisterID* srcDst, Operator oper)
693 { 699 {
694 return (oper == OpPlusPlus) ? generator.emitPreInc(srcDst) : generator.emitP reDec(srcDst); 700 return (oper == OpPlusPlus) ? generator.emitPreInc(srcDst) : generator.emitP reDec(srcDst);
695 } 701 }
696 702
697 static RegisterID* emitPostIncOrDec(CodeGenerator& generator, RegisterID* dst, R egisterID* srcDst, Operator oper) 703 static RegisterID* emitPostIncOrDec(CodeGenerator& generator, RegisterID* dst, R egisterID* srcDst, Operator oper)
(...skipping 1910 matching lines...) Expand 10 before | Expand all | Expand 10 after
2608 2614
2609 if (!m_ident.isNull()) { 2615 if (!m_ident.isNull()) {
2610 JSStaticScopeObject* functionScopeObject = new (exec) JSStaticScopeObjec t(exec, m_ident, func, ReadOnly | DontDelete); 2616 JSStaticScopeObject* functionScopeObject = new (exec) JSStaticScopeObjec t(exec, m_ident, func, ReadOnly | DontDelete);
2611 func->scope().push(functionScopeObject); 2617 func->scope().push(functionScopeObject);
2612 } 2618 }
2613 2619
2614 return func; 2620 return func;
2615 } 2621 }
2616 2622
2617 } // namespace JSC 2623 } // namespace JSC
OLDNEW
« no previous file with comments | « third_party/WebKit/JavaScriptCore/parser/Nodes.h ('k') | third_party/WebKit/JavaScriptCore/runtime/JSGlobalData.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698