Beispiel #1
0
BinaryOpExpression::BinaryOpExpression
(EXPRESSION_CONSTRUCTOR_PARAMETERS,
 ExpressionPtr exp1, ExpressionPtr exp2, int op)
    : Expression(EXPRESSION_CONSTRUCTOR_PARAMETER_VALUES(BinaryOpExpression)),
      m_exp1(exp1), m_exp2(exp2), m_op(op), m_assign(false), m_canThrow(false) {
    switch (m_op) {
    case T_PLUS_EQUAL:
    case T_MINUS_EQUAL:
    case T_MUL_EQUAL:
    case T_DIV_EQUAL:
    case T_POW_EQUAL:
    case T_CONCAT_EQUAL:
    case T_MOD_EQUAL:
    case T_AND_EQUAL:
    case T_OR_EQUAL:
    case T_XOR_EQUAL:
    case T_SL_EQUAL:
    case T_SR_EQUAL:
        m_assign = true;
        m_exp1->setContext(Expression::LValue);
        m_exp1->setContext(Expression::OprLValue);
        m_exp1->setContext(Expression::DeepOprLValue);
        if (m_exp1->is(Expression::KindOfObjectPropertyExpression)) {
            m_exp1->setContext(Expression::NoLValueWrapper);
        }
        break;
    case T_COLLECTION: {
        std::string s = m_exp1->getLiteralString();
        ExpressionListPtr el = static_pointer_cast<ExpressionList>(m_exp2);
        el->setCollectionElems();
        break;
    }
    default:
        break;
    }
}