fix: mutate.test.ts: pre-existing \isValid > stack underflow\ failure (#810)
dpop/bpop silently returned '0'/'false' on stack underflow instead of throwing, so isValid() never returned false for underflowing programs. Make dpop and bpop throw an Error on underflow so the transpiler's existing try/catch in isValid() correctly classifies such programs as invalid. The output-extraction phase uses state.dStack.pop() directly (not dpop) and is unaffected. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
3584c03261
commit
6a55c37b20
1 changed files with 2 additions and 4 deletions
|
|
@ -31,15 +31,13 @@ function emit(state: TranspilerState, line: string): void {
|
||||||
|
|
||||||
function dpop(state: TranspilerState, ctx: string): string {
|
function dpop(state: TranspilerState, ctx: string): string {
|
||||||
const v = state.dStack.pop();
|
const v = state.dStack.pop();
|
||||||
// Stack underflow → Push3 no-op semantics: treat missing value as 0
|
if (v === undefined) throw new Error(`DYADIC stack underflow at ${ctx}`);
|
||||||
if (v === undefined) return '0';
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
function bpop(state: TranspilerState, ctx: string): string {
|
function bpop(state: TranspilerState, ctx: string): string {
|
||||||
const v = state.bStack.pop();
|
const v = state.bStack.pop();
|
||||||
// Stack underflow → Push3 no-op semantics: treat missing bool as false
|
if (v === undefined) throw new Error(`BOOLEAN stack underflow at ${ctx}`);
|
||||||
if (v === undefined) return 'false';
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue