{"abstract":"Returns from nested calls jump to the grandparent's continuation or fault at top level.","category":"Bytecode virtual machines","checks":7,"contract":"Instructions: push v, load k, store k, add/sub/mul (second-from-top op top), jz t, jmp t, call t nargs nlocals, ret, halt. call pops nargs values (the first pushed becomes local 0), appends zero locals up to nlocals, records return pc = call pc + 1, and raises [\"StackOverflowError\", frames] when the frame count already equals max_depth. ret pops the result, discards the callee frame, pushes the result on the caller stack and resumes at the saved pc. Each executed instruction costs one fuel; running out returns [\"fuel\", pc]; host faults are [\"vm-fault\"].","contract_signature":"code, max_depth, fuel","evaluation_group":"w2-bytecode-virtual-machines-call-frame-stack","failed_approach":"Falling back only when the caller has no saved pc still picks the wrong frame for nested calls.","family":"w2-bytecode-virtual-machines-call-frame-stack-resume-pc-source","id":"FA-89946","implementations":{"attempt":{"sha256":"dd6e2a5d49530205711887b8a616d73f3ffa5b339ff68ee5dabac59277db9b07","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(code, max_depth, fuel):\n    def run():\n        frames = [{'locals': [0] * 4, 'stack': [], 'ret': None}]\n        pc = 0\n        for _ in range(fuel):\n            f = frames[-1]\n            ins = code[pc]\n            op = ins[0]\n            if op == 'push':\n                f['stack'].append(ins[1])\n                pc += 1\n            elif op == 'load':\n                f['stack'].append(f['locals'][ins[1]])\n                pc += 1\n            elif op == 'store':\n                f['locals'][ins[1]] = f['stack'].pop()\n                pc += 1\n            elif op in ('add', 'sub', 'mul'):\n                b = f['stack'].pop()\n                a = f['stack'].pop()\n                f['stack'].append(a + b if op == 'add' else a - b if op == 'sub' else a * b)\n                pc += 1\n            elif op == 'jz':\n                pc = ins[1] if f['stack'].pop() == 0 else pc + 1\n            elif op == 'jmp':\n                pc = ins[1]\n            elif op == 'call':\n                target, nargs, nlocals = ins[1], ins[2], ins[3]\n                if len(frames) >= max_depth:\n                    return ['StackOverflowError', len(frames)]\n                args = f['stack'][len(f['stack']) - nargs:]\n                del f['stack'][len(f['stack']) - nargs:]\n                frames.append({'locals': args + [0] * (nlocals - nargs), 'stack': [], 'ret': pc + 1})\n                pc = target\n            elif op == 'ret':\n                value = f['stack'].pop()\n                frames.pop()\n                frames[-1]['stack'].append(value)\n                pc = frames[-1]['ret'] or f['ret']\n            else:\n                return ['halt', f['stack']]\n        return ['fuel', pc]\n    try:\n        return run()\n    except (IndexError, TypeError):\n        return ['vm-fault']\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('two-argument call binds first argument to slot 0',\n   ([['push', 21], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],\n    10,\n    100),\n   ['halt', [18]]),\n  ('zero-argument call keeps caller operand stack',\n   ([['push', 8], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']], 10, 100),\n   ['halt', [3]]),\n  ('extra locals are zero-initialised after arguments',\n   ([['push', 1],\n     ['call', 3, 1, 2],\n     ['halt'],\n     ['load', 0],\n     ['push', 3],\n     ['add'],\n     ['store', 1],\n     ['load', 1],\n     ['load', 0],\n     ['mul'],\n     ['ret']],\n    10,\n    100),\n   ['halt', [4]]),\n  ('regression: recursive factorial',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    500),\n   ['halt', [6]]),\n  ('recursion depth exactly at the limit',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    5,\n    500),\n   ['halt', [6]]),\n  ('recursion one frame over the limit',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    4,\n    500),\n   ['StackOverflowError', 4]),\n  ('control: fuel exhaustion',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    3),\n   ['fuel', 4])],\n [('two-argument call binds first argument to slot 0',\n   ([['push', 22], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],\n    10,\n    100),\n   ['halt', [19]]),\n  ('zero-argument call keeps caller operand stack',\n   ([['push', 9], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']], 10, 100),\n   ['halt', [4]]),\n  ('extra locals are zero-initialised after arguments',\n   ([['push', 2],\n     ['call', 3, 1, 2],\n     ['halt'],\n     ['load', 0],\n     ['push', 3],\n     ['add'],\n     ['store', 1],\n     ['load', 1],\n     ['load', 0],\n     ['mul'],\n     ['ret']],\n    10,\n    100),\n   ['halt', [10]]),\n  ('regression: recursive factorial',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    500),\n   ['halt', [24]]),\n  ('recursion depth exactly at the limit',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    6,\n    500),\n   ['halt', [24]]),\n  ('recursion one frame over the limit',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    5,\n    500),\n   ['StackOverflowError', 5]),\n  ('control: fuel exhaustion',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    3),\n   ['fuel', 4])],\n [('two-argument call binds first argument to slot 0',\n   ([['push', 23], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],\n    10,\n    100),\n   ['halt', [20]]),\n  ('zero-argument call keeps caller operand stack',\n   ([['push', 10], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']],\n    10,\n    100),\n   ['halt', [5]]),\n  ('extra locals are zero-initialised after arguments',\n   ([['push', 3],\n     ['call', 3, 1, 2],\n     ['halt'],\n     ['load', 0],\n     ['push', 3],\n     ['add'],\n     ['store', 1],\n     ['load', 1],\n     ['load', 0],\n     ['mul'],\n     ['ret']],\n    10,\n    100),\n   ['halt', [18]]),\n  ('regression: recursive factorial',\n   ([['push', 2],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    500),\n   ['halt', [2]]),\n  ('recursion depth exactly at the limit',\n   ([['push', 2],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    4,\n    500),\n   ['halt', [2]]),\n  ('recursion one frame over the limit',\n   ([['push', 2],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    3,\n    500),\n   ['StackOverflowError', 3]),\n  ('control: fuel exhaustion',\n   ([['push', 2],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    3),\n   ['fuel', 4])],\n [('two-argument call binds first argument to slot 0',\n   ([['push', 24], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],\n    10,\n    100),\n   ['halt', [21]]),\n  ('zero-argument call keeps caller operand stack',\n   ([['push', 11], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']],\n    10,\n    100),\n   ['halt', [6]]),\n  ('extra locals are zero-initialised after arguments',\n   ([['push', 4],\n     ['call', 3, 1, 2],\n     ['halt'],\n     ['load', 0],\n     ['push', 3],\n     ['add'],\n     ['store', 1],\n     ['load', 1],\n     ['load', 0],\n     ['mul'],\n     ['ret']],\n    10,\n    100),\n   ['halt', [28]]),\n  ('regression: recursive factorial',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    500),\n   ['halt', [6]]),\n  ('recursion depth exactly at the limit',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    5,\n    500),\n   ['halt', [6]]),\n  ('recursion one frame over the limit',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    4,\n    500),\n   ['StackOverflowError', 4]),\n  ('control: fuel exhaustion',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    3),\n   ['fuel', 4])],\n [('two-argument call binds first argument to slot 0',\n   ([['push', 25], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],\n    10,\n    100),\n   ['halt', [22]]),\n  ('zero-argument call keeps caller operand stack',\n   ([['push', 12], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']],\n    10,\n    100),\n   ['halt', [7]]),\n  ('extra locals are zero-initialised after arguments',\n   ([['push', 5],\n     ['call', 3, 1, 2],\n     ['halt'],\n     ['load', 0],\n     ['push', 3],\n     ['add'],\n     ['store', 1],\n     ['load', 1],\n     ['load', 0],\n     ['mul'],\n     ['ret']],\n    10,\n    100),\n   ['halt', [40]]),\n  ('regression: recursive factorial',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    500),\n   ['halt', [24]]),\n  ('recursion depth exactly at the limit',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    6,\n    500),\n   ['halt', [24]]),\n  ('recursion one frame over the limit',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    5,\n    500),\n   ['StackOverflowError', 5]),\n  ('control: fuel exhaustion',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    3),\n   ['fuel', 4])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"c10f66a0852268012416c617198d45d27f57b18a9bd4036598639e68710980e4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(code, max_depth, fuel):\n    def run():\n        frames = [{'locals': [0] * 4, 'stack': [], 'ret': None}]\n        pc = 0\n        for _ in range(fuel):\n            f = frames[-1]\n            ins = code[pc]\n            op = ins[0]\n            if op == 'push':\n                f['stack'].append(ins[1])\n                pc += 1\n            elif op == 'load':\n                f['stack'].append(f['locals'][ins[1]])\n                pc += 1\n            elif op == 'store':\n                f['locals'][ins[1]] = f['stack'].pop()\n                pc += 1\n            elif op in ('add', 'sub', 'mul'):\n                b = f['stack'].pop()\n                a = f['stack'].pop()\n                f['stack'].append(a + b if op == 'add' else a - b if op == 'sub' else a * b)\n                pc += 1\n            elif op == 'jz':\n                pc = ins[1] if f['stack'].pop() == 0 else pc + 1\n            elif op == 'jmp':\n                pc = ins[1]\n            elif op == 'call':\n                target, nargs, nlocals = ins[1], ins[2], ins[3]\n                if len(frames) >= max_depth:\n                    return ['StackOverflowError', len(frames)]\n                args = f['stack'][len(f['stack']) - nargs:]\n                del f['stack'][len(f['stack']) - nargs:]\n                frames.append({'locals': args + [0] * (nlocals - nargs), 'stack': [], 'ret': pc + 1})\n                pc = target\n            elif op == 'ret':\n                value = f['stack'].pop()\n                frames.pop()\n                frames[-1]['stack'].append(value)\n                pc = frames[-1]['ret']\n            else:\n                return ['halt', f['stack']]\n        return ['fuel', pc]\n    try:\n        return run()\n    except (IndexError, TypeError):\n        return ['vm-fault']\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('two-argument call binds first argument to slot 0',\n   ([['push', 21], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],\n    10,\n    100),\n   ['halt', [18]]),\n  ('zero-argument call keeps caller operand stack',\n   ([['push', 8], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']], 10, 100),\n   ['halt', [3]]),\n  ('extra locals are zero-initialised after arguments',\n   ([['push', 1],\n     ['call', 3, 1, 2],\n     ['halt'],\n     ['load', 0],\n     ['push', 3],\n     ['add'],\n     ['store', 1],\n     ['load', 1],\n     ['load', 0],\n     ['mul'],\n     ['ret']],\n    10,\n    100),\n   ['halt', [4]]),\n  ('regression: recursive factorial',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    500),\n   ['halt', [6]]),\n  ('recursion depth exactly at the limit',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    5,\n    500),\n   ['halt', [6]]),\n  ('recursion one frame over the limit',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    4,\n    500),\n   ['StackOverflowError', 4]),\n  ('control: fuel exhaustion',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    3),\n   ['fuel', 4])],\n [('two-argument call binds first argument to slot 0',\n   ([['push', 22], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],\n    10,\n    100),\n   ['halt', [19]]),\n  ('zero-argument call keeps caller operand stack',\n   ([['push', 9], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']], 10, 100),\n   ['halt', [4]]),\n  ('extra locals are zero-initialised after arguments',\n   ([['push', 2],\n     ['call', 3, 1, 2],\n     ['halt'],\n     ['load', 0],\n     ['push', 3],\n     ['add'],\n     ['store', 1],\n     ['load', 1],\n     ['load', 0],\n     ['mul'],\n     ['ret']],\n    10,\n    100),\n   ['halt', [10]]),\n  ('regression: recursive factorial',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    500),\n   ['halt', [24]]),\n  ('recursion depth exactly at the limit',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    6,\n    500),\n   ['halt', [24]]),\n  ('recursion one frame over the limit',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    5,\n    500),\n   ['StackOverflowError', 5]),\n  ('control: fuel exhaustion',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    3),\n   ['fuel', 4])],\n [('two-argument call binds first argument to slot 0',\n   ([['push', 23], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],\n    10,\n    100),\n   ['halt', [20]]),\n  ('zero-argument call keeps caller operand stack',\n   ([['push', 10], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']],\n    10,\n    100),\n   ['halt', [5]]),\n  ('extra locals are zero-initialised after arguments',\n   ([['push', 3],\n     ['call', 3, 1, 2],\n     ['halt'],\n     ['load', 0],\n     ['push', 3],\n     ['add'],\n     ['store', 1],\n     ['load', 1],\n     ['load', 0],\n     ['mul'],\n     ['ret']],\n    10,\n    100),\n   ['halt', [18]]),\n  ('regression: recursive factorial',\n   ([['push', 2],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    500),\n   ['halt', [2]]),\n  ('recursion depth exactly at the limit',\n   ([['push', 2],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    4,\n    500),\n   ['halt', [2]]),\n  ('recursion one frame over the limit',\n   ([['push', 2],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    3,\n    500),\n   ['StackOverflowError', 3]),\n  ('control: fuel exhaustion',\n   ([['push', 2],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    3),\n   ['fuel', 4])],\n [('two-argument call binds first argument to slot 0',\n   ([['push', 24], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],\n    10,\n    100),\n   ['halt', [21]]),\n  ('zero-argument call keeps caller operand stack',\n   ([['push', 11], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']],\n    10,\n    100),\n   ['halt', [6]]),\n  ('extra locals are zero-initialised after arguments',\n   ([['push', 4],\n     ['call', 3, 1, 2],\n     ['halt'],\n     ['load', 0],\n     ['push', 3],\n     ['add'],\n     ['store', 1],\n     ['load', 1],\n     ['load', 0],\n     ['mul'],\n     ['ret']],\n    10,\n    100),\n   ['halt', [28]]),\n  ('regression: recursive factorial',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    500),\n   ['halt', [6]]),\n  ('recursion depth exactly at the limit',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    5,\n    500),\n   ['halt', [6]]),\n  ('recursion one frame over the limit',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    4,\n    500),\n   ['StackOverflowError', 4]),\n  ('control: fuel exhaustion',\n   ([['push', 3],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    3),\n   ['fuel', 4])],\n [('two-argument call binds first argument to slot 0',\n   ([['push', 25], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],\n    10,\n    100),\n   ['halt', [22]]),\n  ('zero-argument call keeps caller operand stack',\n   ([['push', 12], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']],\n    10,\n    100),\n   ['halt', [7]]),\n  ('extra locals are zero-initialised after arguments',\n   ([['push', 5],\n     ['call', 3, 1, 2],\n     ['halt'],\n     ['load', 0],\n     ['push', 3],\n     ['add'],\n     ['store', 1],\n     ['load', 1],\n     ['load', 0],\n     ['mul'],\n     ['ret']],\n    10,\n    100),\n   ['halt', [40]]),\n  ('regression: recursive factorial',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    500),\n   ['halt', [24]]),\n  ('recursion depth exactly at the limit',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    6,\n    500),\n   ['halt', [24]]),\n  ('recursion one frame over the limit',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    5,\n    500),\n   ['StackOverflowError', 5]),\n  ('control: fuel exhaustion',\n   ([['push', 4],\n     ['call', 3, 1, 1],\n     ['halt'],\n     ['load', 0],\n     ['jz', 12],\n     ['load', 0],\n     ['load', 0],\n     ['push', 1],\n     ['sub'],\n     ['call', 3, 1, 1],\n     ['mul'],\n     ['ret'],\n     ['push', 1],\n     ['ret']],\n    20,\n    3),\n   ['fuel', 4])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A deterministic, bounded teaching model of one bytecode virtual machine mechanism with a stipulated instruction encoding; it is not a production VM and claims no conformance to any real specification. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-bytecode-virtual-machines-call-frame-stack-resume-pc-source","generated_at":"2026-09-29T14:51:22.076708+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Frame setup and teardown decide argument binding, return values and recursion limits in every stack VM.","root_cause":"After popping the callee, the resume pc is read from the new top frame instead of the popped frame.","sha256":"5d71185775d9bdb99657ec7cdb32273cbc0ae31bb5b28cd88df1393e8d35f53c","title":"Call frames: return resumes at the caller's own return address · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":42.378,"exit_code":1,"observations":[{"actual":["halt",[18]],"check":"two-argument call binds first argument to slot 0","expected":["halt",[18]],"passed":true},{"actual":["halt",[3]],"check":"zero-argument call keeps caller operand stack","expected":["halt",[3]],"passed":true},{"actual":["halt",[4]],"check":"extra locals are zero-initialised after arguments","expected":["halt",[4]],"passed":true},{"actual":["halt",[3,2]],"check":"regression: recursive factorial","expected":["halt",[6]],"passed":false},{"actual":["halt",[3,2]],"check":"recursion depth exactly at the limit","expected":["halt",[6]],"passed":false},{"actual":["StackOverflowError",4],"check":"recursion one frame over the limit","expected":["StackOverflowError",4],"passed":true},{"actual":["fuel",4],"check":"control: fuel exhaustion","expected":["fuel",4],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"two-argument call binds first argument to slot 0\", \"actual\": [\"halt\", [18]], \"expected\": [\"halt\", [18]], \"passed\": true}, {\"check\": \"zero-argument call keeps caller operand stack\", \"actual\": [\"halt\", [3]], \"expected\": [\"halt\", [3]], \"passed\": true}, {\"check\": \"extra locals are zero-initialised after arguments\", \"actual\": [\"halt\", [4]], \"expected\": [\"halt\", [4]], \"passed\": true}, {\"check\": \"regression: recursive factorial\", \"actual\": [\"halt\", [3, 2]], \"expected\": [\"halt\", [6]], \"passed\": false}, {\"check\": \"recursion depth exactly at the limit\", \"actual\": [\"halt\", [3, 2]], \"expected\": [\"halt\", [6]], \"passed\": false}, {\"check\": \"recursion one frame over the limit\", \"actual\": [\"StackOverflowError\", 4], \"expected\": [\"StackOverflowError\", 4], \"passed\": true}, {\"check\": \"control: fuel exhaustion\", \"actual\": [\"fuel\", 4], \"expected\": [\"fuel\", 4], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":46.311,"exit_code":1,"observations":[{"actual":["vm-fault"],"check":"two-argument call binds first argument to slot 0","expected":["halt",[18]],"passed":false},{"actual":["vm-fault"],"check":"zero-argument call keeps caller operand stack","expected":["halt",[3]],"passed":false},{"actual":["vm-fault"],"check":"extra locals are zero-initialised after arguments","expected":["halt",[4]],"passed":false},{"actual":["halt",[3,2]],"check":"regression: recursive factorial","expected":["halt",[6]],"passed":false},{"actual":["halt",[3,2]],"check":"recursion depth exactly at the limit","expected":["halt",[6]],"passed":false},{"actual":["StackOverflowError",4],"check":"recursion one frame over the limit","expected":["StackOverflowError",4],"passed":true},{"actual":["fuel",4],"check":"control: fuel exhaustion","expected":["fuel",4],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"two-argument call binds first argument to slot 0\", \"actual\": [\"vm-fault\"], \"expected\": [\"halt\", [18]], \"passed\": false}, {\"check\": \"zero-argument call keeps caller operand stack\", \"actual\": [\"vm-fault\"], \"expected\": [\"halt\", [3]], \"passed\": false}, {\"check\": \"extra locals are zero-initialised after arguments\", \"actual\": [\"vm-fault\"], \"expected\": [\"halt\", [4]], \"passed\": false}, {\"check\": \"regression: recursive factorial\", \"actual\": [\"halt\", [3, 2]], \"expected\": [\"halt\", [6]], \"passed\": false}, {\"check\": \"recursion depth exactly at the limit\", \"actual\": [\"halt\", [3, 2]], \"expected\": [\"halt\", [6]], \"passed\": false}, {\"check\": \"recursion one frame over the limit\", \"actual\": [\"StackOverflowError\", 4], \"expected\": [\"StackOverflowError\", 4], \"passed\": true}, {\"check\": \"control: fuel exhaustion\", \"actual\": [\"fuel\", 4], \"expected\": [\"fuel\", 4], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}