diff options
Diffstat (limited to 'include/program.h')
| -rw-r--r-- | include/program.h | 1065 |
1 files changed, 555 insertions, 510 deletions
diff --git a/include/program.h b/include/program.h index 3f90f2b9f552..1a87aa612c90 100644 --- a/include/program.h +++ b/include/program.h @@ -64,8 +64,8 @@ /// The length of the globals array. #define BC_PROG_GLOBALS_LEN (3 + BC_ENABLE_EXTRA_MATH) -typedef struct BcProgram { - +typedef struct BcProgram +{ /// The array of globals values. BcBigDig globals[BC_PROG_GLOBALS_LEN]; @@ -86,10 +86,10 @@ typedef struct BcProgram { BcVec stack; /// A pointer to the current function's constants. - BcVec *consts; + BcVec* consts; /// A pointer to the current function's strings. - BcVec *strs; + BcVec* strs; /// The array of functions. BcVec fns; @@ -206,8 +206,7 @@ typedef struct BcProgram { /// This define disappears the parameter last because for dc only, last is /// always true. -#define bc_program_copyToVar(p, name, t, last) \ - bc_program_copyToVar(p, name, t) +#define bc_program_copyToVar(p, name, t, last) bc_program_copyToVar(p, name, t) #endif // !BC_ENABLED @@ -263,13 +262,14 @@ typedef struct BcProgram { * @param r The BcResult to store the result into. * @param n The parameter to the unary operation. */ -typedef void (*BcProgramUnary)(BcResult *r, BcNum *n); +typedef void (*BcProgramUnary)(BcResult* r, BcNum* n); /** * Initializes the BcProgram. * @param p The program to initialize. */ -void bc_program_init(BcProgram *p); +void +bc_program_init(BcProgram* p); #ifndef NDEBUG @@ -279,7 +279,8 @@ void bc_program_init(BcProgram *p); * exit. * @param p The program to initialize. */ -void bc_program_free(BcProgram *p); +void +bc_program_free(BcProgram* p); #endif // NDEBUG @@ -290,7 +291,8 @@ void bc_program_free(BcProgram *p); * Prints the bytecode in a function. This is a debug-only function. * @param p The program. */ -void bc_program_code(const BcProgram *p); +void +bc_program_code(const BcProgram* p); /** * Prints an instruction. This is a debug-only function. @@ -299,14 +301,16 @@ void bc_program_code(const BcProgram *p); * @param bgn A pointer to the current index. It is also updated to the next * index. */ -void bc_program_printInst(const BcProgram *p, const char *code, - size_t *restrict bgn); +void +bc_program_printInst(const BcProgram* p, const char* code, + size_t* restrict bgn); /** * Prints the stack. This is a debug-only function. * @param p The program. */ -void bc_program_printStackDebug(BcProgram* p); +void +bc_program_printStackDebug(BcProgram* p); #endif // BC_ENABLED && DC_ENABLED #endif // BC_DEBUG_CODE @@ -318,7 +322,8 @@ void bc_program_printStackDebug(BcProgram* p); * @param var True if the search should be for a variable, false for an array. * @return The index of the variable or array in the correct array. */ -size_t bc_program_search(BcProgram *p, const char* id, bool var); +size_t +bc_program_search(BcProgram* p, const char* id, bool var); /** * Adds a string to a function and returns the string's index in the function. @@ -326,7 +331,8 @@ size_t bc_program_search(BcProgram *p, const char* id, bool var); * @param str The string to add. * @param fidx The index of the function to add to. */ -size_t bc_program_addString(BcProgram *p, const char *str, size_t fidx); +size_t +bc_program_addString(BcProgram* p, const char* str, size_t fidx); /** * Inserts a function into the program and returns the index of the function in @@ -335,33 +341,38 @@ size_t bc_program_addString(BcProgram *p, const char *str, size_t fidx); * @param name The name of the function. * @return The index of the function after insertion. */ -size_t bc_program_insertFunc(BcProgram *p, const char *name); +size_t +bc_program_insertFunc(BcProgram* p, const char* name); /** * Resets a program, usually because of resetting after an error. * @param p The program to reset. */ -void bc_program_reset(BcProgram *p); +void +bc_program_reset(BcProgram* p); /** * Executes bc or dc code in the BcProgram. * @param p The program. */ -void bc_program_exec(BcProgram *p); +void +bc_program_exec(BcProgram* p); /** * Negates a copy of a BcNum. This is a BcProgramUnary function. * @param r The BcResult to store the result into. * @param n The parameter to the unary operation. */ -void bc_program_negate(BcResult *r, BcNum *n); +void +bc_program_negate(BcResult* r, BcNum* n); /** * Returns a boolean not of a BcNum. This is a BcProgramUnary function. * @param r The BcResult to store the result into. * @param n The parameter to the unary operation. */ -void bc_program_not(BcResult *r, BcNum *n); +void +bc_program_not(BcResult* r, BcNum* n); #if BC_ENABLE_EXTRA_MATH @@ -370,10 +381,30 @@ void bc_program_not(BcResult *r, BcNum *n); * @param r The BcResult to store the result into. * @param n The parameter to the unary operation. */ -void bc_program_trunc(BcResult *r, BcNum *n); +void +bc_program_trunc(BcResult* r, BcNum* n); + +/** + * Assigns a value to the seed builtin variable. + * @param p The program. + * @param val The value to assign to the seed. + */ +void +bc_program_assignSeed(BcProgram* p, BcNum* val); #endif // BC_ENABLE_EXTRA_MATH +/** + * Assigns a value to a builtin value that is not seed. + * @param p The program. + * @param scale True if the builtin is scale. + * @param obase True if the builtin is obase. This cannot be true at the same + * time @a scale is. + * @param val The value to assign to the builtin. + */ +void +bc_program_assignBuiltin(BcProgram* p, bool scale, bool obase, BcBigDig val); + /// A reference to an array of binary operator functions. extern const BcNumBinaryOp bc_program_ops[]; @@ -406,34 +437,42 @@ extern const char bc_program_esc_seqs[]; #if BC_DEBUG_CODE +// clang-format off #define BC_PROG_JUMP(inst, code, ip) \ - do { \ + do \ + { \ inst = (uchar) (code)[(ip)->idx++]; \ bc_file_printf(&vm.ferr, "inst: %s\n", bc_inst_names[inst]); \ bc_file_flush(&vm.ferr, bc_flush_none); \ goto *bc_program_inst_lbls[inst]; \ - } while (0) + } \ + while (0) +// clang-format on #else // BC_DEBUG_CODE +// clang-format off #define BC_PROG_JUMP(inst, code, ip) \ - do { \ + do \ + { \ inst = (uchar) (code)[(ip)->idx++]; \ goto *bc_program_inst_lbls[inst]; \ - } while (0) + } \ + while (0) +// clang-format on #endif // BC_DEBUG_CODE -#define BC_PROG_DIRECT_JUMP(l) goto lbl_ ## l; -#define BC_PROG_LBL(l) lbl_ ## l +#define BC_PROG_DIRECT_JUMP(l) goto lbl_##l; +#define BC_PROG_LBL(l) lbl_##l #define BC_PROG_FALLTHROUGH #if BC_C11 #define BC_PROG_LBLS_SIZE (sizeof(bc_program_inst_lbls) / sizeof(void*)) -#define BC_PROG_LBLS_ASSERT \ - static_assert(BC_PROG_LBLS_SIZE == BC_INST_INVALID + 1,\ - "bc_program_inst_lbls[] mismatches the instructions") +#define BC_PROG_LBLS_ASSERT \ + _Static_assert(BC_PROG_LBLS_SIZE == BC_INST_INVALID + 1, \ + "bc_program_inst_lbls[] mismatches the instructions") #else // BC_C11 @@ -447,197 +486,199 @@ extern const char bc_program_esc_seqs[]; #if BC_ENABLE_EXTRA_MATH -#define BC_PROG_LBLS static const void* const bc_program_inst_lbls[] = { \ - &&lbl_BC_INST_INC, \ - &&lbl_BC_INST_DEC, \ - &&lbl_BC_INST_NEG, \ - &&lbl_BC_INST_BOOL_NOT, \ - &&lbl_BC_INST_TRUNC, \ - &&lbl_BC_INST_POWER, \ - &&lbl_BC_INST_MULTIPLY, \ - &&lbl_BC_INST_DIVIDE, \ - &&lbl_BC_INST_MODULUS, \ - &&lbl_BC_INST_PLUS, \ - &&lbl_BC_INST_MINUS, \ - &&lbl_BC_INST_PLACES, \ - &&lbl_BC_INST_LSHIFT, \ - &&lbl_BC_INST_RSHIFT, \ - &&lbl_BC_INST_REL_EQ, \ - &&lbl_BC_INST_REL_LE, \ - &&lbl_BC_INST_REL_GE, \ - &&lbl_BC_INST_REL_NE, \ - &&lbl_BC_INST_REL_LT, \ - &&lbl_BC_INST_REL_GT, \ - &&lbl_BC_INST_BOOL_OR, \ - &&lbl_BC_INST_BOOL_AND, \ - &&lbl_BC_INST_ASSIGN_POWER, \ - &&lbl_BC_INST_ASSIGN_MULTIPLY, \ - &&lbl_BC_INST_ASSIGN_DIVIDE, \ - &&lbl_BC_INST_ASSIGN_MODULUS, \ - &&lbl_BC_INST_ASSIGN_PLUS, \ - &&lbl_BC_INST_ASSIGN_MINUS, \ - &&lbl_BC_INST_ASSIGN_PLACES, \ - &&lbl_BC_INST_ASSIGN_LSHIFT, \ - &&lbl_BC_INST_ASSIGN_RSHIFT, \ - &&lbl_BC_INST_ASSIGN, \ - &&lbl_BC_INST_ASSIGN_POWER_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_MULTIPLY_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_DIVIDE_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_MODULUS_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_PLUS_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_MINUS_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_PLACES_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_LSHIFT_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_RSHIFT_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_NO_VAL, \ - &&lbl_BC_INST_NUM, \ - &&lbl_BC_INST_VAR, \ - &&lbl_BC_INST_ARRAY_ELEM, \ - &&lbl_BC_INST_ARRAY, \ - &&lbl_BC_INST_ZERO, \ - &&lbl_BC_INST_ONE, \ - &&lbl_BC_INST_LAST, \ - &&lbl_BC_INST_IBASE, \ - &&lbl_BC_INST_OBASE, \ - &&lbl_BC_INST_SCALE, \ - &&lbl_BC_INST_SEED, \ - &&lbl_BC_INST_LENGTH, \ - &&lbl_BC_INST_SCALE_FUNC, \ - &&lbl_BC_INST_SQRT, \ - &&lbl_BC_INST_ABS, \ - &&lbl_BC_INST_IRAND, \ - &&lbl_BC_INST_ASCIIFY, \ - &&lbl_BC_INST_READ, \ - &&lbl_BC_INST_RAND, \ - &&lbl_BC_INST_MAXIBASE, \ - &&lbl_BC_INST_MAXOBASE, \ - &&lbl_BC_INST_MAXSCALE, \ - &&lbl_BC_INST_MAXRAND, \ - &&lbl_BC_INST_LINE_LENGTH, \ - &&lbl_BC_INST_GLOBAL_STACKS, \ - &&lbl_BC_INST_LEADING_ZERO, \ - &&lbl_BC_INST_PRINT, \ - &&lbl_BC_INST_PRINT_POP, \ - &&lbl_BC_INST_STR, \ - &&lbl_BC_INST_PRINT_STR, \ - &&lbl_BC_INST_JUMP, \ - &&lbl_BC_INST_JUMP_ZERO, \ - &&lbl_BC_INST_CALL, \ - &&lbl_BC_INST_RET, \ - &&lbl_BC_INST_RET0, \ - &&lbl_BC_INST_RET_VOID, \ - &&lbl_BC_INST_HALT, \ - &&lbl_BC_INST_POP, \ - &&lbl_BC_INST_SWAP, \ - &&lbl_BC_INST_MODEXP, \ - &&lbl_BC_INST_DIVMOD, \ - &&lbl_BC_INST_PRINT_STREAM, \ - &&lbl_BC_INST_POP_EXEC, \ - &&lbl_BC_INST_EXECUTE, \ - &&lbl_BC_INST_EXEC_COND, \ - &&lbl_BC_INST_PRINT_STACK, \ - &&lbl_BC_INST_CLEAR_STACK, \ - &&lbl_BC_INST_REG_STACK_LEN, \ - &&lbl_BC_INST_STACK_LEN, \ - &&lbl_BC_INST_DUPLICATE, \ - &&lbl_BC_INST_LOAD, \ - &&lbl_BC_INST_PUSH_VAR, \ - &&lbl_BC_INST_PUSH_TO_VAR, \ - &&lbl_BC_INST_QUIT, \ - &&lbl_BC_INST_NQUIT, \ - &&lbl_BC_INST_EXEC_STACK_LEN, \ - &&lbl_BC_INST_INVALID, \ -} +#define BC_PROG_LBLS \ + static const void* const bc_program_inst_lbls[] = { \ + &&lbl_BC_INST_INC, \ + &&lbl_BC_INST_DEC, \ + &&lbl_BC_INST_NEG, \ + &&lbl_BC_INST_BOOL_NOT, \ + &&lbl_BC_INST_TRUNC, \ + &&lbl_BC_INST_POWER, \ + &&lbl_BC_INST_MULTIPLY, \ + &&lbl_BC_INST_DIVIDE, \ + &&lbl_BC_INST_MODULUS, \ + &&lbl_BC_INST_PLUS, \ + &&lbl_BC_INST_MINUS, \ + &&lbl_BC_INST_PLACES, \ + &&lbl_BC_INST_LSHIFT, \ + &&lbl_BC_INST_RSHIFT, \ + &&lbl_BC_INST_REL_EQ, \ + &&lbl_BC_INST_REL_LE, \ + &&lbl_BC_INST_REL_GE, \ + &&lbl_BC_INST_REL_NE, \ + &&lbl_BC_INST_REL_LT, \ + &&lbl_BC_INST_REL_GT, \ + &&lbl_BC_INST_BOOL_OR, \ + &&lbl_BC_INST_BOOL_AND, \ + &&lbl_BC_INST_ASSIGN_POWER, \ + &&lbl_BC_INST_ASSIGN_MULTIPLY, \ + &&lbl_BC_INST_ASSIGN_DIVIDE, \ + &&lbl_BC_INST_ASSIGN_MODULUS, \ + &&lbl_BC_INST_ASSIGN_PLUS, \ + &&lbl_BC_INST_ASSIGN_MINUS, \ + &&lbl_BC_INST_ASSIGN_PLACES, \ + &&lbl_BC_INST_ASSIGN_LSHIFT, \ + &&lbl_BC_INST_ASSIGN_RSHIFT, \ + &&lbl_BC_INST_ASSIGN, \ + &&lbl_BC_INST_ASSIGN_POWER_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_MULTIPLY_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_DIVIDE_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_MODULUS_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_PLUS_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_MINUS_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_PLACES_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_LSHIFT_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_RSHIFT_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_NO_VAL, \ + &&lbl_BC_INST_NUM, \ + &&lbl_BC_INST_VAR, \ + &&lbl_BC_INST_ARRAY_ELEM, \ + &&lbl_BC_INST_ARRAY, \ + &&lbl_BC_INST_ZERO, \ + &&lbl_BC_INST_ONE, \ + &&lbl_BC_INST_LAST, \ + &&lbl_BC_INST_IBASE, \ + &&lbl_BC_INST_OBASE, \ + &&lbl_BC_INST_SCALE, \ + &&lbl_BC_INST_SEED, \ + &&lbl_BC_INST_LENGTH, \ + &&lbl_BC_INST_SCALE_FUNC, \ + &&lbl_BC_INST_SQRT, \ + &&lbl_BC_INST_ABS, \ + &&lbl_BC_INST_IRAND, \ + &&lbl_BC_INST_ASCIIFY, \ + &&lbl_BC_INST_READ, \ + &&lbl_BC_INST_RAND, \ + &&lbl_BC_INST_MAXIBASE, \ + &&lbl_BC_INST_MAXOBASE, \ + &&lbl_BC_INST_MAXSCALE, \ + &&lbl_BC_INST_MAXRAND, \ + &&lbl_BC_INST_LINE_LENGTH, \ + &&lbl_BC_INST_GLOBAL_STACKS, \ + &&lbl_BC_INST_LEADING_ZERO, \ + &&lbl_BC_INST_PRINT, \ + &&lbl_BC_INST_PRINT_POP, \ + &&lbl_BC_INST_STR, \ + &&lbl_BC_INST_PRINT_STR, \ + &&lbl_BC_INST_JUMP, \ + &&lbl_BC_INST_JUMP_ZERO, \ + &&lbl_BC_INST_CALL, \ + &&lbl_BC_INST_RET, \ + &&lbl_BC_INST_RET0, \ + &&lbl_BC_INST_RET_VOID, \ + &&lbl_BC_INST_HALT, \ + &&lbl_BC_INST_POP, \ + &&lbl_BC_INST_SWAP, \ + &&lbl_BC_INST_MODEXP, \ + &&lbl_BC_INST_DIVMOD, \ + &&lbl_BC_INST_PRINT_STREAM, \ + &&lbl_BC_INST_POP_EXEC, \ + &&lbl_BC_INST_EXECUTE, \ + &&lbl_BC_INST_EXEC_COND, \ + &&lbl_BC_INST_PRINT_STACK, \ + &&lbl_BC_INST_CLEAR_STACK, \ + &&lbl_BC_INST_REG_STACK_LEN, \ + &&lbl_BC_INST_STACK_LEN, \ + &&lbl_BC_INST_DUPLICATE, \ + &&lbl_BC_INST_LOAD, \ + &&lbl_BC_INST_PUSH_VAR, \ + &&lbl_BC_INST_PUSH_TO_VAR, \ + &&lbl_BC_INST_QUIT, \ + &&lbl_BC_INST_NQUIT, \ + &&lbl_BC_INST_EXEC_STACK_LEN, \ + &&lbl_BC_INST_INVALID, \ + } #else // BC_ENABLE_EXTRA_MATH -#define BC_PROG_LBLS static const void* const bc_program_inst_lbls[] = { \ - &&lbl_BC_INST_INC, \ - &&lbl_BC_INST_DEC, \ - &&lbl_BC_INST_NEG, \ - &&lbl_BC_INST_BOOL_NOT, \ - &&lbl_BC_INST_POWER, \ - &&lbl_BC_INST_MULTIPLY, \ - &&lbl_BC_INST_DIVIDE, \ - &&lbl_BC_INST_MODULUS, \ - &&lbl_BC_INST_PLUS, \ - &&lbl_BC_INST_MINUS, \ - &&lbl_BC_INST_REL_EQ, \ - &&lbl_BC_INST_REL_LE, \ - &&lbl_BC_INST_REL_GE, \ - &&lbl_BC_INST_REL_NE, \ - &&lbl_BC_INST_REL_LT, \ - &&lbl_BC_INST_REL_GT, \ - &&lbl_BC_INST_BOOL_OR, \ - &&lbl_BC_INST_BOOL_AND, \ - &&lbl_BC_INST_ASSIGN_POWER, \ - &&lbl_BC_INST_ASSIGN_MULTIPLY, \ - &&lbl_BC_INST_ASSIGN_DIVIDE, \ - &&lbl_BC_INST_ASSIGN_MODULUS, \ - &&lbl_BC_INST_ASSIGN_PLUS, \ - &&lbl_BC_INST_ASSIGN_MINUS, \ - &&lbl_BC_INST_ASSIGN, \ - &&lbl_BC_INST_ASSIGN_POWER_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_MULTIPLY_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_DIVIDE_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_MODULUS_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_PLUS_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_MINUS_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_NO_VAL, \ - &&lbl_BC_INST_NUM, \ - &&lbl_BC_INST_VAR, \ - &&lbl_BC_INST_ARRAY_ELEM, \ - &&lbl_BC_INST_ARRAY, \ - &&lbl_BC_INST_ZERO, \ - &&lbl_BC_INST_ONE, \ - &&lbl_BC_INST_LAST, \ - &&lbl_BC_INST_IBASE, \ - &&lbl_BC_INST_OBASE, \ - &&lbl_BC_INST_SCALE, \ - &&lbl_BC_INST_LENGTH, \ - &&lbl_BC_INST_SCALE_FUNC, \ - &&lbl_BC_INST_SQRT, \ - &&lbl_BC_INST_ABS, \ - &&lbl_BC_INST_ASCIIFY, \ - &&lbl_BC_INST_READ, \ - &&lbl_BC_INST_MAXIBASE, \ - &&lbl_BC_INST_MAXOBASE, \ - &&lbl_BC_INST_MAXSCALE, \ - &&lbl_BC_INST_LINE_LENGTH, \ - &&lbl_BC_INST_GLOBAL_STACKS, \ - &&lbl_BC_INST_LEADING_ZERO, \ - &&lbl_BC_INST_PRINT, \ - &&lbl_BC_INST_PRINT_POP, \ - &&lbl_BC_INST_STR, \ - &&lbl_BC_INST_PRINT_STR, \ - &&lbl_BC_INST_JUMP, \ - &&lbl_BC_INST_JUMP_ZERO, \ - &&lbl_BC_INST_CALL, \ - &&lbl_BC_INST_RET, \ - &&lbl_BC_INST_RET0, \ - &&lbl_BC_INST_RET_VOID, \ - &&lbl_BC_INST_HALT, \ - &&lbl_BC_INST_POP, \ - &&lbl_BC_INST_SWAP, \ - &&lbl_BC_INST_MODEXP, \ - &&lbl_BC_INST_DIVMOD, \ - &&lbl_BC_INST_PRINT_STREAM, \ - &&lbl_BC_INST_POP_EXEC, \ - &&lbl_BC_INST_EXECUTE, \ - &&lbl_BC_INST_EXEC_COND, \ - &&lbl_BC_INST_PRINT_STACK, \ - &&lbl_BC_INST_CLEAR_STACK, \ - &&lbl_BC_INST_REG_STACK_LEN, \ - &&lbl_BC_INST_STACK_LEN, \ - &&lbl_BC_INST_DUPLICATE, \ - &&lbl_BC_INST_LOAD, \ - &&lbl_BC_INST_PUSH_VAR, \ - &&lbl_BC_INST_PUSH_TO_VAR, \ - &&lbl_BC_INST_QUIT, \ - &&lbl_BC_INST_NQUIT, \ - &&lbl_BC_INST_EXEC_STACK_LEN, \ - &&lbl_BC_INST_INVALID, \ -} +#define BC_PROG_LBLS \ + static const void* const bc_program_inst_lbls[] = { \ + &&lbl_BC_INST_INC, \ + &&lbl_BC_INST_DEC, \ + &&lbl_BC_INST_NEG, \ + &&lbl_BC_INST_BOOL_NOT, \ + &&lbl_BC_INST_POWER, \ + &&lbl_BC_INST_MULTIPLY, \ + &&lbl_BC_INST_DIVIDE, \ + &&lbl_BC_INST_MODULUS, \ + &&lbl_BC_INST_PLUS, \ + &&lbl_BC_INST_MINUS, \ + &&lbl_BC_INST_REL_EQ, \ + &&lbl_BC_INST_REL_LE, \ + &&lbl_BC_INST_REL_GE, \ + &&lbl_BC_INST_REL_NE, \ + &&lbl_BC_INST_REL_LT, \ + &&lbl_BC_INST_REL_GT, \ + &&lbl_BC_INST_BOOL_OR, \ + &&lbl_BC_INST_BOOL_AND, \ + &&lbl_BC_INST_ASSIGN_POWER, \ + &&lbl_BC_INST_ASSIGN_MULTIPLY, \ + &&lbl_BC_INST_ASSIGN_DIVIDE, \ + &&lbl_BC_INST_ASSIGN_MODULUS, \ + &&lbl_BC_INST_ASSIGN_PLUS, \ + &&lbl_BC_INST_ASSIGN_MINUS, \ + &&lbl_BC_INST_ASSIGN, \ + &&lbl_BC_INST_ASSIGN_POWER_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_MULTIPLY_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_DIVIDE_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_MODULUS_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_PLUS_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_MINUS_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_NO_VAL, \ + &&lbl_BC_INST_NUM, \ + &&lbl_BC_INST_VAR, \ + &&lbl_BC_INST_ARRAY_ELEM, \ + &&lbl_BC_INST_ARRAY, \ + &&lbl_BC_INST_ZERO, \ + &&lbl_BC_INST_ONE, \ + &&lbl_BC_INST_LAST, \ + &&lbl_BC_INST_IBASE, \ + &&lbl_BC_INST_OBASE, \ + &&lbl_BC_INST_SCALE, \ + &&lbl_BC_INST_LENGTH, \ + &&lbl_BC_INST_SCALE_FUNC, \ + &&lbl_BC_INST_SQRT, \ + &&lbl_BC_INST_ABS, \ + &&lbl_BC_INST_ASCIIFY, \ + &&lbl_BC_INST_READ, \ + &&lbl_BC_INST_MAXIBASE, \ + &&lbl_BC_INST_MAXOBASE, \ + &&lbl_BC_INST_MAXSCALE, \ + &&lbl_BC_INST_LINE_LENGTH, \ + &&lbl_BC_INST_GLOBAL_STACKS, \ + &&lbl_BC_INST_LEADING_ZERO, \ + &&lbl_BC_INST_PRINT, \ + &&lbl_BC_INST_PRINT_POP, \ + &&lbl_BC_INST_STR, \ + &&lbl_BC_INST_PRINT_STR, \ + &&lbl_BC_INST_JUMP, \ + &&lbl_BC_INST_JUMP_ZERO, \ + &&lbl_BC_INST_CALL, \ + &&lbl_BC_INST_RET, \ + &&lbl_BC_INST_RET0, \ + &&lbl_BC_INST_RET_VOID, \ + &&lbl_BC_INST_HALT, \ + &&lbl_BC_INST_POP, \ + &&lbl_BC_INST_SWAP, \ + &&lbl_BC_INST_MODEXP, \ + &&lbl_BC_INST_DIVMOD, \ + &&lbl_BC_INST_PRINT_STREAM, \ + &&lbl_BC_INST_POP_EXEC, \ + &&lbl_BC_INST_EXECUTE, \ + &&lbl_BC_INST_EXEC_COND, \ + &&lbl_BC_INST_PRINT_STACK, \ + &&lbl_BC_INST_CLEAR_STACK, \ + &&lbl_BC_INST_REG_STACK_LEN, \ + &&lbl_BC_INST_STACK_LEN, \ + &&lbl_BC_INST_DUPLICATE, \ + &&lbl_BC_INST_LOAD, \ + &&lbl_BC_INST_PUSH_VAR, \ + &&lbl_BC_INST_PUSH_TO_VAR, \ + &&lbl_BC_INST_QUIT, \ + &&lbl_BC_INST_NQUIT, \ + &&lbl_BC_INST_EXEC_STACK_LEN, \ + &&lbl_BC_INST_INVALID, \ + } #endif // BC_ENABLE_EXTRA_MATH @@ -645,169 +686,171 @@ extern const char bc_program_esc_seqs[]; #if BC_ENABLE_EXTRA_MATH -#define BC_PROG_LBLS static const void* const bc_program_inst_lbls[] = { \ - &&lbl_BC_INST_INC, \ - &&lbl_BC_INST_DEC, \ - &&lbl_BC_INST_NEG, \ - &&lbl_BC_INST_BOOL_NOT, \ - &&lbl_BC_INST_TRUNC, \ - &&lbl_BC_INST_POWER, \ - &&lbl_BC_INST_MULTIPLY, \ - &&lbl_BC_INST_DIVIDE, \ - &&lbl_BC_INST_MODULUS, \ - &&lbl_BC_INST_PLUS, \ - &&lbl_BC_INST_MINUS, \ - &&lbl_BC_INST_PLACES, \ - &&lbl_BC_INST_LSHIFT, \ - &&lbl_BC_INST_RSHIFT, \ - &&lbl_BC_INST_REL_EQ, \ - &&lbl_BC_INST_REL_LE, \ - &&lbl_BC_INST_REL_GE, \ - &&lbl_BC_INST_REL_NE, \ - &&lbl_BC_INST_REL_LT, \ - &&lbl_BC_INST_REL_GT, \ - &&lbl_BC_INST_BOOL_OR, \ - &&lbl_BC_INST_BOOL_AND, \ - &&lbl_BC_INST_ASSIGN_POWER, \ - &&lbl_BC_INST_ASSIGN_MULTIPLY, \ - &&lbl_BC_INST_ASSIGN_DIVIDE, \ - &&lbl_BC_INST_ASSIGN_MODULUS, \ - &&lbl_BC_INST_ASSIGN_PLUS, \ - &&lbl_BC_INST_ASSIGN_MINUS, \ - &&lbl_BC_INST_ASSIGN_PLACES, \ - &&lbl_BC_INST_ASSIGN_LSHIFT, \ - &&lbl_BC_INST_ASSIGN_RSHIFT, \ - &&lbl_BC_INST_ASSIGN, \ - &&lbl_BC_INST_ASSIGN_POWER_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_MULTIPLY_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_DIVIDE_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_MODULUS_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_PLUS_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_MINUS_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_PLACES_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_LSHIFT_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_RSHIFT_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_NO_VAL, \ - &&lbl_BC_INST_NUM, \ - &&lbl_BC_INST_VAR, \ - &&lbl_BC_INST_ARRAY_ELEM, \ - &&lbl_BC_INST_ARRAY, \ - &&lbl_BC_INST_ZERO, \ - &&lbl_BC_INST_ONE, \ - &&lbl_BC_INST_LAST, \ - &&lbl_BC_INST_IBASE, \ - &&lbl_BC_INST_OBASE, \ - &&lbl_BC_INST_SCALE, \ - &&lbl_BC_INST_SEED, \ - &&lbl_BC_INST_LENGTH, \ - &&lbl_BC_INST_SCALE_FUNC, \ - &&lbl_BC_INST_SQRT, \ - &&lbl_BC_INST_ABS, \ - &&lbl_BC_INST_IRAND, \ - &&lbl_BC_INST_ASCIIFY, \ - &&lbl_BC_INST_READ, \ - &&lbl_BC_INST_RAND, \ - &&lbl_BC_INST_MAXIBASE, \ - &&lbl_BC_INST_MAXOBASE, \ - &&lbl_BC_INST_MAXSCALE, \ - &&lbl_BC_INST_MAXRAND, \ - &&lbl_BC_INST_LINE_LENGTH, \ - &&lbl_BC_INST_GLOBAL_STACKS, \ - &&lbl_BC_INST_LEADING_ZERO, \ - &&lbl_BC_INST_PRINT, \ - &&lbl_BC_INST_PRINT_POP, \ - &&lbl_BC_INST_STR, \ - &&lbl_BC_INST_PRINT_STR, \ - &&lbl_BC_INST_JUMP, \ - &&lbl_BC_INST_JUMP_ZERO, \ - &&lbl_BC_INST_CALL, \ - &&lbl_BC_INST_RET, \ - &&lbl_BC_INST_RET0, \ - &&lbl_BC_INST_RET_VOID, \ - &&lbl_BC_INST_HALT, \ - &&lbl_BC_INST_POP, \ - &&lbl_BC_INST_SWAP, \ - &&lbl_BC_INST_MODEXP, \ - &&lbl_BC_INST_DIVMOD, \ - &&lbl_BC_INST_PRINT_STREAM, \ - &&lbl_BC_INST_INVALID, \ -} +#define BC_PROG_LBLS \ + static const void* const bc_program_inst_lbls[] = { \ + &&lbl_BC_INST_INC, \ + &&lbl_BC_INST_DEC, \ + &&lbl_BC_INST_NEG, \ + &&lbl_BC_INST_BOOL_NOT, \ + &&lbl_BC_INST_TRUNC, \ + &&lbl_BC_INST_POWER, \ + &&lbl_BC_INST_MULTIPLY, \ + &&lbl_BC_INST_DIVIDE, \ + &&lbl_BC_INST_MODULUS, \ + &&lbl_BC_INST_PLUS, \ + &&lbl_BC_INST_MINUS, \ + &&lbl_BC_INST_PLACES, \ + &&lbl_BC_INST_LSHIFT, \ + &&lbl_BC_INST_RSHIFT, \ + &&lbl_BC_INST_REL_EQ, \ + &&lbl_BC_INST_REL_LE, \ + &&lbl_BC_INST_REL_GE, \ + &&lbl_BC_INST_REL_NE, \ + &&lbl_BC_INST_REL_LT, \ + &&lbl_BC_INST_REL_GT, \ + &&lbl_BC_INST_BOOL_OR, \ + &&lbl_BC_INST_BOOL_AND, \ + &&lbl_BC_INST_ASSIGN_POWER, \ + &&lbl_BC_INST_ASSIGN_MULTIPLY, \ + &&lbl_BC_INST_ASSIGN_DIVIDE, \ + &&lbl_BC_INST_ASSIGN_MODULUS, \ + &&lbl_BC_INST_ASSIGN_PLUS, \ + &&lbl_BC_INST_ASSIGN_MINUS, \ + &&lbl_BC_INST_ASSIGN_PLACES, \ + &&lbl_BC_INST_ASSIGN_LSHIFT, \ + &&lbl_BC_INST_ASSIGN_RSHIFT, \ + &&lbl_BC_INST_ASSIGN, \ + &&lbl_BC_INST_ASSIGN_POWER_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_MULTIPLY_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_DIVIDE_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_MODULUS_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_PLUS_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_MINUS_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_PLACES_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_LSHIFT_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_RSHIFT_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_NO_VAL, \ + &&lbl_BC_INST_NUM, \ + &&lbl_BC_INST_VAR, \ + &&lbl_BC_INST_ARRAY_ELEM, \ + &&lbl_BC_INST_ARRAY, \ + &&lbl_BC_INST_ZERO, \ + &&lbl_BC_INST_ONE, \ + &&lbl_BC_INST_LAST, \ + &&lbl_BC_INST_IBASE, \ + &&lbl_BC_INST_OBASE, \ + &&lbl_BC_INST_SCALE, \ + &&lbl_BC_INST_SEED, \ + &&lbl_BC_INST_LENGTH, \ + &&lbl_BC_INST_SCALE_FUNC, \ + &&lbl_BC_INST_SQRT, \ + &&lbl_BC_INST_ABS, \ + &&lbl_BC_INST_IRAND, \ + &&lbl_BC_INST_ASCIIFY, \ + &&lbl_BC_INST_READ, \ + &&lbl_BC_INST_RAND, \ + &&lbl_BC_INST_MAXIBASE, \ + &&lbl_BC_INST_MAXOBASE, \ + &&lbl_BC_INST_MAXSCALE, \ + &&lbl_BC_INST_MAXRAND, \ + &&lbl_BC_INST_LINE_LENGTH, \ + &&lbl_BC_INST_GLOBAL_STACKS, \ + &&lbl_BC_INST_LEADING_ZERO, \ + &&lbl_BC_INST_PRINT, \ + &&lbl_BC_INST_PRINT_POP, \ + &&lbl_BC_INST_STR, \ + &&lbl_BC_INST_PRINT_STR, \ + &&lbl_BC_INST_JUMP, \ + &&lbl_BC_INST_JUMP_ZERO, \ + &&lbl_BC_INST_CALL, \ + &&lbl_BC_INST_RET, \ + &&lbl_BC_INST_RET0, \ + &&lbl_BC_INST_RET_VOID, \ + &&lbl_BC_INST_HALT, \ + &&lbl_BC_INST_POP, \ + &&lbl_BC_INST_SWAP, \ + &&lbl_BC_INST_MODEXP, \ + &&lbl_BC_INST_DIVMOD, \ + &&lbl_BC_INST_PRINT_STREAM, \ + &&lbl_BC_INST_INVALID, \ + } #else // BC_ENABLE_EXTRA_MATH -#define BC_PROG_LBLS static const void* const bc_program_inst_lbls[] = { \ - &&lbl_BC_INST_INC, \ - &&lbl_BC_INST_DEC, \ - &&lbl_BC_INST_NEG, \ - &&lbl_BC_INST_BOOL_NOT, \ - &&lbl_BC_INST_POWER, \ - &&lbl_BC_INST_MULTIPLY, \ - &&lbl_BC_INST_DIVIDE, \ - &&lbl_BC_INST_MODULUS, \ - &&lbl_BC_INST_PLUS, \ - &&lbl_BC_INST_MINUS, \ - &&lbl_BC_INST_REL_EQ, \ - &&lbl_BC_INST_REL_LE, \ - &&lbl_BC_INST_REL_GE, \ - &&lbl_BC_INST_REL_NE, \ - &&lbl_BC_INST_REL_LT, \ - &&lbl_BC_INST_REL_GT, \ - &&lbl_BC_INST_BOOL_OR, \ - &&lbl_BC_INST_BOOL_AND, \ - &&lbl_BC_INST_ASSIGN_POWER, \ - &&lbl_BC_INST_ASSIGN_MULTIPLY, \ - &&lbl_BC_INST_ASSIGN_DIVIDE, \ - &&lbl_BC_INST_ASSIGN_MODULUS, \ - &&lbl_BC_INST_ASSIGN_PLUS, \ - &&lbl_BC_INST_ASSIGN_MINUS, \ - &&lbl_BC_INST_ASSIGN, \ - &&lbl_BC_INST_ASSIGN_POWER_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_MULTIPLY_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_DIVIDE_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_MODULUS_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_PLUS_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_MINUS_NO_VAL, \ - &&lbl_BC_INST_ASSIGN_NO_VAL, \ - &&lbl_BC_INST_NUM, \ - &&lbl_BC_INST_VAR, \ - &&lbl_BC_INST_ARRAY_ELEM, \ - &&lbl_BC_INST_ARRAY, \ - &&lbl_BC_INST_ZERO, \ - &&lbl_BC_INST_ONE, \ - &&lbl_BC_INST_LAST, \ - &&lbl_BC_INST_IBASE, \ - &&lbl_BC_INST_OBASE, \ - &&lbl_BC_INST_SCALE, \ - &&lbl_BC_INST_LENGTH, \ - &&lbl_BC_INST_SCALE_FUNC, \ - &&lbl_BC_INST_SQRT, \ - &&lbl_BC_INST_ABS, \ - &&lbl_BC_INST_ASCIIFY, \ - &&lbl_BC_INST_READ, \ - &&lbl_BC_INST_MAXIBASE, \ - &&lbl_BC_INST_MAXOBASE, \ - &&lbl_BC_INST_MAXSCALE, \ - &&lbl_BC_INST_LINE_LENGTH, \ - &&lbl_BC_INST_GLOBAL_STACKS, \ - &&lbl_BC_INST_LEADING_ZERO, \ - &&lbl_BC_INST_PRINT, \ - &&lbl_BC_INST_PRINT_POP, \ - &&lbl_BC_INST_STR, \ - &&lbl_BC_INST_PRINT_STR, \ - &&lbl_BC_INST_JUMP, \ - &&lbl_BC_INST_JUMP_ZERO, \ - &&lbl_BC_INST_CALL, \ - &&lbl_BC_INST_RET, \ - &&lbl_BC_INST_RET0, \ - &&lbl_BC_INST_RET_VOID, \ - &&lbl_BC_INST_HALT, \ - &&lbl_BC_INST_POP, \ - &&lbl_BC_INST_SWAP, \ - &&lbl_BC_INST_MODEXP, \ - &&lbl_BC_INST_DIVMOD, \ - &&lbl_BC_INST_PRINT_STREAM, \ - &&lbl_BC_INST_INVALID, \ -} +#define BC_PROG_LBLS \ + static const void* const bc_program_inst_lbls[] = { \ + &&lbl_BC_INST_INC, \ + &&lbl_BC_INST_DEC, \ + &&lbl_BC_INST_NEG, \ + &&lbl_BC_INST_BOOL_NOT, \ + &&lbl_BC_INST_POWER, \ + &&lbl_BC_INST_MULTIPLY, \ + &&lbl_BC_INST_DIVIDE, \ + &&lbl_BC_INST_MODULUS, \ + &&lbl_BC_INST_PLUS, \ + &&lbl_BC_INST_MINUS, \ + &&lbl_BC_INST_REL_EQ, \ + &&lbl_BC_INST_REL_LE, \ + &&lbl_BC_INST_REL_GE, \ + &&lbl_BC_INST_REL_NE, \ + &&lbl_BC_INST_REL_LT, \ + &&lbl_BC_INST_REL_GT, \ + &&lbl_BC_INST_BOOL_OR, \ + &&lbl_BC_INST_BOOL_AND, \ + &&lbl_BC_INST_ASSIGN_POWER, \ + &&lbl_BC_INST_ASSIGN_MULTIPLY, \ + &&lbl_BC_INST_ASSIGN_DIVIDE, \ + &&lbl_BC_INST_ASSIGN_MODULUS, \ + &&lbl_BC_INST_ASSIGN_PLUS, \ + &&lbl_BC_INST_ASSIGN_MINUS, \ + &&lbl_BC_INST_ASSIGN, \ + &&lbl_BC_INST_ASSIGN_POWER_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_MULTIPLY_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_DIVIDE_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_MODULUS_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_PLUS_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_MINUS_NO_VAL, \ + &&lbl_BC_INST_ASSIGN_NO_VAL, \ + &&lbl_BC_INST_NUM, \ + &&lbl_BC_INST_VAR, \ + &&lbl_BC_INST_ARRAY_ELEM, \ + &&lbl_BC_INST_ARRAY, \ + &&lbl_BC_INST_ZERO, \ + &&lbl_BC_INST_ONE, \ + &&lbl_BC_INST_LAST, \ + &&lbl_BC_INST_IBASE, \ + &&lbl_BC_INST_OBASE, \ + &&lbl_BC_INST_SCALE, \ + &&lbl_BC_INST_LENGTH, \ + &&lbl_BC_INST_SCALE_FUNC, \ + &&lbl_BC_INST_SQRT, \ + &&lbl_BC_INST_ABS, \ + &&lbl_BC_INST_ASCIIFY, \ + &&lbl_BC_INST_READ, \ + &&lbl_BC_INST_MAXIBASE, \ + &&lbl_BC_INST_MAXOBASE, \ + &&lbl_BC_INST_MAXSCALE, \ + &&lbl_BC_INST_LINE_LENGTH, \ + &&lbl_BC_INST_GLOBAL_STACKS, \ + &&lbl_BC_INST_LEADING_ZERO, \ + &&lbl_BC_INST_PRINT, \ + &&lbl_BC_INST_PRINT_POP, \ + &&lbl_BC_INST_STR, \ + &&lbl_BC_INST_PRINT_STR, \ + &&lbl_BC_INST_JUMP, \ + &&lbl_BC_INST_JUMP_ZERO, \ + &&lbl_BC_INST_CALL, \ + &&lbl_BC_INST_RET, \ + &&lbl_BC_INST_RET0, \ + &&lbl_BC_INST_RET_VOID, \ + &&lbl_BC_INST_HALT, \ + &&lbl_BC_INST_POP, \ + &&lbl_BC_INST_SWAP, \ + &&lbl_BC_INST_MODEXP, \ + &&lbl_BC_INST_DIVMOD, \ + &&lbl_BC_INST_PRINT_STREAM, \ + &&lbl_BC_INST_INVALID, \ + } #endif // BC_ENABLE_EXTRA_MATH @@ -817,141 +860,143 @@ extern const char bc_program_esc_seqs[]; #if BC_ENABLE_EXTRA_MATH -#define BC_PROG_LBLS static const void* const bc_program_inst_lbls[] = { \ - &&lbl_BC_INST_NEG, \ - &&lbl_BC_INST_BOOL_NOT, \ - &&lbl_BC_INST_TRUNC, \ - &&lbl_BC_INST_POWER, \ - &&lbl_BC_INST_MULTIPLY, \ - &&lbl_BC_INST_DIVIDE, \ - &&lbl_BC_INST_MODULUS, \ - &&lbl_BC_INST_PLUS, \ - &&lbl_BC_INST_MINUS, \ - &&lbl_BC_INST_PLACES, \ - &&lbl_BC_INST_LSHIFT, \ - &&lbl_BC_INST_RSHIFT, \ - &&lbl_BC_INST_REL_EQ, \ - &&lbl_BC_INST_REL_LE, \ - &&lbl_BC_INST_REL_GE, \ - &&lbl_BC_INST_REL_NE, \ - &&lbl_BC_INST_REL_LT, \ - &&lbl_BC_INST_REL_GT, \ - &&lbl_BC_INST_BOOL_OR, \ - &&lbl_BC_INST_BOOL_AND, \ - &&lbl_BC_INST_ASSIGN_NO_VAL, \ - &&lbl_BC_INST_NUM, \ - &&lbl_BC_INST_VAR, \ - &&lbl_BC_INST_ARRAY_ELEM, \ - &&lbl_BC_INST_ARRAY, \ - &&lbl_BC_INST_ZERO, \ - &&lbl_BC_INST_ONE, \ - &&lbl_BC_INST_IBASE, \ - &&lbl_BC_INST_OBASE, \ - &&lbl_BC_INST_SCALE, \ - &&lbl_BC_INST_SEED, \ - &&lbl_BC_INST_LENGTH, \ - &&lbl_BC_INST_SCALE_FUNC, \ - &&lbl_BC_INST_SQRT, \ - &&lbl_BC_INST_ABS, \ - &&lbl_BC_INST_IRAND, \ - &&lbl_BC_INST_ASCIIFY, \ - &&lbl_BC_INST_READ, \ - &&lbl_BC_INST_RAND, \ - &&lbl_BC_INST_MAXIBASE, \ - &&lbl_BC_INST_MAXOBASE, \ - &&lbl_BC_INST_MAXSCALE, \ - &&lbl_BC_INST_MAXRAND, \ - &&lbl_BC_INST_LINE_LENGTH, \ - &&lbl_BC_INST_LEADING_ZERO, \ - &&lbl_BC_INST_PRINT, \ - &&lbl_BC_INST_PRINT_POP, \ - &&lbl_BC_INST_STR, \ - &&lbl_BC_INST_POP, \ - &&lbl_BC_INST_SWAP, \ - &&lbl_BC_INST_MODEXP, \ - &&lbl_BC_INST_DIVMOD, \ - &&lbl_BC_INST_PRINT_STREAM, \ - &&lbl_BC_INST_POP_EXEC, \ - &&lbl_BC_INST_EXECUTE, \ - &&lbl_BC_INST_EXEC_COND, \ - &&lbl_BC_INST_PRINT_STACK, \ - &&lbl_BC_INST_CLEAR_STACK, \ - &&lbl_BC_INST_REG_STACK_LEN, \ - &&lbl_BC_INST_STACK_LEN, \ - &&lbl_BC_INST_DUPLICATE, \ - &&lbl_BC_INST_LOAD, \ - &&lbl_BC_INST_PUSH_VAR, \ - &&lbl_BC_INST_PUSH_TO_VAR, \ - &&lbl_BC_INST_QUIT, \ - &&lbl_BC_INST_NQUIT, \ - &&lbl_BC_INST_EXEC_STACK_LEN, \ - &&lbl_BC_INST_INVALID, \ -} +#define BC_PROG_LBLS \ + static const void* const bc_program_inst_lbls[] = { \ + &&lbl_BC_INST_NEG, \ + &&lbl_BC_INST_BOOL_NOT, \ + &&lbl_BC_INST_TRUNC, \ + &&lbl_BC_INST_POWER, \ + &&lbl_BC_INST_MULTIPLY, \ + &&lbl_BC_INST_DIVIDE, \ + &&lbl_BC_INST_MODULUS, \ + &&lbl_BC_INST_PLUS, \ + &&lbl_BC_INST_MINUS, \ + &&lbl_BC_INST_PLACES, \ + &&lbl_BC_INST_LSHIFT, \ + &&lbl_BC_INST_RSHIFT, \ + &&lbl_BC_INST_REL_EQ, \ + &&lbl_BC_INST_REL_LE, \ + &&lbl_BC_INST_REL_GE, \ + &&lbl_BC_INST_REL_NE, \ + &&lbl_BC_INST_REL_LT, \ + &&lbl_BC_INST_REL_GT, \ + &&lbl_BC_INST_BOOL_OR, \ + &&lbl_BC_INST_BOOL_AND, \ + &&lbl_BC_INST_ASSIGN_NO_VAL, \ + &&lbl_BC_INST_NUM, \ + &&lbl_BC_INST_VAR, \ + &&lbl_BC_INST_ARRAY_ELEM, \ + &&lbl_BC_INST_ARRAY, \ + &&lbl_BC_INST_ZERO, \ + &&lbl_BC_INST_ONE, \ + &&lbl_BC_INST_IBASE, \ + &&lbl_BC_INST_OBASE, \ + &&lbl_BC_INST_SCALE, \ + &&lbl_BC_INST_SEED, \ + &&lbl_BC_INST_LENGTH, \ + &&lbl_BC_INST_SCALE_FUNC, \ + &&lbl_BC_INST_SQRT, \ + &&lbl_BC_INST_ABS, \ + &&lbl_BC_INST_IRAND, \ + &&lbl_BC_INST_ASCIIFY, \ + &&lbl_BC_INST_READ, \ + &&lbl_BC_INST_RAND, \ + &&lbl_BC_INST_MAXIBASE, \ + &&lbl_BC_INST_MAXOBASE, \ + &&lbl_BC_INST_MAXSCALE, \ + &&lbl_BC_INST_MAXRAND, \ + &&lbl_BC_INST_LINE_LENGTH, \ + &&lbl_BC_INST_LEADING_ZERO, \ + &&lbl_BC_INST_PRINT, \ + &&lbl_BC_INST_PRINT_POP, \ + &&lbl_BC_INST_STR, \ + &&lbl_BC_INST_POP, \ + &&lbl_BC_INST_SWAP, \ + &&lbl_BC_INST_MODEXP, \ + &&lbl_BC_INST_DIVMOD, \ + &&lbl_BC_INST_PRINT_STREAM, \ + &&lbl_BC_INST_POP_EXEC, \ + &&lbl_BC_INST_EXECUTE, \ + &&lbl_BC_INST_EXEC_COND, \ + &&lbl_BC_INST_PRINT_STACK, \ + &&lbl_BC_INST_CLEAR_STACK, \ + &&lbl_BC_INST_REG_STACK_LEN, \ + &&lbl_BC_INST_STACK_LEN, \ + &&lbl_BC_INST_DUPLICATE, \ + &&lbl_BC_INST_LOAD, \ + &&lbl_BC_INST_PUSH_VAR, \ + &&lbl_BC_INST_PUSH_TO_VAR, \ + &&lbl_BC_INST_QUIT, \ + &&lbl_BC_INST_NQUIT, \ + &&lbl_BC_INST_EXEC_STACK_LEN, \ + &&lbl_BC_INST_INVALID, \ + } #else // BC_ENABLE_EXTRA_MATH -#define BC_PROG_LBLS static const void* const bc_program_inst_lbls[] = { \ - &&lbl_BC_INST_NEG, \ - &&lbl_BC_INST_BOOL_NOT, \ - &&lbl_BC_INST_POWER, \ - &&lbl_BC_INST_MULTIPLY, \ - &&lbl_BC_INST_DIVIDE, \ - &&lbl_BC_INST_MODULUS, \ - &&lbl_BC_INST_PLUS, \ - &&lbl_BC_INST_MINUS, \ - &&lbl_BC_INST_REL_EQ, \ - &&lbl_BC_INST_REL_LE, \ - &&lbl_BC_INST_REL_GE, \ - &&lbl_BC_INST_REL_NE, \ - &&lbl_BC_INST_REL_LT, \ - &&lbl_BC_INST_REL_GT, \ - &&lbl_BC_INST_BOOL_OR, \ - &&lbl_BC_INST_BOOL_AND, \ - &&lbl_BC_INST_ASSIGN_NO_VAL, \ - &&lbl_BC_INST_NUM, \ - &&lbl_BC_INST_VAR, \ - &&lbl_BC_INST_ARRAY_ELEM, \ - &&lbl_BC_INST_ARRAY, \ - &&lbl_BC_INST_ZERO, \ - &&lbl_BC_INST_ONE, \ - &&lbl_BC_INST_IBASE, \ - &&lbl_BC_INST_OBASE, \ - &&lbl_BC_INST_SCALE, \ - &&lbl_BC_INST_LENGTH, \ - &&lbl_BC_INST_SCALE_FUNC, \ - &&lbl_BC_INST_SQRT, \ - &&lbl_BC_INST_ABS, \ - &&lbl_BC_INST_ASCIIFY, \ - &&lbl_BC_INST_READ, \ - &&lbl_BC_INST_MAXIBASE, \ - &&lbl_BC_INST_MAXOBASE, \ - &&lbl_BC_INST_MAXSCALE, \ - &&lbl_BC_INST_LINE_LENGTH, \ - &&lbl_BC_INST_LEADING_ZERO, \ - &&lbl_BC_INST_PRINT, \ - &&lbl_BC_INST_PRINT_POP, \ - &&lbl_BC_INST_STR, \ - &&lbl_BC_INST_POP, \ - &&lbl_BC_INST_SWAP, \ - &&lbl_BC_INST_MODEXP, \ - &&lbl_BC_INST_DIVMOD, \ - &&lbl_BC_INST_PRINT_STREAM, \ - &&lbl_BC_INST_POP_EXEC, \ - &&lbl_BC_INST_EXECUTE, \ - &&lbl_BC_INST_EXEC_COND, \ - &&lbl_BC_INST_PRINT_STACK, \ - &&lbl_BC_INST_CLEAR_STACK, \ - &&lbl_BC_INST_REG_STACK_LEN, \ - &&lbl_BC_INST_STACK_LEN, \ - &&lbl_BC_INST_DUPLICATE, \ - &&lbl_BC_INST_LOAD, \ - &&lbl_BC_INST_PUSH_VAR, \ - &&lbl_BC_INST_PUSH_TO_VAR, \ - &&lbl_BC_INST_QUIT, \ - &&lbl_BC_INST_NQUIT, \ - &&lbl_BC_INST_EXEC_STACK_LEN, \ - &&lbl_BC_INST_INVALID, \ -} +#define BC_PROG_LBLS \ + static const void* const bc_program_inst_lbls[] = { \ + &&lbl_BC_INST_NEG, \ + &&lbl_BC_INST_BOOL_NOT, \ + &&lbl_BC_INST_POWER, \ + &&lbl_BC_INST_MULTIPLY, \ + &&lbl_BC_INST_DIVIDE, \ + &&lbl_BC_INST_MODULUS, \ + &&lbl_BC_INST_PLUS, \ + &&lbl_BC_INST_MINUS, \ + &&lbl_BC_INST_REL_EQ, \ + &&lbl_BC_INST_REL_LE, \ + &&lbl_BC_INST_REL_GE, \ + &&lbl_BC_INST_REL_NE, \ + &&lbl_BC_INST_REL_LT, \ + &&lbl_BC_INST_REL_GT, \ + &&lbl_BC_INST_BOOL_OR, \ + &&lbl_BC_INST_BOOL_AND, \ + &&lbl_BC_INST_ASSIGN_NO_VAL, \ + &&lbl_BC_INST_NUM, \ + &&lbl_BC_INST_VAR, \ + &&lbl_BC_INST_ARRAY_ELEM, \ + &&lbl_BC_INST_ARRAY, \ + &&lbl_BC_INST_ZERO, \ + &&lbl_BC_INST_ONE, \ + &&lbl_BC_INST_IBASE, \ + &&lbl_BC_INST_OBASE, \ + &&lbl_BC_INST_SCALE, \ + &&lbl_BC_INST_LENGTH, \ + &&lbl_BC_INST_SCALE_FUNC, \ + &&lbl_BC_INST_SQRT, \ + &&lbl_BC_INST_ABS, \ + &&lbl_BC_INST_ASCIIFY, \ + &&lbl_BC_INST_READ, \ + &&lbl_BC_INST_MAXIBASE, \ + &&lbl_BC_INST_MAXOBASE, \ + &&lbl_BC_INST_MAXSCALE, \ + &&lbl_BC_INST_LINE_LENGTH, \ + &&lbl_BC_INST_LEADING_ZERO, \ + &&lbl_BC_INST_PRINT, \ + &&lbl_BC_INST_PRINT_POP, \ + &&lbl_BC_INST_STR, \ + &&lbl_BC_INST_POP, \ + &&lbl_BC_INST_SWAP, \ + &&lbl_BC_INST_MODEXP, \ + &&lbl_BC_INST_DIVMOD, \ + &&lbl_BC_INST_PRINT_STREAM, \ + &&lbl_BC_INST_POP_EXEC, \ + &&lbl_BC_INST_EXECUTE, \ + &&lbl_BC_INST_EXEC_COND, \ + &&lbl_BC_INST_PRINT_STACK, \ + &&lbl_BC_INST_CLEAR_STACK, \ + &&lbl_BC_INST_REG_STACK_LEN, \ + &&lbl_BC_INST_STACK_LEN, \ + &&lbl_BC_INST_DUPLICATE, \ + &&lbl_BC_INST_LOAD, \ + &&lbl_BC_INST_PUSH_VAR, \ + &&lbl_BC_INST_PUSH_TO_VAR, \ + &&lbl_BC_INST_QUIT, \ + &&lbl_BC_INST_NQUIT, \ + &&lbl_BC_INST_EXEC_STACK_LEN, \ + &&lbl_BC_INST_INVALID, \ + } #endif // BC_ENABLE_EXTRA_MATH |
