Skip to content

Commit a4f1363

Browse files
committed
Add _handle_attribute_expr
1 parent 3a819dc commit a4f1363

File tree

1 file changed

+25
-13
lines changed

1 file changed

+25
-13
lines changed

pythonbpf/expr_pass.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,30 @@ def _handle_constant_expr(expr: ast.Constant):
2929
return None
3030

3131

32+
def _handle_attribute_expr(
33+
expr: ast.Attribute,
34+
local_sym_tab: Dict,
35+
structs_sym_tab: Dict,
36+
builder: ir.IRBuilder,
37+
):
38+
"""Handle ast.Attribute expressions for struct field access."""
39+
if isinstance(expr.value, ast.Name):
40+
var_name = expr.value.id
41+
attr_name = expr.attr
42+
if var_name in local_sym_tab:
43+
var_ptr, var_type, var_metadata = local_sym_tab[var_name]
44+
logger.info(f"Loading attribute {attr_name} from variable {var_name}")
45+
logger.info(f"Variable type: {var_type}, Variable ptr: {var_ptr}")
46+
47+
metadata = structs_sym_tab[var_metadata]
48+
if attr_name in metadata.fields:
49+
gep = metadata.gep(builder, var_ptr, attr_name)
50+
val = builder.load(gep)
51+
field_type = metadata.field_type(attr_name)
52+
return val, field_type
53+
return None
54+
55+
3256
def eval_expr(
3357
func,
3458
module,
@@ -117,19 +141,7 @@ def eval_expr(
117141
structs_sym_tab,
118142
)
119143
elif isinstance(expr, ast.Attribute):
120-
if isinstance(expr.value, ast.Name):
121-
var_name = expr.value.id
122-
attr_name = expr.attr
123-
if var_name in local_sym_tab:
124-
var_ptr, var_type, var_metadata = local_sym_tab[var_name]
125-
logger.info(f"Loading attribute {attr_name} from variable {var_name}")
126-
logger.info(f"Variable type: {var_type}, Variable ptr: {var_ptr}")
127-
metadata = structs_sym_tab[var_metadata]
128-
if attr_name in metadata.fields:
129-
gep = metadata.gep(builder, var_ptr, attr_name)
130-
val = builder.load(gep)
131-
field_type = metadata.field_type(attr_name)
132-
return val, field_type
144+
return _handle_attribute_expr(expr, local_sym_tab, structs_sym_tab, builder)
133145
logger.info("Unsupported expression evaluation")
134146
return None
135147

0 commit comments

Comments
 (0)