experiment to convert an error from a primitive function to an exception
This commit is contained in:
		| @ -654,6 +654,14 @@ static int emit_indexed_variable_access (hcl_t* hcl, hcl_oow_t index, hcl_oob_t | |||||||
| 	HCL_ASSERT (hcl, index < fbi->tmprcnt); | 	HCL_ASSERT (hcl, index < fbi->tmprcnt); | ||||||
| 	for (i = hcl->c->fnblk.depth; i >= 0; i--) | 	for (i = hcl->c->fnblk.depth; i >= 0; i--) | ||||||
| 	{ | 	{ | ||||||
|  | #if 0 | ||||||
|  | 		if (i > 0 && hcl->c->fnblk.info[hcl->c->fnblk.info[i - 1].type == FNBLK_CLASS)  | ||||||
|  | 		{ | ||||||
|  | 			break; | ||||||
|  | 		} | ||||||
|  | 		else | ||||||
|  | 		{ | ||||||
|  | #endif | ||||||
| 			hcl_oow_t parent_tmprcnt; | 			hcl_oow_t parent_tmprcnt; | ||||||
|  |  | ||||||
| 			parent_tmprcnt = (i > 0)? hcl->c->fnblk.info[i - 1].tmprcnt: 0; | 			parent_tmprcnt = (i > 0)? hcl->c->fnblk.info[i - 1].tmprcnt: 0; | ||||||
| @ -675,6 +683,11 @@ static int emit_indexed_variable_access (hcl_t* hcl, hcl_oow_t index, hcl_oob_t | |||||||
| 				} | 				} | ||||||
| 				return 0; | 				return 0; | ||||||
| 			} | 			} | ||||||
|  | #if 0 | ||||||
|  | 		} | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | //if (i > 0 && hcl->c->fnblk.info[hcl->c->fnblk.info[i - 1].type == FNBLK_CLASS) break; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| /* THIS PART MUST NOT BE REACHED */ | /* THIS PART MUST NOT BE REACHED */ | ||||||
| @ -1747,7 +1760,7 @@ printf ("22222222222\n"); | |||||||
| 		obj = HCL_CNODE_CONS_CDR(obj); | 		obj = HCL_CNODE_CONS_CDR(obj); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (push_clsblk(hcl, XXXX, 0, 0) <= -1) return -1; | 	if (push_clsblk(hcl, HCL_CNODE_GET_LOC(cmd), 0, 0) <= -1) return -1; | ||||||
|  |  | ||||||
| 	/* TODO: emit make_class code... | 	/* TODO: emit make_class code... | ||||||
| 	*/ | 	*/ | ||||||
|  | |||||||
| @ -3203,7 +3203,14 @@ static int execute (hcl_t* hcl) | |||||||
| 							break; | 							break; | ||||||
|  |  | ||||||
| 						case HCL_BRAND_PRIM: | 						case HCL_BRAND_PRIM: | ||||||
| 							if (call_primitive(hcl, b1) <= -1) goto call_failed; | 							if (call_primitive(hcl, b1) <= -1)  | ||||||
|  | 							{ | ||||||
|  | /* | ||||||
|  | TODO: translate a certain primitive failure to a catchable exception. this seems to work . i need to capture the throw value instead of hcl->_nil . | ||||||
|  | if (do_throw(hcl, hcl->_nil, fetched_instruction_pointer) <= -1) | ||||||
|  | */ | ||||||
|  | 								goto call_failed; | ||||||
|  | 							} | ||||||
| 							break; | 							break; | ||||||
|  |  | ||||||
| 						default: | 						default: | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user