Skip to content

fix: early return statement handling in function calls - #387

Open
DeveloperC286 wants to merge 1 commit into
mainfrom
claude/return-object-leak-calls-qr5hpu
Open

fix: early return statement handling in function calls#387
DeveloperC286 wants to merge 1 commit into
mainfrom
claude/return-object-leak-calls-qr5hpu

Conversation

@DeveloperC286

@DeveloperC286 DeveloperC286 commented Sep 6, 2026

Copy link
Copy Markdown
Owner

No description provided.

evaluate_call_expression returned evaluate_block's result verbatim, so a
function whose body used an explicit return handed an Object::Return back
to its caller instead of the returned value. The top level evaluate
unwraps, which hid the bug for a call in statement position, but one
level in it surfaced as a spurious error:

  let a = fn() { return 5; }();  -> cannot assign an object of type RETURN
  fn() { return 5; }() + 1;      -> the + operator is not supported for RETURN
  n * factorial(n - 1)           -> type mismatch, INTEGER and RETURN

A return only unwinds as far as the function it is in, so the wrapper is
now stripped when the call completes. Propagation out of nested blocks
and out of a top level return is unchanged.

Adds call expression cases 9 to 14 covering assignment, infix operands,
recursion, a returned function, an early return and string operands, plus
an early_return.mk code sample, since the existing factorial.mk only uses
implicit returns. All 14 new evaluation and environment assertions fail
without the fix.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PYeGs22hkAMgsogBEd5Ced
@DeveloperC286 DeveloperC286 changed the title Implement early return statement handling in function calls fix: early return statement handling in function calls Sep 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants