Ignore:
Timestamp:
Sep 5, 2012, 4:00:29 PM (13 years ago)
Author:
[email protected]
Message:

Merge prefix/postfix nodes
https://bugs.webkit.org/show_bug.cgi?id=95898

Reviewed by Geoff Garen.

Simplify the AST.
This will also mean we have access to m_subscriptHasAssignments when generating a prefix/postfix op applied to a bracket access.

  • bytecompiler/NodesCodegen.cpp:

(JSC::PostfixNode::emitResolve):

  • was PostfixResolveNode::emitBytecode

(JSC::PostfixNode::emitBracket):

  • was PostfixBracketNode::emitBytecode

(JSC::PostfixNode::emitDot):

  • was PostfixDotNode::emitBytecode

(JSC::PostfixNode::emitBytecode):

  • was PostfixErrorNode::emitBytecode, call resolve/bracket/dot version as appropriate.

(JSC::PrefixNode::emitResolve):

  • was PrefixResolveNode::emitBytecode

(JSC::PrefixNode::emitBracket):

  • was PrefixBracketNode::emitBytecode

(JSC::PrefixNode::emitDot):

  • was PrefixDotNode::emitBytecode

(JSC::PrefixNode::emitBytecode):

  • was PrefixErrorNode::emitBytecode, call resolve/bracket/dot version as appropriate.
  • parser/ASTBuilder.h:

(JSC::ASTBuilder::makePrefixNode):

  • Just makes a PrefixNode!

(JSC::ASTBuilder::makePostfixNode):

  • Just makes a PostfixNode!
  • parser/NodeConstructors.h:

(JSC::PostfixNode::PostfixNode):

  • Added, merge of PostfixResolveNode/PostfixBracketNode/PostfixDotNode/PostfixErrorNode.

(JSC::PrefixNode::PrefixNode):

  • Added, merge of PrefixResolveNode/PrefixBracketNode/PrefixDotNode/PrefixErrorNode.
  • parser/Nodes.h:

(PostfixNode):

  • Added, merge of PostfixResolveNode/PostfixBracketNode/PostfixDotNode/PostfixErrorNode.

(PrefixNode):

  • Added, merge of PrefixResolveNode/PrefixBracketNode/PrefixDotNode/PrefixErrorNode.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/parser/Nodes.h

    r127202 r127654  
    595595    };
    596596
    597     class PrePostResolveNode : public ExpressionNode, public ThrowableExpressionData {
    598     public:
    599         PrePostResolveNode(const JSTokenLocation&, const Identifier&, unsigned divot, unsigned startOffset, unsigned endOffset);
    600 
    601     protected:
     597    class PostfixNode : public ExpressionNode, public ThrowableExpressionData {
     598    public:
     599        PostfixNode(const JSTokenLocation&, ExpressionNode*, Operator, unsigned divot, unsigned startOffset, unsigned endOffset);
     600
     601    private:
     602        virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
     603        virtual RegisterID* emitResolve(BytecodeGenerator&, RegisterID* = 0);
     604        virtual RegisterID* emitBracket(BytecodeGenerator&, RegisterID* = 0);
     605        virtual RegisterID* emitDot(BytecodeGenerator&, RegisterID* = 0);
     606
     607        ExpressionNode* m_expr;
     608        Operator m_operator;
     609    };
     610
     611    class DeleteResolveNode : public ExpressionNode, public ThrowableExpressionData {
     612    public:
     613        DeleteResolveNode(const JSTokenLocation&, const Identifier&, unsigned divot, unsigned startOffset, unsigned endOffset);
     614
     615    private:
     616        virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
     617
    602618        const Identifier& m_ident;
    603619    };
    604620
    605     class PostfixResolveNode : public PrePostResolveNode {
    606     public:
    607         PostfixResolveNode(const JSTokenLocation&, const Identifier&, Operator, unsigned divot, unsigned startOffset, unsigned endOffset);
    608 
    609     private:
    610         virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
    611 
    612         Operator m_operator;
    613     };
    614 
    615     class PostfixBracketNode : public ExpressionNode, public ThrowableSubExpressionData {
    616     public:
    617         PostfixBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, Operator, unsigned divot, unsigned startOffset, unsigned endOffset);
     621    class DeleteBracketNode : public ExpressionNode, public ThrowableExpressionData {
     622    public:
     623        DeleteBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, unsigned divot, unsigned startOffset, unsigned endOffset);
    618624
    619625    private:
     
    622628        ExpressionNode* m_base;
    623629        ExpressionNode* m_subscript;
    624         Operator m_operator;
    625     };
    626 
    627     class PostfixDotNode : public ExpressionNode, public ThrowableSubExpressionData {
    628     public:
    629         PostfixDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, Operator, unsigned divot, unsigned startOffset, unsigned endOffset);
     630    };
     631
     632    class DeleteDotNode : public ExpressionNode, public ThrowableExpressionData {
     633    public:
     634        DeleteDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, unsigned divot, unsigned startOffset, unsigned endOffset);
    630635
    631636    private:
     
    634639        ExpressionNode* m_base;
    635640        const Identifier& m_ident;
    636         Operator m_operator;
    637     };
    638 
    639     class PostfixErrorNode : public ExpressionNode, public ThrowableSubExpressionData {
    640     public:
    641         PostfixErrorNode(const JSTokenLocation&, Operator, unsigned divot, unsigned startOffset, unsigned endOffset);
    642 
    643     private:
    644         virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
    645 
    646         Operator m_operator;
    647     };
    648 
    649     class DeleteResolveNode : public ExpressionNode, public ThrowableExpressionData {
    650     public:
    651         DeleteResolveNode(const JSTokenLocation&, const Identifier&, unsigned divot, unsigned startOffset, unsigned endOffset);
     641    };
     642
     643    class DeleteValueNode : public ExpressionNode {
     644    public:
     645        DeleteValueNode(const JSTokenLocation&, ExpressionNode*);
     646
     647    private:
     648        virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
     649
     650        ExpressionNode* m_expr;
     651    };
     652
     653    class VoidNode : public ExpressionNode {
     654    public:
     655        VoidNode(const JSTokenLocation&, ExpressionNode*);
     656
     657    private:
     658        virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
     659
     660        ExpressionNode* m_expr;
     661    };
     662
     663    class TypeOfResolveNode : public ExpressionNode {
     664    public:
     665        TypeOfResolveNode(const JSTokenLocation&, const Identifier&);
     666
     667        const Identifier& identifier() const { return m_ident; }
    652668
    653669    private:
     
    657673    };
    658674
    659     class DeleteBracketNode : public ExpressionNode, public ThrowableExpressionData {
    660     public:
    661         DeleteBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, unsigned divot, unsigned startOffset, unsigned endOffset);
    662 
    663     private:
    664         virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
    665 
    666         ExpressionNode* m_base;
    667         ExpressionNode* m_subscript;
    668     };
    669 
    670     class DeleteDotNode : public ExpressionNode, public ThrowableExpressionData {
    671     public:
    672         DeleteDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, unsigned divot, unsigned startOffset, unsigned endOffset);
    673 
    674     private:
    675         virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
    676 
    677         ExpressionNode* m_base;
    678         const Identifier& m_ident;
    679     };
    680 
    681     class DeleteValueNode : public ExpressionNode {
    682     public:
    683         DeleteValueNode(const JSTokenLocation&, ExpressionNode*);
    684 
    685     private:
    686         virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
    687 
    688         ExpressionNode* m_expr;
    689     };
    690 
    691     class VoidNode : public ExpressionNode {
    692     public:
    693         VoidNode(const JSTokenLocation&, ExpressionNode*);
    694 
    695     private:
    696         virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
    697 
    698         ExpressionNode* m_expr;
    699     };
    700 
    701     class TypeOfResolveNode : public ExpressionNode {
    702     public:
    703         TypeOfResolveNode(const JSTokenLocation&, const Identifier&);
    704 
    705         const Identifier& identifier() const { return m_ident; }
    706 
    707     private:
    708         virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
    709 
    710         const Identifier& m_ident;
    711     };
    712 
    713675    class TypeOfValueNode : public ExpressionNode {
    714676    public:
     
    721683    };
    722684
    723     class PrefixResolveNode : public PrePostResolveNode {
    724     public:
    725         PrefixResolveNode(const JSTokenLocation&, const Identifier&, Operator, unsigned divot, unsigned startOffset, unsigned endOffset);
    726 
    727     private:
    728         virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
    729 
    730         Operator m_operator;
    731     };
    732 
    733     class PrefixBracketNode : public ExpressionNode, public ThrowablePrefixedSubExpressionData {
    734     public:
    735         PrefixBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, Operator, unsigned divot, unsigned startOffset, unsigned endOffset);
    736 
    737     private:
    738         virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
    739 
    740         ExpressionNode* m_base;
    741         ExpressionNode* m_subscript;
    742         Operator m_operator;
    743     };
    744 
    745     class PrefixDotNode : public ExpressionNode, public ThrowablePrefixedSubExpressionData {
    746     public:
    747         PrefixDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, Operator, unsigned divot, unsigned startOffset, unsigned endOffset);
    748 
    749     private:
    750         virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
    751 
    752         ExpressionNode* m_base;
    753         const Identifier& m_ident;
    754         Operator m_operator;
    755     };
    756 
    757     class PrefixErrorNode : public ExpressionNode, public ThrowableExpressionData {
    758     public:
    759         PrefixErrorNode(const JSTokenLocation&, Operator, unsigned divot, unsigned startOffset, unsigned endOffset);
    760 
    761     private:
    762         virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
    763 
     685    class PrefixNode : public ExpressionNode, public ThrowablePrefixedSubExpressionData {
     686    public:
     687        PrefixNode(const JSTokenLocation&, ExpressionNode*, Operator, unsigned divot, unsigned startOffset, unsigned endOffset);
     688
     689    private:
     690        virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);
     691        virtual RegisterID* emitResolve(BytecodeGenerator&, RegisterID* = 0);
     692        virtual RegisterID* emitBracket(BytecodeGenerator&, RegisterID* = 0);
     693        virtual RegisterID* emitDot(BytecodeGenerator&, RegisterID* = 0);
     694
     695        ExpressionNode* m_expr;
    764696        Operator m_operator;
    765697    };
Note: See TracChangeset for help on using the changeset viewer.