bc: rename common INST constants to XC_, dc-specific ones to DC_
This will assist in disentangling dc and bc LEX constants Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		
							
								
								
									
										479
									
								
								miscutils/bc.c
									
									
									
									
									
								
							
							
						
						
									
										479
									
								
								miscutils/bc.c
									
									
									
									
									
								
							| @@ -251,26 +251,25 @@ typedef enum BcInst { | ||||
| 	BC_INST_INC_POST, | ||||
| 	BC_INST_DEC_POST, | ||||
| #endif | ||||
| 	XC_INST_NEG, | ||||
|  | ||||
| 	BC_INST_NEG, | ||||
| 	XC_INST_POWER, | ||||
| 	XC_INST_MULTIPLY, | ||||
| 	XC_INST_DIVIDE, | ||||
| 	XC_INST_MODULUS, | ||||
| 	XC_INST_PLUS, | ||||
| 	XC_INST_MINUS, | ||||
|  | ||||
| 	BC_INST_POWER, | ||||
| 	BC_INST_MULTIPLY, | ||||
| 	BC_INST_DIVIDE, | ||||
| 	BC_INST_MODULUS, | ||||
| 	BC_INST_PLUS, | ||||
| 	BC_INST_MINUS, | ||||
| 	XC_INST_REL_EQ, | ||||
| 	XC_INST_REL_LE, | ||||
| 	XC_INST_REL_GE, | ||||
| 	XC_INST_REL_NE, | ||||
| 	XC_INST_REL_LT, | ||||
| 	XC_INST_REL_GT, | ||||
|  | ||||
| 	BC_INST_REL_EQ, | ||||
| 	BC_INST_REL_LE, | ||||
| 	BC_INST_REL_GE, | ||||
| 	BC_INST_REL_NE, | ||||
| 	BC_INST_REL_LT, | ||||
| 	BC_INST_REL_GT, | ||||
|  | ||||
| 	BC_INST_BOOL_NOT, | ||||
| 	BC_INST_BOOL_OR, | ||||
| 	BC_INST_BOOL_AND, | ||||
| 	XC_INST_BOOL_NOT, | ||||
| 	XC_INST_BOOL_OR, | ||||
| 	XC_INST_BOOL_AND, | ||||
|  | ||||
| #if ENABLE_BC | ||||
| 	BC_INST_ASSIGN_POWER, | ||||
| @@ -280,26 +279,26 @@ typedef enum BcInst { | ||||
| 	BC_INST_ASSIGN_PLUS, | ||||
| 	BC_INST_ASSIGN_MINUS, | ||||
| #endif | ||||
| 	BC_INST_ASSIGN, | ||||
| 	XC_INST_ASSIGN, | ||||
|  | ||||
| 	BC_INST_NUM, | ||||
| 	BC_INST_VAR, | ||||
| 	BC_INST_ARRAY_ELEM, | ||||
| 	BC_INST_ARRAY, | ||||
| 	BC_INST_SCALE_FUNC, | ||||
| 	XC_INST_NUM, | ||||
| 	XC_INST_VAR, | ||||
| 	XC_INST_ARRAY_ELEM, | ||||
| 	XC_INST_ARRAY, | ||||
| 	XC_INST_SCALE_FUNC, | ||||
|  | ||||
| 	BC_INST_IBASE,       // order of these constans should match other enums | ||||
| 	BC_INST_OBASE,       // order of these constans should match other enums | ||||
| 	BC_INST_SCALE,       // order of these constans should match other enums | ||||
| 	XC_INST_IBASE,       // order of these constans should match other enums | ||||
| 	XC_INST_OBASE,       // order of these constans should match other enums | ||||
| 	XC_INST_SCALE,       // order of these constans should match other enums | ||||
| 	IF_BC(BC_INST_LAST,) // order of these constans should match other enums | ||||
| 	BC_INST_LENGTH, | ||||
| 	BC_INST_READ, | ||||
| 	BC_INST_SQRT, | ||||
| 	XC_INST_LENGTH, | ||||
| 	XC_INST_READ, | ||||
| 	XC_INST_SQRT, | ||||
|  | ||||
| 	BC_INST_PRINT, | ||||
| 	BC_INST_PRINT_POP, | ||||
| 	BC_INST_STR, | ||||
| 	BC_INST_PRINT_STR, | ||||
| 	XC_INST_PRINT, | ||||
| 	XC_INST_PRINT_POP, | ||||
| 	XC_INST_STR, | ||||
| 	XC_INST_PRINT_STR, | ||||
|  | ||||
| #if ENABLE_BC | ||||
| 	BC_INST_HALT, | ||||
| @@ -309,35 +308,35 @@ typedef enum BcInst { | ||||
| 	BC_INST_CALL, | ||||
| 	BC_INST_RET0, | ||||
| #endif | ||||
| 	BC_INST_RET, | ||||
| 	XC_INST_RET, | ||||
|  | ||||
| 	BC_INST_POP, | ||||
| 	XC_INST_POP, | ||||
| #if ENABLE_DC | ||||
| 	BC_INST_POP_EXEC, | ||||
| 	DC_INST_POP_EXEC, | ||||
|  | ||||
| 	BC_INST_MODEXP, | ||||
| 	BC_INST_DIVMOD, | ||||
| 	DC_INST_MODEXP, | ||||
| 	DC_INST_DIVMOD, | ||||
|  | ||||
| 	BC_INST_EXECUTE, | ||||
| 	BC_INST_EXEC_COND, | ||||
| 	DC_INST_EXECUTE, | ||||
| 	DC_INST_EXEC_COND, | ||||
|  | ||||
| 	BC_INST_ASCIIFY, | ||||
| 	BC_INST_PRINT_STREAM, | ||||
| 	DC_INST_ASCIIFY, | ||||
| 	DC_INST_PRINT_STREAM, | ||||
|  | ||||
| 	BC_INST_PRINT_STACK, | ||||
| 	BC_INST_CLEAR_STACK, | ||||
| 	BC_INST_STACK_LEN, | ||||
| 	BC_INST_DUPLICATE, | ||||
| 	BC_INST_SWAP, | ||||
| 	DC_INST_PRINT_STACK, | ||||
| 	DC_INST_CLEAR_STACK, | ||||
| 	DC_INST_STACK_LEN, | ||||
| 	DC_INST_DUPLICATE, | ||||
| 	DC_INST_SWAP, | ||||
|  | ||||
| 	BC_INST_LOAD, | ||||
| 	BC_INST_PUSH_VAR, | ||||
| 	BC_INST_PUSH_TO_VAR, | ||||
| 	DC_INST_LOAD, | ||||
| 	DC_INST_PUSH_VAR, | ||||
| 	DC_INST_PUSH_TO_VAR, | ||||
|  | ||||
| 	BC_INST_QUIT, | ||||
| 	BC_INST_NQUIT, | ||||
| 	DC_INST_QUIT, | ||||
| 	DC_INST_NQUIT, | ||||
|  | ||||
| 	BC_INST_INVALID = -1, | ||||
| 	DC_INST_INVALID = -1, | ||||
| #endif | ||||
| } BcInst; | ||||
|  | ||||
| @@ -364,10 +363,10 @@ typedef enum BcResultType { | ||||
|  | ||||
| 	BC_RESULT_STR, | ||||
|  | ||||
| 	//code uses "inst - BC_INST_IBASE + BC_RESULT_IBASE" construct, | ||||
| 	BC_RESULT_IBASE,       // relative order should match for: BC_INST_IBASE | ||||
| 	BC_RESULT_OBASE,       // relative order should match for: BC_INST_OBASE | ||||
| 	BC_RESULT_SCALE,       // relative order should match for: BC_INST_SCALE | ||||
| 	//code uses "inst - XC_INST_IBASE + BC_RESULT_IBASE" construct, | ||||
| 	BC_RESULT_IBASE,       // relative order should match for: XC_INST_IBASE | ||||
| 	BC_RESULT_OBASE,       // relative order should match for: XC_INST_OBASE | ||||
| 	BC_RESULT_SCALE,       // relative order should match for: XC_INST_SCALE | ||||
| 	IF_BC(BC_RESULT_LAST,) // relative order should match for: BC_INST_LAST | ||||
| 	BC_RESULT_CONSTANT, | ||||
| 	BC_RESULT_ONE, | ||||
| @@ -452,9 +451,9 @@ typedef enum BcLexType { | ||||
| 	BC_LEX_KEY_ELSE, | ||||
| 	BC_LEX_KEY_FOR, | ||||
| 	BC_LEX_KEY_HALT, | ||||
| 	// code uses "type - BC_LEX_KEY_IBASE + BC_INST_IBASE" construct, | ||||
| 	BC_LEX_KEY_IBASE,       // relative order should match for: BC_INST_IBASE | ||||
| 	BC_LEX_KEY_OBASE,       // relative order should match for: BC_INST_OBASE | ||||
| 	// code uses "type - BC_LEX_KEY_IBASE + XC_INST_IBASE" construct, | ||||
| 	BC_LEX_KEY_IBASE,       // relative order should match for: XC_INST_IBASE | ||||
| 	BC_LEX_KEY_OBASE,       // relative order should match for: XC_INST_OBASE | ||||
| 	BC_LEX_KEY_IF, | ||||
| 	IF_BC(BC_LEX_KEY_LAST,) // relative order should match for: BC_INST_LAST | ||||
| 	BC_LEX_KEY_LENGTH, | ||||
| @@ -485,10 +484,10 @@ typedef enum BcLexType { | ||||
| 	BC_LEX_ASCIIFY, | ||||
| 	BC_LEX_PRINT_STREAM, | ||||
|  | ||||
| 	// code uses "t - BC_LEX_STORE_IBASE + BC_INST_IBASE" construct, | ||||
| 	BC_LEX_STORE_IBASE,  // relative order should match for: BC_INST_IBASE | ||||
| 	BC_LEX_STORE_OBASE,  // relative order should match for: BC_INST_OBASE | ||||
| 	BC_LEX_STORE_SCALE,  // relative order should match for: BC_INST_SCALE | ||||
| 	// code uses "t - BC_LEX_STORE_IBASE + XC_INST_IBASE" construct, | ||||
| 	BC_LEX_STORE_IBASE,  // relative order should match for: XC_INST_IBASE | ||||
| 	BC_LEX_STORE_OBASE,  // relative order should match for: XC_INST_OBASE | ||||
| 	BC_LEX_STORE_SCALE,  // relative order should match for: XC_INST_SCALE | ||||
| 	BC_LEX_LOAD, | ||||
| 	BC_LEX_LOAD_POP, | ||||
| 	BC_LEX_STORE_PUSH, | ||||
| @@ -656,32 +655,32 @@ dc_char_to_LEX[] = { | ||||
| 	/* {|}~ */ | ||||
| 	BC_LEX_LBRACE, BC_LEX_OP_MODEXP, BC_LEX_INVALID, BC_LEX_OP_DIVMOD, | ||||
| }; | ||||
| static const //BcInst - should be this type. Using signed narrow type since BC_INST_INVALID is -1 | ||||
| static const //BcInst - should be this type. Using signed narrow type since DC_INST_INVALID is -1 | ||||
| int8_t | ||||
| dc_LEX_to_INST[] = { // (so many INVALIDs b/c dc parser does not generate these LEXs) // corresponding BC_LEX_xyz: | ||||
| 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID, BC_INST_REL_GE,   // EOF         INVALID      OP_INC       OP_DEC | ||||
| 	BC_INST_INVALID, BC_INST_POWER, BC_INST_MULTIPLY, BC_INST_DIVIDE,    // NEG         OP_POWER     OP_MULTIPLY  OP_DIVIDE | ||||
| 	BC_INST_MODULUS, BC_INST_PLUS, BC_INST_MINUS,                        // OP_MODULUS  OP_PLUS      OP_MINUS | ||||
| 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,  // OP_REL_EQ   OP_REL_LE    OP_REL_GE    OP_REL_NE | ||||
| 	BC_INST_INVALID, BC_INST_INVALID,                                    // OP_REL_LT   OP_REL_GT | ||||
| 	BC_INST_BOOL_NOT, BC_INST_INVALID, BC_INST_INVALID,                  // OP_BOOL_NOT OP_BOOL_OR   OP_BOOL_AND | ||||
| 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,  // OP_ASSIGN_POWER OP_ASSIGN_MULTIPLY OP_ASSIGN_DIVIDE OP_ASSIGN_MODULUS | ||||
| 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,                   // OP_ASSIGN_PLUS OP_ASSIGN_MINUS        OP_ASSIGN | ||||
| 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_REL_GT, BC_INST_INVALID,   // NLINE       WHITESPACE   LPAREN       RPAREN | ||||
| 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID, BC_INST_REL_GE,   // LBRACKET    COMMA        RBRACKET     LBRACE | ||||
| 	BC_INST_INVALID, BC_INST_INVALID,                                    // SCOLON      RBRACE | ||||
| 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,                   // STR         NAME         NUMBER | ||||
| 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,  // KEY_AUTO    KEY_BREAK    KEY_CONTINUE KEY_DEFINE | ||||
| 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID, BC_INST_IBASE,    // KEY_ELSE    KEY_FOR      KEY_HALT     KEY_IBASE | ||||
| 	BC_INST_OBASE, BC_INST_INVALID, IF_BC(BC_INST_INVALID,) BC_INST_LENGTH,//KEY_OBASE  KEY_IF       KEY_LAST(bc) KEY_LENGTH | ||||
| 	BC_INST_INVALID, BC_INST_PRINT, BC_INST_QUIT, BC_INST_INVALID,       // KEY_LIMITS  KEY_PRINT    KEY_QUIT     KEY_READ | ||||
| 	BC_INST_INVALID, BC_INST_SCALE, BC_INST_SQRT, BC_INST_INVALID,       // KEY_RETURN  KEY_SCALE    KEY_SQRT     KEY_WHILE | ||||
| 	BC_INST_REL_EQ, BC_INST_MODEXP, BC_INST_DIVMOD, BC_INST_INVALID,     // EQ_NO_REG   OP_MODEXP    OP_DIVMOD    COLON | ||||
| 	BC_INST_INVALID, BC_INST_EXECUTE, BC_INST_PRINT_STACK, BC_INST_CLEAR_STACK, //ELSE  EXECUTE      PRINT_STACK  CLEAR_STACK | ||||
| 	BC_INST_STACK_LEN, BC_INST_DUPLICATE, BC_INST_SWAP, BC_INST_POP,     // STACK_LEVEL DUPLICATE    SWAP         POP | ||||
| 	BC_INST_ASCIIFY, BC_INST_PRINT_STREAM, BC_INST_INVALID, BC_INST_INVALID, //ASCIIFY  PRINT_STREAM STORE_IBASE  STORE_OBASE | ||||
| 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,  // STORE_SCALE LOAD         LOAD_POP     STORE_PUSH | ||||
| 	BC_INST_PRINT, BC_INST_NQUIT, BC_INST_SCALE_FUNC,                    // PRINT_POP   NQUIT        SCALE_FACTOR | ||||
| 	DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, XC_INST_REL_GE,   // EOF         INVALID      OP_INC       OP_DEC | ||||
| 	DC_INST_INVALID, XC_INST_POWER, XC_INST_MULTIPLY, XC_INST_DIVIDE,    // NEG         OP_POWER     OP_MULTIPLY  OP_DIVIDE | ||||
| 	XC_INST_MODULUS, XC_INST_PLUS, XC_INST_MINUS,                        // OP_MODULUS  OP_PLUS      OP_MINUS | ||||
| 	DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID,  // OP_REL_EQ   OP_REL_LE    OP_REL_GE    OP_REL_NE | ||||
| 	DC_INST_INVALID, DC_INST_INVALID,                                    // OP_REL_LT   OP_REL_GT | ||||
| 	XC_INST_BOOL_NOT, DC_INST_INVALID, DC_INST_INVALID,                  // OP_BOOL_NOT OP_BOOL_OR   OP_BOOL_AND | ||||
| 	DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID,  // OP_ASSIGN_POWER OP_ASSIGN_MULTIPLY OP_ASSIGN_DIVIDE OP_ASSIGN_MODULUS | ||||
| 	DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID,                   // OP_ASSIGN_PLUS OP_ASSIGN_MINUS        OP_ASSIGN | ||||
| 	DC_INST_INVALID, DC_INST_INVALID, XC_INST_REL_GT, DC_INST_INVALID,   // NLINE       WHITESPACE   LPAREN       RPAREN | ||||
| 	DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, XC_INST_REL_GE,   // LBRACKET    COMMA        RBRACKET     LBRACE | ||||
| 	DC_INST_INVALID, DC_INST_INVALID,                                    // SCOLON      RBRACE | ||||
| 	DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID,                   // STR         NAME         NUMBER | ||||
| 	DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID,  // KEY_AUTO    KEY_BREAK    KEY_CONTINUE KEY_DEFINE | ||||
| 	DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, XC_INST_IBASE,    // KEY_ELSE    KEY_FOR      KEY_HALT     KEY_IBASE | ||||
| 	XC_INST_OBASE, DC_INST_INVALID, IF_BC(DC_INST_INVALID,) XC_INST_LENGTH,//KEY_OBASE  KEY_IF       KEY_LAST(bc) KEY_LENGTH | ||||
| 	DC_INST_INVALID, XC_INST_PRINT, DC_INST_QUIT, DC_INST_INVALID,       // KEY_LIMITS  KEY_PRINT    KEY_QUIT     KEY_READ | ||||
| 	DC_INST_INVALID, XC_INST_SCALE, XC_INST_SQRT, DC_INST_INVALID,       // KEY_RETURN  KEY_SCALE    KEY_SQRT     KEY_WHILE | ||||
| 	XC_INST_REL_EQ, DC_INST_MODEXP, DC_INST_DIVMOD, DC_INST_INVALID,     // EQ_NO_REG   OP_MODEXP    OP_DIVMOD    COLON | ||||
| 	DC_INST_INVALID, DC_INST_EXECUTE, DC_INST_PRINT_STACK, DC_INST_CLEAR_STACK, //ELSE  EXECUTE      PRINT_STACK  CLEAR_STACK | ||||
| 	DC_INST_STACK_LEN, DC_INST_DUPLICATE, DC_INST_SWAP, XC_INST_POP,     // STACK_LEVEL DUPLICATE    SWAP         POP | ||||
| 	DC_INST_ASCIIFY, DC_INST_PRINT_STREAM, DC_INST_INVALID, DC_INST_INVALID, //ASCIIFY  PRINT_STREAM STORE_IBASE  STORE_OBASE | ||||
| 	DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID,  // STORE_SCALE LOAD         LOAD_POP     STORE_PUSH | ||||
| 	XC_INST_PRINT, DC_INST_NQUIT, XC_INST_SCALE_FUNC,                    // PRINT_POP   NQUIT        SCALE_FACTOR | ||||
| }; | ||||
| #endif // ENABLE_DC | ||||
|  | ||||
| @@ -3569,7 +3568,7 @@ static BC_STATUS zbc_parse_pushSTR(BcParse *p) | ||||
| { | ||||
| 	char *str = xstrdup(p->l.t.v.v); | ||||
|  | ||||
| 	bc_parse_push(p, BC_INST_STR); | ||||
| 	bc_parse_push(p, XC_INST_STR); | ||||
| 	bc_parse_pushIndex(p, p->func->strs.len); | ||||
| 	bc_vec_push(&p->func->strs, &str); | ||||
|  | ||||
| @@ -3588,7 +3587,7 @@ static void bc_parse_pushNUM(BcParse *p) | ||||
| #else // DC | ||||
| 	size_t idx = bc_vec_push(&G.prog.consts, &num); | ||||
| #endif | ||||
| 	bc_parse_push(p, BC_INST_NUM); | ||||
| 	bc_parse_push(p, XC_INST_NUM); | ||||
| 	bc_parse_pushIndex(p, idx); | ||||
| } | ||||
|  | ||||
| @@ -3701,13 +3700,13 @@ static size_t bc_program_addFunc(char *name) | ||||
|  | ||||
| #define BC_PARSE_TOP_OP(p) (*((BcLexType *) bc_vec_top(&(p)->ops))) | ||||
| #define BC_PARSE_LEAF(p, rparen)                                \ | ||||
| 	(((p) >= BC_INST_NUM && (p) <= BC_INST_SQRT) || (rparen) || \ | ||||
| 	(((p) >= XC_INST_NUM && (p) <= XC_INST_SQRT) || (rparen) || \ | ||||
| 	 (p) == BC_INST_INC_POST || (p) == BC_INST_DEC_POST) | ||||
|  | ||||
| // We can calculate the conversion between tokens and exprs by subtracting the | ||||
| // position of the first operator in the lex enum and adding the position of the | ||||
| // first in the expr enum. Note: This only works for binary operators. | ||||
| #define BC_TOKEN_2_INST(t) ((char) ((t) - BC_LEX_NEG + BC_INST_NEG)) | ||||
| #define BC_TOKEN_2_INST(t) ((char) ((t) - BC_LEX_NEG + XC_INST_NEG)) | ||||
|  | ||||
| static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags); | ||||
|  | ||||
| @@ -3878,9 +3877,9 @@ static BC_STATUS zbc_parse_name(BcParse *p, BcInst *type, uint8_t flags) | ||||
| 				s = bc_error_bad_expression(); | ||||
| 				goto err; | ||||
| 			} | ||||
| 			*type = BC_INST_ARRAY; | ||||
| 			*type = XC_INST_ARRAY; | ||||
| 		} else { | ||||
| 			*type = BC_INST_ARRAY_ELEM; | ||||
| 			*type = XC_INST_ARRAY_ELEM; | ||||
| 			flags &= ~(BC_PARSE_PRINT | BC_PARSE_REL); | ||||
| 			s = zbc_parse_expr(p, flags); | ||||
| 			if (s) goto err; | ||||
| @@ -3898,8 +3897,8 @@ static BC_STATUS zbc_parse_name(BcParse *p, BcInst *type, uint8_t flags) | ||||
| 		*type = BC_INST_CALL; | ||||
| 		s = zbc_parse_call(p, name, flags); | ||||
| 	} else { | ||||
| 		*type = BC_INST_VAR; | ||||
| 		bc_parse_push(p, BC_INST_VAR); | ||||
| 		*type = XC_INST_VAR; | ||||
| 		bc_parse_push(p, XC_INST_VAR); | ||||
| 		bc_parse_pushName(p, name); | ||||
| 		free(name); | ||||
| 	} | ||||
| @@ -3923,7 +3922,7 @@ static BC_STATUS zbc_parse_read(BcParse *p) | ||||
| 	if (s) RETURN_STATUS(s); | ||||
| 	if (p->l.t.t != BC_LEX_RPAREN) RETURN_STATUS(bc_error_bad_token()); | ||||
|  | ||||
| 	bc_parse_push(p, BC_INST_READ); | ||||
| 	bc_parse_push(p, XC_INST_READ); | ||||
|  | ||||
| 	RETURN_STATUS(zbc_lex_next(&p->l)); | ||||
| } | ||||
| @@ -3948,7 +3947,7 @@ static BC_STATUS zbc_parse_builtin(BcParse *p, BcLexType type, uint8_t flags, | ||||
|  | ||||
| 	if (p->l.t.t != BC_LEX_RPAREN) RETURN_STATUS(bc_error_bad_token()); | ||||
|  | ||||
| 	*prev = (type == BC_LEX_KEY_LENGTH) ? BC_INST_LENGTH : BC_INST_SQRT; | ||||
| 	*prev = (type == BC_LEX_KEY_LENGTH) ? XC_INST_LENGTH : XC_INST_SQRT; | ||||
| 	bc_parse_push(p, *prev); | ||||
|  | ||||
| 	RETURN_STATUS(zbc_lex_next(&p->l)); | ||||
| @@ -3963,12 +3962,12 @@ static BC_STATUS zbc_parse_scale(BcParse *p, BcInst *type, uint8_t flags) | ||||
| 	if (s) RETURN_STATUS(s); | ||||
|  | ||||
| 	if (p->l.t.t != BC_LEX_LPAREN) { | ||||
| 		*type = BC_INST_SCALE; | ||||
| 		bc_parse_push(p, BC_INST_SCALE); | ||||
| 		*type = XC_INST_SCALE; | ||||
| 		bc_parse_push(p, XC_INST_SCALE); | ||||
| 		RETURN_STATUS(BC_STATUS_SUCCESS); | ||||
| 	} | ||||
|  | ||||
| 	*type = BC_INST_SCALE_FUNC; | ||||
| 	*type = XC_INST_SCALE_FUNC; | ||||
| 	flags &= ~(BC_PARSE_PRINT | BC_PARSE_REL); | ||||
|  | ||||
| 	s = zbc_lex_next(&p->l); | ||||
| @@ -3978,7 +3977,7 @@ static BC_STATUS zbc_parse_scale(BcParse *p, BcInst *type, uint8_t flags) | ||||
| 	if (s) RETURN_STATUS(s); | ||||
| 	if (p->l.t.t != BC_LEX_RPAREN) | ||||
| 		RETURN_STATUS(bc_error_bad_token()); | ||||
| 	bc_parse_push(p, BC_INST_SCALE_FUNC); | ||||
| 	bc_parse_push(p, XC_INST_SCALE_FUNC); | ||||
|  | ||||
| 	RETURN_STATUS(zbc_lex_next(&p->l)); | ||||
| } | ||||
| @@ -3992,9 +3991,9 @@ static BC_STATUS zbc_parse_incdec(BcParse *p, BcInst *prev, bool *paren_expr, | ||||
| 	char inst; | ||||
| 	BcInst etype = *prev; | ||||
|  | ||||
| 	if (etype == BC_INST_VAR || etype == BC_INST_ARRAY_ELEM | ||||
| 	 || etype == BC_INST_SCALE || etype == BC_INST_LAST | ||||
| 	 || etype == BC_INST_IBASE || etype == BC_INST_OBASE | ||||
| 	if (etype == XC_INST_VAR || etype == XC_INST_ARRAY_ELEM | ||||
| 	 || etype == XC_INST_SCALE || etype == BC_INST_LAST | ||||
| 	 || etype == XC_INST_IBASE || etype == XC_INST_OBASE | ||||
| 	) { | ||||
| 		*prev = inst = BC_INST_INC_POST + (p->l.t.t != BC_LEX_OP_INC); | ||||
| 		bc_parse_push(p, inst); | ||||
| @@ -4018,7 +4017,7 @@ static BC_STATUS zbc_parse_incdec(BcParse *p, BcInst *prev, bool *paren_expr, | ||||
| 			case BC_LEX_KEY_IBASE: | ||||
| 			case BC_LEX_KEY_LAST: | ||||
| 			case BC_LEX_KEY_OBASE: | ||||
| 				bc_parse_push(p, type - BC_LEX_KEY_IBASE + BC_INST_IBASE); | ||||
| 				bc_parse_push(p, type - BC_LEX_KEY_IBASE + XC_INST_IBASE); | ||||
| 				s = zbc_lex_next(&p->l); | ||||
| 				break; | ||||
| 			case BC_LEX_KEY_SCALE: | ||||
| @@ -4027,7 +4026,7 @@ static BC_STATUS zbc_parse_incdec(BcParse *p, BcInst *prev, bool *paren_expr, | ||||
| 				if (p->l.t.t == BC_LEX_LPAREN) | ||||
| 					s = bc_error_bad_token(); | ||||
| 				else | ||||
| 					bc_parse_push(p, BC_INST_SCALE); | ||||
| 					bc_parse_push(p, XC_INST_SCALE); | ||||
| 				break; | ||||
| 			default: | ||||
| 				s = bc_error_bad_token(); | ||||
| @@ -4052,7 +4051,7 @@ static BC_STATUS zbc_parse_minus(BcParse *p, BcInst *prev, size_t ops_bgn, | ||||
| 	if (s) RETURN_STATUS(s); | ||||
|  | ||||
| 	type = rparen || etype == BC_INST_INC_POST || etype == BC_INST_DEC_POST || | ||||
| 	               (etype >= BC_INST_NUM && etype <= BC_INST_SQRT) ? | ||||
| 	               (etype >= XC_INST_NUM && etype <= XC_INST_SQRT) ? | ||||
| 	           BC_LEX_OP_MINUS : | ||||
| 	           BC_LEX_NEG; | ||||
| 	*prev = BC_TOKEN_2_INST(type); | ||||
| @@ -4083,7 +4082,7 @@ static BC_STATUS zbc_parse_print(BcParse *p) | ||||
| 			s = zbc_parse_expr(p, 0); | ||||
| 		} | ||||
| 		if (s) RETURN_STATUS(s); | ||||
| 		bc_parse_push(p, BC_INST_PRINT_POP); | ||||
| 		bc_parse_push(p, XC_INST_PRINT_POP); | ||||
| 		if (p->l.t.t != BC_LEX_COMMA) | ||||
| 			break; | ||||
| 	} | ||||
| @@ -4118,7 +4117,7 @@ static BC_STATUS zbc_parse_return(BcParse *p) | ||||
| 			IF_ERROR_RETURN_POSSIBLE(if (s) RETURN_STATUS(s)); | ||||
| 		} | ||||
|  | ||||
| 		bc_parse_push(p, BC_INST_RET); | ||||
| 		bc_parse_push(p, XC_INST_RET); | ||||
| 	} | ||||
|  | ||||
| 	dbg_lex_done("%s:%d done", __func__, __LINE__); | ||||
| @@ -4238,7 +4237,7 @@ static BC_STATUS zbc_parse_for(BcParse *p) | ||||
|  | ||||
| 	if (p->l.t.t != BC_LEX_SCOLON) { | ||||
| 		s = zbc_parse_expr(p, 0); | ||||
| 		bc_parse_push(p, BC_INST_POP); | ||||
| 		bc_parse_push(p, XC_INST_POP); | ||||
| 		if (s) RETURN_STATUS(s); | ||||
| 	} else { | ||||
| 		s = bc_POSIX_does_not_allow_empty_X_expression_in_for("init"); | ||||
| @@ -4281,7 +4280,7 @@ static BC_STATUS zbc_parse_for(BcParse *p) | ||||
| 		s = zbc_parse_expr(p, 0); | ||||
| 		if (s) RETURN_STATUS(s); | ||||
| 		if (p->l.t.t != BC_LEX_RPAREN) RETURN_STATUS(bc_error_bad_token()); | ||||
| 		bc_parse_push(p, BC_INST_POP); | ||||
| 		bc_parse_push(p, XC_INST_POP); | ||||
| 	} else { | ||||
| 		s = bc_POSIX_does_not_allow_empty_X_expression_in_for("update"); | ||||
| 		IF_ERROR_RETURN_POSSIBLE(if (s) RETURN_STATUS(s);) | ||||
| @@ -4541,7 +4540,7 @@ static BC_STATUS zbc_parse_stmt_possibly_auto(BcParse *p, bool auto_allowed) | ||||
| 			break; | ||||
| 		case BC_LEX_STR: | ||||
| 			s = zbc_parse_pushSTR(p); | ||||
| 			bc_parse_push(p, BC_INST_PRINT_STR); | ||||
| 			bc_parse_push(p, XC_INST_PRINT_STR); | ||||
| 			break; | ||||
| 		case BC_LEX_KEY_BREAK: | ||||
| 		case BC_LEX_KEY_CONTINUE: | ||||
| @@ -4622,7 +4621,7 @@ static BC_STATUS zbc_parse_stmt_or_funcdef(BcParse *p) | ||||
| static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags) | ||||
| { | ||||
| 	BcStatus s = BC_STATUS_SUCCESS; | ||||
| 	BcInst prev = BC_INST_PRINT; | ||||
| 	BcInst prev = XC_INST_PRINT; | ||||
| 	BcLexType top, t = p->l.t.t; | ||||
| 	size_t nexprs = 0, ops_bgn = p->ops.len; | ||||
| 	unsigned nparens, nrelops; | ||||
| @@ -4645,7 +4644,7 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags) | ||||
| 			case BC_LEX_OP_MINUS: | ||||
| 				s = zbc_parse_minus(p, &prev, ops_bgn, rprn, &nexprs); | ||||
| 				rprn = get_token = false; | ||||
| 				bin_last = prev == BC_INST_MINUS; | ||||
| 				bin_last = prev == XC_INST_MINUS; | ||||
| 				break; | ||||
| 			case BC_LEX_OP_ASSIGN_POWER: | ||||
| 			case BC_LEX_OP_ASSIGN_MULTIPLY: | ||||
| @@ -4654,9 +4653,9 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags) | ||||
| 			case BC_LEX_OP_ASSIGN_PLUS: | ||||
| 			case BC_LEX_OP_ASSIGN_MINUS: | ||||
| 			case BC_LEX_OP_ASSIGN: | ||||
| 				if (prev != BC_INST_VAR && prev != BC_INST_ARRAY_ELEM | ||||
| 				 && prev != BC_INST_SCALE && prev != BC_INST_IBASE | ||||
| 				 && prev != BC_INST_OBASE && prev != BC_INST_LAST | ||||
| 				if (prev != XC_INST_VAR && prev != XC_INST_ARRAY_ELEM | ||||
| 				 && prev != XC_INST_SCALE && prev != XC_INST_IBASE | ||||
| 				 && prev != XC_INST_OBASE && prev != BC_INST_LAST | ||||
| 				) { | ||||
| 					s = bc_error("bad assignment:" | ||||
| 						" left side must be variable" | ||||
| @@ -4680,7 +4679,7 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags) | ||||
| 			case BC_LEX_OP_BOOL_OR: | ||||
| 			case BC_LEX_OP_BOOL_AND: | ||||
| 				if (((t == BC_LEX_OP_BOOL_NOT) != bin_last) | ||||
| 				 || (t != BC_LEX_OP_BOOL_NOT && prev == BC_INST_BOOL_NOT) | ||||
| 				 || (t != BC_LEX_OP_BOOL_NOT && prev == XC_INST_BOOL_NOT) | ||||
| 				) { | ||||
| 					return bc_error_bad_expression(); | ||||
| 				} | ||||
| @@ -4700,7 +4699,7 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags) | ||||
| 				bc_vec_push(&p->ops, &t); | ||||
| 				break; | ||||
| 			case BC_LEX_RPAREN: | ||||
| 				if (bin_last || prev == BC_INST_BOOL_NOT) | ||||
| 				if (bin_last || prev == XC_INST_BOOL_NOT) | ||||
| 					return bc_error_bad_expression(); | ||||
| 				if (nparens == 0) { | ||||
| 					s = BC_STATUS_SUCCESS; | ||||
| @@ -4730,7 +4729,7 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags) | ||||
| 					return bc_error_bad_expression(); | ||||
| 				bc_parse_pushNUM(p); | ||||
| 				nexprs++; | ||||
| 				prev = BC_INST_NUM; | ||||
| 				prev = XC_INST_NUM; | ||||
| 				paren_expr = get_token = true; | ||||
| 				rprn = bin_last = false; | ||||
| 				break; | ||||
| @@ -4739,7 +4738,7 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags) | ||||
| 			case BC_LEX_KEY_OBASE: | ||||
| 				if (BC_PARSE_LEAF(prev, rprn)) | ||||
| 					return bc_error_bad_expression(); | ||||
| 				prev = (char) (t - BC_LEX_KEY_IBASE + BC_INST_IBASE); | ||||
| 				prev = (char) (t - BC_LEX_KEY_IBASE + XC_INST_IBASE); | ||||
| 				bc_parse_push(p, (char) prev); | ||||
| 				paren_expr = get_token = true; | ||||
| 				rprn = bin_last = false; | ||||
| @@ -4762,7 +4761,7 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags) | ||||
| 				paren_expr = true; | ||||
| 				rprn = get_token = bin_last = false; | ||||
| 				++nexprs; | ||||
| 				prev = BC_INST_READ; | ||||
| 				prev = XC_INST_READ; | ||||
| 				break; | ||||
| 			case BC_LEX_KEY_SCALE: | ||||
| 				if (BC_PARSE_LEAF(prev, rprn)) | ||||
| @@ -4771,7 +4770,7 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags) | ||||
| 				paren_expr = true; | ||||
| 				rprn = get_token = bin_last = false; | ||||
| 				++nexprs; | ||||
| 				prev = BC_INST_SCALE; | ||||
| 				prev = XC_INST_SCALE; | ||||
| 				break; | ||||
| 			default: | ||||
| 				s = bc_error_bad_token(); | ||||
| @@ -4797,7 +4796,7 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags) | ||||
| 		bc_vec_pop(&p->ops); | ||||
| 	} | ||||
|  | ||||
| 	if (prev == BC_INST_BOOL_NOT || nexprs != 1) | ||||
| 	if (prev == XC_INST_BOOL_NOT || nexprs != 1) | ||||
| 		return bc_error_bad_expression(); | ||||
|  | ||||
| 	if (!(flags & BC_PARSE_REL) && nrelops) { | ||||
| @@ -4809,8 +4808,8 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags) | ||||
| 	} | ||||
|  | ||||
| 	if (flags & BC_PARSE_PRINT) { | ||||
| 		if (paren_first || !assign) bc_parse_push(p, BC_INST_PRINT); | ||||
| 		bc_parse_push(p, BC_INST_POP); | ||||
| 		if (paren_first || !assign) bc_parse_push(p, XC_INST_PRINT); | ||||
| 		bc_parse_push(p, XC_INST_POP); | ||||
| 	} | ||||
|  | ||||
| 	dbg_lex_done("%s:%d done", __func__, __LINE__); | ||||
| @@ -4843,7 +4842,7 @@ static void dc_parse_string(BcParse *p) | ||||
| 	dbg_lex_enter("%s:%d entered", __func__, __LINE__); | ||||
|  | ||||
| 	str = xstrdup(p->l.t.v.v); | ||||
| 	bc_parse_push(p, BC_INST_STR); | ||||
| 	bc_parse_push(p, XC_INST_STR); | ||||
| 	bc_parse_pushIndex(p, len); | ||||
| 	bc_vec_push(&G.prog.strs, &str); | ||||
|  | ||||
| @@ -4865,9 +4864,9 @@ static BC_STATUS zdc_parse_mem(BcParse *p, uint8_t inst, bool name, bool store) | ||||
| 	} | ||||
|  | ||||
| 	if (store) { | ||||
| 		bc_parse_push(p, BC_INST_SWAP); | ||||
| 		bc_parse_push(p, BC_INST_ASSIGN); | ||||
| 		bc_parse_push(p, BC_INST_POP); | ||||
| 		bc_parse_push(p, DC_INST_SWAP); | ||||
| 		bc_parse_push(p, XC_INST_ASSIGN); | ||||
| 		bc_parse_push(p, XC_INST_POP); | ||||
| 	} | ||||
|  | ||||
| 	RETURN_STATUS(BC_STATUS_SUCCESS); | ||||
| @@ -4879,7 +4878,7 @@ static BC_STATUS zdc_parse_cond(BcParse *p, uint8_t inst) | ||||
| 	BcStatus s; | ||||
|  | ||||
| 	bc_parse_push(p, inst); | ||||
| 	bc_parse_push(p, BC_INST_EXEC_COND); | ||||
| 	bc_parse_push(p, DC_INST_EXEC_COND); | ||||
|  | ||||
| 	s = zdc_parse_register(p); | ||||
| 	if (s) RETURN_STATUS(s); | ||||
| @@ -4919,13 +4918,13 @@ static BC_STATUS zdc_parse_token(BcParse *p, BcLexType t) | ||||
| 		case BC_LEX_OP_REL_LT: | ||||
| 		case BC_LEX_OP_REL_GT: | ||||
| 			dbg_lex("%s:%d LEX_OP_REL_xyz", __func__, __LINE__); | ||||
| 			s = zdc_parse_cond(p, t - BC_LEX_OP_REL_EQ + BC_INST_REL_EQ); | ||||
| 			s = zdc_parse_cond(p, t - BC_LEX_OP_REL_EQ + XC_INST_REL_EQ); | ||||
| 			get_token = false; | ||||
| 			break; | ||||
| 		case BC_LEX_SCOLON: | ||||
| 		case BC_LEX_COLON: | ||||
| 			dbg_lex("%s:%d LEX_[S]COLON", __func__, __LINE__); | ||||
| 			s = zdc_parse_mem(p, BC_INST_ARRAY_ELEM, true, t == BC_LEX_COLON); | ||||
| 			s = zdc_parse_mem(p, XC_INST_ARRAY_ELEM, true, t == BC_LEX_COLON); | ||||
| 			break; | ||||
| 		case BC_LEX_STR: | ||||
| 			dbg_lex("%s:%d LEX_STR", __func__, __LINE__); | ||||
| @@ -4938,7 +4937,7 @@ static BC_STATUS zdc_parse_token(BcParse *p, BcLexType t) | ||||
| 			if (p->l.t.t != BC_LEX_NUMBER) | ||||
| 				RETURN_STATUS(bc_error_bad_token()); | ||||
| 			bc_parse_pushNUM(p); | ||||
| 			bc_parse_push(p, BC_INST_NEG); | ||||
| 			bc_parse_push(p, XC_INST_NEG); | ||||
| 			break; | ||||
| 		case BC_LEX_NUMBER: | ||||
| 			dbg_lex("%s:%d LEX_NUMBER", __func__, __LINE__); | ||||
| @@ -4946,26 +4945,26 @@ static BC_STATUS zdc_parse_token(BcParse *p, BcLexType t) | ||||
| 			break; | ||||
| 		case BC_LEX_KEY_READ: | ||||
| 			dbg_lex("%s:%d LEX_KEY_READ", __func__, __LINE__); | ||||
| 			bc_parse_push(p, BC_INST_READ); | ||||
| 			bc_parse_push(p, XC_INST_READ); | ||||
| 			break; | ||||
| 		case BC_LEX_OP_ASSIGN: | ||||
| 		case BC_LEX_STORE_PUSH: | ||||
| 			dbg_lex("%s:%d LEX_OP_ASSIGN/STORE_PUSH", __func__, __LINE__); | ||||
| 			assign = t == BC_LEX_OP_ASSIGN; | ||||
| 			inst = assign ? BC_INST_VAR : BC_INST_PUSH_TO_VAR; | ||||
| 			inst = assign ? XC_INST_VAR : DC_INST_PUSH_TO_VAR; | ||||
| 			s = zdc_parse_mem(p, inst, true, assign); | ||||
| 			break; | ||||
| 		case BC_LEX_LOAD: | ||||
| 		case BC_LEX_LOAD_POP: | ||||
| 			dbg_lex("%s:%d LEX_OP_LOAD[_POP]", __func__, __LINE__); | ||||
| 			inst = t == BC_LEX_LOAD_POP ? BC_INST_PUSH_VAR : BC_INST_LOAD; | ||||
| 			inst = t == BC_LEX_LOAD_POP ? DC_INST_PUSH_VAR : DC_INST_LOAD; | ||||
| 			s = zdc_parse_mem(p, inst, true, false); | ||||
| 			break; | ||||
| 		case BC_LEX_STORE_IBASE: | ||||
| 		case BC_LEX_STORE_SCALE: | ||||
| 		case BC_LEX_STORE_OBASE: | ||||
| 			dbg_lex("%s:%d LEX_OP_STORE_I/OBASE/SCALE", __func__, __LINE__); | ||||
| 			inst = t - BC_LEX_STORE_IBASE + BC_INST_IBASE; | ||||
| 			inst = t - BC_LEX_STORE_IBASE + XC_INST_IBASE; | ||||
| 			s = zdc_parse_mem(p, inst, false, true); | ||||
| 			break; | ||||
| 		default: | ||||
| @@ -4986,7 +4985,7 @@ static BC_STATUS zdc_parse_expr(BcParse *p) | ||||
| 	BcStatus s; | ||||
|  | ||||
| 	inst = dc_LEX_to_INST[p->l.t.t]; | ||||
| 	if (inst != BC_INST_INVALID) { | ||||
| 	if (inst != DC_INST_INVALID) { | ||||
| 		bc_parse_push(p, inst); | ||||
| 		s = zbc_lex_next(&p->l); | ||||
| 	} else { | ||||
| @@ -5183,7 +5182,7 @@ static BC_STATUS zbc_program_op(char inst) | ||||
| 	bc_num_init_DEF_SIZE(&res.d.n); | ||||
|  | ||||
| 	s = BC_STATUS_SUCCESS; | ||||
| 	IF_ERROR_RETURN_POSSIBLE(s =) zbc_program_ops[inst - BC_INST_POWER](n1, n2, &res.d.n, G.prog.scale); | ||||
| 	IF_ERROR_RETURN_POSSIBLE(s =) zbc_program_ops[inst - XC_INST_POWER](n1, n2, &res.d.n, G.prog.scale); | ||||
| 	if (s) goto err; | ||||
| 	bc_program_binOpRetire(&res); | ||||
|  | ||||
| @@ -5233,7 +5232,7 @@ static BC_STATUS zbc_program_read(void) | ||||
| 	ip.inst_idx = 0; | ||||
| 	IF_BC(ip.results_len_before_call = G.prog.results.len;) | ||||
|  | ||||
| 	bc_parse_push(&parse, BC_INST_RET); | ||||
| 	bc_parse_push(&parse, XC_INST_RET); | ||||
| 	bc_vec_push(&G.prog.exestack, &ip); | ||||
|  exec_err: | ||||
| 	bc_parse_free(&parse); | ||||
| @@ -5533,7 +5532,7 @@ static BC_STATUS zbc_program_print(char inst, size_t idx) | ||||
| 	BcStatus s; | ||||
| 	BcResult *r; | ||||
| 	BcNum *num; | ||||
| 	bool pop = inst != BC_INST_PRINT; | ||||
| 	bool pop = inst != XC_INST_PRINT; | ||||
|  | ||||
| 	if (!STACK_HAS_MORE_THAN(&G.prog.results, idx)) | ||||
| 		RETURN_STATUS(bc_error_stack_has_too_few_elements()); | ||||
| @@ -5553,7 +5552,7 @@ static BC_STATUS zbc_program_print(char inst, size_t idx) | ||||
| 		idx = (r->t == BC_RESULT_STR) ? r->d.id.idx : num->rdx; | ||||
| 		str = *bc_program_str(idx); | ||||
|  | ||||
| 		if (inst == BC_INST_PRINT_STR) { | ||||
| 		if (inst == XC_INST_PRINT_STR) { | ||||
| 			for (;;) { | ||||
| 				char c = *str++; | ||||
| 				if (c == '\0') break; | ||||
| @@ -5563,7 +5562,7 @@ static BC_STATUS zbc_program_print(char inst, size_t idx) | ||||
| 			} | ||||
| 		} else { | ||||
| 			bc_program_printString(str); | ||||
| 			if (inst == BC_INST_PRINT) bb_putchar('\n'); | ||||
| 			if (inst == XC_INST_PRINT) bb_putchar('\n'); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -5604,29 +5603,29 @@ static BC_STATUS zbc_program_logical(char inst) | ||||
|  | ||||
| 	bc_num_init_DEF_SIZE(&res.d.n); | ||||
|  | ||||
| 	if (inst == BC_INST_BOOL_AND) | ||||
| 	if (inst == XC_INST_BOOL_AND) | ||||
| 		cond = bc_num_cmp(n1, &G.prog.zero) && bc_num_cmp(n2, &G.prog.zero); | ||||
| 	else if (inst == BC_INST_BOOL_OR) | ||||
| 	else if (inst == XC_INST_BOOL_OR) | ||||
| 		cond = bc_num_cmp(n1, &G.prog.zero) || bc_num_cmp(n2, &G.prog.zero); | ||||
| 	else { | ||||
| 		cond = bc_num_cmp(n1, n2); | ||||
| 		switch (inst) { | ||||
| 		case BC_INST_REL_EQ: | ||||
| 		case XC_INST_REL_EQ: | ||||
| 			cond = (cond == 0); | ||||
| 			break; | ||||
| 		case BC_INST_REL_LE: | ||||
| 		case XC_INST_REL_LE: | ||||
| 			cond = (cond <= 0); | ||||
| 			break; | ||||
| 		case BC_INST_REL_GE: | ||||
| 		case XC_INST_REL_GE: | ||||
| 			cond = (cond >= 0); | ||||
| 			break; | ||||
| 		case BC_INST_REL_LT: | ||||
| 		case XC_INST_REL_LT: | ||||
| 			cond = (cond < 0); | ||||
| 			break; | ||||
| 		case BC_INST_REL_GT: | ||||
| 		case XC_INST_REL_GT: | ||||
| 			cond = (cond > 0); | ||||
| 			break; | ||||
| 		default: // = case BC_INST_REL_NE: | ||||
| 		default: // = case XC_INST_REL_NE: | ||||
| 			//cond = (cond != 0); - not needed | ||||
| 			break; | ||||
| 		} | ||||
| @@ -5714,7 +5713,7 @@ static BC_STATUS zbc_program_assign(char inst) | ||||
| 	BcStatus s; | ||||
| 	BcResult *left, *right, res; | ||||
| 	BcNum *l = NULL, *r = NULL; | ||||
| 	bool assign = inst == BC_INST_ASSIGN, ib, sc; | ||||
| 	bool assign = inst == XC_INST_ASSIGN, ib, sc; | ||||
|  | ||||
| 	s = zbc_program_binOpPrep(&left, &l, &right, &r, assign); | ||||
| 	if (s) RETURN_STATUS(s); | ||||
| @@ -5844,7 +5843,7 @@ static BC_STATUS zbc_program_pushArray(char *code, size_t *bgn, char inst) | ||||
|  | ||||
| 	r.d.id.name = bc_program_name(code, bgn); | ||||
|  | ||||
| 	if (inst == BC_INST_ARRAY) { | ||||
| 	if (inst == XC_INST_ARRAY) { | ||||
| 		r.t = BC_RESULT_ARRAY; | ||||
| 		bc_vec_push(&G.prog.results, &r); | ||||
| 	} else { | ||||
| @@ -5968,13 +5967,13 @@ static BC_STATUS zbc_program_return(char inst) | ||||
| 	size_t i; | ||||
| 	BcInstPtr *ip = bc_vec_top(&G.prog.exestack); | ||||
|  | ||||
| 	if (!STACK_HAS_EQUAL_OR_MORE_THAN(&G.prog.results, ip->results_len_before_call + (inst == BC_INST_RET))) | ||||
| 	if (!STACK_HAS_EQUAL_OR_MORE_THAN(&G.prog.results, ip->results_len_before_call + (inst == XC_INST_RET))) | ||||
| 		RETURN_STATUS(bc_error_stack_has_too_few_elements()); | ||||
|  | ||||
| 	f = bc_program_func(ip->func); | ||||
| 	res.t = BC_RESULT_TEMP; | ||||
|  | ||||
| 	if (inst == BC_INST_RET) { | ||||
| 	if (inst == XC_INST_RET) { | ||||
| 		BcStatus s; | ||||
| 		BcNum *num; | ||||
| 		BcResult *operand = bc_vec_top(&G.prog.results); | ||||
| @@ -6029,7 +6028,7 @@ static BC_STATUS zbc_program_builtin(char inst) | ||||
| 	BcResult *opnd; | ||||
| 	BcNum *num = NULL; | ||||
| 	BcResult res; | ||||
| 	bool len = inst == BC_INST_LENGTH; | ||||
| 	bool len = inst == XC_INST_LENGTH; | ||||
|  | ||||
| 	if (!STACK_HAS_MORE_THAN(&G.prog.results, 0)) | ||||
| 		RETURN_STATUS(bc_error_stack_has_too_few_elements()); | ||||
| @@ -6045,7 +6044,7 @@ static BC_STATUS zbc_program_builtin(char inst) | ||||
|  | ||||
| 	bc_num_init_DEF_SIZE(&res.d.n); | ||||
|  | ||||
| 	if (inst == BC_INST_SQRT) | ||||
| 	if (inst == XC_INST_SQRT) | ||||
| 		s = zbc_num_sqrt(num, &res.d.n, G.prog.scale); | ||||
| #if ENABLE_BC | ||||
| 	else if (len != 0 && opnd->t == BC_RESULT_ARRAY) { | ||||
| @@ -6361,7 +6360,7 @@ static BC_STATUS zdc_program_execStr(char *code, size_t *bgn, bool cond) | ||||
| 			bc_vec_pop_all(&f->code); | ||||
| 			goto exit; | ||||
| 		} | ||||
| 		bc_parse_push(&prs, BC_INST_POP_EXEC); | ||||
| 		bc_parse_push(&prs, DC_INST_POP_EXEC); | ||||
| 		bc_parse_free(&prs); | ||||
| 	} | ||||
|  | ||||
| @@ -6384,10 +6383,10 @@ static void bc_program_pushGlobal(char inst) | ||||
| 	BcResult res; | ||||
| 	unsigned long val; | ||||
|  | ||||
| 	res.t = inst - BC_INST_IBASE + BC_RESULT_IBASE; | ||||
| 	if (inst == BC_INST_IBASE) | ||||
| 	res.t = inst - XC_INST_IBASE + BC_RESULT_IBASE; | ||||
| 	if (inst == XC_INST_IBASE) | ||||
| 		val = (unsigned long) G.prog.ib_t; | ||||
| 	else if (inst == BC_INST_SCALE) | ||||
| 	else if (inst == XC_INST_SCALE) | ||||
| 		val = (unsigned long) G.prog.scale; | ||||
| 	else | ||||
| 		val = (unsigned long) G.prog.ob_t; | ||||
| @@ -6449,34 +6448,34 @@ static BC_STATUS zbc_program_exec(void) | ||||
| 				dbg_exec("BC_INST_HALT:"); | ||||
| 				QUIT_OR_RETURN_TO_MAIN; | ||||
| 				break; | ||||
| 			case BC_INST_RET: | ||||
| 			case XC_INST_RET: | ||||
| 			case BC_INST_RET0: | ||||
| 				dbg_exec("BC_INST_RET[0]:"); | ||||
| 				s = zbc_program_return(inst); | ||||
| 				goto read_updated_ip; | ||||
| 			case BC_INST_BOOL_OR: | ||||
| 			case BC_INST_BOOL_AND: | ||||
| 			case XC_INST_BOOL_OR: | ||||
| 			case XC_INST_BOOL_AND: | ||||
| #endif // ENABLE_BC | ||||
| 			case BC_INST_REL_EQ: | ||||
| 			case BC_INST_REL_LE: | ||||
| 			case BC_INST_REL_GE: | ||||
| 			case BC_INST_REL_NE: | ||||
| 			case BC_INST_REL_LT: | ||||
| 			case BC_INST_REL_GT: | ||||
| 			case XC_INST_REL_EQ: | ||||
| 			case XC_INST_REL_LE: | ||||
| 			case XC_INST_REL_GE: | ||||
| 			case XC_INST_REL_NE: | ||||
| 			case XC_INST_REL_LT: | ||||
| 			case XC_INST_REL_GT: | ||||
| 				dbg_exec("BC_INST_BOOL:"); | ||||
| 				s = zbc_program_logical(inst); | ||||
| 				break; | ||||
| 			case BC_INST_READ: | ||||
| 				dbg_exec("BC_INST_READ:"); | ||||
| 			case XC_INST_READ: | ||||
| 				dbg_exec("XC_INST_READ:"); | ||||
| 				s = zbc_program_read(); | ||||
| 				goto read_updated_ip; | ||||
| 			case BC_INST_VAR: | ||||
| 				dbg_exec("BC_INST_VAR:"); | ||||
| 			case XC_INST_VAR: | ||||
| 				dbg_exec("XC_INST_VAR:"); | ||||
| 				s = zbc_program_pushVar(code, &ip->inst_idx, false, false); | ||||
| 				break; | ||||
| 			case BC_INST_ARRAY_ELEM: | ||||
| 			case BC_INST_ARRAY: | ||||
| 				dbg_exec("BC_INST_ARRAY[_ELEM]:"); | ||||
| 			case XC_INST_ARRAY_ELEM: | ||||
| 			case XC_INST_ARRAY: | ||||
| 				dbg_exec("XC_INST_ARRAY[_ELEM]:"); | ||||
| 				s = zbc_program_pushArray(code, &ip->inst_idx, inst); | ||||
| 				break; | ||||
| #if ENABLE_BC | ||||
| @@ -6486,54 +6485,54 @@ static BC_STATUS zbc_program_exec(void) | ||||
| 				bc_vec_push(&G.prog.results, &r); | ||||
| 				break; | ||||
| #endif | ||||
| 			case BC_INST_IBASE: | ||||
| 			case BC_INST_OBASE: | ||||
| 			case BC_INST_SCALE: | ||||
| 				dbg_exec("BC_INST_internalvar(%d):", inst - BC_INST_IBASE); | ||||
| 			case XC_INST_IBASE: | ||||
| 			case XC_INST_OBASE: | ||||
| 			case XC_INST_SCALE: | ||||
| 				dbg_exec("XC_INST_internalvar(%d):", inst - XC_INST_IBASE); | ||||
| 				bc_program_pushGlobal(inst); | ||||
| 				break; | ||||
| 			case BC_INST_SCALE_FUNC: | ||||
| 			case BC_INST_LENGTH: | ||||
| 			case BC_INST_SQRT: | ||||
| 			case XC_INST_SCALE_FUNC: | ||||
| 			case XC_INST_LENGTH: | ||||
| 			case XC_INST_SQRT: | ||||
| 				dbg_exec("BC_INST_builtin:"); | ||||
| 				s = zbc_program_builtin(inst); | ||||
| 				break; | ||||
| 			case BC_INST_NUM: | ||||
| 				dbg_exec("BC_INST_NUM:"); | ||||
| 			case XC_INST_NUM: | ||||
| 				dbg_exec("XC_INST_NUM:"); | ||||
| 				r.t = BC_RESULT_CONSTANT; | ||||
| 				r.d.id.idx = bc_program_index(code, &ip->inst_idx); | ||||
| 				bc_vec_push(&G.prog.results, &r); | ||||
| 				break; | ||||
| 			case BC_INST_POP: | ||||
| 				dbg_exec("BC_INST_POP:"); | ||||
| 			case XC_INST_POP: | ||||
| 				dbg_exec("XC_INST_POP:"); | ||||
| 				if (!STACK_HAS_MORE_THAN(&G.prog.results, 0)) | ||||
| 					s = bc_error_stack_has_too_few_elements(); | ||||
| 				else | ||||
| 					bc_vec_pop(&G.prog.results); | ||||
| 				break; | ||||
| 			case BC_INST_PRINT: | ||||
| 			case BC_INST_PRINT_POP: | ||||
| 			case BC_INST_PRINT_STR: | ||||
| 				dbg_exec("BC_INST_PRINTxyz:"); | ||||
| 			case XC_INST_PRINT: | ||||
| 			case XC_INST_PRINT_POP: | ||||
| 			case XC_INST_PRINT_STR: | ||||
| 				dbg_exec("XC_INST_PRINTxyz:"); | ||||
| 				s = zbc_program_print(inst, 0); | ||||
| 				break; | ||||
| 			case BC_INST_STR: | ||||
| 				dbg_exec("BC_INST_STR:"); | ||||
| 			case XC_INST_STR: | ||||
| 				dbg_exec("XC_INST_STR:"); | ||||
| 				r.t = BC_RESULT_STR; | ||||
| 				r.d.id.idx = bc_program_index(code, &ip->inst_idx); | ||||
| 				bc_vec_push(&G.prog.results, &r); | ||||
| 				break; | ||||
| 			case BC_INST_POWER: | ||||
| 			case BC_INST_MULTIPLY: | ||||
| 			case BC_INST_DIVIDE: | ||||
| 			case BC_INST_MODULUS: | ||||
| 			case BC_INST_PLUS: | ||||
| 			case BC_INST_MINUS: | ||||
| 			case XC_INST_POWER: | ||||
| 			case XC_INST_MULTIPLY: | ||||
| 			case XC_INST_DIVIDE: | ||||
| 			case XC_INST_MODULUS: | ||||
| 			case XC_INST_PLUS: | ||||
| 			case XC_INST_MINUS: | ||||
| 				dbg_exec("BC_INST_binaryop:"); | ||||
| 				s = zbc_program_op(inst); | ||||
| 				break; | ||||
| 			case BC_INST_BOOL_NOT: | ||||
| 				dbg_exec("BC_INST_BOOL_NOT:"); | ||||
| 			case XC_INST_BOOL_NOT: | ||||
| 				dbg_exec("XC_INST_BOOL_NOT:"); | ||||
| 				s = zbc_program_prep(&ptr, &num); | ||||
| 				if (s) RETURN_STATUS(s); | ||||
| 				bc_num_init_DEF_SIZE(&r.d.n); | ||||
| @@ -6542,8 +6541,8 @@ static BC_STATUS zbc_program_exec(void) | ||||
| 				//else bc_num_zero(&r.d.n); - already is | ||||
| 				bc_program_retire(&r, BC_RESULT_TEMP); | ||||
| 				break; | ||||
| 			case BC_INST_NEG: | ||||
| 				dbg_exec("BC_INST_NEG:"); | ||||
| 			case XC_INST_NEG: | ||||
| 				dbg_exec("XC_INST_NEG:"); | ||||
| 				s = zbc_program_negate(); | ||||
| 				break; | ||||
| #if ENABLE_BC | ||||
| @@ -6554,56 +6553,56 @@ static BC_STATUS zbc_program_exec(void) | ||||
| 			case BC_INST_ASSIGN_PLUS: | ||||
| 			case BC_INST_ASSIGN_MINUS: | ||||
| #endif | ||||
| 			case BC_INST_ASSIGN: | ||||
| 			case XC_INST_ASSIGN: | ||||
| 				dbg_exec("BC_INST_ASSIGNxyz:"); | ||||
| 				s = zbc_program_assign(inst); | ||||
| 				break; | ||||
| #if ENABLE_DC | ||||
| 			case BC_INST_POP_EXEC: | ||||
| 				dbg_exec("BC_INST_POP_EXEC:"); | ||||
| 			case DC_INST_POP_EXEC: | ||||
| 				dbg_exec("DC_INST_POP_EXEC:"); | ||||
| 				bc_vec_pop(&G.prog.exestack); | ||||
| 				goto read_updated_ip; | ||||
| 			case BC_INST_MODEXP: | ||||
| 				dbg_exec("BC_INST_MODEXP:"); | ||||
| 			case DC_INST_MODEXP: | ||||
| 				dbg_exec("DC_INST_MODEXP:"); | ||||
| 				s = zdc_program_modexp(); | ||||
| 				break; | ||||
| 			case BC_INST_DIVMOD: | ||||
| 				dbg_exec("BC_INST_DIVMOD:"); | ||||
| 			case DC_INST_DIVMOD: | ||||
| 				dbg_exec("DC_INST_DIVMOD:"); | ||||
| 				s = zdc_program_divmod(); | ||||
| 				break; | ||||
| 			case BC_INST_EXECUTE: | ||||
| 			case BC_INST_EXEC_COND: | ||||
| 				dbg_exec("BC_INST_EXEC[_COND]:"); | ||||
| 				s = zdc_program_execStr(code, &ip->inst_idx, inst == BC_INST_EXEC_COND); | ||||
| 			case DC_INST_EXECUTE: | ||||
| 			case DC_INST_EXEC_COND: | ||||
| 				dbg_exec("DC_INST_EXEC[_COND]:"); | ||||
| 				s = zdc_program_execStr(code, &ip->inst_idx, inst == DC_INST_EXEC_COND); | ||||
| 				goto read_updated_ip; | ||||
| 			case BC_INST_PRINT_STACK: { | ||||
| 			case DC_INST_PRINT_STACK: { | ||||
| 				size_t idx; | ||||
| 				dbg_exec("BC_INST_PRINT_STACK:"); | ||||
| 				dbg_exec("DC_INST_PRINT_STACK:"); | ||||
| 				for (idx = 0; idx < G.prog.results.len; ++idx) { | ||||
| 					s = zbc_program_print(BC_INST_PRINT, idx); | ||||
| 					s = zbc_program_print(XC_INST_PRINT, idx); | ||||
| 					if (s) break; | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case BC_INST_CLEAR_STACK: | ||||
| 				dbg_exec("BC_INST_CLEAR_STACK:"); | ||||
| 			case DC_INST_CLEAR_STACK: | ||||
| 				dbg_exec("DC_INST_CLEAR_STACK:"); | ||||
| 				bc_vec_pop_all(&G.prog.results); | ||||
| 				break; | ||||
| 			case BC_INST_STACK_LEN: | ||||
| 				dbg_exec("BC_INST_STACK_LEN:"); | ||||
| 			case DC_INST_STACK_LEN: | ||||
| 				dbg_exec("DC_INST_STACK_LEN:"); | ||||
| 				dc_program_stackLen(); | ||||
| 				break; | ||||
| 			case BC_INST_DUPLICATE: | ||||
| 				dbg_exec("BC_INST_DUPLICATE:"); | ||||
| 			case DC_INST_DUPLICATE: | ||||
| 				dbg_exec("DC_INST_DUPLICATE:"); | ||||
| 				if (!STACK_HAS_MORE_THAN(&G.prog.results, 0)) | ||||
| 					RETURN_STATUS(bc_error_stack_has_too_few_elements()); | ||||
| 				ptr = bc_vec_top(&G.prog.results); | ||||
| 				dc_result_copy(&r, ptr); | ||||
| 				bc_vec_push(&G.prog.results, &r); | ||||
| 				break; | ||||
| 			case BC_INST_SWAP: { | ||||
| 			case DC_INST_SWAP: { | ||||
| 				BcResult *ptr2; | ||||
| 				dbg_exec("BC_INST_SWAP:"); | ||||
| 				dbg_exec("DC_INST_SWAP:"); | ||||
| 				if (!STACK_HAS_MORE_THAN(&G.prog.results, 1)) | ||||
| 					RETURN_STATUS(bc_error_stack_has_too_few_elements()); | ||||
| 				ptr = bc_vec_item_rev(&G.prog.results, 0); | ||||
| @@ -6613,34 +6612,34 @@ static BC_STATUS zbc_program_exec(void) | ||||
| 				memcpy(ptr2, &r, sizeof(BcResult)); | ||||
| 				break; | ||||
| 			} | ||||
| 			case BC_INST_ASCIIFY: | ||||
| 				dbg_exec("BC_INST_ASCIIFY:"); | ||||
| 			case DC_INST_ASCIIFY: | ||||
| 				dbg_exec("DC_INST_ASCIIFY:"); | ||||
| 				s = zdc_program_asciify(); | ||||
| 				break; | ||||
| 			case BC_INST_PRINT_STREAM: | ||||
| 				dbg_exec("BC_INST_STREAM:"); | ||||
| 			case DC_INST_PRINT_STREAM: | ||||
| 				dbg_exec("DC_INST_PRINT_STREAM:"); | ||||
| 				s = zdc_program_printStream(); | ||||
| 				break; | ||||
| 			case BC_INST_LOAD: | ||||
| 			case BC_INST_PUSH_VAR: { | ||||
| 				bool copy = inst == BC_INST_LOAD; | ||||
| 			case DC_INST_LOAD: | ||||
| 			case DC_INST_PUSH_VAR: { | ||||
| 				bool copy = inst == DC_INST_LOAD; | ||||
| 				s = zbc_program_pushVar(code, &ip->inst_idx, true, copy); | ||||
| 				break; | ||||
| 			} | ||||
| 			case BC_INST_PUSH_TO_VAR: { | ||||
| 			case DC_INST_PUSH_TO_VAR: { | ||||
| 				char *name = bc_program_name(code, &ip->inst_idx); | ||||
| 				s = zbc_program_copyToVar(name, true); | ||||
| 				free(name); | ||||
| 				break; | ||||
| 			} | ||||
| 			case BC_INST_QUIT: | ||||
| 				dbg_exec("BC_INST_QUIT:"); | ||||
| 			case DC_INST_QUIT: | ||||
| 				dbg_exec("DC_INST_QUIT:"); | ||||
| 				if (G.prog.exestack.len <= 2) | ||||
| 					QUIT_OR_RETURN_TO_MAIN; | ||||
| 				bc_vec_npop(&G.prog.exestack, 2); | ||||
| 				goto read_updated_ip; | ||||
| 			case BC_INST_NQUIT: | ||||
| 				dbg_exec("BC_INST_NQUIT:"); | ||||
| 			case DC_INST_NQUIT: | ||||
| 				dbg_exec("DC_INST_NQUIT:"); | ||||
| 				s = zdc_program_nquit(); | ||||
| 				//goto read_updated_ip; - just fall through to it | ||||
| #endif // ENABLE_DC | ||||
|   | ||||
		Reference in New Issue
	
	Block a user