Add len builtin#3
Merged
Merged
Conversation
blitzy Bot
pushed a commit
to blitzy-research/expr
that referenced
this pull request
Jul 16, 2026
Resolves all 19 QA review findings for the try/catch/finally/retry, throw, errtype, and lazy try(expr, fallback) error-handling feature. CRITICAL: - #1 VM: add Program.verify() operand-domain + typed-constant + jump-target validation on the handler path; malformed programs become non-catchable fatal errors instead of catchable panics. - expr-lang#2 VM: validate handler-frame targets (OpTry catch strictly-forward, in-range, lands on OpCatch/OpPopHandler; OpSetupFinally lands on OpFinallyStart) in verify(); add 6 runtime phase guards + balanced-handler completion check. - expr-lang#3 VM/builtin: control/safety errors (context.Canceled/DeadlineExceeded, ErrorMaxDepth, ErrMemoryBudget) are non-catchable via isNonRecoverable gate; add ErrMemoryBudget sentinel used by repeat(). MAJOR: - expr-lang#4 VM: recovered panic(nil) is reported (panicNilError sentinel + finishedNormally/completed flags at both recover boundaries), not swallowed. - expr-lang#5 builtin: panic-safe recovery-path message extraction (safeMessage + typed-nil guard) so a hostile Error()/typed-nil never escapes handleRecover. - expr-lang#6 builtin/VM: retain original cause (unexported field + Cause() accessor); top-level recover wraps the cause so host errors.Is/As work; privacy invariant preserved (no Unwrap). - expr-lang#7 VM: clear reclaimed scope/scopePool/Scopes slots to prevent cross-run value retention. - expr-lang#8 builtin: classifyError bounded-BFS over Unwrap() error and []error; validCategory guard; non-error input -> custom. - expr-lang#9 builtin: Type() returns "error" for RuntimeError (no internal-type leak on the Eval path). - expr-lang#16 compiler tests: exact Bytecode/Arguments/disassembly + handler target/balance invariants for try/catch/finally/retry and lazy try(). - expr-lang#17 tests: fill public-API required-path gaps (fallback-error propagation, finally-after-catch-body-failure, retry-exhaustion-through-finally, errors.Is/As) plus adversarial/structural coverage. - expr-lang#18 VM: restore no-handler fast path (hasHandler metadata + execute() extraction) and re-inline hot helpers via pre-built *fatalError sentinels; reuseVm back to pre-feature parity (~73 ns/op). - expr-lang#19 builtin/expr: preserve backward-compat env overrides of try/throw/errtype in Eval via ErrorHandlingBuiltins + narrow parseForEval override detection. MINOR: - expr-lang#10/expr-lang#11 optimizer: single-pass O(N) protected-region marker; pass protected set to constExpr so lazy/catchable subtrees are never constant-folded. - expr-lang#12 parser: reject bare try (no catch and no finally) with a source-anchored error at the try token. - expr-lang#13 parser: reject reserved catch binding name "retry" with a precise diagnostic. - expr-lang#14 ast: parenthesize TryCatchNode/ConditionalNode when rendered as a call callee / unary operand so printed source re-parses. - expr-lang#15 docs: correct error-handling documentation (bare-try invalid, contextual retry, fatal-finally override, errtype classifier contract). Validation: go build . / go vet ./... clean; go test ./... 56 ok / 0 FAIL; race-clean; -tags=expr_debug TestDebugger pass; gofmt clean on all touched files. No new third-party dependencies. Full backward compatibility preserved.
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.
No description provided.