Changeset 21080 in webkit for trunk/JavaScriptCore/kjs/nodes.h


Ignore:
Timestamp:
Apr 24, 2007, 7:11:33 PM (18 years ago)
Author:
mjs
Message:

Reviewed by Oliver.


  • use custom calling convention for everything in nodes.cpp on intel gcc for 1.5% speed boost

Nearly all functions in nodes.cpp were marked up to use the
regparm(3) calling convention under GCC for x86, since this is
faster and they are all guaranteed to be called only internally to
kjs.


The only exception is destructors, since delete doesn't know how to use a custom calling convention.


  • kjs/nodes.cpp: (dotExprDoesNotAllowCallsString):
  • kjs/nodes.h: (KJS::Node::): (KJS::StatementNode::): (KJS::NullNode::): (KJS::BooleanNode::): (KJS::NumberNode::): (KJS::StringNode::): (KJS::RegExpNode::): (KJS::ThisNode::): (KJS::ResolveNode::): (KJS::GroupNode::): (KJS::ElementNode::): (KJS::ArrayNode::): (KJS::PropertyNameNode::): (KJS::PropertyNode::): (KJS::PropertyListNode::): (KJS::ObjectLiteralNode::): (KJS::BracketAccessorNode::): (KJS::DotAccessorNode::): (KJS::ArgumentListNode::): (KJS::ArgumentsNode::): (KJS::NewExprNode::): (KJS::FunctionCallValueNode::): (KJS::FunctionCallResolveNode::): (KJS::FunctionCallBracketNode::): (KJS::FunctionCallParenBracketNode::): (KJS::FunctionCallDotNode::): (KJS::FunctionCallParenDotNode::): (KJS::PostfixResolveNode::): (KJS::PostfixBracketNode::): (KJS::PostfixDotNode::): (KJS::PostfixErrorNode::): (KJS::DeleteResolveNode::): (KJS::DeleteBracketNode::): (KJS::DeleteDotNode::): (KJS::DeleteValueNode::): (KJS::VoidNode::): (KJS::TypeOfResolveNode::): (KJS::TypeOfValueNode::): (KJS::PrefixResolveNode::): (KJS::PrefixBracketNode::): (KJS::PrefixDotNode::): (KJS::PrefixErrorNode::): (KJS::UnaryPlusNode::): (KJS::NegateNode::): (KJS::BitwiseNotNode::): (KJS::LogicalNotNode::): (KJS::MultNode::): (KJS::AddNode::): (KJS::ShiftNode::): (KJS::RelationalNode::): (KJS::EqualNode::): (KJS::BitOperNode::): (KJS::BinaryLogicalNode::): (KJS::ConditionalNode::): (KJS::AssignResolveNode::): (KJS::AssignBracketNode::): (KJS::AssignDotNode::): (KJS::AssignErrorNode::): (KJS::CommaNode::): (KJS::AssignExprNode::): (KJS::VarDeclListNode::): (KJS::VarStatementNode::): (KJS::EmptyStatementNode::): (KJS::ExprStatementNode::): (KJS::IfNode::): (KJS::DoWhileNode::): (KJS::WhileNode::): (KJS::ForNode::): (KJS::ContinueNode::): (KJS::BreakNode::): (KJS::ReturnNode::): (KJS::WithNode::): (KJS::LabelNode::): (KJS::ThrowNode::): (KJS::TryNode::): (KJS::ParameterNode::): (KJS::Parameter::): (KJS::FunctionBodyNode::): (KJS::FuncExprNode::): (KJS::FuncDeclNode::): (KJS::SourceElementsNode::): (KJS::CaseClauseNode::): (KJS::ClauseListNode::): (KJS::SwitchNode::):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/nodes.h

    r21032 r21080  
    3030#include <wtf/ListRefPtr.h>
    3131#include <wtf/Vector.h>
     32
     33#if PLATFORM(X86) && COMPILER(GCC)
     34#define KJS_FAST_CALL __attribute__((regparm(3)))
     35#else
     36#define KJS_FAST_CALL
     37#endif
    3238
    3339namespace KJS {
     
    7379  class Node {
    7480  public:
    75     Node();
     81    Node() KJS_FAST_CALL;
    7682    virtual ~Node();
    7783
    78     virtual JSValue *evaluate(ExecState *exec) = 0;
    79     UString toString() const;
    80     virtual void streamTo(SourceStream&) const = 0;
    81     virtual void processVarDecls(ExecState*) {}
    82     int lineNo() const { return m_line; }
    83 
    84     void ref();
    85     void deref();
    86     unsigned refcount();
    87     static void clearNewNodes();
    88 
    89     virtual Node *nodeInsideAllParens();
    90 
    91     virtual bool isLocation() const { return false; }
    92     virtual bool isResolveNode() const { return false; }
    93     virtual bool isBracketAccessorNode() const { return false; }
    94     virtual bool isDotAccessorNode() const { return false; }
    95     virtual bool isGroupNode() const { return false; }
    96 
    97     virtual void breakCycle() { }
     84    virtual JSValue *evaluate(ExecState *exec) KJS_FAST_CALL = 0;
     85    UString toString() const KJS_FAST_CALL;
     86    virtual void streamTo(SourceStream&) const KJS_FAST_CALL = 0;
     87    virtual void processVarDecls(ExecState*) KJS_FAST_CALL {}
     88    int lineNo() const KJS_FAST_CALL { return m_line; }
     89
     90    void ref() KJS_FAST_CALL;
     91    void deref() KJS_FAST_CALL;
     92    unsigned refcount() KJS_FAST_CALL;
     93    static void clearNewNodes() KJS_FAST_CALL;
     94
     95    virtual Node *nodeInsideAllParens() KJS_FAST_CALL;
     96
     97    virtual bool isLocation() const KJS_FAST_CALL { return false; }
     98    virtual bool isResolveNode() const KJS_FAST_CALL { return false; }
     99    virtual bool isBracketAccessorNode() const KJS_FAST_CALL { return false; }
     100    virtual bool isDotAccessorNode() const KJS_FAST_CALL { return false; }
     101    virtual bool isGroupNode() const KJS_FAST_CALL { return false; }
     102
     103    virtual void breakCycle() KJS_FAST_CALL { }
    98104
    99105  protected:
    100     Completion createErrorCompletion(ExecState *, ErrorType, const char *msg);
    101     Completion createErrorCompletion(ExecState *, ErrorType, const char *msg, const Identifier &);
    102 
    103     JSValue *throwError(ExecState *, ErrorType, const char *msg);
    104     JSValue* throwError(ExecState *, ErrorType, const char* msg, const char*);
    105     JSValue *throwError(ExecState *, ErrorType, const char *msg, JSValue *, Node *);
    106     JSValue *throwError(ExecState *, ErrorType, const char *msg, const Identifier &);
    107     JSValue *throwError(ExecState *, ErrorType, const char *msg, JSValue *, const Identifier &);
    108     JSValue *throwError(ExecState *, ErrorType, const char *msg, JSValue *, Node *, Node *);
    109     JSValue *throwError(ExecState *, ErrorType, const char *msg, JSValue *, Node *, const Identifier &);
    110 
    111     JSValue *throwUndefinedVariableError(ExecState *, const Identifier &);
    112 
    113     void handleException(ExecState*);
    114     void handleException(ExecState*, JSValue*);
     106    Completion createErrorCompletion(ExecState *, ErrorType, const char *msg) KJS_FAST_CALL;
     107    Completion createErrorCompletion(ExecState *, ErrorType, const char *msg, const Identifier &) KJS_FAST_CALL;
     108
     109    JSValue *throwError(ExecState *, ErrorType, const char *msg) KJS_FAST_CALL;
     110    JSValue* throwError(ExecState *, ErrorType, const char* msg, const char*) KJS_FAST_CALL;
     111    JSValue *throwError(ExecState *, ErrorType, const char *msg, JSValue *, Node *) KJS_FAST_CALL;
     112    JSValue *throwError(ExecState *, ErrorType, const char *msg, const Identifier &) KJS_FAST_CALL;
     113    JSValue *throwError(ExecState *, ErrorType, const char *msg, JSValue *, const Identifier &) KJS_FAST_CALL;
     114    JSValue *throwError(ExecState *, ErrorType, const char *msg, JSValue *, Node *, Node *) KJS_FAST_CALL;
     115    JSValue *throwError(ExecState *, ErrorType, const char *msg, JSValue *, Node *, const Identifier &) KJS_FAST_CALL;
     116
     117    JSValue *throwUndefinedVariableError(ExecState *, const Identifier &) KJS_FAST_CALL;
     118
     119    void handleException(ExecState*) KJS_FAST_CALL;
     120    void handleException(ExecState*, JSValue*) KJS_FAST_CALL;
    115121
    116122    int m_line;
    117123  private:
    118124    // disallow assignment
    119     Node& operator=(const Node&);
    120     Node(const Node &other);
     125    Node& operator=(const Node&) KJS_FAST_CALL;
     126    Node(const Node &other) KJS_FAST_CALL;
    121127  };
    122128
    123129  class StatementNode : public Node {
    124130  public:
    125     StatementNode();
    126     void setLoc(int line0, int line1);
    127     int firstLine() const { return lineNo(); }
    128     int lastLine() const { return m_lastLine; }
    129     bool hitStatement(ExecState*);
    130     virtual Completion execute(ExecState *exec) = 0;
    131     void pushLabel(const Identifier &id) { ls.push(id); }
    132     virtual void processFuncDecl(ExecState*);
     131    StatementNode() KJS_FAST_CALL;
     132    void setLoc(int line0, int line1) KJS_FAST_CALL;
     133    int firstLine() const KJS_FAST_CALL { return lineNo(); }
     134    int lastLine() const KJS_FAST_CALL { return m_lastLine; }
     135    bool hitStatement(ExecState*) KJS_FAST_CALL;
     136    virtual Completion execute(ExecState *exec) KJS_FAST_CALL = 0;
     137    void pushLabel(const Identifier &id) KJS_FAST_CALL { ls.push(id); }
     138    virtual void processFuncDecl(ExecState*) KJS_FAST_CALL;
    133139  protected:
    134140    LabelStack ls;
    135141  private:
    136     JSValue *evaluate(ExecState*) { return jsUndefined(); }
     142    JSValue *evaluate(ExecState*) KJS_FAST_CALL { return jsUndefined(); }
    137143    int m_lastLine;
    138144  };
     
    140146  class NullNode : public Node {
    141147  public:
    142     NullNode() {}
    143     JSValue* evaluate(ExecState*);
    144     virtual void streamTo(SourceStream&) const;
     148    NullNode() KJS_FAST_CALL {}
     149    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     150    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    145151  };
    146152
    147153  class BooleanNode : public Node {
    148154  public:
    149     BooleanNode(bool v) : value(v) {}
    150     JSValue* evaluate(ExecState*);
    151     virtual void streamTo(SourceStream&) const;
     155    BooleanNode(bool v) KJS_FAST_CALL : value(v) {}
     156    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     157    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    152158  private:
    153159    bool value;
     
    156162  class NumberNode : public Node {
    157163  public:
    158     NumberNode(double v) : value(v) {}
    159     JSValue* evaluate(ExecState*);
    160     virtual void streamTo(SourceStream&) const;
     164    NumberNode(double v) KJS_FAST_CALL : value(v) {}
     165    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     166    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    161167  private:
    162168    double value;
     
    165171  class StringNode : public Node {
    166172  public:
    167     StringNode(const UString *v) { value = *v; }
    168     JSValue* evaluate(ExecState*);
    169     virtual void streamTo(SourceStream&) const;
     173    StringNode(const UString *v) KJS_FAST_CALL { value = *v; }
     174    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     175    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    170176  private:
    171177    UString value;
     
    174180  class RegExpNode : public Node {
    175181  public:
    176     RegExpNode(const UString &p, const UString &f)
     182    RegExpNode(const UString &p, const UString &f) KJS_FAST_CALL
    177183      : pattern(p), flags(f) { }
    178     JSValue* evaluate(ExecState*);
    179     virtual void streamTo(SourceStream&) const;
     184    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     185    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    180186  private:
    181187    UString pattern, flags;
     
    184190  class ThisNode : public Node {
    185191  public:
    186     ThisNode() {}
    187     JSValue* evaluate(ExecState*);
    188     virtual void streamTo(SourceStream&) const;
     192    ThisNode() KJS_FAST_CALL {}
     193    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     194    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    189195  };
    190196
    191197  class ResolveNode : public Node {
    192198  public:
    193     ResolveNode(const Identifier &s) : ident(s) { }
    194     JSValue* evaluate(ExecState*);
    195     virtual void streamTo(SourceStream&) const;
    196 
    197     virtual bool isLocation() const { return true; }
    198     virtual bool isResolveNode() const { return true; }
    199     const Identifier& identifier() const { return ident; }
     199    ResolveNode(const Identifier &s) KJS_FAST_CALL : ident(s) { }
     200    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     201    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     202
     203    virtual bool isLocation() const KJS_FAST_CALL { return true; }
     204    virtual bool isResolveNode() const KJS_FAST_CALL { return true; }
     205    const Identifier& identifier() const KJS_FAST_CALL { return ident; }
    200206
    201207  private:
     
    205211  class GroupNode : public Node {
    206212  public:
    207     GroupNode(Node *g) : group(g) { }
    208     virtual JSValue* evaluate(ExecState*);
    209     virtual Node *nodeInsideAllParens();
    210     virtual void streamTo(SourceStream&) const;
    211     virtual bool isGroupNode() const { return true; }
     213    GroupNode(Node *g) KJS_FAST_CALL : group(g) { }
     214    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     215    virtual Node *nodeInsideAllParens() KJS_FAST_CALL;
     216    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     217    virtual bool isGroupNode() const KJS_FAST_CALL { return true; }
    212218  private:
    213219    RefPtr<Node> group;
     
    217223  public:
    218224    // list pointer is tail of a circular list, cracked in the ArrayNode ctor
    219     ElementNode(int e, Node *n) : next(this), elision(e), node(n) { Parser::noteNodeCycle(this); }
    220     ElementNode(ElementNode *l, int e, Node *n)
     225    ElementNode(int e, Node *n) KJS_FAST_CALL : next(this), elision(e), node(n) { Parser::noteNodeCycle(this); }
     226    ElementNode(ElementNode *l, int e, Node *n) KJS_FAST_CALL
    221227      : next(l->next), elision(e), node(n) { l->next = this; }
    222     JSValue* evaluate(ExecState*);
    223     virtual void streamTo(SourceStream&) const;
    224     PassRefPtr<ElementNode> releaseNext() { return next.release(); }
    225     virtual void breakCycle();
     228    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     229    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     230    PassRefPtr<ElementNode> releaseNext() KJS_FAST_CALL { return next.release(); }
     231    virtual void breakCycle() KJS_FAST_CALL;
    226232  private:
    227233    friend class ArrayNode;
     
    233239  class ArrayNode : public Node {
    234240  public:
    235     ArrayNode(int e) : elision(e), opt(true) { }
    236     ArrayNode(ElementNode *ele)
     241    ArrayNode(int e) KJS_FAST_CALL : elision(e), opt(true) { }
     242    ArrayNode(ElementNode *ele) KJS_FAST_CALL
    237243      : element(ele->next.release()), elision(0), opt(false) { Parser::removeNodeCycle(element.get()); }
    238     ArrayNode(int eli, ElementNode *ele)
     244    ArrayNode(int eli, ElementNode *ele) KJS_FAST_CALL
    239245      : element(ele->next.release()), elision(eli), opt(true) { Parser::removeNodeCycle(element.get()); }
    240     JSValue* evaluate(ExecState*);
    241     virtual void streamTo(SourceStream&) const;
     246    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     247    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    242248  private:
    243249    RefPtr<ElementNode> element;
     
    248254  class PropertyNameNode : public Node {
    249255  public:
    250     PropertyNameNode(double d) : numeric(d) { }
    251     PropertyNameNode(const Identifier &s) : str(s) { }
    252     JSValue* evaluate(ExecState*);
    253     virtual void streamTo(SourceStream&) const;
     256    PropertyNameNode(double d) KJS_FAST_CALL : numeric(d) { }
     257    PropertyNameNode(const Identifier &s) KJS_FAST_CALL : str(s) { }
     258    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     259    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    254260  private:
    255261    double numeric;
     
    260266  public:
    261267    enum Type { Constant, Getter, Setter };
    262     PropertyNode(PropertyNameNode *n, Node *a, Type t)
     268    PropertyNode(PropertyNameNode *n, Node *a, Type t) KJS_FAST_CALL
    263269      : name(n), assign(a), type(t) { }
    264     JSValue* evaluate(ExecState*);
    265     virtual void streamTo(SourceStream&) const;
     270    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     271    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    266272    friend class PropertyListNode;
    267273  private:
     
    274280  public:
    275281    // list pointer is tail of a circular list, cracked in the ObjectLiteralNode ctor
    276     PropertyListNode(PropertyNode *n)
     282    PropertyListNode(PropertyNode *n) KJS_FAST_CALL
    277283      : node(n), next(this) { Parser::noteNodeCycle(this); }
    278     PropertyListNode(PropertyNode *n, PropertyListNode *l)
     284    PropertyListNode(PropertyNode *n, PropertyListNode *l) KJS_FAST_CALL
    279285      : node(n), next(l->next) { l->next = this; }
    280     JSValue* evaluate(ExecState*);
    281     virtual void streamTo(SourceStream&) const;
    282     PassRefPtr<PropertyListNode> releaseNext() { return next.release(); }
    283     virtual void breakCycle();
     286    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     287    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     288    PassRefPtr<PropertyListNode> releaseNext() KJS_FAST_CALL { return next.release(); }
     289    virtual void breakCycle() KJS_FAST_CALL;
    284290  private:
    285291    friend class ObjectLiteralNode;
     
    290296  class ObjectLiteralNode : public Node {
    291297  public:
    292     ObjectLiteralNode() { }
    293     ObjectLiteralNode(PropertyListNode *l) : list(l->next.release()) { Parser::removeNodeCycle(list.get()); }
    294     JSValue* evaluate(ExecState*);
    295     virtual void streamTo(SourceStream&) const;
     298    ObjectLiteralNode() KJS_FAST_CALL { }
     299    ObjectLiteralNode(PropertyListNode *l) KJS_FAST_CALL : list(l->next.release()) { Parser::removeNodeCycle(list.get()); }
     300    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     301    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    296302  private:
    297303    RefPtr<PropertyListNode> list;
     
    300306  class BracketAccessorNode : public Node {
    301307  public:
    302     BracketAccessorNode(Node *e1, Node *e2) : expr1(e1), expr2(e2) {}
    303     JSValue* evaluate(ExecState*);
    304     virtual void streamTo(SourceStream&) const;
    305 
    306     virtual bool isLocation() const { return true; }
    307     virtual bool isBracketAccessorNode() const { return true; }
    308     Node *base() { return expr1.get(); }
    309     Node *subscript() { return expr2.get(); }
     308    BracketAccessorNode(Node *e1, Node *e2) KJS_FAST_CALL : expr1(e1), expr2(e2) {}
     309    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     310    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     311
     312    virtual bool isLocation() const KJS_FAST_CALL { return true; }
     313    virtual bool isBracketAccessorNode() const KJS_FAST_CALL { return true; }
     314    Node *base() KJS_FAST_CALL { return expr1.get(); }
     315    Node *subscript() KJS_FAST_CALL { return expr2.get(); }
    310316
    311317  private:
     
    316322  class DotAccessorNode : public Node {
    317323  public:
    318     DotAccessorNode(Node *e, const Identifier &s) : expr(e), ident(s) { }
    319     JSValue* evaluate(ExecState*);
    320     virtual void streamTo(SourceStream&) const;
    321 
    322     virtual bool isLocation() const { return true; }
    323     virtual bool isDotAccessorNode() const { return true; }
    324     Node *base() const { return expr.get(); }
    325     const Identifier& identifier() const { return ident; }
     324    DotAccessorNode(Node *e, const Identifier &s) KJS_FAST_CALL : expr(e), ident(s) { }
     325    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     326    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     327
     328    virtual bool isLocation() const KJS_FAST_CALL { return true; }
     329    virtual bool isDotAccessorNode() const KJS_FAST_CALL { return true; }
     330    Node *base() const KJS_FAST_CALL { return expr.get(); }
     331    const Identifier& identifier() const KJS_FAST_CALL { return ident; }
    326332
    327333  private:
     
    333339  public:
    334340    // list pointer is tail of a circular list, cracked in the ArgumentsNode ctor
    335     ArgumentListNode(Node *e) : next(this), expr(e) { Parser::noteNodeCycle(this); }
    336     ArgumentListNode(ArgumentListNode *l, Node *e)
     341    ArgumentListNode(Node *e) KJS_FAST_CALL : next(this), expr(e) { Parser::noteNodeCycle(this); }
     342    ArgumentListNode(ArgumentListNode *l, Node *e) KJS_FAST_CALL
    337343      : next(l->next), expr(e) { l->next = this; }
    338     JSValue* evaluate(ExecState*);
    339     List evaluateList(ExecState*);
    340     virtual void streamTo(SourceStream&) const;
    341     PassRefPtr<ArgumentListNode> releaseNext() { return next.release(); }
    342     virtual void breakCycle();
     344    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     345    List evaluateList(ExecState*) KJS_FAST_CALL;
     346    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     347    PassRefPtr<ArgumentListNode> releaseNext() KJS_FAST_CALL { return next.release(); }
     348    virtual void breakCycle() KJS_FAST_CALL;
    343349  private:
    344350    friend class ArgumentsNode;
     
    349355  class ArgumentsNode : public Node {
    350356  public:
    351     ArgumentsNode() { }
    352     ArgumentsNode(ArgumentListNode *l)
     357    ArgumentsNode() KJS_FAST_CALL { }
     358    ArgumentsNode(ArgumentListNode *l) KJS_FAST_CALL
    353359      : list(l->next.release()) { Parser::removeNodeCycle(list.get()); }
    354     JSValue* evaluate(ExecState*);
    355     List evaluateList(ExecState *exec) { return list ? list->evaluateList(exec) : List(); }
    356     virtual void streamTo(SourceStream&) const;
     360    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     361    List evaluateList(ExecState *exec) KJS_FAST_CALL { return list ? list->evaluateList(exec) : List(); }
     362    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    357363  private:
    358364    RefPtr<ArgumentListNode> list;
     
    361367  class NewExprNode : public Node {
    362368  public:
    363     NewExprNode(Node *e) : expr(e) {}
    364     NewExprNode(Node *e, ArgumentsNode *a) : expr(e), args(a) {}
    365     JSValue* evaluate(ExecState*);
    366     virtual void streamTo(SourceStream&) const;
     369    NewExprNode(Node *e) KJS_FAST_CALL : expr(e) {}
     370    NewExprNode(Node *e, ArgumentsNode *a) KJS_FAST_CALL : expr(e), args(a) {}
     371    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     372    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    367373  private:
    368374    RefPtr<Node> expr;
     
    372378  class FunctionCallValueNode : public Node {
    373379  public:
    374     FunctionCallValueNode(Node *e, ArgumentsNode *a) : expr(e), args(a) {}
    375     JSValue* evaluate(ExecState*);
    376     virtual void streamTo(SourceStream&) const;
     380    FunctionCallValueNode(Node *e, ArgumentsNode *a) KJS_FAST_CALL : expr(e), args(a) {}
     381    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     382    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    377383  private:
    378384    RefPtr<Node> expr;
     
    382388  class FunctionCallResolveNode : public Node {
    383389  public:
    384     FunctionCallResolveNode(const Identifier& i, ArgumentsNode *a) : ident(i), args(a) {}
    385     JSValue* evaluate(ExecState*);
    386     virtual void streamTo(SourceStream&) const;
     390    FunctionCallResolveNode(const Identifier& i, ArgumentsNode *a) KJS_FAST_CALL : ident(i), args(a) {}
     391    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     392    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    387393  private:
    388394    Identifier ident;
     
    392398  class FunctionCallBracketNode : public Node {
    393399  public:
    394     FunctionCallBracketNode(Node *b, Node *s, ArgumentsNode *a) : base(b), subscript(s), args(a) {}
    395     JSValue* evaluate(ExecState*);
    396     virtual void streamTo(SourceStream&) const;
     400    FunctionCallBracketNode(Node *b, Node *s, ArgumentsNode *a) KJS_FAST_CALL : base(b), subscript(s), args(a) {}
     401    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     402    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    397403  protected:
    398404    RefPtr<Node> base;
     
    403409  class FunctionCallParenBracketNode : public FunctionCallBracketNode {
    404410  public:
    405     FunctionCallParenBracketNode(Node *b, Node *s, ArgumentsNode *a) : FunctionCallBracketNode(b, s, a) {}
    406     virtual void streamTo(SourceStream&) const;
     411    FunctionCallParenBracketNode(Node *b, Node *s, ArgumentsNode *a) KJS_FAST_CALL : FunctionCallBracketNode(b, s, a) {}
     412    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    407413  };
    408414
    409415  class FunctionCallDotNode : public Node {
    410416  public:
    411     FunctionCallDotNode(Node *b, const Identifier &i, ArgumentsNode *a) : base(b), ident(i), args(a) {}
    412     JSValue* evaluate(ExecState*);
    413     virtual void streamTo(SourceStream&) const;
     417    FunctionCallDotNode(Node *b, const Identifier &i, ArgumentsNode *a) KJS_FAST_CALL : base(b), ident(i), args(a) {}
     418    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     419    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    414420  protected:
    415421    RefPtr<Node> base;
     
    420426  class FunctionCallParenDotNode : public FunctionCallDotNode {
    421427  public:
    422     FunctionCallParenDotNode(Node *b, const Identifier &i, ArgumentsNode *a) : FunctionCallDotNode(b, i, a) {}
    423     virtual void streamTo(SourceStream&) const;
     428    FunctionCallParenDotNode(Node *b, const Identifier &i, ArgumentsNode *a) KJS_FAST_CALL : FunctionCallDotNode(b, i, a) {}
     429    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    424430  };
    425431
    426432  class PostfixResolveNode : public Node {
    427433  public:
    428     PostfixResolveNode(const Identifier& i, Operator o) : m_ident(i), m_oper(o) {}
    429     JSValue* evaluate(ExecState*);
    430     virtual void streamTo(SourceStream&) const;
     434    PostfixResolveNode(const Identifier& i, Operator o) KJS_FAST_CALL : m_ident(i), m_oper(o) {}
     435    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     436    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    431437  private:
    432438    Identifier m_ident;
     
    436442  class PostfixBracketNode : public Node {
    437443  public:
    438     PostfixBracketNode(Node *b, Node *s, Operator o) : m_base(b), m_subscript(s), m_oper(o) {}
    439     JSValue* evaluate(ExecState*);
    440     virtual void streamTo(SourceStream&) const;
     444    PostfixBracketNode(Node *b, Node *s, Operator o) KJS_FAST_CALL : m_base(b), m_subscript(s), m_oper(o) {}
     445    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     446    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    441447  private:
    442448    RefPtr<Node> m_base;
     
    447453  class PostfixDotNode : public Node {
    448454  public:
    449     PostfixDotNode(Node *b, const Identifier& i, Operator o) : m_base(b), m_ident(i), m_oper(o) {}
    450     JSValue* evaluate(ExecState*);
    451     virtual void streamTo(SourceStream&) const;
     455    PostfixDotNode(Node *b, const Identifier& i, Operator o) KJS_FAST_CALL : m_base(b), m_ident(i), m_oper(o) {}
     456    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     457    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    452458  private:
    453459    RefPtr<Node> m_base;
     
    458464  class PostfixErrorNode : public Node {
    459465  public:
    460     PostfixErrorNode(Node* e, Operator o) : m_expr(e), m_oper(o) {}
    461     JSValue* evaluate(ExecState*);
    462     virtual void streamTo(SourceStream&) const;
     466    PostfixErrorNode(Node* e, Operator o) KJS_FAST_CALL : m_expr(e), m_oper(o) {}
     467    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     468    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    463469  private:
    464470    RefPtr<Node> m_expr;
     
    468474  class DeleteResolveNode : public Node {
    469475  public:
    470     DeleteResolveNode(const Identifier& i) : m_ident(i) {}
    471     JSValue* evaluate(ExecState*);
    472     virtual void streamTo(SourceStream&) const;
     476    DeleteResolveNode(const Identifier& i) KJS_FAST_CALL : m_ident(i) {}
     477    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     478    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    473479  private:
    474480    Identifier m_ident;
     
    477483  class DeleteBracketNode : public Node {
    478484  public:
    479     DeleteBracketNode(Node *base, Node *subscript) : m_base(base), m_subscript(subscript) {}
    480     JSValue* evaluate(ExecState*);
    481     virtual void streamTo(SourceStream&) const;
     485    DeleteBracketNode(Node *base, Node *subscript) KJS_FAST_CALL : m_base(base), m_subscript(subscript) {}
     486    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     487    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    482488  private:
    483489    RefPtr<Node> m_base;
     
    487493  class DeleteDotNode : public Node {
    488494  public:
    489     DeleteDotNode(Node *base, const Identifier& i) : m_base(base), m_ident(i) {}
    490     JSValue* evaluate(ExecState*);
    491     virtual void streamTo(SourceStream&) const;
     495    DeleteDotNode(Node *base, const Identifier& i) KJS_FAST_CALL : m_base(base), m_ident(i) {}
     496    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     497    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    492498  private:
    493499    RefPtr<Node> m_base;
     
    497503  class DeleteValueNode : public Node {
    498504  public:
    499     DeleteValueNode(Node *e) : m_expr(e) {}
    500     JSValue* evaluate(ExecState*);
    501     virtual void streamTo(SourceStream&) const;
     505    DeleteValueNode(Node *e) KJS_FAST_CALL : m_expr(e) {}
     506    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     507    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    502508  private:
    503509    RefPtr<Node> m_expr;
     
    506512  class VoidNode : public Node {
    507513  public:
    508     VoidNode(Node *e) : expr(e) {}
    509     JSValue* evaluate(ExecState*);
    510     virtual void streamTo(SourceStream&) const;
     514    VoidNode(Node *e) KJS_FAST_CALL : expr(e) {}
     515    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     516    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    511517  private:
    512518    RefPtr<Node> expr;
     
    515521  class TypeOfResolveNode : public Node {
    516522  public:
    517     TypeOfResolveNode(const Identifier& i) : m_ident(i) {}
    518     JSValue* evaluate(ExecState*);
    519     virtual void streamTo(SourceStream&) const;
     523    TypeOfResolveNode(const Identifier& i) KJS_FAST_CALL : m_ident(i) {}
     524    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     525    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    520526  private:
    521527    Identifier m_ident;
     
    524530  class TypeOfValueNode : public Node {
    525531  public:
    526     TypeOfValueNode(Node *e) : m_expr(e) {}
    527     JSValue* evaluate(ExecState*);
    528     virtual void streamTo(SourceStream&) const;
     532    TypeOfValueNode(Node *e) KJS_FAST_CALL : m_expr(e) {}
     533    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     534    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    529535  private:
    530536    RefPtr<Node> m_expr;
     
    533539  class PrefixResolveNode : public Node {
    534540  public:
    535     PrefixResolveNode(const Identifier& i, Operator o) : m_ident(i), m_oper(o) {}
    536     JSValue* evaluate(ExecState*);
    537     virtual void streamTo(SourceStream&) const;
     541    PrefixResolveNode(const Identifier& i, Operator o) KJS_FAST_CALL : m_ident(i), m_oper(o) {}
     542    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     543    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    538544  private:
    539545    Identifier m_ident;
     
    543549  class PrefixBracketNode : public Node {
    544550  public:
    545     PrefixBracketNode(Node *b, Node *s, Operator o) : m_base(b), m_subscript(s), m_oper(o) {}
    546     JSValue* evaluate(ExecState*);
    547     virtual void streamTo(SourceStream&) const;
     551    PrefixBracketNode(Node *b, Node *s, Operator o) KJS_FAST_CALL : m_base(b), m_subscript(s), m_oper(o) {}
     552    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     553    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    548554  private:
    549555    RefPtr<Node> m_base;
     
    554560  class PrefixDotNode : public Node {
    555561  public:
    556     PrefixDotNode(Node *b, const Identifier& i, Operator o) : m_base(b), m_ident(i), m_oper(o) {}
    557     JSValue* evaluate(ExecState*);
    558     virtual void streamTo(SourceStream&) const;
     562    PrefixDotNode(Node *b, const Identifier& i, Operator o) KJS_FAST_CALL : m_base(b), m_ident(i), m_oper(o) {}
     563    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     564    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    559565  private:
    560566    RefPtr<Node> m_base;
     
    565571  class PrefixErrorNode : public Node {
    566572  public:
    567     PrefixErrorNode(Node* e, Operator o) : m_expr(e), m_oper(o) {}
    568     JSValue* evaluate(ExecState*);
    569     virtual void streamTo(SourceStream&) const;
     573    PrefixErrorNode(Node* e, Operator o) KJS_FAST_CALL : m_expr(e), m_oper(o) {}
     574    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     575    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    570576  private:
    571577    RefPtr<Node> m_expr;
     
    575581  class UnaryPlusNode : public Node {
    576582  public:
    577     UnaryPlusNode(Node *e) : expr(e) {}
    578     JSValue* evaluate(ExecState*);
    579     virtual void streamTo(SourceStream&) const;
     583    UnaryPlusNode(Node *e) KJS_FAST_CALL : expr(e) {}
     584    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     585    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    580586  private:
    581587    RefPtr<Node> expr;
     
    584590  class NegateNode : public Node {
    585591  public:
    586     NegateNode(Node *e) : expr(e) {}
    587     JSValue* evaluate(ExecState*);
    588     virtual void streamTo(SourceStream&) const;
     592    NegateNode(Node *e) KJS_FAST_CALL : expr(e) {}
     593    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     594    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    589595  private:
    590596    RefPtr<Node> expr;
     
    593599  class BitwiseNotNode : public Node {
    594600  public:
    595     BitwiseNotNode(Node *e) : expr(e) {}
    596     JSValue* evaluate(ExecState*);
    597     virtual void streamTo(SourceStream&) const;
     601    BitwiseNotNode(Node *e) KJS_FAST_CALL : expr(e) {}
     602    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     603    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    598604  private:
    599605    RefPtr<Node> expr;
     
    602608  class LogicalNotNode : public Node {
    603609  public:
    604     LogicalNotNode(Node *e) : expr(e) {}
    605     JSValue* evaluate(ExecState*);
    606     virtual void streamTo(SourceStream&) const;
     610    LogicalNotNode(Node *e) KJS_FAST_CALL : expr(e) {}
     611    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     612    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    607613  private:
    608614    RefPtr<Node> expr;
     
    611617  class MultNode : public Node {
    612618  public:
    613     MultNode(Node *t1, Node *t2, char op) : term1(t1), term2(t2), oper(op) {}
    614     JSValue* evaluate(ExecState*);
    615     virtual void streamTo(SourceStream&) const;
     619    MultNode(Node *t1, Node *t2, char op) KJS_FAST_CALL : term1(t1), term2(t2), oper(op) {}
     620    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     621    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    616622  private:
    617623    RefPtr<Node> term1;
     
    622628  class AddNode : public Node {
    623629  public:
    624     AddNode(Node *t1, Node *t2, char op) : term1(t1), term2(t2), oper(op) {}
    625     JSValue* evaluate(ExecState*);
    626     virtual void streamTo(SourceStream&) const;
     630    AddNode(Node *t1, Node *t2, char op) KJS_FAST_CALL : term1(t1), term2(t2), oper(op) {}
     631    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     632    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    627633  private:
    628634    RefPtr<Node> term1;
     
    633639  class ShiftNode : public Node {
    634640  public:
    635     ShiftNode(Node *t1, Operator o, Node *t2)
     641    ShiftNode(Node *t1, Operator o, Node *t2) KJS_FAST_CALL
    636642      : term1(t1), term2(t2), oper(o) {}
    637     JSValue* evaluate(ExecState*);
    638     virtual void streamTo(SourceStream&) const;
     643    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     644    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    639645  private:
    640646    RefPtr<Node> term1;
     
    645651  class RelationalNode : public Node {
    646652  public:
    647     RelationalNode(Node *e1, Operator o, Node *e2) :
     653    RelationalNode(Node *e1, Operator o, Node *e2) KJS_FAST_CALL :
    648654      expr1(e1), expr2(e2), oper(o) {}
    649     JSValue* evaluate(ExecState*);
    650     virtual void streamTo(SourceStream&) const;
     655    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     656    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    651657  private:
    652658    RefPtr<Node> expr1;
     
    657663  class EqualNode : public Node {
    658664  public:
    659     EqualNode(Node *e1, Operator o, Node *e2)
     665    EqualNode(Node *e1, Operator o, Node *e2) KJS_FAST_CALL
    660666      : expr1(e1), expr2(e2), oper(o) {}
    661     JSValue* evaluate(ExecState*);
    662     virtual void streamTo(SourceStream&) const;
     667    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     668    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    663669  private:
    664670    RefPtr<Node> expr1;
     
    669675  class BitOperNode : public Node {
    670676  public:
    671     BitOperNode(Node *e1, Operator o, Node *e2) :
     677    BitOperNode(Node *e1, Operator o, Node *e2) KJS_FAST_CALL :
    672678      expr1(e1), expr2(e2), oper(o) {}
    673     JSValue* evaluate(ExecState*);
    674     virtual void streamTo(SourceStream&) const;
     679    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     680    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    675681  private:
    676682    RefPtr<Node> expr1;
     
    684690  class BinaryLogicalNode : public Node {
    685691  public:
    686     BinaryLogicalNode(Node *e1, Operator o, Node *e2) :
     692    BinaryLogicalNode(Node *e1, Operator o, Node *e2) KJS_FAST_CALL :
    687693      expr1(e1), expr2(e2), oper(o) {}
    688     JSValue* evaluate(ExecState*);
    689     virtual void streamTo(SourceStream&) const;
     694    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     695    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    690696  private:
    691697    RefPtr<Node> expr1;
     
    699705  class ConditionalNode : public Node {
    700706  public:
    701     ConditionalNode(Node *l, Node *e1, Node *e2) :
     707    ConditionalNode(Node *l, Node *e1, Node *e2) KJS_FAST_CALL :
    702708      logical(l), expr1(e1), expr2(e2) {}
    703     JSValue* evaluate(ExecState*);
    704     virtual void streamTo(SourceStream&) const;
     709    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     710    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    705711  private:
    706712    RefPtr<Node> logical;
     
    711717  class AssignResolveNode : public Node {
    712718  public:
    713     AssignResolveNode(const Identifier &ident, Operator oper, Node *right)
     719    AssignResolveNode(const Identifier &ident, Operator oper, Node *right) KJS_FAST_CALL
    714720      : m_ident(ident), m_oper(oper), m_right(right) {}
    715     JSValue* evaluate(ExecState*);
    716     virtual void streamTo(SourceStream&) const;
     721    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     722    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    717723  protected:
    718724    Identifier m_ident;
     
    723729  class AssignBracketNode : public Node {
    724730  public:
    725     AssignBracketNode(Node *base, Node *subscript, Operator oper, Node *right)
     731    AssignBracketNode(Node *base, Node *subscript, Operator oper, Node *right) KJS_FAST_CALL
    726732      : m_base(base), m_subscript(subscript), m_oper(oper), m_right(right) {}
    727     JSValue* evaluate(ExecState*);
    728     virtual void streamTo(SourceStream&) const;
     733    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     734    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    729735  protected:
    730736    RefPtr<Node> m_base;
     
    736742  class AssignDotNode : public Node {
    737743  public:
    738     AssignDotNode(Node *base, const Identifier& ident, Operator oper, Node *right)
     744    AssignDotNode(Node *base, const Identifier& ident, Operator oper, Node *right) KJS_FAST_CALL
    739745      : m_base(base), m_ident(ident), m_oper(oper), m_right(right) {}
    740     JSValue* evaluate(ExecState*);
    741     virtual void streamTo(SourceStream&) const;
     746    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     747    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    742748  protected:
    743749    RefPtr<Node> m_base;
     
    749755  class AssignErrorNode : public Node {
    750756  public:
    751     AssignErrorNode(Node* left, Operator oper, Node* right)
     757    AssignErrorNode(Node* left, Operator oper, Node* right) KJS_FAST_CALL
    752758      : m_left(left), m_oper(oper), m_right(right) {}
    753     JSValue* evaluate(ExecState*);
    754     virtual void streamTo(SourceStream&) const;
     759    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     760    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    755761  protected:
    756762    RefPtr<Node> m_left;
     
    761767  class CommaNode : public Node {
    762768  public:
    763     CommaNode(Node *e1, Node *e2) : expr1(e1), expr2(e2) {}
    764     JSValue* evaluate(ExecState*);
    765     virtual void streamTo(SourceStream&) const;
     769    CommaNode(Node *e1, Node *e2) KJS_FAST_CALL : expr1(e1), expr2(e2) {}
     770    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     771    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    766772  private:
    767773    RefPtr<Node> expr1;
     
    771777  class AssignExprNode : public Node {
    772778  public:
    773     AssignExprNode(Node *e) : expr(e) {}
    774     JSValue* evaluate(ExecState*);
    775     virtual void streamTo(SourceStream&) const;
     779    AssignExprNode(Node *e) KJS_FAST_CALL : expr(e) {}
     780    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     781    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    776782  private:
    777783    RefPtr<Node> expr;
     
    781787  public:
    782788    enum Type { Variable, Constant };
    783     VarDeclNode(const Identifier &id, AssignExprNode *in, Type t);
    784     JSValue* evaluate(ExecState*);
    785     virtual void processVarDecls(ExecState*);
    786     virtual void streamTo(SourceStream&) const;
     789    VarDeclNode(const Identifier &id, AssignExprNode *in, Type t) KJS_FAST_CALL;
     790    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     791    virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     792    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    787793  private:
    788794    Type varType;
     
    794800  public:
    795801    // list pointer is tail of a circular list, cracked in the ForNode/VarStatementNode ctor
    796     VarDeclListNode(VarDeclNode *v) : next(this), var(v) { Parser::noteNodeCycle(this); }
    797     VarDeclListNode(VarDeclListNode *l, VarDeclNode *v)
     802    VarDeclListNode(VarDeclNode *v) KJS_FAST_CALL : next(this), var(v) { Parser::noteNodeCycle(this); }
     803    VarDeclListNode(VarDeclListNode *l, VarDeclNode *v) KJS_FAST_CALL
    798804      : next(l->next), var(v) { l->next = this; }
    799     JSValue* evaluate(ExecState*);
    800     virtual void processVarDecls(ExecState*);
    801     virtual void streamTo(SourceStream&) const;
    802     PassRefPtr<VarDeclListNode> releaseNext() { return next.release(); }
    803     virtual void breakCycle();
     805    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     806    virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     807    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     808    PassRefPtr<VarDeclListNode> releaseNext() KJS_FAST_CALL { return next.release(); }
     809    virtual void breakCycle() KJS_FAST_CALL;
    804810  private:
    805811    friend class ForNode;
     
    811817  class VarStatementNode : public StatementNode {
    812818  public:
    813     VarStatementNode(VarDeclListNode *l) : next(l->next.release()) { Parser::removeNodeCycle(next.get()); }
    814     virtual Completion execute(ExecState*);
    815     virtual void processVarDecls(ExecState*);
    816     virtual void streamTo(SourceStream&) const;
     819    VarStatementNode(VarDeclListNode *l) KJS_FAST_CALL : next(l->next.release()) { Parser::removeNodeCycle(next.get()); }
     820    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     821    virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     822    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    817823  private:
    818824    RefPtr<VarDeclListNode> next;
     
    821827  class BlockNode : public StatementNode {
    822828  public:
    823     BlockNode(SourceElementsNode *s);
    824     virtual Completion execute(ExecState*);
    825     virtual void processVarDecls(ExecState*);
    826     virtual void streamTo(SourceStream&) const;
     829    BlockNode(SourceElementsNode *s) KJS_FAST_CALL;
     830    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     831    virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     832    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    827833  protected:
    828834    RefPtr<SourceElementsNode> source;
     
    831837  class EmptyStatementNode : public StatementNode {
    832838  public:
    833     EmptyStatementNode() { } // debug
    834     virtual Completion execute(ExecState*);
    835     virtual void streamTo(SourceStream&) const;
     839    EmptyStatementNode() KJS_FAST_CALL { } // debug
     840    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     841    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    836842  };
    837843
    838844  class ExprStatementNode : public StatementNode {
    839845  public:
    840     ExprStatementNode(Node *e) : expr(e) { }
    841     virtual Completion execute(ExecState*);
    842     virtual void streamTo(SourceStream&) const;
     846    ExprStatementNode(Node *e) KJS_FAST_CALL : expr(e) { }
     847    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     848    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    843849  private:
    844850    RefPtr<Node> expr;
     
    847853  class IfNode : public StatementNode {
    848854  public:
    849     IfNode(Node *e, StatementNode *s1, StatementNode *s2)
     855    IfNode(Node *e, StatementNode *s1, StatementNode *s2) KJS_FAST_CALL
    850856      : expr(e), statement1(s1), statement2(s2) {}
    851     virtual Completion execute(ExecState*);
    852     virtual void processVarDecls(ExecState*);
    853     virtual void streamTo(SourceStream&) const;
     857    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     858    virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     859    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    854860  private:
    855861    RefPtr<Node> expr;
     
    860866  class DoWhileNode : public StatementNode {
    861867  public:
    862     DoWhileNode(StatementNode *s, Node *e) : statement(s), expr(e) {}
    863     virtual Completion execute(ExecState*);
    864     virtual void processVarDecls(ExecState*);
    865     virtual void streamTo(SourceStream&) const;
     868    DoWhileNode(StatementNode *s, Node *e) KJS_FAST_CALL : statement(s), expr(e) {}
     869    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     870    virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     871    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    866872  private:
    867873    RefPtr<StatementNode> statement;
     
    871877  class WhileNode : public StatementNode {
    872878  public:
    873     WhileNode(Node *e, StatementNode *s) : expr(e), statement(s) {}
    874     virtual Completion execute(ExecState*);
    875     virtual void processVarDecls(ExecState*);
    876     virtual void streamTo(SourceStream&) const;
     879    WhileNode(Node *e, StatementNode *s) KJS_FAST_CALL : expr(e), statement(s) {}
     880    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     881    virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     882    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    877883  private:
    878884    RefPtr<Node> expr;
     
    882888  class ForNode : public StatementNode {
    883889  public:
    884     ForNode(Node *e1, Node *e2, Node *e3, StatementNode *s) :
     890    ForNode(Node *e1, Node *e2, Node *e3, StatementNode *s) KJS_FAST_CALL :
    885891      expr1(e1), expr2(e2), expr3(e3), statement(s) {}
    886     ForNode(VarDeclListNode *e1, Node *e2, Node *e3, StatementNode *s) :
     892    ForNode(VarDeclListNode *e1, Node *e2, Node *e3, StatementNode *s) KJS_FAST_CALL :
    887893      expr1(e1->next.release()), expr2(e2), expr3(e3), statement(s) { Parser::removeNodeCycle(expr1.get()); }
    888     virtual Completion execute(ExecState*);
    889     virtual void processVarDecls(ExecState*);
    890     virtual void streamTo(SourceStream&) const;
     894    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     895    virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     896    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    891897  private:
    892898    RefPtr<Node> expr1;
     
    898904  class ForInNode : public StatementNode {
    899905  public:
    900     ForInNode(Node *l, Node *e, StatementNode *s);
    901     ForInNode(const Identifier &i, AssignExprNode *in, Node *e, StatementNode *s);
    902     virtual Completion execute(ExecState*);
    903     virtual void processVarDecls(ExecState*);
    904     virtual void streamTo(SourceStream&) const;
     906    ForInNode(Node *l, Node *e, StatementNode *s) KJS_FAST_CALL;
     907    ForInNode(const Identifier &i, AssignExprNode *in, Node *e, StatementNode *s) KJS_FAST_CALL;
     908    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     909    virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     910    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    905911  private:
    906912    Identifier ident;
     
    914920  class ContinueNode : public StatementNode {
    915921  public:
    916     ContinueNode() { }
    917     ContinueNode(const Identifier &i) : ident(i) { }
    918     virtual Completion execute(ExecState*);
    919     virtual void streamTo(SourceStream&) const;
     922    ContinueNode() KJS_FAST_CALL { }
     923    ContinueNode(const Identifier &i) KJS_FAST_CALL : ident(i) { }
     924    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     925    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    920926  private:
    921927    Identifier ident;
     
    924930  class BreakNode : public StatementNode {
    925931  public:
    926     BreakNode() { }
    927     BreakNode(const Identifier &i) : ident(i) { }
    928     virtual Completion execute(ExecState*);
    929     virtual void streamTo(SourceStream&) const;
     932    BreakNode() KJS_FAST_CALL { }
     933    BreakNode(const Identifier &i) KJS_FAST_CALL : ident(i) { }
     934    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     935    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    930936  private:
    931937    Identifier ident;
     
    934940  class ReturnNode : public StatementNode {
    935941  public:
    936     ReturnNode(Node *v) : value(v) {}
    937     virtual Completion execute(ExecState*);
    938     virtual void streamTo(SourceStream&) const;
     942    ReturnNode(Node *v) KJS_FAST_CALL : value(v) {}
     943    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     944    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    939945  private:
    940946    RefPtr<Node> value;
     
    943949  class WithNode : public StatementNode {
    944950  public:
    945     WithNode(Node *e, StatementNode *s) : expr(e), statement(s) {}
    946     virtual Completion execute(ExecState*);
    947     virtual void processVarDecls(ExecState*);
    948     virtual void streamTo(SourceStream&) const;
     951    WithNode(Node *e, StatementNode *s) KJS_FAST_CALL : expr(e), statement(s) {}
     952    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     953    virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     954    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    949955  private:
    950956    RefPtr<Node> expr;
     
    954960  class LabelNode : public StatementNode {
    955961  public:
    956     LabelNode(const Identifier &l, StatementNode *s) : label(l), statement(s) { }
    957     virtual Completion execute(ExecState*);
    958     virtual void processVarDecls(ExecState*);
    959     virtual void streamTo(SourceStream&) const;
     962    LabelNode(const Identifier &l, StatementNode *s) KJS_FAST_CALL : label(l), statement(s) { }
     963    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     964    virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     965    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    960966  private:
    961967    Identifier label;
     
    965971  class ThrowNode : public StatementNode {
    966972  public:
    967     ThrowNode(Node *e) : expr(e) {}
    968     virtual Completion execute(ExecState*);
    969     virtual void streamTo(SourceStream&) const;
     973    ThrowNode(Node *e) KJS_FAST_CALL : expr(e) {}
     974    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     975    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    970976  private:
    971977    RefPtr<Node> expr;
     
    974980  class TryNode : public StatementNode {
    975981  public:
    976     TryNode(StatementNode *b, const Identifier &e, StatementNode *c, StatementNode *f)
     982    TryNode(StatementNode *b, const Identifier &e, StatementNode *c, StatementNode *f) KJS_FAST_CALL
    977983      : tryBlock(b), exceptionIdent(e), catchBlock(c), finallyBlock(f) { }
    978     virtual Completion execute(ExecState*);
    979     virtual void processVarDecls(ExecState*);
    980     virtual void streamTo(SourceStream&) const;
     984    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     985    virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     986    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    981987  private:
    982988    RefPtr<StatementNode> tryBlock;
     
    989995  public:
    990996    // list pointer is tail of a circular list, cracked in the FuncDeclNode/FuncExprNode ctor
    991     ParameterNode(const Identifier &i) : id(i), next(this) { Parser::noteNodeCycle(this); }
    992     ParameterNode(ParameterNode *next, const Identifier &i)
     997    ParameterNode(const Identifier &i) KJS_FAST_CALL : id(i), next(this) { Parser::noteNodeCycle(this); }
     998    ParameterNode(ParameterNode *next, const Identifier &i) KJS_FAST_CALL
    993999      : id(i), next(next->next) { next->next = this; }
    994     JSValue* evaluate(ExecState*);
    995     Identifier ident() { return id; }
    996     ParameterNode *nextParam() { return next.get(); }
    997     virtual void streamTo(SourceStream&) const;
    998     PassRefPtr<ParameterNode> releaseNext() { return next.release(); }
    999     virtual void breakCycle();
     1000    JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1001    Identifier ident() KJS_FAST_CALL { return id; }
     1002    ParameterNode *nextParam() KJS_FAST_CALL { return next.get(); }
     1003    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     1004    PassRefPtr<ParameterNode> releaseNext() KJS_FAST_CALL { return next.release(); }
     1005    virtual void breakCycle() KJS_FAST_CALL;
    10001006  private:
    10011007    friend class FuncDeclNode;
     
    10071013  class Parameter {
    10081014  public:
    1009     Parameter() { }
    1010     Parameter(const Identifier& n) : name(n) { }
     1015    Parameter() KJS_FAST_CALL { }
     1016    Parameter(const Identifier& n) KJS_FAST_CALL : name(n) { }
    10111017    Identifier name;
    10121018  };
     
    10151021  class FunctionBodyNode : public BlockNode {
    10161022  public:
    1017     FunctionBodyNode(SourceElementsNode *);
    1018     virtual void processFuncDecl(ExecState*);
    1019     int sourceId() { return m_sourceId; }
    1020     const UString& sourceURL() { return m_sourceURL; }
    1021 
    1022     void addParam(const Identifier& ident);
    1023     size_t numParams() const { return m_parameters.size(); }
    1024     Identifier paramName(size_t pos) const { return m_parameters[pos].name; }
    1025     UString paramString() const;
    1026     Vector<Parameter>& parameters() { return m_parameters; }
     1023    FunctionBodyNode(SourceElementsNode *) KJS_FAST_CALL;
     1024    virtual void processFuncDecl(ExecState*) KJS_FAST_CALL;
     1025    int sourceId() KJS_FAST_CALL { return m_sourceId; }
     1026    const UString& sourceURL() KJS_FAST_CALL { return m_sourceURL; }
     1027
     1028    void addParam(const Identifier& ident) KJS_FAST_CALL;
     1029    size_t numParams() const KJS_FAST_CALL { return m_parameters.size(); }
     1030    Identifier paramName(size_t pos) const KJS_FAST_CALL { return m_parameters[pos].name; }
     1031    UString paramString() const KJS_FAST_CALL;
     1032    Vector<Parameter>& parameters() KJS_FAST_CALL { return m_parameters; }
    10271033  private:
    10281034    UString m_sourceURL;
     
    10331039  class FuncExprNode : public Node {
    10341040  public:
    1035     FuncExprNode(const Identifier &i, FunctionBodyNode *b, ParameterNode *p = 0)
     1041    FuncExprNode(const Identifier &i, FunctionBodyNode *b, ParameterNode *p = 0) KJS_FAST_CALL
    10361042      : ident(i), param(p ? p->next.release() : 0), body(b) { if (p) { Parser::removeNodeCycle(param.get()); } addParams(); }
    1037     virtual JSValue *evaluate(ExecState*);
    1038     virtual void streamTo(SourceStream&) const;
    1039   private:
    1040     void addParams();
     1043    virtual JSValue *evaluate(ExecState*) KJS_FAST_CALL;
     1044    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     1045  private:
     1046    void addParams() KJS_FAST_CALL;
    10411047    // Used for streamTo
    10421048    friend class PropertyNode;
     
    10481054  class FuncDeclNode : public StatementNode {
    10491055  public:
    1050     FuncDeclNode(const Identifier &i, FunctionBodyNode *b)
     1056    FuncDeclNode(const Identifier &i, FunctionBodyNode *b) KJS_FAST_CALL
    10511057      : ident(i), body(b) { addParams(); }
    1052     FuncDeclNode(const Identifier &i, ParameterNode *p, FunctionBodyNode *b)
     1058    FuncDeclNode(const Identifier &i, ParameterNode *p, FunctionBodyNode *b) KJS_FAST_CALL
    10531059      : ident(i), param(p->next.release()), body(b) { Parser::removeNodeCycle(param.get()); addParams(); }
    1054     virtual Completion execute(ExecState*);
    1055     virtual void processFuncDecl(ExecState*);
    1056     virtual void streamTo(SourceStream&) const;
    1057   private:
    1058     void addParams();
     1060    virtual Completion execute(ExecState*) KJS_FAST_CALL;
     1061    virtual void processFuncDecl(ExecState*) KJS_FAST_CALL;
     1062    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     1063  private:
     1064    void addParams() KJS_FAST_CALL;
    10591065    Identifier ident;
    10601066    RefPtr<ParameterNode> param;
     
    10671073    static int count;
    10681074    // list pointer is tail of a circular list, cracked in the BlockNode (or subclass) ctor
    1069     SourceElementsNode(StatementNode*);
    1070     SourceElementsNode(SourceElementsNode *s1, StatementNode *s2);
     1075    SourceElementsNode(StatementNode*) KJS_FAST_CALL;
     1076    SourceElementsNode(SourceElementsNode *s1, StatementNode *s2) KJS_FAST_CALL;
    10711077   
    1072     Completion execute(ExecState*);
    1073     void processFuncDecl(ExecState*);
    1074     virtual void processVarDecls(ExecState*);
    1075     virtual void streamTo(SourceStream&) const;
    1076     PassRefPtr<SourceElementsNode> releaseNext() { return next.release(); }
    1077     virtual void breakCycle();
     1078    Completion execute(ExecState*) KJS_FAST_CALL;
     1079    void processFuncDecl(ExecState*) KJS_FAST_CALL;
     1080    virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     1081    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     1082    PassRefPtr<SourceElementsNode> releaseNext() KJS_FAST_CALL { return next.release(); }
     1083    virtual void breakCycle() KJS_FAST_CALL;
    10781084  private:
    10791085    friend class BlockNode;
     
    10851091  class CaseClauseNode : public Node {
    10861092  public:
    1087       CaseClauseNode(Node *e) : expr(e) { }
    1088       CaseClauseNode(Node *e, SourceElementsNode *s)
     1093      CaseClauseNode(Node *e) KJS_FAST_CALL : expr(e) { }
     1094      CaseClauseNode(Node *e, SourceElementsNode *s) KJS_FAST_CALL
    10891095      : expr(e), source(s->next.release()) { Parser::removeNodeCycle(source.get()); }
    1090       JSValue* evaluate(ExecState*);
    1091       Completion evalStatements(ExecState*);
    1092       void processFuncDecl(ExecState*);
    1093       virtual void processVarDecls(ExecState*);
    1094       virtual void streamTo(SourceStream&) const;
     1096      JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1097      Completion evalStatements(ExecState*) KJS_FAST_CALL;
     1098      void processFuncDecl(ExecState*) KJS_FAST_CALL;
     1099      virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     1100      virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    10951101  private:
    10961102      RefPtr<Node> expr;
     
    11011107  public:
    11021108      // list pointer is tail of a circular list, cracked in the CaseBlockNode ctor
    1103       ClauseListNode(CaseClauseNode *c) : clause(c), next(this) { Parser::noteNodeCycle(this); }
    1104       ClauseListNode(ClauseListNode *n, CaseClauseNode *c)
     1109      ClauseListNode(CaseClauseNode *c) KJS_FAST_CALL : clause(c), next(this) { Parser::noteNodeCycle(this); }
     1110      ClauseListNode(ClauseListNode *n, CaseClauseNode *c) KJS_FAST_CALL
    11051111      : clause(c), next(n->next) { n->next = this; }
    1106       JSValue* evaluate(ExecState*);
    1107       CaseClauseNode *getClause() const { return clause.get(); }
    1108       ClauseListNode *getNext() const { return next.get(); }
    1109       virtual void processVarDecls(ExecState*);
    1110       void processFuncDecl(ExecState*);
    1111       virtual void streamTo(SourceStream&) const;
    1112       PassRefPtr<ClauseListNode> releaseNext() { return next.release(); }
    1113       virtual void breakCycle();
     1112      JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1113      CaseClauseNode *getClause() const KJS_FAST_CALL { return clause.get(); }
     1114      ClauseListNode *getNext() const KJS_FAST_CALL { return next.get(); }
     1115      virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     1116      void processFuncDecl(ExecState*) KJS_FAST_CALL;
     1117      virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     1118      PassRefPtr<ClauseListNode> releaseNext() KJS_FAST_CALL { return next.release(); }
     1119      virtual void breakCycle() KJS_FAST_CALL;
    11141120  private:
    11151121      friend class CaseBlockNode;
     
    11201126  class CaseBlockNode : public Node {
    11211127  public:
    1122       CaseBlockNode(ClauseListNode *l1, CaseClauseNode *d, ClauseListNode *l2);
    1123       JSValue* evaluate(ExecState*);
    1124       Completion evalBlock(ExecState *exec, JSValue *input);
    1125       virtual void processVarDecls(ExecState*);
    1126       void processFuncDecl(ExecState*);
    1127       virtual void streamTo(SourceStream&) const;
     1128      CaseBlockNode(ClauseListNode *l1, CaseClauseNode *d, ClauseListNode *l2) KJS_FAST_CALL;
     1129      JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1130      Completion evalBlock(ExecState *exec, JSValue *input) KJS_FAST_CALL;
     1131      virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     1132      void processFuncDecl(ExecState*) KJS_FAST_CALL;
     1133      virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    11281134  private:
    11291135      RefPtr<ClauseListNode> list1;
     
    11341140  class SwitchNode : public StatementNode {
    11351141  public:
    1136       SwitchNode(Node *e, CaseBlockNode *b) : expr(e), block(b) { }
    1137       virtual Completion execute(ExecState*);
    1138       virtual void processVarDecls(ExecState*);
    1139       virtual void processFuncDecl(ExecState*);
    1140       virtual void streamTo(SourceStream&) const;
     1142      SwitchNode(Node *e, CaseBlockNode *b) KJS_FAST_CALL : expr(e), block(b) { }
     1143      virtual Completion execute(ExecState*) KJS_FAST_CALL;
     1144      virtual void processVarDecls(ExecState*) KJS_FAST_CALL;
     1145      virtual void processFuncDecl(ExecState*) KJS_FAST_CALL;
     1146      virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    11411147  private:
    11421148      RefPtr<Node> expr;
     
    11461152  class ProgramNode : public FunctionBodyNode {
    11471153  public:
    1148     ProgramNode(SourceElementsNode *s);
     1154    ProgramNode(SourceElementsNode *s) KJS_FAST_CALL;
    11491155  };
    11501156
Note: See TracChangeset for help on using the changeset viewer.