Skip to content

Commit 297f6c1

Browse files
committed
Expand record return values for all function calls
1 parent e30db28 commit 297f6c1

File tree

1 file changed

+22
-13
lines changed

1 file changed

+22
-13
lines changed

record_api/core.py

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@
2929
context_manager: Optional[ContextManager] = None
3030
write_line: Optional[Callable[[dict], None]] = None
3131

32+
FUNCTION_CALL_OP_NAMES = {
33+
"CALL_METHOD",
34+
"CALL_FUNCTION",
35+
"CALL_FUNCTION_KW",
36+
"CALL_FUNCTION_EX",
37+
}
38+
3239

3340
def get_tracer() -> Tracer:
3441
global TRACER
@@ -400,7 +407,8 @@ def __call__(self) -> None:
400407
return self.process(
401408
(self.TOS, self.TOS1), BINARY_OPS[opname], (self.TOS1, self.TOS)
402409
)
403-
if self.previous_stack and self.previous_stack.opname == "CALL_METHOD":
410+
411+
if self.previous_stack and self.previous_stack.opname in FUNCTION_CALL_OP_NAMES:
404412
self.log_called_method()
405413

406414
method_name = f"op_{opname}"
@@ -409,15 +417,16 @@ def __call__(self) -> None:
409417
return None
410418

411419
def log_called_method(self):
412-
filename, line, fn, args, *kwargs = self.previous_stack.log_call_args
413-
kwargs = kwargs[0] if kwargs else {}
414-
log_call(
415-
f"{filename}:{line}",
416-
fn,
417-
tuple(args),
418-
*((kwargs,) if kwargs else ()),
419-
return_type=type(self.TOS),
420-
)
420+
if self.previous_stack.log_call_args:
421+
filename, line, fn, args, *kwargs = self.previous_stack.log_call_args
422+
kwargs = kwargs[0] if kwargs else {}
423+
log_call(
424+
f"{filename}:{line}",
425+
fn,
426+
tuple(args),
427+
*((kwargs,) if kwargs else ()),
428+
return_type=type(self.TOS),
429+
)
421430

422431
# special case subscr b/c we only check first arg, not both
423432
def op_BINARY_SUBSCR(self):
@@ -489,7 +498,7 @@ def op_COMPARE_OP(self):
489498
def op_CALL_FUNCTION(self):
490499
args = self.pop_n(self.oparg)
491500
fn = self.pop()
492-
self.process((fn,), fn, args)
501+
self.process((fn,), fn, args, delay=True)
493502

494503
def op_CALL_FUNCTION_KW(self):
495504
kwargs_keys = self.pop()
@@ -499,7 +508,7 @@ def op_CALL_FUNCTION_KW(self):
499508
args = self.pop_n(self.oparg - n_kwargs)
500509
fn = self.pop()
501510

502-
self.process((fn,), fn, args, kwargs)
511+
self.process((fn,), fn, args, kwargs, delay=True)
503512

504513
def op_CALL_FUNCTION_EX(self):
505514
has_kwarg = self.oparg & int("01", 2)
@@ -513,7 +522,7 @@ def op_CALL_FUNCTION_EX(self):
513522
fn = self.pop()
514523
if inspect.isgenerator(args):
515524
return
516-
self.process((fn,), fn, args, kwargs)
525+
self.process((fn,), fn, args, kwargs, delay=True)
517526

518527
def op_CALL_METHOD(self):
519528
args = self.pop_n(self.oparg)

0 commit comments

Comments
 (0)