fix broken IR generation logic for globals

This commit is contained in:
2025-10-04 06:32:25 +05:30
parent ab1c4223d5
commit 7aeac86bd3
2 changed files with 70 additions and 4 deletions

View File

@ -18,6 +18,73 @@ def somevalue2() -> c_int64:
def somevalue1() -> c_int32:
return c_int32(0)
import ast
from dataclasses import dataclass
from typing import List
# --- Passing examples ---
# Simple constant return
@bpf
@bpfglobal
def g1() -> c_int64:
return 42
# Constructor with one constant argument
@bpf
@bpfglobal
def g2() -> c_int64:
return c_int64(0)
# --- Failing examples ---
# No return annotation
# @bpf
# @bpfglobal
# def g3():
# return 42
# Return annotation is complex
# @bpf
# @bpfglobal
# def g4() -> List[int]:
# return []
# # Return is missing
# @bpf
# @bpfglobal
# def g5() -> c_int64:
# pass
# # Return is a variable reference
# #TODO: maybe fix this sometime later. It defaults to 0
CONST = 5
@bpf
@bpfglobal
def g6() -> c_int64:
return c_int64(CONST)
# Constructor with multiple args
#TODO: this is not working. should it work ?
@bpf
@bpfglobal
def g7() -> c_int64:
return c_int64(1, 2)
# Dataclass call
#TODO: fails with dataclass
# @dataclass
# class Point:
# x: c_int64
# y: c_int64
# @bpf
# @bpfglobal
# def g8() -> Point:
# return Point(1, 2)
@bpf
@section("tracepoint/syscalls/sys_enter_execve")
def sometag(ctx: c_void_p) -> c_int64: