Skip to content

Commit d593969

Browse files
committed
Refactor ugly if-elif chain in handle_binary_op
1 parent 6d5895e commit d593969

File tree

1 file changed

+18
-24
lines changed

1 file changed

+18
-24
lines changed

pythonbpf/binary_ops.py

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -32,34 +32,28 @@ def get_operand_value(operand, builder, local_sym_tab):
3232

3333

3434
def handle_binary_op(rval, module, builder, var_name, local_sym_tab, map_sym_tab, func):
35-
logger.info(f"module {module}")
3635
op = rval.op
37-
3836
left = get_operand_value(rval.left, builder, local_sym_tab)
3937
right = get_operand_value(rval.right, builder, local_sym_tab)
4038
logger.info(f"left is {left}, right is {right}, op is {op}")
4139

42-
if isinstance(op, ast.Add):
43-
builder.store(builder.add(left, right), local_sym_tab[var_name].var)
44-
elif isinstance(op, ast.Sub):
45-
builder.store(builder.sub(left, right), local_sym_tab[var_name].var)
46-
elif isinstance(op, ast.Mult):
47-
builder.store(builder.mul(left, right), local_sym_tab[var_name].var)
48-
elif isinstance(op, ast.Div):
49-
builder.store(builder.sdiv(left, right), local_sym_tab[var_name].var)
50-
elif isinstance(op, ast.Mod):
51-
builder.store(builder.srem(left, right), local_sym_tab[var_name].var)
52-
elif isinstance(op, ast.LShift):
53-
builder.store(builder.shl(left, right), local_sym_tab[var_name].var)
54-
elif isinstance(op, ast.RShift):
55-
builder.store(builder.lshr(left, right), local_sym_tab[var_name].var)
56-
elif isinstance(op, ast.BitOr):
57-
builder.store(builder.or_(left, right), local_sym_tab[var_name].var)
58-
elif isinstance(op, ast.BitXor):
59-
builder.store(builder.xor(left, right), local_sym_tab[var_name].var)
60-
elif isinstance(op, ast.BitAnd):
61-
builder.store(builder.and_(left, right), local_sym_tab[var_name].var)
62-
elif isinstance(op, ast.FloorDiv):
63-
builder.store(builder.udiv(left, right), local_sym_tab[var_name].var)
40+
# Map AST operation nodes to LLVM IR builder methods
41+
op_map = {
42+
ast.Add: builder.add,
43+
ast.Sub: builder.sub,
44+
ast.Mult: builder.mul,
45+
ast.Div: builder.sdiv,
46+
ast.Mod: builder.srem,
47+
ast.LShift: builder.shl,
48+
ast.RShift: builder.lshr,
49+
ast.BitOr: builder.or_,
50+
ast.BitXor: builder.xor,
51+
ast.BitAnd: builder.and_,
52+
ast.FloorDiv: builder.udiv,
53+
}
54+
55+
if type(op) in op_map:
56+
result = op_map[type(op)](left, right)
57+
builder.store(result, local_sym_tab[var_name].var)
6458
else:
6559
raise SyntaxError("Unsupported binary operation")

0 commit comments

Comments
 (0)