experiments...
This commit is contained in:
		| @ -196,12 +196,12 @@ static int emit_single_param_instruction (hcl_t* hcl, int cmd, hcl_oow_t param_1 | ||||
|  | ||||
| 	switch (cmd) | ||||
| 	{ | ||||
| 		case BCODE_PUSH_INSTVAR_0: | ||||
| 		case BCODE_STORE_INTO_INSTVAR_0: | ||||
| 		case BCODE_POP_INTO_INSTVAR_0: | ||||
| 		case HCL_CODE_PUSH_INSTVAR_0: | ||||
| 		case HCL_CODE_STORE_INTO_INSTVAR_0: | ||||
| 		case HCL_CODE_POP_INTO_INSTVAR_0: | ||||
| 		case HCL_CODE_PUSH_TEMPVAR_0: | ||||
| 		case HCL_CODE_STORE_INTO_TEMPVAR_0: | ||||
| 		case BCODE_POP_INTO_TEMPVAR_0: | ||||
| 		case HCL_CODE_POP_INTO_TEMPVAR_0: | ||||
| 			if (param_1 < 8) | ||||
| 			{ | ||||
| 				/* low 3 bits to hold the parameter */ | ||||
| @ -235,7 +235,7 @@ static int emit_single_param_instruction (hcl_t* hcl, int cmd, hcl_oow_t param_1 | ||||
|  | ||||
| 		case HCL_CODE_PUSH_OBJECT_0: | ||||
| 		case HCL_CODE_STORE_INTO_OBJECT_0: | ||||
| 		case BCODE_POP_INTO_OBJECT_0: | ||||
| 		case HCL_CODE_POP_INTO_OBJECT_0: | ||||
| 		case HCL_CODE_JUMP_FORWARD_0: | ||||
| 		case HCL_CODE_JUMP_BACKWARD_0: | ||||
| 		case HCL_CODE_CALL_0: | ||||
| @ -284,7 +284,7 @@ write_long: | ||||
| 		hcl_seterrnum (hcl, HCL_ERANGE); | ||||
| 		return -1; | ||||
| 	} | ||||
| #if (HCL_BCODE_LONG_PARAM_SIZE == 2) | ||||
| #if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2) | ||||
| 	if (emit_byte_instruction(hcl, bc) <= -1 || | ||||
| 	    emit_byte_instruction(hcl, (param_1 >> 8) & 0xFF) <= -1 || | ||||
| 	    emit_byte_instruction(hcl, param_1 & 0xFF) <= -1) return -1; | ||||
| @ -300,7 +300,7 @@ write_long2: | ||||
| 		hcl_seterrnum (hcl, HCL_ERANGE); | ||||
| 		return -1; | ||||
| 	} | ||||
| #if (HCL_BCODE_LONG_PARAM_SIZE == 2) | ||||
| #if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2) | ||||
| 	if (emit_byte_instruction(hcl, bc) <= -1 || | ||||
| 	    emit_byte_instruction(hcl, (param_1 >> 24) & 0xFF) <= -1 || | ||||
| 	    emit_byte_instruction(hcl, (param_1 >> 16) & 0xFF) <= -1 || | ||||
| @ -321,13 +321,13 @@ static int emit_double_param_instruction (hcl_t* hcl, int cmd, hcl_oow_t param_1 | ||||
| 	switch (cmd) | ||||
| 	{ | ||||
| 		case HCL_CODE_STORE_INTO_CTXTEMPVAR_0: | ||||
| 		case BCODE_POP_INTO_CTXTEMPVAR_0: | ||||
| 		case HCL_CODE_POP_INTO_CTXTEMPVAR_0: | ||||
| 		case HCL_CODE_PUSH_CTXTEMPVAR_0: | ||||
| 		case BCODE_PUSH_OBJVAR_0: | ||||
| 		case BCODE_STORE_INTO_OBJVAR_0: | ||||
| 		case BCODE_POP_INTO_OBJVAR_0: | ||||
| 		case BCODE_SEND_MESSAGE_0: | ||||
| 		case BCODE_SEND_MESSAGE_TO_SUPER_0: | ||||
| 		case HCL_CODE_PUSH_OBJVAR_0: | ||||
| 		case HCL_CODE_STORE_INTO_OBJVAR_0: | ||||
| 		case HCL_CODE_POP_INTO_OBJVAR_0: | ||||
| 		case HCL_CODE_SEND_MESSAGE_0: | ||||
| 		case HCL_CODE_SEND_MESSAGE_TO_SUPER_0: | ||||
| 			if (param_1 < 4 && param_2 < 0xFF) | ||||
| 			{ | ||||
| 				/* low 2 bits of the instruction code is the first parameter */ | ||||
| @ -361,7 +361,7 @@ write_long: | ||||
| 		hcl_seterrnum (hcl, HCL_ERANGE); | ||||
| 		return -1; | ||||
| 	} | ||||
| #if (HCL_BCODE_LONG_PARAM_SIZE == 2) | ||||
| #if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2) | ||||
| 	if (emit_byte_instruction(hcl, bc) <= -1 || | ||||
| 	    emit_byte_instruction(hcl, param_1 >> 8) <= -1 || | ||||
| 	    emit_byte_instruction(hcl, param_1 & 0xFF) <= -1 || | ||||
| @ -381,7 +381,7 @@ write_long2: | ||||
| 		hcl_seterrnum (hcl, HCL_ERANGE); | ||||
| 		return -1; | ||||
| 	} | ||||
| #if (HCL_BCODE_LONG_PARAM_SIZE == 2) | ||||
| #if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2) | ||||
| 	if (emit_byte_instruction(hcl, bc) <= -1 || | ||||
| 	    emit_byte_instruction(hcl, (param_1 >> 24) & 0xFF) <= -1 || | ||||
| 	    emit_byte_instruction(hcl, (param_1 >> 16) & 0xFF) <= -1 || | ||||
| @ -470,7 +470,7 @@ static HCL_INLINE void patch_long_jump (hcl_t* hcl, hcl_ooi_t jip, hcl_ooi_t jum | ||||
| 		jump_offset -= MAX_CODE_JUMP; | ||||
| 	} | ||||
|  | ||||
| #if (HCL_BCODE_LONG_PARAM_SIZE == 2) | ||||
| #if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2) | ||||
| 	patch_instruction (hcl, jip + 1, jump_offset >> 8); | ||||
| 	patch_instruction (hcl, jip + 2, jump_offset & 0xFF); | ||||
| #else | ||||
| @ -1037,7 +1037,7 @@ static int compile_lambda (hcl_t* hcl, hcl_oop_t src, int defun) | ||||
| 	HCL_ASSERT (hcl, hcl->code.bc.len < HCL_SMOOI_MAX);  /* guaranteed in emit_byte_instruction() */ | ||||
| 	jump_inst_pos = hcl->code.bc.len; | ||||
| 	/* specifying MAX_CODE_JUMP causes emit_single_param_instruction() to  | ||||
| 	 * produce the long jump instruction (BCODE_JUMP_FORWARD_X) */ | ||||
| 	 * produce the long jump instruction (HCL_CODE_JUMP_FORWARD_X) */ | ||||
| 	if (emit_single_param_instruction(hcl, HCL_CODE_JUMP_FORWARD_0, MAX_CODE_JUMP) <= -1) return -1; | ||||
|  | ||||
| 	SWITCH_TOP_CFRAME (hcl, COP_COMPILE_OBJECT_LIST, obj); | ||||
| @ -1948,7 +1948,7 @@ static HCL_INLINE int patch_nearest_post_if_body (hcl_t* hcl) | ||||
| 	if (emit_single_param_instruction (hcl, HCL_CODE_JUMP_FORWARD_0, MAX_CODE_JUMP) <= -1) return -1; | ||||
|  | ||||
| 	/* HCL_CODE_LONG_PARAM_SIZE + 1 => size of the long JUMP_FORWARD instruction */ | ||||
| 	jump_offset = hcl->code.bc.len - jip - (HCL_BCODE_LONG_PARAM_SIZE + 1); | ||||
| 	jump_offset = hcl->code.bc.len - jip - (HCL_HCL_CODE_LONG_PARAM_SIZE + 1); | ||||
|  | ||||
| 	if (jump_offset > MAX_CODE_JUMP * 2) | ||||
| 	{ | ||||
| @ -2100,7 +2100,7 @@ static HCL_INLINE int post_and_expr (hcl_t* hcl) | ||||
| 	jip = HCL_OOP_TO_SMOOI(cf->operand); | ||||
|  | ||||
| 	/* patch the jump insruction emitted after each expression inside the 'and' expression */ | ||||
| 	jump_offset = hcl->code.bc.len - jip - (HCL_BCODE_LONG_PARAM_SIZE + 1); | ||||
| 	jump_offset = hcl->code.bc.len - jip - (HCL_HCL_CODE_LONG_PARAM_SIZE + 1); | ||||
| 	patch_long_jump (hcl, jip, jump_offset); | ||||
|  | ||||
| 	POP_CFRAME(hcl); | ||||
| @ -2167,7 +2167,7 @@ static HCL_INLINE int post_or_expr (hcl_t* hcl) | ||||
| 	jip = HCL_OOP_TO_SMOOI(cf->operand); | ||||
|  | ||||
| 	/* patch the jump insruction emitted after each expression inside the 'and' expression */ | ||||
| 	jump_offset = hcl->code.bc.len - jip - (HCL_BCODE_LONG_PARAM_SIZE + 1); | ||||
| 	jump_offset = hcl->code.bc.len - jip - (HCL_HCL_CODE_LONG_PARAM_SIZE + 1); | ||||
| 	patch_long_jump (hcl, jip, jump_offset); | ||||
|  | ||||
| 	POP_CFRAME(hcl); | ||||
| @ -2222,7 +2222,7 @@ static HCL_INLINE int post_if_body (hcl_t* hcl) | ||||
| 	} | ||||
|  | ||||
| 	/* HCL_CODE_LONG_PARAM_SIZE + 1 => size of the long JUMP_FORWARD_IF_FALSE instruction */ | ||||
| 	jump_offset = hcl->code.bc.len - jip - (HCL_BCODE_LONG_PARAM_SIZE + 1); | ||||
| 	jump_offset = hcl->code.bc.len - jip - (HCL_HCL_CODE_LONG_PARAM_SIZE + 1); | ||||
|  | ||||
| 	if (jump_offset > MAX_CODE_JUMP * 2) | ||||
| 	{ | ||||
| @ -2303,12 +2303,12 @@ static HCL_INLINE int post_while_body (hcl_t* hcl) | ||||
|  | ||||
| 	HCL_ASSERT (hcl, hcl->code.bc.len < HCL_SMOOI_MAX); | ||||
| 	jump_offset = hcl->code.bc.len - cf->u.post_while.cond_pos + 1; | ||||
| 	if (jump_offset > 3) jump_offset += HCL_BCODE_LONG_PARAM_SIZE; | ||||
| 	if (jump_offset > 3) jump_offset += HCL_HCL_CODE_LONG_PARAM_SIZE; | ||||
| 	if (emit_single_param_instruction (hcl, HCL_CODE_JUMP_BACKWARD_0, jump_offset) <= -1) return -1; | ||||
|  | ||||
| 	jip = HCL_OOP_TO_SMOOI(cf->operand); | ||||
| 	/* HCL_CODE_LONG_PARAM_SIZE + 1 => size of the long JUMP_FORWARD_IF_FALSE/JUMP_FORWARD_IF_TRUE instruction */ | ||||
| 	jump_offset = hcl->code.bc.len - jip - (HCL_BCODE_LONG_PARAM_SIZE + 1); | ||||
| 	jump_offset = hcl->code.bc.len - jip - (HCL_HCL_CODE_LONG_PARAM_SIZE + 1); | ||||
| 	if (jump_offset > MAX_CODE_JUMP * 2) | ||||
| 	{ | ||||
| 		HCL_DEBUG1 (hcl, "code in loop body too big - size %zu\n", jump_offset); | ||||
| @ -2335,7 +2335,7 @@ static int update_break (hcl_t* hcl) | ||||
| 	jip = HCL_OOP_TO_SMOOI(cf->operand); | ||||
|  | ||||
| 	/* HCL_CODE_LONG_PARAM_SIZE + 1 => size of the long JUMP_FORWARD instruction */ | ||||
| 	jump_offset = hcl->code.bc.len - jip - (HCL_BCODE_LONG_PARAM_SIZE + 1); | ||||
| 	jump_offset = hcl->code.bc.len - jip - (HCL_HCL_CODE_LONG_PARAM_SIZE + 1); | ||||
|  | ||||
| 	/* no explicit about jump_offset. because break can only place inside | ||||
| 	 * a loop, the same check in post_while_body() must assert | ||||
| @ -2469,7 +2469,7 @@ static HCL_INLINE int emit_lambda (hcl_t* hcl) | ||||
| 	hcl->c->tv.size = hcl->c->blk.tmprcnt[hcl->c->blk.depth]; | ||||
|  | ||||
| 	/* HCL_CODE_LONG_PARAM_SIZE + 1 => size of the long JUMP_FORWARD instruction */ | ||||
| 	block_code_size = hcl->code.bc.len - jip - (HCL_BCODE_LONG_PARAM_SIZE + 1); | ||||
| 	block_code_size = hcl->code.bc.len - jip - (HCL_HCL_CODE_LONG_PARAM_SIZE + 1); | ||||
|  | ||||
| 	if (block_code_size == 0) | ||||
|  	{ | ||||
| @ -2479,7 +2479,7 @@ static HCL_INLINE int emit_lambda (hcl_t* hcl) | ||||
| 		block_code_size++; | ||||
| 	} | ||||
|  | ||||
| 	if (emit_byte_instruction (hcl, HCL_CODE_RETURN_FROM_BLOCK) <= -1) return -1; | ||||
| 	if (emit_byte_instruction(hcl, HCL_CODE_RETURN_FROM_BLOCK) <= -1) return -1; | ||||
| 	block_code_size++; | ||||
|  | ||||
| 	if (block_code_size > MAX_CODE_JUMP * 2) | ||||
|  | ||||
							
								
								
									
										160
									
								
								hcl/lib/decode.c
									
									
									
									
									
								
							
							
						
						
									
										160
									
								
								hcl/lib/decode.c
									
									
									
									
									
								
							| @ -44,7 +44,7 @@ | ||||
|  | ||||
| #define FETCH_BYTE_CODE(hcl) (cdptr[ip++]) | ||||
| #define FETCH_BYTE_CODE_TO(hcl,v_ooi) (v_ooi = FETCH_BYTE_CODE(hcl)) | ||||
| #if (HCL_BCODE_LONG_PARAM_SIZE == 2) | ||||
| #if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2) | ||||
| #	define FETCH_PARAM_CODE_TO(hcl,v_ooi) \ | ||||
| 		do { \ | ||||
| 			v_ooi = FETCH_BYTE_CODE(hcl); \ | ||||
| @ -85,17 +85,17 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
|  | ||||
| 		switch (bcode) | ||||
| 		{ | ||||
| 			case BCODE_PUSH_INSTVAR_X: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_X: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				goto push_instvar; | ||||
| 			case BCODE_PUSH_INSTVAR_0: | ||||
| 			case BCODE_PUSH_INSTVAR_1: | ||||
| 			case BCODE_PUSH_INSTVAR_2: | ||||
| 			case BCODE_PUSH_INSTVAR_3: | ||||
| 			case BCODE_PUSH_INSTVAR_4: | ||||
| 			case BCODE_PUSH_INSTVAR_5: | ||||
| 			case BCODE_PUSH_INSTVAR_6: | ||||
| 			case BCODE_PUSH_INSTVAR_7: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_0: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_1: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_2: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_3: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_4: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_5: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_6: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_7: | ||||
| 				b1 = bcode & 0x7; /* low 3 bits */ | ||||
| 			push_instvar: | ||||
| 				LOG_INST_1 (hcl, "push_instvar %zu", b1); | ||||
| @ -103,33 +103,33 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
|  | ||||
| 			/* ------------------------------------------------- */ | ||||
|  | ||||
| 			case BCODE_STORE_INTO_INSTVAR_X: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_X: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				goto store_instvar; | ||||
| 			case BCODE_STORE_INTO_INSTVAR_0: | ||||
| 			case BCODE_STORE_INTO_INSTVAR_1: | ||||
| 			case BCODE_STORE_INTO_INSTVAR_2: | ||||
| 			case BCODE_STORE_INTO_INSTVAR_3: | ||||
| 			case BCODE_STORE_INTO_INSTVAR_4: | ||||
| 			case BCODE_STORE_INTO_INSTVAR_5: | ||||
| 			case BCODE_STORE_INTO_INSTVAR_6: | ||||
| 			case BCODE_STORE_INTO_INSTVAR_7: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_0: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_1: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_2: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_3: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_4: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_5: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_6: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_7: | ||||
| 				b1 = bcode & 0x7; /* low 3 bits */ | ||||
| 			store_instvar: | ||||
| 				LOG_INST_1 (hcl, "store_into_instvar %zu", b1); | ||||
| 				break; | ||||
|  | ||||
| 			case BCODE_POP_INTO_INSTVAR_X: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_X: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				goto pop_into_instvar; | ||||
| 			case BCODE_POP_INTO_INSTVAR_0: | ||||
| 			case BCODE_POP_INTO_INSTVAR_1: | ||||
| 			case BCODE_POP_INTO_INSTVAR_2: | ||||
| 			case BCODE_POP_INTO_INSTVAR_3: | ||||
| 			case BCODE_POP_INTO_INSTVAR_4: | ||||
| 			case BCODE_POP_INTO_INSTVAR_5: | ||||
| 			case BCODE_POP_INTO_INSTVAR_6: | ||||
| 			case BCODE_POP_INTO_INSTVAR_7: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_0: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_1: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_2: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_3: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_4: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_5: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_6: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_7: | ||||
| 				b1 = bcode & 0x7; /* low 3 bits */ | ||||
| 			pop_into_instvar: | ||||
| 				LOG_INST_1 (hcl, "pop_into_instvar %zu", b1); | ||||
| @ -138,7 +138,7 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
| 			/* ------------------------------------------------- */ | ||||
| 			case HCL_CODE_PUSH_TEMPVAR_X: | ||||
| 			case HCL_CODE_STORE_INTO_TEMPVAR_X: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_X: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_X: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				goto handle_tempvar; | ||||
|  | ||||
| @ -158,14 +158,14 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
| 			case HCL_CODE_STORE_INTO_TEMPVAR_5: | ||||
| 			case HCL_CODE_STORE_INTO_TEMPVAR_6: | ||||
| 			case HCL_CODE_STORE_INTO_TEMPVAR_7: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_0: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_1: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_2: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_3: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_4: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_5: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_6: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_7: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_0: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_1: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_2: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_3: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_4: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_5: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_6: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_7: | ||||
| 				b1 = bcode & 0x7; /* low 3 bits */ | ||||
| 			handle_tempvar: | ||||
|  | ||||
| @ -193,7 +193,7 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
| 			case HCL_CODE_PUSH_LITERAL_X2: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b2); | ||||
| 		#if (HCL_BCODE_LONG_PARAM_SIZE == 2) | ||||
| 		#if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2) | ||||
| 				b1 = (b1 << 16) | b2; | ||||
| 		#else | ||||
| 				b1 = (b1 << 8) | b2; | ||||
| @ -220,7 +220,7 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
| 			/* ------------------------------------------------- */ | ||||
| 			case HCL_CODE_PUSH_OBJECT_X: | ||||
| 			case HCL_CODE_STORE_INTO_OBJECT_X: | ||||
| 			case BCODE_POP_INTO_OBJECT_X: | ||||
| 			case HCL_CODE_POP_INTO_OBJECT_X: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				goto handle_object; | ||||
|  | ||||
| @ -232,10 +232,10 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
| 			case HCL_CODE_STORE_INTO_OBJECT_1: | ||||
| 			case HCL_CODE_STORE_INTO_OBJECT_2: | ||||
| 			case HCL_CODE_STORE_INTO_OBJECT_3: | ||||
| 			case BCODE_POP_INTO_OBJECT_0: | ||||
| 			case BCODE_POP_INTO_OBJECT_1: | ||||
| 			case BCODE_POP_INTO_OBJECT_2: | ||||
| 			case BCODE_POP_INTO_OBJECT_3: | ||||
| 			case HCL_CODE_POP_INTO_OBJECT_0: | ||||
| 			case HCL_CODE_POP_INTO_OBJECT_1: | ||||
| 			case HCL_CODE_POP_INTO_OBJECT_2: | ||||
| 			case HCL_CODE_POP_INTO_OBJECT_3: | ||||
| 				b1 = bcode & 0x3; /* low 2 bits */ | ||||
| 			handle_object: | ||||
| 				if ((bcode >> 3) & 1) | ||||
| @ -331,7 +331,7 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
|  | ||||
| 			case HCL_CODE_PUSH_CTXTEMPVAR_X: | ||||
| 			case HCL_CODE_STORE_INTO_CTXTEMPVAR_X: | ||||
| 			case BCODE_POP_INTO_CTXTEMPVAR_X: | ||||
| 			case HCL_CODE_POP_INTO_CTXTEMPVAR_X: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b2); | ||||
| 				goto handle_ctxtempvar; | ||||
| @ -343,10 +343,10 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
| 			case HCL_CODE_STORE_INTO_CTXTEMPVAR_1: | ||||
| 			case HCL_CODE_STORE_INTO_CTXTEMPVAR_2: | ||||
| 			case HCL_CODE_STORE_INTO_CTXTEMPVAR_3: | ||||
| 			case BCODE_POP_INTO_CTXTEMPVAR_0: | ||||
| 			case BCODE_POP_INTO_CTXTEMPVAR_1: | ||||
| 			case BCODE_POP_INTO_CTXTEMPVAR_2: | ||||
| 			case BCODE_POP_INTO_CTXTEMPVAR_3: | ||||
| 			case HCL_CODE_POP_INTO_CTXTEMPVAR_0: | ||||
| 			case HCL_CODE_POP_INTO_CTXTEMPVAR_1: | ||||
| 			case HCL_CODE_POP_INTO_CTXTEMPVAR_2: | ||||
| 			case HCL_CODE_POP_INTO_CTXTEMPVAR_3: | ||||
| 				b1 = bcode & 0x3; /* low 2 bits */ | ||||
| 				FETCH_BYTE_CODE_TO (hcl, b2); | ||||
|  | ||||
| @ -373,25 +373,25 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
| 				break; | ||||
| 			/* -------------------------------------------------------- */ | ||||
|  | ||||
| 			case BCODE_PUSH_OBJVAR_X: | ||||
| 			case BCODE_STORE_INTO_OBJVAR_X: | ||||
| 			case BCODE_POP_INTO_OBJVAR_X: | ||||
| 			case HCL_CODE_PUSH_OBJVAR_X: | ||||
| 			case HCL_CODE_STORE_INTO_OBJVAR_X: | ||||
| 			case HCL_CODE_POP_INTO_OBJVAR_X: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b2); | ||||
| 				goto handle_objvar; | ||||
|  | ||||
| 			case BCODE_PUSH_OBJVAR_0: | ||||
| 			case BCODE_PUSH_OBJVAR_1: | ||||
| 			case BCODE_PUSH_OBJVAR_2: | ||||
| 			case BCODE_PUSH_OBJVAR_3: | ||||
| 			case BCODE_STORE_INTO_OBJVAR_0: | ||||
| 			case BCODE_STORE_INTO_OBJVAR_1: | ||||
| 			case BCODE_STORE_INTO_OBJVAR_2: | ||||
| 			case BCODE_STORE_INTO_OBJVAR_3: | ||||
| 			case BCODE_POP_INTO_OBJVAR_0: | ||||
| 			case BCODE_POP_INTO_OBJVAR_1: | ||||
| 			case BCODE_POP_INTO_OBJVAR_2: | ||||
| 			case BCODE_POP_INTO_OBJVAR_3: | ||||
| 			case HCL_CODE_PUSH_OBJVAR_0: | ||||
| 			case HCL_CODE_PUSH_OBJVAR_1: | ||||
| 			case HCL_CODE_PUSH_OBJVAR_2: | ||||
| 			case HCL_CODE_PUSH_OBJVAR_3: | ||||
| 			case HCL_CODE_STORE_INTO_OBJVAR_0: | ||||
| 			case HCL_CODE_STORE_INTO_OBJVAR_1: | ||||
| 			case HCL_CODE_STORE_INTO_OBJVAR_2: | ||||
| 			case HCL_CODE_STORE_INTO_OBJVAR_3: | ||||
| 			case HCL_CODE_POP_INTO_OBJVAR_0: | ||||
| 			case HCL_CODE_POP_INTO_OBJVAR_1: | ||||
| 			case HCL_CODE_POP_INTO_OBJVAR_2: | ||||
| 			case HCL_CODE_POP_INTO_OBJVAR_3: | ||||
| 				/* b1 -> variable index to the object indicated by b2. | ||||
| 				 * b2 -> object index stored in the literal frame. */ | ||||
| 				b1 = bcode & 0x3; /* low 2 bits */ | ||||
| @ -418,22 +418,22 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
| 				break; | ||||
|  | ||||
| 			/* -------------------------------------------------------- */ | ||||
| 			case BCODE_SEND_MESSAGE_X: | ||||
| 			case BCODE_SEND_MESSAGE_TO_SUPER_X: | ||||
| 			case HCL_CODE_SEND_MESSAGE_X: | ||||
| 			case HCL_CODE_SEND_MESSAGE_TO_SUPER_X: | ||||
| 				/* b1 -> number of arguments  | ||||
| 				 * b2 -> selector index stored in the literal frame */ | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b2); | ||||
| 				goto handle_send_message; | ||||
|  | ||||
| 			case BCODE_SEND_MESSAGE_0: | ||||
| 			case BCODE_SEND_MESSAGE_1: | ||||
| 			case BCODE_SEND_MESSAGE_2: | ||||
| 			case BCODE_SEND_MESSAGE_3: | ||||
| 			case BCODE_SEND_MESSAGE_TO_SUPER_0: | ||||
| 			case BCODE_SEND_MESSAGE_TO_SUPER_1: | ||||
| 			case BCODE_SEND_MESSAGE_TO_SUPER_2: | ||||
| 			case BCODE_SEND_MESSAGE_TO_SUPER_3: | ||||
| 			case HCL_CODE_SEND_MESSAGE_0: | ||||
| 			case HCL_CODE_SEND_MESSAGE_1: | ||||
| 			case HCL_CODE_SEND_MESSAGE_2: | ||||
| 			case HCL_CODE_SEND_MESSAGE_3: | ||||
| 			case HCL_CODE_SEND_MESSAGE_TO_SUPER_0: | ||||
| 			case HCL_CODE_SEND_MESSAGE_TO_SUPER_1: | ||||
| 			case HCL_CODE_SEND_MESSAGE_TO_SUPER_2: | ||||
| 			case HCL_CODE_SEND_MESSAGE_TO_SUPER_3: | ||||
| 				b1 = bcode & 0x3; /* low 2 bits */ | ||||
| 				FETCH_BYTE_CODE_TO (hcl, b2); | ||||
|  | ||||
| @ -443,7 +443,7 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
|  | ||||
| 			/* -------------------------------------------------------- */ | ||||
|  | ||||
| 			case BCODE_PUSH_RECEIVER: | ||||
| 			case HCL_CODE_PUSH_RECEIVER: | ||||
| 				LOG_INST_0 (hcl, "push_receiver"); | ||||
| 				break; | ||||
|  | ||||
| @ -459,11 +459,11 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
| 				LOG_INST_0 (hcl, "push_false"); | ||||
| 				break; | ||||
|  | ||||
| 			case BCODE_PUSH_CONTEXT: | ||||
| 			case HCL_CODE_PUSH_CONTEXT: | ||||
| 				LOG_INST_0 (hcl, "push_context"); | ||||
| 				break; | ||||
|  | ||||
| 			case BCODE_PUSH_PROCESS: | ||||
| 			case HCL_CODE_PUSH_PROCESS: | ||||
| 				LOG_INST_0 (hcl, "push_process"); | ||||
| 				break; | ||||
|  | ||||
| @ -530,7 +530,7 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
|  | ||||
| 			/* -------------------------------------------------------- */ | ||||
|  | ||||
| 			case BCODE_DUP_STACKTOP: | ||||
| 			case HCL_CODE_DUP_STACKTOP: | ||||
| 				LOG_INST_0 (hcl, "dup_stacktop"); | ||||
| 				break; | ||||
|  | ||||
| @ -538,11 +538,11 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
| 				LOG_INST_0 (hcl, "pop_stacktop"); | ||||
| 				break; | ||||
|  | ||||
| 			case BCODE_RETURN_STACKTOP: | ||||
| 			case HCL_CODE_RETURN_STACKTOP: | ||||
| 				LOG_INST_0 (hcl, "return_stacktop"); | ||||
| 				break; | ||||
|  | ||||
| 			case BCODE_RETURN_RECEIVER: | ||||
| 			case HCL_CODE_RETURN_RECEIVER: | ||||
| 				LOG_INST_0 (hcl, "return_receiver"); | ||||
| 				break; | ||||
|  | ||||
| @ -562,7 +562,7 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end) | ||||
| 				HCL_ASSERT (hcl, b2 >= b1); | ||||
| 				break; | ||||
|  | ||||
| 			case BCODE_SEND_BLOCK_COPY: | ||||
| 			case HCL_CODE_SEND_BLOCK_COPY: | ||||
| 				LOG_INST_0 (hcl, "send_block_copy"); | ||||
| 				break; | ||||
|  | ||||
|  | ||||
							
								
								
									
										174
									
								
								hcl/lib/exec.c
									
									
									
									
									
								
							
							
						
						
									
										174
									
								
								hcl/lib/exec.c
									
									
									
									
									
								
							| @ -89,7 +89,7 @@ static HCL_INLINE const char* proc_state_to_string (int state) | ||||
|  | ||||
| #define FETCH_BYTE_CODE(hcl) ((hcl)->code.bc.arr->slot[(hcl)->ip++]) | ||||
| #define FETCH_BYTE_CODE_TO(hcl, v_oow) (v_oow = FETCH_BYTE_CODE(hcl)) | ||||
| #if (HCL_BCODE_LONG_PARAM_SIZE == 2) | ||||
| #if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2) | ||||
| #	define FETCH_PARAM_CODE_TO(hcl, v_oow) \ | ||||
| 		do { \ | ||||
| 			v_oow = FETCH_BYTE_CODE(hcl); \ | ||||
| @ -1411,17 +1411,17 @@ static int execute (hcl_t* hcl) | ||||
| 			/* ------------------------------------------------- */ | ||||
|  | ||||
| #if 0 | ||||
| 			case BCODE_PUSH_INSTVAR_X: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_X: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				goto push_instvar; | ||||
| 			case BCODE_PUSH_INSTVAR_0: | ||||
| 			case BCODE_PUSH_INSTVAR_1: | ||||
| 			case BCODE_PUSH_INSTVAR_2: | ||||
| 			case BCODE_PUSH_INSTVAR_3: | ||||
| 			case BCODE_PUSH_INSTVAR_4: | ||||
| 			case BCODE_PUSH_INSTVAR_5: | ||||
| 			case BCODE_PUSH_INSTVAR_6: | ||||
| 			case BCODE_PUSH_INSTVAR_7: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_0: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_1: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_2: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_3: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_4: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_5: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_6: | ||||
| 			case HCL_CODE_PUSH_INSTVAR_7: | ||||
| 				b1 = bcode & 0x7; /* low 3 bits */ | ||||
| 			push_instvar: | ||||
| 				LOG_INST_1 (hcl, "push_instvar %zu", b1); | ||||
| @ -1431,17 +1431,17 @@ static int execute (hcl_t* hcl) | ||||
|  | ||||
| 			/* ------------------------------------------------- */ | ||||
|  | ||||
| 			case BCODE_STORE_INTO_INSTVAR_X: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_X: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				goto store_instvar; | ||||
| 			case BCODE_STORE_INTO_INSTVAR_0: | ||||
| 			case BCODE_STORE_INTO_INSTVAR_1: | ||||
| 			case BCODE_STORE_INTO_INSTVAR_2: | ||||
| 			case BCODE_STORE_INTO_INSTVAR_3: | ||||
| 			case BCODE_STORE_INTO_INSTVAR_4: | ||||
| 			case BCODE_STORE_INTO_INSTVAR_5: | ||||
| 			case BCODE_STORE_INTO_INSTVAR_6: | ||||
| 			case BCODE_STORE_INTO_INSTVAR_7: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_0: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_1: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_2: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_3: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_4: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_5: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_6: | ||||
| 			case HCL_CODE_STORE_INTO_INSTVAR_7: | ||||
| 				b1 = bcode & 0x7; /* low 3 bits */ | ||||
| 			store_instvar: | ||||
| 				LOG_INST_1 (hcl, "store_into_instvar %zu", b1); | ||||
| @ -1450,17 +1450,17 @@ static int execute (hcl_t* hcl) | ||||
| 				break; | ||||
|  | ||||
| 			/* ------------------------------------------------- */ | ||||
| 			case BCODE_POP_INTO_INSTVAR_X: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_X: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				goto pop_into_instvar; | ||||
| 			case BCODE_POP_INTO_INSTVAR_0: | ||||
| 			case BCODE_POP_INTO_INSTVAR_1: | ||||
| 			case BCODE_POP_INTO_INSTVAR_2: | ||||
| 			case BCODE_POP_INTO_INSTVAR_3: | ||||
| 			case BCODE_POP_INTO_INSTVAR_4: | ||||
| 			case BCODE_POP_INTO_INSTVAR_5: | ||||
| 			case BCODE_POP_INTO_INSTVAR_6: | ||||
| 			case BCODE_POP_INTO_INSTVAR_7: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_0: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_1: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_2: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_3: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_4: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_5: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_6: | ||||
| 			case HCL_CODE_POP_INTO_INSTVAR_7: | ||||
| 				b1 = bcode & 0x7; /* low 3 bits */ | ||||
| 			pop_into_instvar: | ||||
| 				LOG_INST_1 (hcl, "pop_into_instvar %zu", b1); | ||||
| @ -1473,7 +1473,7 @@ static int execute (hcl_t* hcl) | ||||
| 			/* ------------------------------------------------- */ | ||||
| 			case HCL_CODE_PUSH_TEMPVAR_X: | ||||
| 			case HCL_CODE_STORE_INTO_TEMPVAR_X: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_X: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_X: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				goto handle_tempvar; | ||||
|  | ||||
| @ -1493,14 +1493,14 @@ static int execute (hcl_t* hcl) | ||||
| 			case HCL_CODE_STORE_INTO_TEMPVAR_5: | ||||
| 			case HCL_CODE_STORE_INTO_TEMPVAR_6: | ||||
| 			case HCL_CODE_STORE_INTO_TEMPVAR_7: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_0: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_1: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_2: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_3: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_4: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_5: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_6: | ||||
| 			case BCODE_POP_INTO_TEMPVAR_7: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_0: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_1: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_2: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_3: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_4: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_5: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_6: | ||||
| 			case HCL_CODE_POP_INTO_TEMPVAR_7: | ||||
| 			{ | ||||
| 				hcl_oop_context_t ctx; | ||||
| 				hcl_ooi_t bx; | ||||
| @ -1590,7 +1590,7 @@ static int execute (hcl_t* hcl) | ||||
| 			case HCL_CODE_PUSH_LITERAL_X2: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b2); | ||||
| 		#if (HCL_BCODE_LONG_PARAM_SIZE == 2) | ||||
| 		#if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2) | ||||
| 				b1 = (b1 << 16) | b2; | ||||
| 		#else | ||||
| 				b1 = (b1 << 8) | b2; | ||||
| @ -1618,7 +1618,7 @@ static int execute (hcl_t* hcl) | ||||
| 			/* ------------------------------------------------- */ | ||||
| 			case HCL_CODE_PUSH_OBJECT_X: | ||||
| 			case HCL_CODE_STORE_INTO_OBJECT_X: | ||||
| 			case BCODE_POP_INTO_OBJECT_X: | ||||
| 			case HCL_CODE_POP_INTO_OBJECT_X: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				goto handle_object; | ||||
|  | ||||
| @ -1630,10 +1630,10 @@ static int execute (hcl_t* hcl) | ||||
| 			case HCL_CODE_STORE_INTO_OBJECT_1: | ||||
| 			case HCL_CODE_STORE_INTO_OBJECT_2: | ||||
| 			case HCL_CODE_STORE_INTO_OBJECT_3: | ||||
| 			case BCODE_POP_INTO_OBJECT_0: | ||||
| 			case BCODE_POP_INTO_OBJECT_1: | ||||
| 			case BCODE_POP_INTO_OBJECT_2: | ||||
| 			case BCODE_POP_INTO_OBJECT_3: | ||||
| 			case HCL_CODE_POP_INTO_OBJECT_0: | ||||
| 			case HCL_CODE_POP_INTO_OBJECT_1: | ||||
| 			case HCL_CODE_POP_INTO_OBJECT_2: | ||||
| 			case HCL_CODE_POP_INTO_OBJECT_3: | ||||
| 			{ | ||||
| 				hcl_oop_cons_t ass; | ||||
|  | ||||
| @ -1781,7 +1781,7 @@ static int execute (hcl_t* hcl) | ||||
|  | ||||
| 			case HCL_CODE_PUSH_CTXTEMPVAR_X: | ||||
| 			case HCL_CODE_STORE_INTO_CTXTEMPVAR_X: | ||||
| 			case BCODE_POP_INTO_CTXTEMPVAR_X: | ||||
| 			case HCL_CODE_POP_INTO_CTXTEMPVAR_X: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b2); | ||||
| 				goto handle_ctxtempvar; | ||||
| @ -1793,10 +1793,10 @@ static int execute (hcl_t* hcl) | ||||
| 			case HCL_CODE_STORE_INTO_CTXTEMPVAR_1: | ||||
| 			case HCL_CODE_STORE_INTO_CTXTEMPVAR_2: | ||||
| 			case HCL_CODE_STORE_INTO_CTXTEMPVAR_3: | ||||
| 			case BCODE_POP_INTO_CTXTEMPVAR_0: | ||||
| 			case BCODE_POP_INTO_CTXTEMPVAR_1: | ||||
| 			case BCODE_POP_INTO_CTXTEMPVAR_2: | ||||
| 			case BCODE_POP_INTO_CTXTEMPVAR_3: | ||||
| 			case HCL_CODE_POP_INTO_CTXTEMPVAR_0: | ||||
| 			case HCL_CODE_POP_INTO_CTXTEMPVAR_1: | ||||
| 			case HCL_CODE_POP_INTO_CTXTEMPVAR_2: | ||||
| 			case HCL_CODE_POP_INTO_CTXTEMPVAR_3: | ||||
| 			{ | ||||
| 				hcl_ooi_t i; | ||||
| 				hcl_oop_context_t ctx; | ||||
| @ -1840,25 +1840,25 @@ static int execute (hcl_t* hcl) | ||||
| 			} | ||||
| 			/* -------------------------------------------------------- */ | ||||
|  | ||||
| 			case BCODE_PUSH_OBJVAR_X: | ||||
| 			case BCODE_STORE_INTO_OBJVAR_X: | ||||
| 			case BCODE_POP_INTO_OBJVAR_X: | ||||
| 			case HCL_CODE_PUSH_OBJVAR_X: | ||||
| 			case HCL_CODE_STORE_INTO_OBJVAR_X: | ||||
| 			case HCL_CODE_POP_INTO_OBJVAR_X: | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b2); | ||||
| 				goto handle_objvar; | ||||
|  | ||||
| 			case BCODE_PUSH_OBJVAR_0: | ||||
| 			case BCODE_PUSH_OBJVAR_1: | ||||
| 			case BCODE_PUSH_OBJVAR_2: | ||||
| 			case BCODE_PUSH_OBJVAR_3: | ||||
| 			case BCODE_STORE_INTO_OBJVAR_0: | ||||
| 			case BCODE_STORE_INTO_OBJVAR_1: | ||||
| 			case BCODE_STORE_INTO_OBJVAR_2: | ||||
| 			case BCODE_STORE_INTO_OBJVAR_3: | ||||
| 			case BCODE_POP_INTO_OBJVAR_0: | ||||
| 			case BCODE_POP_INTO_OBJVAR_1: | ||||
| 			case BCODE_POP_INTO_OBJVAR_2: | ||||
| 			case BCODE_POP_INTO_OBJVAR_3: | ||||
| 			case HCL_CODE_PUSH_OBJVAR_0: | ||||
| 			case HCL_CODE_PUSH_OBJVAR_1: | ||||
| 			case HCL_CODE_PUSH_OBJVAR_2: | ||||
| 			case HCL_CODE_PUSH_OBJVAR_3: | ||||
| 			case HCL_CODE_STORE_INTO_OBJVAR_0: | ||||
| 			case HCL_CODE_STORE_INTO_OBJVAR_1: | ||||
| 			case HCL_CODE_STORE_INTO_OBJVAR_2: | ||||
| 			case HCL_CODE_STORE_INTO_OBJVAR_3: | ||||
| 			case HCL_CODE_POP_INTO_OBJVAR_0: | ||||
| 			case HCL_CODE_POP_INTO_OBJVAR_1: | ||||
| 			case HCL_CODE_POP_INTO_OBJVAR_2: | ||||
| 			case HCL_CODE_POP_INTO_OBJVAR_3: | ||||
| 			{ | ||||
| 				hcl_oop_oop_t t; | ||||
|  | ||||
| @ -1900,22 +1900,22 @@ static int execute (hcl_t* hcl) | ||||
|  | ||||
| 			/* -------------------------------------------------------- */ | ||||
| #if 0 | ||||
| 			case BCODE_SEND_MESSAGE_X: | ||||
| 			case BCODE_SEND_MESSAGE_TO_SUPER_X: | ||||
| 			case HCL_CODE_SEND_MESSAGE_X: | ||||
| 			case HCL_CODE_SEND_MESSAGE_TO_SUPER_X: | ||||
| 				/* b1 -> number of arguments  | ||||
| 				 * b2 -> selector index stored in the literal frame */ | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b1); | ||||
| 				FETCH_PARAM_CODE_TO (hcl, b2); | ||||
| 				goto handle_send_message; | ||||
|  | ||||
| 			case BCODE_SEND_MESSAGE_0: | ||||
| 			case BCODE_SEND_MESSAGE_1: | ||||
| 			case BCODE_SEND_MESSAGE_2: | ||||
| 			case BCODE_SEND_MESSAGE_3: | ||||
| 			case BCODE_SEND_MESSAGE_TO_SUPER_0: | ||||
| 			case BCODE_SEND_MESSAGE_TO_SUPER_1: | ||||
| 			case BCODE_SEND_MESSAGE_TO_SUPER_2: | ||||
| 			case BCODE_SEND_MESSAGE_TO_SUPER_3: | ||||
| 			case HCL_CODE_SEND_MESSAGE_0: | ||||
| 			case HCL_CODE_SEND_MESSAGE_1: | ||||
| 			case HCL_CODE_SEND_MESSAGE_2: | ||||
| 			case HCL_CODE_SEND_MESSAGE_3: | ||||
| 			case HCL_CODE_SEND_MESSAGE_TO_SUPER_0: | ||||
| 			case HCL_CODE_SEND_MESSAGE_TO_SUPER_1: | ||||
| 			case HCL_CODE_SEND_MESSAGE_TO_SUPER_2: | ||||
| 			case HCL_CODE_SEND_MESSAGE_TO_SUPER_3: | ||||
| 			{ | ||||
| 				hcl_oop_char_t selector; | ||||
|  | ||||
| @ -1934,7 +1934,7 @@ static int execute (hcl_t* hcl) | ||||
| #endif | ||||
| 			/* -------------------------------------------------------- */ | ||||
|  | ||||
| 			case BCODE_PUSH_RECEIVER: | ||||
| 			case HCL_CODE_PUSH_RECEIVER: | ||||
| 				LOG_INST_0 (hcl, "push_receiver"); | ||||
| 				HCL_STACK_PUSH (hcl, hcl->active_context->origin->receiver_or_source); | ||||
| 				break; | ||||
| @ -1954,12 +1954,12 @@ static int execute (hcl_t* hcl) | ||||
| 				HCL_STACK_PUSH (hcl, hcl->_false); | ||||
| 				break; | ||||
|  | ||||
| 			case BCODE_PUSH_CONTEXT: | ||||
| 			case HCL_CODE_PUSH_CONTEXT: | ||||
| 				LOG_INST_0 (hcl, "push_context"); | ||||
| 				HCL_STACK_PUSH (hcl, (hcl_oop_t)hcl->active_context); | ||||
| 				break; | ||||
|  | ||||
| 			case BCODE_PUSH_PROCESS: | ||||
| 			case HCL_CODE_PUSH_PROCESS: | ||||
| 				LOG_INST_0 (hcl, "push_process"); | ||||
| 				HCL_STACK_PUSH (hcl, (hcl_oop_t)hcl->processor->active); | ||||
| 				break; | ||||
| @ -2098,7 +2098,7 @@ static int execute (hcl_t* hcl) | ||||
|  | ||||
| 			/* -------------------------------------------------------- */ | ||||
|  | ||||
| 			case BCODE_DUP_STACKTOP: | ||||
| 			case HCL_CODE_DUP_STACKTOP: | ||||
| 			{ | ||||
| 				hcl_oop_t t; | ||||
| 				LOG_INST_0 (hcl, "dup_stacktop"); | ||||
| @ -2120,13 +2120,13 @@ static int execute (hcl_t* hcl) | ||||
| 				HCL_STACK_POP (hcl); | ||||
| 				break; | ||||
|  | ||||
| 			case BCODE_RETURN_STACKTOP: | ||||
| 			case HCL_CODE_RETURN_STACKTOP: | ||||
| 				LOG_INST_0 (hcl, "return_stacktop"); | ||||
| 				return_value = HCL_STACK_GETTOP(hcl); | ||||
| 				HCL_STACK_POP (hcl); | ||||
| 				goto handle_return; | ||||
|  | ||||
| 			case BCODE_RETURN_RECEIVER: | ||||
| 			case HCL_CODE_RETURN_RECEIVER: | ||||
| 				LOG_INST_0 (hcl, "return_receiver"); | ||||
| 				return_value = hcl->active_context->origin->receiver_or_source; | ||||
|  | ||||
| @ -2288,7 +2288,7 @@ static int execute (hcl_t* hcl) | ||||
| 	hcl_oow_t joff; | ||||
| 	HCL_ASSERT (hcl, hcl->code.bc.arr->slot[hcl->ip] == HCL_CODE_JUMP_FORWARD_X); | ||||
| 	joff = hcl->code.bc.arr->slot[hcl->ip + 1]; | ||||
| #if (HCL_BCODE_LONG_PARAM_SIZE == 2) | ||||
| #if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2) | ||||
| 	joff = (joff << 8) | hcl->code.bc.arr->slot[hcl->ip + 2]; | ||||
| #endif | ||||
|  | ||||
| @ -2307,9 +2307,9 @@ HCL_DEBUG1(hcl, "****  MAKE BLOCK joff = %zu\n", joff); | ||||
|  | ||||
| 				/* the long forward jump instruction has the format of  | ||||
| 				 *   11000100 KKKKKKKK or 11000100 KKKKKKKK KKKKKKKK  | ||||
| 				 * depending on HCL_BCODE_LONG_PARAM_SIZE. change 'ip' to point to | ||||
| 				 * depending on HCL_HCL_CODE_LONG_PARAM_SIZE. change 'ip' to point to | ||||
| 				 * the instruction after the jump. */ | ||||
| 				blkctx->ip = HCL_SMOOI_TO_OOP(hcl->ip + HCL_BCODE_LONG_PARAM_SIZE + 1); | ||||
| 				blkctx->ip = HCL_SMOOI_TO_OOP(hcl->ip + HCL_HCL_CODE_LONG_PARAM_SIZE + 1); | ||||
| 				/* stack pointer below the bottom. this base block context | ||||
| 				 * has an empty stack anyway. */ | ||||
| 				blkctx->sp = HCL_SMOOI_TO_OOP(-1); | ||||
| @ -2331,7 +2331,7 @@ HCL_DEBUG1(hcl, "****  MAKE BLOCK joff = %zu\n", joff); | ||||
| 				break; | ||||
| 			} | ||||
|  | ||||
| 			case BCODE_SEND_BLOCK_COPY: | ||||
| 			case HCL_CODE_SEND_BLOCK_COPY: | ||||
| 			{ | ||||
| 				hcl_ooi_t nargs, ntmprs; | ||||
| 				hcl_oop_context_t rctx; | ||||
| @ -2375,8 +2375,8 @@ HCL_DEBUG1(hcl, "****  MAKE BLOCK joff = %zu\n", joff); | ||||
| 				 *  blkctx->home is set here to the active context. | ||||
| 				 *  it's redundant to have them pushed to the stack | ||||
| 				 *  though it is to emulate the message sending of | ||||
| 				 *  blockCopy:withNtmprs:. BCODE_MAKE_BLOCK has been | ||||
| 				 *  added to replace BCODE_SEND_BLOCK_COPY and pusing | ||||
| 				 *  blockCopy:withNtmprs:. HCL_CODE_MAKE_BLOCK has been | ||||
| 				 *  added to replace HCL_CODE_SEND_BLOCK_COPY and pusing | ||||
| 				 *  arguments to the stack. | ||||
| 				 * | ||||
| 				 *  blkctx->origin is set here by copying the origin | ||||
| @ -2385,9 +2385,9 @@ HCL_DEBUG1(hcl, "****  MAKE BLOCK joff = %zu\n", joff); | ||||
|  | ||||
| 				/* the extended jump instruction has the format of  | ||||
| 				 *   0000XXXX KKKKKKKK or 0000XXXX KKKKKKKK KKKKKKKK  | ||||
| 				 * depending on HCL_BCODE_LONG_PARAM_SIZE. change 'ip' to point to | ||||
| 				 * depending on HCL_HCL_CODE_LONG_PARAM_SIZE. change 'ip' to point to | ||||
| 				 * the instruction after the jump. */ | ||||
| 				blkctx->ip = HCL_SMOOI_TO_OOP(hcl->ip + HCL_BCODE_LONG_PARAM_SIZE + 1); | ||||
| 				blkctx->ip = HCL_SMOOI_TO_OOP(hcl->ip + HCL_HCL_CODE_LONG_PARAM_SIZE + 1); | ||||
| 				blkctx->sp = HCL_SMOOI_TO_OOP(-1); | ||||
| 				/* the number of arguments for a block context is local to the block */ | ||||
| 				blkctx->method_or_nargs = HCL_SMOOI_TO_OOP(nargs); | ||||
|  | ||||
| @ -31,7 +31,7 @@ | ||||
| #include "hcl-utl.h" | ||||
|  | ||||
| /* you can define this to either 1 or 2 */ | ||||
| #define HCL_BCODE_LONG_PARAM_SIZE 2 | ||||
| #define HCL_HCL_CODE_LONG_PARAM_SIZE 2 | ||||
|  | ||||
| /* this is useful for debugging. hcl_gc() can be called  | ||||
|  * while hcl has not been fully initialized when this is defined*/ | ||||
| @ -312,7 +312,7 @@ struct hcl_compiler_t | ||||
| #endif | ||||
|  | ||||
|  | ||||
| #if defined(HCL_BCODE_LONG_PARAM_SIZE) && (HCL_BCODE_LONG_PARAM_SIZE == 1) | ||||
| #if defined(HCL_HCL_CODE_LONG_PARAM_SIZE) && (HCL_HCL_CODE_LONG_PARAM_SIZE == 1) | ||||
| #	define MAX_CODE_INDEX               (0xFFu) | ||||
| #	define MAX_CODE_NTMPRS              (0xFFu) | ||||
| #	define MAX_CODE_NARGS               (0xFFu) | ||||
| @ -321,7 +321,7 @@ struct hcl_compiler_t | ||||
| #	define MAX_CODE_JUMP                (0xFFu) | ||||
| #	define MAX_CODE_PARAM               (0xFFu) | ||||
| #	define MAX_CODE_PARAM2              (0xFFFFu) | ||||
| #elif defined(HCL_BCODE_LONG_PARAM_SIZE) && (HCL_BCODE_LONG_PARAM_SIZE == 2) | ||||
| #elif defined(HCL_HCL_CODE_LONG_PARAM_SIZE) && (HCL_HCL_CODE_LONG_PARAM_SIZE == 2) | ||||
| #	define MAX_CODE_INDEX               (0xFFFFu) | ||||
| #	define MAX_CODE_NTMPRS              (0xFFFFu) | ||||
| #	define MAX_CODE_NARGS               (0xFFFFu) | ||||
| @ -331,7 +331,7 @@ struct hcl_compiler_t | ||||
| #	define MAX_CODE_PARAM               (0xFFFFu) | ||||
| #	define MAX_CODE_PARAM2              (0xFFFFFFFFu) | ||||
| #else | ||||
| #	error Unsupported HCL_BCODE_LONG_PARAM_SIZE | ||||
| #	error Unsupported HCL_HCL_CODE_LONG_PARAM_SIZE | ||||
| #endif | ||||
|  | ||||
|  | ||||
| @ -402,35 +402,35 @@ SHORT INSTRUCTION CODE                                        LONG INSTRUCTION C | ||||
|  | ||||
| enum hcl_bcode_t | ||||
| { | ||||
| 	BCODE_STORE_INTO_INSTVAR_0     = 0x00, | ||||
| 	BCODE_STORE_INTO_INSTVAR_1     = 0x01, | ||||
| 	BCODE_STORE_INTO_INSTVAR_2     = 0x02, | ||||
| 	BCODE_STORE_INTO_INSTVAR_3     = 0x03, | ||||
| 	HCL_CODE_STORE_INTO_INSTVAR_0     = 0x00, | ||||
| 	HCL_CODE_STORE_INTO_INSTVAR_1     = 0x01, | ||||
| 	HCL_CODE_STORE_INTO_INSTVAR_2     = 0x02, | ||||
| 	HCL_CODE_STORE_INTO_INSTVAR_3     = 0x03, | ||||
|  | ||||
| 	BCODE_STORE_INTO_INSTVAR_4     = 0x04, | ||||
| 	BCODE_STORE_INTO_INSTVAR_5     = 0x05, | ||||
| 	BCODE_STORE_INTO_INSTVAR_6     = 0x06, | ||||
| 	BCODE_STORE_INTO_INSTVAR_7     = 0x07, | ||||
| 	HCL_CODE_STORE_INTO_INSTVAR_4     = 0x04, | ||||
| 	HCL_CODE_STORE_INTO_INSTVAR_5     = 0x05, | ||||
| 	HCL_CODE_STORE_INTO_INSTVAR_6     = 0x06, | ||||
| 	HCL_CODE_STORE_INTO_INSTVAR_7     = 0x07, | ||||
|  | ||||
| 	BCODE_POP_INTO_INSTVAR_0       = 0x08, | ||||
| 	BCODE_POP_INTO_INSTVAR_1       = 0x09, | ||||
| 	BCODE_POP_INTO_INSTVAR_2       = 0x0A, | ||||
| 	BCODE_POP_INTO_INSTVAR_3       = 0x0B, | ||||
| 	HCL_CODE_POP_INTO_INSTVAR_0       = 0x08, | ||||
| 	HCL_CODE_POP_INTO_INSTVAR_1       = 0x09, | ||||
| 	HCL_CODE_POP_INTO_INSTVAR_2       = 0x0A, | ||||
| 	HCL_CODE_POP_INTO_INSTVAR_3       = 0x0B, | ||||
|  | ||||
| 	BCODE_POP_INTO_INSTVAR_4       = 0x0C, | ||||
| 	BCODE_POP_INTO_INSTVAR_5       = 0x0D, | ||||
| 	BCODE_POP_INTO_INSTVAR_6       = 0x0E, | ||||
| 	BCODE_POP_INTO_INSTVAR_7       = 0x0F, | ||||
| 	HCL_CODE_POP_INTO_INSTVAR_4       = 0x0C, | ||||
| 	HCL_CODE_POP_INTO_INSTVAR_5       = 0x0D, | ||||
| 	HCL_CODE_POP_INTO_INSTVAR_6       = 0x0E, | ||||
| 	HCL_CODE_POP_INTO_INSTVAR_7       = 0x0F, | ||||
|  | ||||
| 	BCODE_PUSH_INSTVAR_0           = 0x10, | ||||
| 	BCODE_PUSH_INSTVAR_1           = 0x11, | ||||
| 	BCODE_PUSH_INSTVAR_2           = 0x12, | ||||
| 	BCODE_PUSH_INSTVAR_3           = 0x13, | ||||
| 	HCL_CODE_PUSH_INSTVAR_0           = 0x10, | ||||
| 	HCL_CODE_PUSH_INSTVAR_1           = 0x11, | ||||
| 	HCL_CODE_PUSH_INSTVAR_2           = 0x12, | ||||
| 	HCL_CODE_PUSH_INSTVAR_3           = 0x13, | ||||
|  | ||||
| 	BCODE_PUSH_INSTVAR_4           = 0x14, | ||||
| 	BCODE_PUSH_INSTVAR_5           = 0x15, | ||||
| 	BCODE_PUSH_INSTVAR_6           = 0x16, | ||||
| 	BCODE_PUSH_INSTVAR_7           = 0x17, | ||||
| 	HCL_CODE_PUSH_INSTVAR_4           = 0x14, | ||||
| 	HCL_CODE_PUSH_INSTVAR_5           = 0x15, | ||||
| 	HCL_CODE_PUSH_INSTVAR_6           = 0x16, | ||||
| 	HCL_CODE_PUSH_INSTVAR_7           = 0x17, | ||||
|  | ||||
| 	HCL_CODE_PUSH_TEMPVAR_0           = 0x18, | ||||
| 	HCL_CODE_PUSH_TEMPVAR_1           = 0x19, | ||||
| @ -452,15 +452,15 @@ enum hcl_bcode_t | ||||
| 	HCL_CODE_STORE_INTO_TEMPVAR_6     = 0x26, | ||||
| 	HCL_CODE_STORE_INTO_TEMPVAR_7     = 0x27, | ||||
|  | ||||
| 	BCODE_POP_INTO_TEMPVAR_0       = 0x28, | ||||
| 	BCODE_POP_INTO_TEMPVAR_1       = 0x29, | ||||
| 	BCODE_POP_INTO_TEMPVAR_2       = 0x2A, | ||||
| 	BCODE_POP_INTO_TEMPVAR_3       = 0x2B, | ||||
| 	HCL_CODE_POP_INTO_TEMPVAR_0       = 0x28, | ||||
| 	HCL_CODE_POP_INTO_TEMPVAR_1       = 0x29, | ||||
| 	HCL_CODE_POP_INTO_TEMPVAR_2       = 0x2A, | ||||
| 	HCL_CODE_POP_INTO_TEMPVAR_3       = 0x2B, | ||||
|  | ||||
| 	BCODE_POP_INTO_TEMPVAR_4       = 0x2C, | ||||
| 	BCODE_POP_INTO_TEMPVAR_5       = 0x2D, | ||||
| 	BCODE_POP_INTO_TEMPVAR_6       = 0x2E, | ||||
| 	BCODE_POP_INTO_TEMPVAR_7       = 0x2F, | ||||
| 	HCL_CODE_POP_INTO_TEMPVAR_4       = 0x2C, | ||||
| 	HCL_CODE_POP_INTO_TEMPVAR_5       = 0x2D, | ||||
| 	HCL_CODE_POP_INTO_TEMPVAR_6       = 0x2E, | ||||
| 	HCL_CODE_POP_INTO_TEMPVAR_7       = 0x2F, | ||||
|  | ||||
| 	HCL_CODE_PUSH_LITERAL_0           = 0x30, | ||||
| 	HCL_CODE_PUSH_LITERAL_1           = 0x31, | ||||
| @ -479,10 +479,10 @@ enum hcl_bcode_t | ||||
| 	HCL_CODE_STORE_INTO_OBJECT_2      = 0x3A, | ||||
| 	HCL_CODE_STORE_INTO_OBJECT_3      = 0x3B, | ||||
|  | ||||
| 	BCODE_POP_INTO_OBJECT_0           = 0x3C, | ||||
| 	BCODE_POP_INTO_OBJECT_1           = 0x3D, | ||||
| 	BCODE_POP_INTO_OBJECT_2           = 0x3E, | ||||
| 	BCODE_POP_INTO_OBJECT_3           = 0x3F, | ||||
| 	HCL_CODE_POP_INTO_OBJECT_0        = 0x3C, | ||||
| 	HCL_CODE_POP_INTO_OBJECT_1        = 0x3D, | ||||
| 	HCL_CODE_POP_INTO_OBJECT_2        = 0x3E, | ||||
| 	HCL_CODE_POP_INTO_OBJECT_3        = 0x3F, | ||||
|  | ||||
| 	HCL_CODE_PUSH_OBJECT_0            = 0x40, | ||||
| 	HCL_CODE_PUSH_OBJECT_1            = 0x41, | ||||
| @ -500,15 +500,15 @@ enum hcl_bcode_t | ||||
| 	HCL_CODE_JUMP_BACKWARD_3          = 0x4B, /* 75 */ | ||||
|  | ||||
| #if 0 | ||||
| 	BCODE_JUMP_BACKWARD_IF_FALSE_0 = 0x4C, /* 76 */ | ||||
| 	BCODE_JUMP_BACKWARD_IF_FALSE_1 = 0x4D, /* 77 */ | ||||
| 	BCODE_JUMP_BACKWARD_IF_FALSE_2 = 0x4E, /* 78 */ | ||||
| 	BCODE_JUMP_BACKWARD_IF_FALSE_3 = 0x4F, /* 79 */ | ||||
| 	HCL_CODE_JUMP_BACKWARD_IF_FALSE_0 = 0x4C, /* 76 */ | ||||
| 	HCL_CODE_JUMP_BACKWARD_IF_FALSE_1 = 0x4D, /* 77 */ | ||||
| 	HCL_CODE_JUMP_BACKWARD_IF_FALSE_2 = 0x4E, /* 78 */ | ||||
| 	HCL_CODE_JUMP_BACKWARD_IF_FALSE_3 = 0x4F, /* 79 */ | ||||
|  | ||||
| 	BCODE_JUMP_BACKWARD_IF_TRUE_0  = 0x50, /* 80 */ | ||||
| 	BCODE_JUMP_BACKWARD_IF_TRUE_1  = 0x51, /* 81 */ | ||||
| 	BCODE_JUMP_BACKWARD_IF_TRUE_2  = 0x52, /* 82 */ | ||||
| 	BCODE_JUMP_BACKWARD_IF_TRUE_3  = 0x53, /* 83 */ | ||||
| 	HCL_CODE_JUMP_BACKWARD_IF_TRUE_0  = 0x50, /* 80 */ | ||||
| 	HCL_CODE_JUMP_BACKWARD_IF_TRUE_1  = 0x51, /* 81 */ | ||||
| 	HCL_CODE_JUMP_BACKWARD_IF_TRUE_2  = 0x52, /* 82 */ | ||||
| 	HCL_CODE_JUMP_BACKWARD_IF_TRUE_3  = 0x53, /* 83 */ | ||||
| #endif | ||||
|  | ||||
| 	HCL_CODE_CALL_0                   = 0x54, /* 84 */ | ||||
| @ -521,65 +521,65 @@ enum hcl_bcode_t | ||||
| 	HCL_CODE_STORE_INTO_CTXTEMPVAR_2  = 0x5A, /* 90 */ | ||||
| 	HCL_CODE_STORE_INTO_CTXTEMPVAR_3  = 0x5B, /* 91 */ | ||||
|  | ||||
| 	BCODE_POP_INTO_CTXTEMPVAR_0       = 0x5C, /* 92 */ | ||||
| 	BCODE_POP_INTO_CTXTEMPVAR_1       = 0x5D, /* 93 */ | ||||
| 	BCODE_POP_INTO_CTXTEMPVAR_2       = 0x5E, /* 94 */ | ||||
| 	BCODE_POP_INTO_CTXTEMPVAR_3       = 0x5F, /* 95 */ | ||||
| 	HCL_CODE_POP_INTO_CTXTEMPVAR_0    = 0x5C, /* 92 */ | ||||
| 	HCL_CODE_POP_INTO_CTXTEMPVAR_1    = 0x5D, /* 93 */ | ||||
| 	HCL_CODE_POP_INTO_CTXTEMPVAR_2    = 0x5E, /* 94 */ | ||||
| 	HCL_CODE_POP_INTO_CTXTEMPVAR_3    = 0x5F, /* 95 */ | ||||
|  | ||||
| 	HCL_CODE_PUSH_CTXTEMPVAR_0        = 0x60, /* 96 */ | ||||
| 	HCL_CODE_PUSH_CTXTEMPVAR_1        = 0x61, /* 97 */ | ||||
| 	HCL_CODE_PUSH_CTXTEMPVAR_2        = 0x62, /* 98 */ | ||||
| 	HCL_CODE_PUSH_CTXTEMPVAR_3        = 0x63, /* 99 */ | ||||
|  | ||||
| 	BCODE_PUSH_OBJVAR_0               = 0x64, | ||||
| 	BCODE_PUSH_OBJVAR_1               = 0x65, | ||||
| 	BCODE_PUSH_OBJVAR_2               = 0x66, | ||||
| 	BCODE_PUSH_OBJVAR_3               = 0x67, | ||||
| 	HCL_CODE_PUSH_OBJVAR_0            = 0x64, | ||||
| 	HCL_CODE_PUSH_OBJVAR_1            = 0x65, | ||||
| 	HCL_CODE_PUSH_OBJVAR_2            = 0x66, | ||||
| 	HCL_CODE_PUSH_OBJVAR_3            = 0x67, | ||||
|  | ||||
| 	BCODE_STORE_INTO_OBJVAR_0         = 0x68, | ||||
| 	BCODE_STORE_INTO_OBJVAR_1         = 0x69, | ||||
| 	BCODE_STORE_INTO_OBJVAR_2         = 0x6A, | ||||
| 	BCODE_STORE_INTO_OBJVAR_3         = 0x6B, | ||||
| 	HCL_CODE_STORE_INTO_OBJVAR_0      = 0x68, | ||||
| 	HCL_CODE_STORE_INTO_OBJVAR_1      = 0x69, | ||||
| 	HCL_CODE_STORE_INTO_OBJVAR_2      = 0x6A, | ||||
| 	HCL_CODE_STORE_INTO_OBJVAR_3      = 0x6B, | ||||
|  | ||||
| 	BCODE_POP_INTO_OBJVAR_0           = 0x6C, | ||||
| 	BCODE_POP_INTO_OBJVAR_1           = 0x6D, | ||||
| 	BCODE_POP_INTO_OBJVAR_2           = 0x6E, | ||||
| 	BCODE_POP_INTO_OBJVAR_3           = 0x6F, | ||||
| 	HCL_CODE_POP_INTO_OBJVAR_0        = 0x6C, | ||||
| 	HCL_CODE_POP_INTO_OBJVAR_1        = 0x6D, | ||||
| 	HCL_CODE_POP_INTO_OBJVAR_2        = 0x6E, | ||||
| 	HCL_CODE_POP_INTO_OBJVAR_3        = 0x6F, | ||||
|  | ||||
| 	BCODE_SEND_MESSAGE_0              = 0x70, | ||||
| 	BCODE_SEND_MESSAGE_1              = 0x71, | ||||
| 	BCODE_SEND_MESSAGE_2              = 0x72, | ||||
| 	BCODE_SEND_MESSAGE_3              = 0x73, | ||||
| 	HCL_CODE_SEND_MESSAGE_0           = 0x70, | ||||
| 	HCL_CODE_SEND_MESSAGE_1           = 0x71, | ||||
| 	HCL_CODE_SEND_MESSAGE_2           = 0x72, | ||||
| 	HCL_CODE_SEND_MESSAGE_3           = 0x73, | ||||
|  | ||||
| 	BCODE_SEND_MESSAGE_TO_SUPER_0     = 0x74, | ||||
| 	BCODE_SEND_MESSAGE_TO_SUPER_1     = 0x75, | ||||
| 	BCODE_SEND_MESSAGE_TO_SUPER_2     = 0x76, | ||||
| 	BCODE_SEND_MESSAGE_TO_SUPER_3     = 0x77, | ||||
| 	HCL_CODE_SEND_MESSAGE_TO_SUPER_0  = 0x74, | ||||
| 	HCL_CODE_SEND_MESSAGE_TO_SUPER_1  = 0x75, | ||||
| 	HCL_CODE_SEND_MESSAGE_TO_SUPER_2  = 0x76, | ||||
| 	HCL_CODE_SEND_MESSAGE_TO_SUPER_3  = 0x77, | ||||
|  | ||||
| 	/* UNUSED 0x78 - 0x7F */ | ||||
|  | ||||
| 	BCODE_STORE_INTO_INSTVAR_X        = 0x80, /* 128 */ | ||||
| 	HCL_CODE_STORE_INTO_INSTVAR_X     = 0x80, /* 128 */ | ||||
|  | ||||
|  | ||||
| 	BCODE_PUSH_RECEIVER               = 0x81, /* 129 */ | ||||
| 	HCL_CODE_PUSH_RECEIVER            = 0x81, /* 129 */ | ||||
| 	HCL_CODE_PUSH_NIL                 = 0x82, /* 130 */ | ||||
| 	HCL_CODE_PUSH_TRUE                = 0x83, /* 131 */ | ||||
| 	HCL_CODE_PUSH_FALSE               = 0x84, /* 132 */ | ||||
| 	BCODE_PUSH_CONTEXT                = 0x85, /* 133 */ | ||||
| 	BCODE_PUSH_PROCESS                = 0x86, /* 134 */ | ||||
| 	HCL_CODE_PUSH_CONTEXT             = 0x85, /* 133 */ | ||||
| 	HCL_CODE_PUSH_PROCESS             = 0x86, /* 134 */ | ||||
| 	/* UNUSED135 */ | ||||
|  | ||||
| 	BCODE_POP_INTO_INSTVAR_X          = 0x88, /* 136 ## */ | ||||
| 	HCL_CODE_POP_INTO_INSTVAR_X       = 0x88, /* 136 ## */ | ||||
|  | ||||
| 	HCL_CODE_PUSH_NEGONE              = 0x89, /* 137 */ | ||||
| 	HCL_CODE_PUSH_ZERO                = 0x8A, /* 138 */ | ||||
| 	HCL_CODE_PUSH_ONE                 = 0x8B, /* 139 */ | ||||
| 	HCL_CODE_PUSH_TWO                 = 0x8C, /* 140 */ | ||||
|  | ||||
| 	BCODE_PUSH_INSTVAR_X              = 0x90, /* 144 ## */ | ||||
| 	HCL_CODE_PUSH_INSTVAR_X           = 0x90, /* 144 ## */ | ||||
| 	HCL_CODE_PUSH_TEMPVAR_X           = 0x98, /* 152 ## */ | ||||
| 	HCL_CODE_STORE_INTO_TEMPVAR_X     = 0xA0, /* 160 ## */ | ||||
| 	BCODE_POP_INTO_TEMPVAR_X          = 0xA8, /* 168 ## */ | ||||
| 	HCL_CODE_POP_INTO_TEMPVAR_X       = 0xA8, /* 168 ## */ | ||||
|  | ||||
| 	HCL_CODE_PUSH_LITERAL_X           = 0xB0, /* 176 ## */ | ||||
| 	HCL_CODE_PUSH_LITERAL_X2          = 0xB1, /* 177 */ | ||||
| @ -589,7 +589,7 @@ enum hcl_bcode_t | ||||
| 	HCL_CODE_PUSH_CHARLIT             = 0xB4, /* 180 */ | ||||
|  | ||||
| 	HCL_CODE_STORE_INTO_OBJECT_X      = 0xB8, /* 184 ## */ | ||||
| 	BCODE_POP_INTO_OBJECT_X           = 0xBC, /* 188 ## */ | ||||
| 	HCL_CODE_POP_INTO_OBJECT_X        = 0xBC, /* 188 ## */ | ||||
| 	HCL_CODE_PUSH_OBJECT_X            = 0xC0, /* 192 ## */ | ||||
|  | ||||
| 	HCL_CODE_JUMP_FORWARD_X           = 0xC4, /* 196 ## */ | ||||
| @ -606,38 +606,38 @@ enum hcl_bcode_t | ||||
| 	HCL_CODE_CALL_X                   = 0xD4, /* 212 */ | ||||
|  | ||||
| 	HCL_CODE_STORE_INTO_CTXTEMPVAR_X  = 0xD8, /* 216 ## */ | ||||
| 	BCODE_POP_INTO_CTXTEMPVAR_X       = 0xDC, /* 220 ## */ | ||||
| 	HCL_CODE_POP_INTO_CTXTEMPVAR_X    = 0xDC, /* 220 ## */ | ||||
| 	HCL_CODE_PUSH_CTXTEMPVAR_X        = 0xE0, /* 224 ## */ | ||||
|  | ||||
| 	BCODE_PUSH_OBJVAR_X               = 0xE4, /* 228 ## */ | ||||
| 	BCODE_STORE_INTO_OBJVAR_X         = 0xE8, /* 232 ## */ | ||||
| 	BCODE_POP_INTO_OBJVAR_X           = 0xEC, /* 236 ## */ | ||||
| 	HCL_CODE_PUSH_OBJVAR_X            = 0xE4, /* 228 ## */ | ||||
| 	HCL_CODE_STORE_INTO_OBJVAR_X      = 0xE8, /* 232 ## */ | ||||
| 	HCL_CODE_POP_INTO_OBJVAR_X        = 0xEC, /* 236 ## */ | ||||
|  | ||||
| 	/* UNUSED 237 */ | ||||
| 	HCL_CODE_MAKE_BYTEARRAY           = 0xEE, /* 238 */ | ||||
| 	HCL_CODE_POP_INTO_BYTEARRAY       = 0xEF, /* 239 */ | ||||
|  | ||||
| 	BCODE_SEND_MESSAGE_X              = 0xF0, /* 240 ## */ | ||||
| 	HCL_CODE_SEND_MESSAGE_X           = 0xF0, /* 240 ## */ | ||||
|  | ||||
| 	/* UNUSED 241 */ | ||||
|  | ||||
| 	HCL_CODE_MAKE_DIC                 = 0xF2, /* 242 */ | ||||
| 	HCL_CODE_POP_INTO_DIC             = 0xF3, /* 243 */ | ||||
| 	BCODE_SEND_MESSAGE_TO_SUPER_X     = 0xF4, /* 244 ## */ | ||||
| 	HCL_CODE_SEND_MESSAGE_TO_SUPER_X  = 0xF4, /* 244 ## */ | ||||
|  | ||||
| 	/* -------------------------------------- */ | ||||
|  | ||||
| 	HCL_CODE_MAKE_ARRAY               = 0xF5, /* 245 */ | ||||
| 	HCL_CODE_POP_INTO_ARRAY           = 0xF6, /* 246 */ | ||||
|  | ||||
| 	BCODE_DUP_STACKTOP                = 0xF7, | ||||
| 	HCL_CODE_DUP_STACKTOP             = 0xF7, | ||||
| 	HCL_CODE_POP_STACKTOP             = 0xF8, | ||||
| 	BCODE_RETURN_STACKTOP             = 0xF9, /* ^something */ | ||||
| 	BCODE_RETURN_RECEIVER             = 0xFA, /* ^self */ | ||||
| 	HCL_CODE_RETURN_STACKTOP          = 0xF9, /* ^something */ | ||||
| 	HCL_CODE_RETURN_RECEIVER          = 0xFA, /* ^self */ | ||||
| 	HCL_CODE_RETURN_FROM_BLOCK        = 0xFB, /* return the stack top from a block */ | ||||
| 	/* UNUSED 252 */ | ||||
| 	HCL_CODE_MAKE_BLOCK               = 0xFD, /* 253 */ | ||||
| 	BCODE_SEND_BLOCK_COPY             = 0xFE, /* 254 */ | ||||
| 	HCL_CODE_SEND_BLOCK_COPY          = 0xFE, /* 254 */ | ||||
| 	HCL_CODE_NOOP                     = 0xFF  /* 255 */ | ||||
| }; | ||||
|  | ||||
|  | ||||
| @ -93,9 +93,46 @@ static void free_heap (hcl_t* hcl, void* ptr) | ||||
| 	hcl_freemem (hcl, ptr); | ||||
| } | ||||
|  | ||||
| static int push_code_container (hcl_t* hcl) | ||||
| { | ||||
| 	hcl_code_container_t* cc; | ||||
|  | ||||
| 	cc = hcl_callocmem(hcl, HCL_SIZEOF(*cc)); | ||||
| 	if (HCL_UNLIKELY(!cc)) return -1; | ||||
|  | ||||
| 	cc->_par = hcl->ccstk; | ||||
| 	hcl->ccstk = cc; | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static void pop_code_container (hcl_t* hcl) | ||||
| { | ||||
| 	hcl_code_container_t* cc = hcl->ccstk; | ||||
|  | ||||
| 	if (cc->bc.arr) | ||||
| 	{ | ||||
| 		hcl_freengcobj (hcl, (hcl_oop_t)cc->bc.arr); | ||||
| 		cc->bc.arr = HCL_NULL; | ||||
| 		cc->bc.len = 0; | ||||
| 	} | ||||
|  | ||||
| 	if (cc->lit.arr) | ||||
| 	{ | ||||
| 		hcl_freengcobj (hcl, (hcl_oop_t)cc->lit.arr); | ||||
| 		cc->lit.arr = HCL_NULL; | ||||
| 		cc->lit.len = 0; | ||||
| 	} | ||||
|  | ||||
| 	hcl->ccstk = cc->_par; | ||||
| 	hcl_freemem (hcl, cc); | ||||
| } | ||||
|  | ||||
|  | ||||
| int hcl_init (hcl_t* hcl, hcl_mmgr_t* mmgr, hcl_oow_t heapsz, const hcl_vmprim_t* vmprim) | ||||
| { | ||||
| 	int modtab_inited = 0; | ||||
| 	int n; | ||||
|  | ||||
| 	if (!vmprim->syserrstrb && !vmprim->syserrstru) | ||||
| 	{ | ||||
| @ -135,9 +172,10 @@ int hcl_init (hcl_t* hcl, hcl_mmgr_t* mmgr, hcl_oow_t heapsz, const hcl_vmprim_t | ||||
| 	 * reallocation fails */ | ||||
| 	/* +1 required for consistency with put_oocs and put_ooch in logfmt.c */ | ||||
| 	hcl->log.ptr = (hcl_ooch_t*)hcl_allocmem(hcl, (hcl->log.capa + 1) * HCL_SIZEOF(*hcl->log.ptr));  | ||||
| 	if (!hcl->log.ptr) goto oops; | ||||
| 	if (HCL_UNLIKELY(!hcl->log.ptr)) goto oops; | ||||
|  | ||||
| 	if (hcl_rbt_init(&hcl->modtab, hcl, HCL_SIZEOF(hcl_ooch_t), 1) <= -1) goto oops; | ||||
| 	n = hcl_rbt_init(&hcl->modtab, hcl, HCL_SIZEOF(hcl_ooch_t), 1); | ||||
| 	if (HCL_UNLIKELY(n <= -1)) goto oops; | ||||
| 	modtab_inited = 1; | ||||
| 	hcl_rbt_setstyle(&hcl->modtab, hcl_get_rbt_style(HCL_RBT_STYLE_INLINE_COPIERS)); | ||||
|  | ||||
| @ -154,14 +192,18 @@ int hcl_init (hcl_t* hcl, hcl_mmgr_t* mmgr, hcl_oow_t heapsz, const hcl_vmprim_t | ||||
| 	/*hcl->permheap = hcl_makeheap (hcl, what is the best size???); | ||||
| 	if (!hcl->curheap) goto oops; */ | ||||
| 	hcl->curheap = hcl_makeheap(hcl, heapsz); | ||||
| 	if (!hcl->curheap) goto oops; | ||||
| 	if (HCL_UNLIKELY(!hcl->curheap)) goto oops; | ||||
| 	hcl->newheap = hcl_makeheap(hcl, heapsz); | ||||
| 	if (!hcl->newheap) goto oops; | ||||
| 	if (HCL_UNLIKELY(!hcl->newheap)) goto oops; | ||||
|  | ||||
| 	n = push_code_container(hcl); | ||||
| 	if (HCL_UNLIKELY(n <= -1)) goto oops; | ||||
|  | ||||
| 	if (hcl->vmprim.dl_startup) hcl->vmprim.dl_startup (hcl); | ||||
| 	return 0; | ||||
|  | ||||
| oops: | ||||
| 	if (hcl->ccstk) pop_code_container(hcl); | ||||
| 	if (hcl->newheap) hcl_killheap (hcl, hcl->newheap); | ||||
| 	if (hcl->curheap) hcl_killheap (hcl, hcl->curheap); | ||||
| 	if (hcl->permheap) hcl_killheap (hcl, hcl->permheap); | ||||
| @ -253,6 +295,8 @@ void hcl_fini (hcl_t* hcl) | ||||
| 		hcl->code.lit.len = 0; | ||||
| 	} | ||||
|  | ||||
| 	while (hcl->ccstk) pop_code_container(hcl); | ||||
|  | ||||
| 	if (hcl->p.s.ptr) | ||||
| 	{ | ||||
| 		hcl_freemem (hcl, hcl->p.s.ptr); | ||||
| @ -320,6 +364,12 @@ void hcl_reset (hcl_t* hcl) | ||||
| 	hcl->code.bc.len = 0; | ||||
| 	hcl->code.lit.len = 0; | ||||
|  | ||||
| 	/* keep the base container */ | ||||
| 	HCL_ASSERT (hcl, hcl->ccstk != HCL_NULL); | ||||
| 	while (hcl->ccstk->_par) pop_code_container(hcl); | ||||
| 	hcl->ccstk->bc.len = 0; | ||||
| 	hcl->ccstk->lit.len = 0; | ||||
|  | ||||
| 	/* clean up object memory */ | ||||
| 	hcl_gc (hcl); | ||||
| } | ||||
|  | ||||
| @ -1091,6 +1091,25 @@ typedef struct hcl_compiler_t hcl_compiler_t; | ||||
|  | ||||
| #define HCL_ERRMSG_CAPA (2048) | ||||
|  | ||||
| typedef struct hcl_code_container_t hcl_code_container_t; | ||||
| struct hcl_code_container_t | ||||
| { | ||||
| 	struct | ||||
| 	{ | ||||
| 		hcl_oop_byte_t arr; /* byte code array - not part of object memory */ | ||||
| 		hcl_oow_t len; | ||||
| 	} bc; | ||||
|  | ||||
| 	struct | ||||
| 	{ | ||||
| 		hcl_oop_oop_t arr; /* literal array - not part of object memory */ | ||||
| 		hcl_oow_t len; | ||||
| 	} lit; | ||||
|  | ||||
| 	hcl_code_container_t* _par; | ||||
| }; | ||||
|  | ||||
|  | ||||
| struct hcl_t | ||||
| { | ||||
| 	hcl_oow_t    _instsize; | ||||
| @ -1241,20 +1260,8 @@ struct hcl_t | ||||
| 		} xbuf; /* buffer to support sprintf */ | ||||
| 	} sprintf; | ||||
|  | ||||
| 	struct | ||||
| 	{ | ||||
| 		struct | ||||
| 		{ | ||||
| 			hcl_oop_byte_t arr; /* byte code array - not part of object memory */ | ||||
| 			hcl_oow_t len; | ||||
| 		} bc; | ||||
|  | ||||
| 		struct | ||||
| 		{ | ||||
| 			hcl_oop_oop_t arr; /* literal array - not part of object memory */ | ||||
| 			hcl_oow_t len; | ||||
| 		} lit; | ||||
| 	} code; | ||||
| 	hcl_code_container_t* ccstk; /* byte-code container stack */ | ||||
| 	hcl_code_container_t code; /* byte-code structure generated by compilers */ | ||||
|  | ||||
| 	/* == PRINTER == */ | ||||
| 	struct | ||||
|  | ||||
		Reference in New Issue
	
	Block a user