Source Code (Use browser search to find items of interest.)

Class Index

kdelibs'AddNode (./kdelibs/kjs/nodes.h:337)

  class AddNode : public Node {
  public:
    AddNode(Node *t1, Node *t2, int op) : term1(t1), term2(t2), oper(op) {}
    KJSO *evaluate();
  private:
    Node *term1, *term2;
    int oper;
  };


kdelibs'AddNode::evaluate() (./kdelibs/kjs/nodes.cpp:586)

KJSO *AddNode::evaluate()
{
  Ptr t1 = term1->evaluate();
  Ptr v1 = t1->getValue();

  Ptr t2 = term2->evaluate();
  Ptr v2 = t2->getValue();

  Ptr p1 = toPrimitive(v1);
  Ptr p2 = toPrimitive(v2);

  if ((p1->isA(StringType) || p2->isA(StringType)) && oper == '+') {
    Ptr s1 = toString(p1);
    Ptr s2 = toString(p2);

    UString s = s1->stringVal() + s2->stringVal();

    KJSO *res = KJSO::newString(s);

    return res;
  }

  Ptr n1 = toNumber(p1);
  Ptr n2 = toNumber(p2);

  KJSO *result;
  if (oper == '+')
    result = KJSO::newNumber(n1->doubleVal() + n2->doubleVal());
  else
    result = KJSO::newNumber(n1->doubleVal() - n2->doubleVal());

  return result;
}

// ECMA 11.14