diff options
Diffstat (limited to 'src/bytecode.c')
| -rw-r--r-- | src/bytecode.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/bytecode.c b/src/bytecode.c index a64bc171d14..1695af9cb02 100644 --- a/src/bytecode.c +++ b/src/bytecode.c | |||
| @@ -267,6 +267,8 @@ DEFINE (Bstack_set, 0262) \ | |||
| 267 | DEFINE (Bstack_set2, 0263) \ | 267 | DEFINE (Bstack_set2, 0263) \ |
| 268 | DEFINE (BdiscardN, 0266) \ | 268 | DEFINE (BdiscardN, 0266) \ |
| 269 | \ | 269 | \ |
| 270 | DEFINE (Bswitch, 0267) \ | ||
| 271 | \ | ||
| 270 | DEFINE (Bconstant, 0300) | 272 | DEFINE (Bconstant, 0300) |
| 271 | 273 | ||
| 272 | enum byte_code_op | 274 | enum byte_code_op |
| @@ -1411,6 +1413,20 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, | |||
| 1411 | DISCARD (op); | 1413 | DISCARD (op); |
| 1412 | NEXT; | 1414 | NEXT; |
| 1413 | 1415 | ||
| 1416 | CASE (Bswitch): | ||
| 1417 | { | ||
| 1418 | Lisp_Object jmp_table = POP; | ||
| 1419 | Lisp_Object v1 = POP; | ||
| 1420 | Lisp_Object dest = Fgethash(v1, jmp_table, Qnil); | ||
| 1421 | if (!NILP(dest)) { | ||
| 1422 | int car = XINT(XCAR(dest)); | ||
| 1423 | int cdr = XINT(XCDR(dest)); | ||
| 1424 | op = car + (cdr << 8); /* Simulate FETCH2 */ | ||
| 1425 | goto op_branch; | ||
| 1426 | } | ||
| 1427 | } | ||
| 1428 | NEXT; | ||
| 1429 | |||
| 1414 | CASE_DEFAULT | 1430 | CASE_DEFAULT |
| 1415 | CASE (Bconstant): | 1431 | CASE (Bconstant): |
| 1416 | if (BYTE_CODE_SAFE | 1432 | if (BYTE_CODE_SAFE |