|
6 | 6 | logger: Logger = logging.getLogger(__name__) |
7 | 7 |
|
8 | 8 |
|
9 | | -def recursive_dereferencer(var, builder): |
10 | | - """dereference until primitive type comes out""" |
11 | | - # TODO: Not worrying about stack overflow for now |
12 | | - logger.info(f"Dereferencing {var}, type is {var.type}") |
13 | | - if isinstance(var.type, ir.PointerType): |
14 | | - a = builder.load(var) |
15 | | - return recursive_dereferencer(a, builder) |
16 | | - elif isinstance(var.type, ir.IntType): |
17 | | - return var |
18 | | - else: |
19 | | - raise TypeError(f"Unsupported type for dereferencing: {var.type}") |
20 | | - |
21 | | - |
22 | 9 | def deref_to_val(var, builder): |
23 | 10 | """Dereference a variable to get its value and pointer chain.""" |
24 | 11 | logger.info(f"Dereferencing {var}, type is {var.type}") |
@@ -58,8 +45,8 @@ def get_operand_value(operand, builder, local_sym_tab): |
58 | 45 |
|
59 | 46 | def handle_binary_op_impl(rval, builder, local_sym_tab): |
60 | 47 | op = rval.op |
61 | | - left = get_operand_value(rval.left, builder, local_sym_tab) |
62 | | - right = get_operand_value(rval.right, builder, local_sym_tab) |
| 48 | + left, _, _ = get_operand_value(rval.left, builder, local_sym_tab) |
| 49 | + right, _, _ = get_operand_value(rval.right, builder, local_sym_tab) |
63 | 50 | logger.info(f"left is {left}, right is {right}, op is {op}") |
64 | 51 |
|
65 | 52 | # Map AST operation nodes to LLVM IR builder methods |
|
0 commit comments