ref: 6a51a03b801b21f42e2eb3dfa02c99e96c86b10c
parent: 7c98cda87f2328baf5fe4fab48aadc0b8277d047
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Wed Dec 25 02:02:03 EST 2024
compute_maxstack: compare maxsp with sp less often
--- a/maxstack.inc
+++ b/maxstack.inc
@@ -5,8 +5,6 @@
int i, n, sp = 0, maxsp = 0;
while(ip < end){
- if((int32_t)sp > (int32_t)maxsp)
- maxsp = sp;
opcode_t op = *ip++;
if(op >= N_OPCODES)
return -1;
@@ -42,7 +40,7 @@
case OP_ARGC: case OP_SETG: case OP_SETA: case OP_BOX:
ip++;
- break;
+ continue;
case OP_TCALL: case OP_CALL: case OP_CLOSURE: case OP_SHIFT:
n = *ip++; // nargs
@@ -98,10 +96,12 @@
break;
case OP_JMP:
SWAP_INT16(ip);
- ip += 2; break;
+ ip += 2;
+ continue;
case OP_JMPL:
SWAP_INT32(ip);
- ip += 4; break;
+ ip += 4;
+ continue;
case OP_BRFL: case OP_BRTL:
SWAP_INT32(ip);
ip += 4;
@@ -125,7 +125,6 @@
case OP_BRNNL: case OP_BRNL:
SWAP_INT32(ip);
ip += 4; // fallthrough
-
case OP_TAPPLY: case OP_APPLY:
case OP_LIST: case OP_ADD: case OP_SUB: case OP_MUL: case OP_DIV:
case OP_VECTOR:
@@ -152,11 +151,13 @@
case OP_NULLP: case OP_BOOLEANP: case OP_NUMBERP:
case OP_FIXNUMP: case OP_BOUNDP: case OP_BUILTINP:
case OP_FUNCTIONP: case OP_VECTORP:
- break;
+ continue;
case OP_EOF_OBJECT: case N_OPCODES:
return -1;
}
+ if((int32_t)sp > (int32_t)maxsp)
+ maxsp = sp;
}
assert(ip == end);
assert(maxsp >= 0);