Changeset 27695 in webkit for trunk/JavaScriptCore/kjs/value.h


Ignore:
Timestamp:
Nov 11, 2007, 4:34:37 PM (18 years ago)
Author:
eseidel
Message:

2007-11-10 Eric Seidel <[email protected]>

Reviewed by darin.

Add simple type inferencing to the parser, and create custom
AddNode and LessNode subclasses based on inferred types.
http://bugs.webkit.org/show_bug.cgi?id=15884

SunSpider claims this is at least a 0.5% speedup.

  • JavaScriptCore.exp:
  • kjs/grammar.y:
  • kjs/internal.cpp: (KJS::NumberImp::getPrimitiveNumber): (KJS::GetterSetterImp::getPrimitiveNumber):
  • kjs/internal.h:
  • kjs/lexer.cpp: (KJS::Lexer::lex):
  • kjs/nodes.cpp: (KJS::Node::Node): (KJS::StringNode::evaluate): (KJS::StringNode::evaluateToNumber): (KJS::StringNode::evaluateToBoolean): (KJS::RegExpNode::evaluate): (KJS::UnaryPlusNode::optimizeVariableAccess): (KJS::AddNode::evaluate): (KJS::AddNode::evaluateToNumber): (KJS::AddNumbersNode::inlineEvaluateToNumber): (KJS::AddNumbersNode::evaluate): (KJS::AddNumbersNode::evaluateToNumber): (KJS::AddStringsNode::evaluate): (KJS::AddStringLeftNode::evaluate): (KJS::AddStringRightNode::evaluate): (KJS::lessThan): (KJS::lessThanEq): (KJS::LessNumbersNode::evaluate): (KJS::LessStringsNode::evaluate):
  • kjs/nodes.h: (KJS::ExpressionNode::): (KJS::RegExpNode::): (KJS::RegExpNode::precedence): (KJS::TypeOfResolveNode::): (KJS::LocalVarTypeOfNode::): (KJS::UnaryPlusNode::): (KJS::UnaryPlusNode::precedence): (KJS::AddNode::): (KJS::AddNode::precedence): (KJS::AddNumbersNode::): (KJS::AddStringLeftNode::): (KJS::AddStringRightNode::): (KJS::AddStringsNode::): (KJS::LessNode::): (KJS::LessNode::precedence): (KJS::LessNumbersNode::): (KJS::LessStringsNode::):
  • kjs/nodes2string.cpp: (KJS::StringNode::streamTo):
  • kjs/object.cpp:
  • kjs/object.h:
  • kjs/value.h: (KJS::JSValue::getPrimitiveNumber):
File:
1 edited

Legend:

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

    r27648 r27695  
    8282    // Basic conversions.
    8383    JSValue* toPrimitive(ExecState* exec, JSType preferredType = UnspecifiedType) const;
    84     bool getPrimitiveNumber(ExecState* exec, double& number) const;
     84    bool getPrimitiveNumber(ExecState* exec, double& number, JSValue*& value);
    8585
    8686    bool toBoolean(ExecState *exec) const;
     
    150150    // Basic conversions.
    151151    virtual JSValue *toPrimitive(ExecState *exec, JSType preferredType = UnspecifiedType) const = 0;
    152     virtual bool getPrimitiveNumber(ExecState* exec, double& number) const = 0;
     152    virtual bool getPrimitiveNumber(ExecState* exec, double& number, JSValue*& value) = 0;
    153153    virtual bool toBoolean(ExecState *exec) const = 0;
    154154    virtual double toNumber(ExecState *exec) const = 0;
     
    421421}
    422422
    423 inline bool JSValue::getPrimitiveNumber(ExecState* exec, double& number) const
     423inline bool JSValue::getPrimitiveNumber(ExecState* exec, double& number, JSValue*& value)
    424424{
    425425    if (JSImmediate::isImmediate(this)) {
    426426        number = JSImmediate::toDouble(this);
     427        value = this;
    427428        return true;
    428429    }
    429     return asCell()->getPrimitiveNumber(exec, number);
     430    return asCell()->getPrimitiveNumber(exec, number, value);
    430431}
    431432
Note: See TracChangeset for help on using the changeset viewer.