Ignore:
Timestamp:
Oct 23, 2007, 2:25:44 PM (18 years ago)
Author:
oliver
Message:

Separating all of the simple binary expression nodes into multiple classes

Reviewed by Maciej

Separating all of the simple (eg. non-read-modify-write) binary operators into separate classes in preparation for further JS optimisations.

Happily this produces a 0.8% to 1.0% performance increase in SunSpider with no further work.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/nodes2string.cpp

    r26582 r26925  
    415415void MultNode::streamTo(SourceStream &s) const
    416416{
    417   s << term1 << " " << oper << " " << term2;
     417    s << term1 << " * " << term2;
     418}
     419
     420void DivNode::streamTo(SourceStream &s) const
     421{
     422    s << term1 << " / " << term2;
     423}
     424
     425void ModNode::streamTo(SourceStream &s) const
     426{
     427    s << term1 << " % " << term2;
    418428}
    419429
    420430void AddNode::streamTo(SourceStream &s) const
    421431{
    422   s << term1 << " " << oper << " " << term2;
    423 }
    424 
    425 void ShiftNode::streamTo(SourceStream &s) const
    426 {
    427   s << term1;
    428   if (oper == OpLShift)
    429     s << "<<";
    430   else if (oper == OpRShift)
    431     s << ">>";
    432   else
    433     s << ">>>";
    434   s << term2;
    435 }
    436 
    437 void RelationalNode::streamTo(SourceStream &s) const
    438 {
    439   s << expr1;
    440   switch (oper) {
    441   case OpLess:
    442     s << " < ";
    443     break;
    444   case OpGreater:
    445     s << " > ";
    446     break;
    447   case OpLessEq:
    448     s << " <= ";
    449     break;
    450   case OpGreaterEq:
    451     s << " >= ";
    452     break;
    453   case OpInstanceOf:
    454     s << " instanceof ";
    455     break;
    456   case OpIn:
    457     s << " in ";
    458     break;
    459   default:
    460     ;
    461   }
    462   s << expr2;
     432    s << term1 << " + " << term2;
     433}
     434
     435void SubNode::streamTo(SourceStream &s) const
     436{
     437    s << term1 << " - " << term2;
     438}
     439
     440void LeftShiftNode::streamTo(SourceStream &s) const
     441{
     442  s << term1 << "<<" << term2;
     443}
     444
     445void RightShiftNode::streamTo(SourceStream &s) const
     446{
     447  s << term1 << ">>" << term2;
     448}
     449
     450void UnsignedRightShiftNode::streamTo(SourceStream &s) const
     451{
     452  s << term1 << ">>>" << term2;
     453}
     454
     455void LessNode::streamTo(SourceStream &s) const
     456{
     457  s << expr1 << " < " << expr2;
     458}
     459
     460void GreaterNode::streamTo(SourceStream &s) const
     461{
     462  s << expr1 << " > " << expr2;
     463}
     464
     465void LessEqNode::streamTo(SourceStream &s) const
     466{
     467  s << expr1 << " <= " << expr2;
     468}
     469
     470void GreaterEqNode::streamTo(SourceStream &s) const
     471{
     472  s << expr1 << " >= " << expr2;
     473}
     474
     475void InstanceOfNode::streamTo(SourceStream &s) const
     476{
     477  s << expr1 << " instanceof " << expr2;
     478}
     479
     480void InNode::streamTo(SourceStream &s) const
     481{
     482  s << expr1 << " in " << expr2;
    463483}
    464484
    465485void EqualNode::streamTo(SourceStream &s) const
    466486{
    467   s << expr1;
    468  switch (oper) {
    469  case OpEqEq:
    470    s << " == ";
    471    break;
    472  case OpNotEq:
    473    s << " != ";
    474    break;
    475  case OpStrEq:
    476    s << " === ";
    477    break;
    478  case OpStrNEq:
    479    s << " !== ";
    480    break;
    481  default:
    482    ;
    483  }
    484   s << expr2;
    485 }
    486 
    487 void BitOperNode::streamTo(SourceStream &s) const
    488 {
    489   s << expr1;
    490   if (oper == OpBitAnd)
    491     s << " & ";
    492   else if (oper == OpBitXOr)
    493     s << " ^ ";
    494   else
    495     s << " | ";
    496   s << expr2;
    497 }
    498 
    499 void BinaryLogicalNode::streamTo(SourceStream &s) const
    500 {
    501   s << expr1 << (oper == OpAnd ? " && " : " || ") << expr2;
     487  s << expr1 << " == " << expr2;
     488}
     489
     490void NotEqualNode::streamTo(SourceStream &s) const
     491{
     492  s << expr1 << " == " << expr2;
     493}
     494
     495void StrictEqualNode::streamTo(SourceStream &s) const
     496{
     497  s << expr1 << " === " << expr2;
     498}
     499
     500void NotStrictEqualNode::streamTo(SourceStream &s) const
     501{
     502  s << expr1 << " !== " << expr2;
     503}
     504
     505void BitAndNode::streamTo(SourceStream &s) const
     506{
     507  s << expr1 << " & " << expr2;
     508}
     509
     510void BitXOrNode::streamTo(SourceStream &s) const
     511{
     512  s << expr1 << " ^ " << expr2;
     513}
     514
     515void BitOrNode::streamTo(SourceStream &s) const
     516{
     517  s << expr1 << " | " << expr2;
     518}
     519
     520void LogicalAndNode::streamTo(SourceStream &s) const
     521{
     522  s << expr1 << " && " << expr2;
     523}
     524
     525void LogicalOrNode::streamTo(SourceStream &s) const
     526{
     527  s << expr1 << " || " << expr2;
    502528}
    503529
Note: See TracChangeset for help on using the changeset viewer.