Match string in string#16
Conversation
|
But we have matches. It does same think: "foo" matches "foobar"Is it? |
|
These examples don't work in the same way as they would with |
|
I see, not |
|
I don't see why not. It works for me, would you like me to add tests for that? |
|
Ok, just please add type checks for strict mode. (See type.go) |
|
Type checks added |
|
After discussion with my team we decided not to add this functionality as it can be error prone. As alternative is to define helper method: Contains("foobar", "bar")What do you think? |
|
I'm working on next expr version and it will have |
|
Will be solved in #21 |
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. - #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.
Adds ability to match if
"foo" in "foobar"