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/internal.cpp

    r27413 r27695  
    5757}
    5858
    59 bool StringImp::getPrimitiveNumber(ExecState*, double& number) const
    60 {
     59bool StringImp::getPrimitiveNumber(ExecState*, double& number, JSValue*& value)
     60{
     61    value = this;
    6162    number = val.toDouble();
    6263    return false;
     
    9091}
    9192
    92 bool NumberImp::getPrimitiveNumber(ExecState*, double& number) const
     93bool NumberImp::getPrimitiveNumber(ExecState*, double& number, JSValue*& value)
    9394{
    9495    number = val;
     96    value = this;
    9597    return true;
    9698}
     
    159161}
    160162
    161 bool GetterSetterImp::getPrimitiveNumber(ExecState*, double& number) const
    162 {
    163     ASSERT(false);
     163bool GetterSetterImp::getPrimitiveNumber(ExecState*, double& number, JSValue*& value)
     164{
     165    ASSERT_NOT_REACHED();
    164166    number = 0;
     167    value = 0;
    165168    return true;
    166169}
Note: See TracChangeset for help on using the changeset viewer.