mirror of
https://github.com/varun-r-mallya/Python-BPF.git
synced 2025-12-31 21:06:25 +00:00
Fix usage of local_sym_tab in expr_pass
This commit is contained in:
@ -14,9 +14,9 @@ def eval_expr(
|
|||||||
print(f"Evaluating expression: {ast.dump(expr)}")
|
print(f"Evaluating expression: {ast.dump(expr)}")
|
||||||
if isinstance(expr, ast.Name):
|
if isinstance(expr, ast.Name):
|
||||||
if expr.id in local_sym_tab:
|
if expr.id in local_sym_tab:
|
||||||
var = local_sym_tab[expr.id][0]
|
var = local_sym_tab[expr.id].var
|
||||||
val = builder.load(var)
|
val = builder.load(var)
|
||||||
return val, local_sym_tab[expr.id][1] # return value and type
|
return val, local_sym_tab[expr.id].ir_type # return value and type
|
||||||
else:
|
else:
|
||||||
print(f"Undefined variable {expr.id}")
|
print(f"Undefined variable {expr.id}")
|
||||||
return None
|
return None
|
||||||
@ -49,7 +49,7 @@ def eval_expr(
|
|||||||
return None
|
return None
|
||||||
if isinstance(arg, ast.Name):
|
if isinstance(arg, ast.Name):
|
||||||
if arg.id in local_sym_tab:
|
if arg.id in local_sym_tab:
|
||||||
arg = local_sym_tab[arg.id][0]
|
arg = local_sym_tab[arg.id].var
|
||||||
else:
|
else:
|
||||||
print(f"Undefined variable {arg.id}")
|
print(f"Undefined variable {arg.id}")
|
||||||
return None
|
return None
|
||||||
@ -58,7 +58,7 @@ def eval_expr(
|
|||||||
return None
|
return None
|
||||||
# Since we are handling only name case, directly take type from sym tab
|
# Since we are handling only name case, directly take type from sym tab
|
||||||
val = builder.load(arg)
|
val = builder.load(arg)
|
||||||
return val, local_sym_tab[expr.args[0].id][1]
|
return val, local_sym_tab[expr.args[0].id].ir_type
|
||||||
|
|
||||||
# check for helpers
|
# check for helpers
|
||||||
if HelperHandlerRegistry.has_handler(expr.func.id):
|
if HelperHandlerRegistry.has_handler(expr.func.id):
|
||||||
@ -106,10 +106,10 @@ def eval_expr(
|
|||||||
var_name = expr.value.id
|
var_name = expr.value.id
|
||||||
attr_name = expr.attr
|
attr_name = expr.attr
|
||||||
if var_name in local_sym_tab:
|
if var_name in local_sym_tab:
|
||||||
var_ptr, var_type = local_sym_tab[var_name]
|
var_ptr, var_type, var_metadata = local_sym_tab[var_name]
|
||||||
print(f"Loading attribute " f"{attr_name} from variable {var_name}")
|
print(f"Loading attribute {attr_name} from variable {var_name}")
|
||||||
print(f"Variable type: {var_type}, Variable ptr: {var_ptr}")
|
print(f"Variable type: {var_type}, Variable ptr: {var_ptr}")
|
||||||
metadata = structs_sym_tab[local_sym_tab[var_name].metadata]
|
metadata = structs_sym_tab[var_metadata]
|
||||||
if attr_name in metadata.fields:
|
if attr_name in metadata.fields:
|
||||||
gep = metadata.gep(builder, var_ptr, attr_name)
|
gep = metadata.gep(builder, var_ptr, attr_name)
|
||||||
val = builder.load(gep)
|
val = builder.load(gep)
|
||||||
|
|||||||
@ -61,7 +61,7 @@ def handle_assign(
|
|||||||
struct_info = structs_sym_tab[struct_type]
|
struct_info = structs_sym_tab[struct_type]
|
||||||
if field_name in struct_info.fields:
|
if field_name in struct_info.fields:
|
||||||
field_ptr = struct_info.gep(
|
field_ptr = struct_info.gep(
|
||||||
builder, local_sym_tab[var_name][0], field_name
|
builder, local_sym_tab[var_name].var, field_name
|
||||||
)
|
)
|
||||||
val = eval_expr(
|
val = eval_expr(
|
||||||
func,
|
func,
|
||||||
@ -106,7 +106,6 @@ def handle_assign(
|
|||||||
builder.store(
|
builder.store(
|
||||||
ir.Constant(ir.IntType(64), rval.value), local_sym_tab[var_name].var
|
ir.Constant(ir.IntType(64), rval.value), local_sym_tab[var_name].var
|
||||||
)
|
)
|
||||||
# local_sym_tab[var_name] = var
|
|
||||||
print(f"Assigned constant {rval.value} to {var_name}")
|
print(f"Assigned constant {rval.value} to {var_name}")
|
||||||
elif isinstance(rval.value, str):
|
elif isinstance(rval.value, str):
|
||||||
str_val = rval.value.encode("utf-8") + b"\x00"
|
str_val = rval.value.encode("utf-8") + b"\x00"
|
||||||
|
|||||||
Reference in New Issue
Block a user