Beispiel #1
0
def test_negative_numbers():
    assert ExprConst(-1).format() == '-1'
    assert ExprNeg(val=ExprConst(val=1)).format() == '-1'
    assert ExprOperator(a=ExprConst(val=-1), op='+',
                        b=ExprConst(val=-2)).format() == '(-1) + (-2)'
    assert ExprOperator(
        a=ExprNeg(val=ExprConst(val=1)),
        op='+',
        b=ExprNeg(val=ExprConst(val=2))).format() == '(-1) + (-2)'
Beispiel #2
0
def test_hex_int():
    expr = parse_expr(' 0x1234 ')
    assert expr == ExprConst(val=0x1234)
    assert expr.format_str == '0x1234'
    assert expr.format() == '0x1234'

    expr = parse_expr('-0x01234')
    assert expr == ExprNeg(val=ExprConst(val=0x1234))
    assert expr.val.format_str == '0x01234'
    assert expr.format() == '-0x01234'

    assert parse_expr('-0x1234') == parse_expr('- 0x1234')
Beispiel #3
0
def remove_parentheses(expr):
    """
    Removes the parentheses (ExprParentheses) from an arithmetic expression.
    """
    if isinstance(expr, ExprParentheses):
        return expr.val
    if isinstance(expr, ExprOperator):
        return ExprOperator(a=remove_parentheses(expr.a),
                            op=expr.op,
                            b=remove_parentheses(expr.b))
    if isinstance(expr, ExprAddressOf):
        return ExprAddressOf(expr=remove_parentheses(expr.expr))
    if isinstance(expr, ExprNeg):
        return ExprNeg(val=remove_parentheses(expr.val))
    return expr
Beispiel #4
0
def remove_parentheses(expr):
    """
    Removes the parentheses (ExprParentheses) from an arithmetic expression.
    """
    if isinstance(expr, ExprParentheses):
        return remove_parentheses(expr.val)
    if isinstance(expr, ExprOperator):
        return ExprOperator(a=remove_parentheses(expr.a),
                            op=expr.op,
                            b=remove_parentheses(expr.b))
    if isinstance(expr, ExprAddressOf):
        return ExprAddressOf(expr=remove_parentheses(expr.expr))
    if isinstance(expr, ExprNeg):
        return ExprNeg(val=remove_parentheses(expr.val))
    if isinstance(expr, ExprDeref):
        return ExprDeref(addr=remove_parentheses(expr.addr))
    if isinstance(expr, ExprDot):
        return ExprDot(expr=remove_parentheses(expr.expr), member=expr.member)
    if isinstance(expr, ExprSubscript):
        return ExprSubscript(expr=remove_parentheses(expr.expr),
                             offset=remove_parentheses(expr.offset))
    return expr
 def unary_neg(self, value, meta):
     return ExprNeg(val=value[0], location=self.meta2loc(meta))
 def visit_ExprNeg(self, expr: ExprNeg):
     return ExprNeg(val=self.visit(expr.val),
                    location=self.location_modifier(expr.location))
Beispiel #7
0
 def visit_ExprNeg(self, expr: ExprNeg):
     val = self.visit(expr.val)
     if isinstance(val, ExprConst):
         return ExprConst(
             val=self._to_field_element(-val.val), location=expr.location)
     return ExprNeg(val=val, location=expr.location)