diff --git a/src/llvm_py/instructions/mir_call.py b/src/llvm_py/instructions/mir_call.py index eb2f4361..65440117 100644 --- a/src/llvm_py/instructions/mir_call.py +++ b/src/llvm_py/instructions/mir_call.py @@ -35,6 +35,25 @@ def lower_mir_call(owner, builder: ir.IRBuilder, mir_call: Dict[str, Any], dst_v # Parse callee type callee_type = callee.get("type") + # Optional trace: dump callee info (including certainty for Method) + if os.getenv('NYASH_LLVM_TRACE_CALLS') == '1': + try: + evt = { 'type': callee_type } + if callee_type == 'Global': + evt.update({'name': callee.get('name')}) + elif callee_type == 'Method': + evt.update({ + 'box_name': callee.get('box_name'), + 'method': callee.get('method'), + 'receiver': callee.get('receiver'), + 'certainty': callee.get('certainty'), + }) + elif callee_type == 'Extern': + evt.update({'name': callee.get('name')}) + print(json.dumps({'phase':'llvm','cat':'mir_call','event':evt})) + except Exception: + pass + if callee_type == "Global": # Global function call (e.g., print, panic) func_name = callee.get("name") @@ -633,4 +652,4 @@ def lower_extern_call(builder, module, extern_name, args, dst_vid, vmap, resolve if isinstance(ret_type, ir.VoidType): vmap[dst_vid] = ir.Constant(i64, 0) else: - vmap[dst_vid] = result \ No newline at end of file + vmap[dst_vid] = result