Allow return at the top level of a js_eval snippet#78
Open
I-Connect wants to merge 2 commits into
Open
Conversation
Previously, a `return` statement outside a function call failed with
"not in func". This is inconvenient for embedded use cases where user
code is passed directly to `js_eval` (not wrapped in a function) and a
natural early-exit idiom is:
if (cond) { return; }
`js_return` now treats a top-level `return` as "end of snippet": it
jumps `pos` to `clen`, so the remainder of the code is skipped.
`F_RETURN` is still set only inside a function call (`F_CALL`), so the
flag never leaks into subsequent top-level `js_eval` calls and
`call_js`'s existing check at the end of a function body continues to
work unchanged.
The value-less form (`return`, `return;`, `return}`, `return<EOF>`) now
also exits the snippet — upstream only did this when a value
expression followed, which made the idiomatic `return;` silently
fall through instead of short-circuiting.
Unit tests updated to assert the new top-level behaviour alongside the
existing function-body tests.
Adds a "Top-level `return`" section that explains the supported behaviour, gives `js_eval` examples (bare `return`, `return;`, `return <expr>;`, block-wrapped, and short-circuit), and notes that `F_RETURN` is still scoped to `F_CALL` so function-body return semantics are unchanged. Also adds a one-liner to the supported features list with a forward link to the new section. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Previously, a
returnstatement outside a function call failed with"not in func". This is inconvenient for embedded use cases where user
code is passed directly to
js_eval(not wrapped in a function) and anatural early-exit idiom is:
js_returnnow treats a top-levelreturnas "end of snippet": itjumps
postoclen, so the remainder of the code is skipped.F_RETURNis still set only inside a function call (F_CALL), so theflag never leaks into subsequent top-level
js_evalcalls andcall_js's existing check at the end of a function body continues towork unchanged.
The value-less form (
return,return;,return},return<EOF>) nowalso exits the snippet — upstream only did this when a value
expression followed, which made the idiomatic
return;silentlyfall through instead of short-circuiting.
Unit tests updated to assert the new top-level behaviour alongside the
existing function-body tests.