GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — fix break and continue inside sync try/catch blocks by pilaoda · Pull Request #1727 · TypeScriptToLua/TypeScriptToLua

Conversation

@pilaoda

@pilaoda pilaoda commented May 28, 2026

Copy link
Copy Markdown
Contributor

Depends on #1726

Summary

  • Convert break/continue inside pcall-wrapped try/catch into flag variables + return, then check flags after pcall to execute the actual control flow.
  • Unify duplicated findAsyncTryScopeBeforeLoop/findTryScopeBeforeLoop and asyncTryHasBreak/asyncTryHasContinue into shared helpers and fields.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@pilaoda
(transformation): rewrite try-catch-finally implementation to correct…
7579194
…ly handle returns and re-throws

(test):
- enable previously skipped re-throw tests
- add tests for complex try-catch-finally return and throw scenarios
Copilot AI review requested due to automatic review settings May 28, 2026 13:37
Copilot AI reviewed May 28, 2026
View reviewed changes

Copilot AI left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Refactors the TypeScript-to-Lua try/catch/finally transformation to correctly handle control flow (return/break/continue) across try, catch, and finally blocks. Previously, finally did not behave correctly with respect to control flow (see #1137), and break/continue inside try were only handled in async contexts.

Changes:

  • Rewrote transformTryStatement to wrap both try and catch in pcall, using a unified ____hasReturnOrError flag so finally can override returns and errors can be re-thrown after finally executes.
  • Generalized the try-scope break/continue flag handling (previously asyncTryHas*) to apply to all try/catch blocks, not just async ones; renamed findAsyncTryScopeBeforeLoop → findTryScopeBeforeLoop and asyncTryHas{Break,Continue} → tryHas{Break,Continue}.
  • Added extensive unit tests covering returns from try/catch/finally, throws from finally, and break/continue inside try/catch with and without finally; un-skipped the re-throw test (#1137).

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

File Description
src/transformation/visitors/errors.ts Rewrote try transform with double-pcall pattern and propagated source nodes to emitted Lua nodes.
src/transformation/visitors/break-continue.ts Removed async-only gating; now uses the renamed findTryScopeBeforeLoop and tryHas{Break,Continue} flags.
src/transformation/utils/scope.ts Renamed scope fields and helper to drop the async prefix since they now apply to all try scopes.
test/unit/error.spec.ts Added many new tests for finally-overriding-return, throw-in-finally, and break/continue inside try/catch; enabled the previously-skipped re-throw test.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/transformation/visitors/errors.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread src/transformation/visitors/errors.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread src/transformation/visitors/errors.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

@pilaoda @claude
(test): handle non-Error thrown values in executeJs
9670111
Co-Authored-By: Claude Opus 4.6 <[email protected]>
@pilaoda
pilaoda force-pushed the feat/sync-try-break-continue branch from 979e9eb to 6a384ec Compare May 28, 2026 13:50
@pilaoda @claude
(transformation): rename catchPcall to catchCall for consistency with…
b843c09
… tryCall

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@pilaoda
pilaoda force-pushed the feat/sync-try-break-continue branch from 6a384ec to 3d34a67 Compare May 28, 2026 13:55
pilaoda and others added 2 commits May 28, 2026 22:17
@pilaoda @claude
refactor: extract helper and clarify elseBranch logic in sync try-catch
812abde
Extract duplicated return-if-has-return-or-error into a module-level
helper. Expand the elseBranch ternary into an explicit if/else with
comments for each case (non-empty catch, no catch, empty catch).

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@pilaoda
(transformation):
5f38c9a
- implement break and continue support within try-catch-finally blocks
- generalize and rename async-specific try scope properties and helpers
(test): add tests for break and continue inside try-catch-finally blocks
@pilaoda
pilaoda force-pushed the feat/sync-try-break-continue branch from 3d34a67 to 5f38c9a Compare May 28, 2026 14:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

Copilot code review Copilot
Copilot review effort
Applies to this pull request for everyone.Learn more about Copilot code review.
Copilot left review comments

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@pilaoda
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.
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.