summaryrefslogtreecommitdiff
path: root/include/program.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/program.h')
-rw-r--r--include/program.h1065
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