troubleshotting the backtrace code
This commit is contained in:
		
							
								
								
									
										34
									
								
								lib/exec.c
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								lib/exec.c
									
									
									
									
									
								
							| @ -74,21 +74,21 @@ static hak_ooch_t oocstr_dash[] = { '-', '\0' }; | |||||||
| #define LOAD_SP(hak, v_ctx) ((hak)->sp = HAK_OOP_TO_SMOOI((v_ctx)->sp)) | #define LOAD_SP(hak, v_ctx) ((hak)->sp = HAK_OOP_TO_SMOOI((v_ctx)->sp)) | ||||||
| #define STORE_SP(hak, v_ctx) ((v_ctx)->sp = HAK_SMOOI_TO_OOP((hak)->sp)) | #define STORE_SP(hak, v_ctx) ((v_ctx)->sp = HAK_SMOOI_TO_OOP((hak)->sp)) | ||||||
|  |  | ||||||
| #define LOAD_ACTIVE_IP(hak) LOAD_IP(hak,(hak)->active_context) | #define LOAD_ACTIVE_IP(hak) LOAD_IP(hak, (hak)->active_context) | ||||||
| #define STORE_ACTIVE_IP(hak) STORE_IP(hak,(hak)->active_context) | #define STORE_ACTIVE_IP(hak) STORE_IP(hak, (hak)->active_context) | ||||||
|  |  | ||||||
| #define LOAD_ACTIVE_SP(hak) LOAD_SP(hak,(hak)->processor->active) | #define LOAD_ACTIVE_SP(hak) LOAD_SP(hak, (hak)->processor->active) | ||||||
| #define STORE_ACTIVE_SP(hak) STORE_SP(hak,(hak)->processor->active) | #define STORE_ACTIVE_SP(hak) STORE_SP(hak, (hak)->processor->active) | ||||||
|  |  | ||||||
| #define SWITCH_ACTIVE_CONTEXT(hak,v_ctx) \ | #define SWITCH_ACTIVE_CONTEXT(hak,v_ctx) \ | ||||||
| 	do \ | 	do \ | ||||||
| 	{ \ | 	{ \ | ||||||
| 		STORE_ACTIVE_IP(hak); \ | 		STORE_ACTIVE_IP(hak); \ | ||||||
| 		(hak)->active_context = (v_ctx); \ | 		(hak)->active_context = (v_ctx); \ | ||||||
| 		(hak)->active_function =(hak)->active_context->base; \ | 		(hak)->active_function = (hak)->active_context->base; \ | ||||||
| 		(hak)->active_code = HAK_FUNCTION_GET_CODE_BYTE((hak)->active_function); \ | 		(hak)->active_code = HAK_FUNCTION_GET_CODE_BYTE((hak)->active_function); \ | ||||||
| 		LOAD_ACTIVE_IP(hak); \ | 		LOAD_ACTIVE_IP(hak); \ | ||||||
| 		(hak)->processor->active->current_context =(hak)->active_context; \ | 		(hak)->processor->active->current_context = (hak)->active_context; \ | ||||||
| 	} while (0) | 	} while (0) | ||||||
|  |  | ||||||
| /*#define FETCH_BYTE_CODE(hak) ((hak)->code.bc.arr->slot[(hak)->ip++])*/ | /*#define FETCH_BYTE_CODE(hak) ((hak)->code.bc.arr->slot[(hak)->ip++])*/ | ||||||
| @ -137,7 +137,7 @@ static void terminate_all_processes (hak_t* hak); | |||||||
|  |  | ||||||
| #define HAK_EXSTACK_PUSH(hak, ctx_, ip_, clsp_, sp_) \ | #define HAK_EXSTACK_PUSH(hak, ctx_, ip_, clsp_, sp_) \ | ||||||
| 	do { \ | 	do { \ | ||||||
| 		hak_oop_process_t ap =(hak)->processor->active; \ | 		hak_oop_process_t ap = (hak)->processor->active; \ | ||||||
| 		hak_ooi_t exsp = HAK_OOP_TO_SMOOI(ap->exsp); \ | 		hak_ooi_t exsp = HAK_OOP_TO_SMOOI(ap->exsp); \ | ||||||
| 		if (exsp >= HAK_OOP_TO_SMOOI(ap->exst) - 1) \ | 		if (exsp >= HAK_OOP_TO_SMOOI(ap->exst) - 1) \ | ||||||
| 		{ \ | 		{ \ | ||||||
| @ -153,7 +153,7 @@ static void terminate_all_processes (hak_t* hak); | |||||||
|  |  | ||||||
| #define HAK_EXSTACK_POP(hak) \ | #define HAK_EXSTACK_POP(hak) \ | ||||||
| 	do { \ | 	do { \ | ||||||
| 		hak_oop_process_t ap =(hak)->processor->active; \ | 		hak_oop_process_t ap = (hak)->processor->active; \ | ||||||
| 		hak_ooi_t exsp = HAK_OOP_TO_SMOOI(ap->exsp); \ | 		hak_ooi_t exsp = HAK_OOP_TO_SMOOI(ap->exsp); \ | ||||||
| 		exsp -= 4; \ | 		exsp -= 4; \ | ||||||
| 		ap->exsp = HAK_SMOOI_TO_OOP(exsp); \ | 		ap->exsp = HAK_SMOOI_TO_OOP(exsp); \ | ||||||
| @ -161,7 +161,7 @@ static void terminate_all_processes (hak_t* hak); | |||||||
|  |  | ||||||
| #define HAK_EXSTACK_POP_TO(hak, ctx_, ip_, clsp_, sp_) \ | #define HAK_EXSTACK_POP_TO(hak, ctx_, ip_, clsp_, sp_) \ | ||||||
| 	do { \ | 	do { \ | ||||||
| 		hak_oop_process_t ap =(hak)->processor->active; \ | 		hak_oop_process_t ap = (hak)->processor->active; \ | ||||||
| 		hak_ooi_t exsp = HAK_OOP_TO_SMOOI(ap->exsp); \ | 		hak_ooi_t exsp = HAK_OOP_TO_SMOOI(ap->exsp); \ | ||||||
| 		sp_ = HAK_OOP_TO_SMOOI(ap->slot[exsp]); exsp--; \ | 		sp_ = HAK_OOP_TO_SMOOI(ap->slot[exsp]); exsp--; \ | ||||||
| 		clsp_ = HAK_OOP_TO_SMOOI(ap->slot[exsp]); exsp--; \ | 		clsp_ = HAK_OOP_TO_SMOOI(ap->slot[exsp]); exsp--; \ | ||||||
| @ -180,7 +180,7 @@ static void terminate_all_processes (hak_t* hak); | |||||||
|  |  | ||||||
| #define HAK_CLSTACK_PUSH(hak, v) \ | #define HAK_CLSTACK_PUSH(hak, v) \ | ||||||
| 	do { \ | 	do { \ | ||||||
| 		hak_oop_process_t ap =(hak)->processor->active; \ | 		hak_oop_process_t ap = (hak)->processor->active; \ | ||||||
| 		hak_ooi_t clsp_ = HAK_OOP_TO_SMOOI(ap->clsp); \ | 		hak_ooi_t clsp_ = HAK_OOP_TO_SMOOI(ap->clsp); \ | ||||||
| 		if (clsp_ >= HAK_OOP_TO_SMOOI(ap->clst)) \ | 		if (clsp_ >= HAK_OOP_TO_SMOOI(ap->clst)) \ | ||||||
| 		{ \ | 		{ \ | ||||||
| @ -193,7 +193,7 @@ static void terminate_all_processes (hak_t* hak); | |||||||
|  |  | ||||||
| #define HAK_CLSTACK_POP(hak) \ | #define HAK_CLSTACK_POP(hak) \ | ||||||
| 	do { \ | 	do { \ | ||||||
| 		hak_oop_process_t ap =(hak)->processor->active; \ | 		hak_oop_process_t ap = (hak)->processor->active; \ | ||||||
| 		hak_ooi_t clsp_ = HAK_OOP_TO_SMOOI(ap->clsp); \ | 		hak_ooi_t clsp_ = HAK_OOP_TO_SMOOI(ap->clsp); \ | ||||||
| 		clsp_--; \ | 		clsp_--; \ | ||||||
| 		ap->clsp = HAK_SMOOI_TO_OOP(clsp_); \ | 		ap->clsp = HAK_SMOOI_TO_OOP(clsp_); \ | ||||||
| @ -201,7 +201,7 @@ static void terminate_all_processes (hak_t* hak); | |||||||
|  |  | ||||||
| #define HAK_CLSTACK_POPS(hak, count) \ | #define HAK_CLSTACK_POPS(hak, count) \ | ||||||
| 	do { \ | 	do { \ | ||||||
| 		hak_oop_process_t ap =(hak)->processor->active; \ | 		hak_oop_process_t ap = (hak)->processor->active; \ | ||||||
| 		hak_ooi_t clsp_ = HAK_OOP_TO_SMOOI(ap->clsp); \ | 		hak_ooi_t clsp_ = HAK_OOP_TO_SMOOI(ap->clsp); \ | ||||||
| 		clsp_ -= count; \ | 		clsp_ -= count; \ | ||||||
| 		ap->clsp = HAK_SMOOI_TO_OOP(clsp_); \ | 		ap->clsp = HAK_SMOOI_TO_OOP(clsp_); \ | ||||||
| @ -209,7 +209,7 @@ static void terminate_all_processes (hak_t* hak); | |||||||
|  |  | ||||||
| #define HAK_CLSTACK_POP_TO(hak, v) \ | #define HAK_CLSTACK_POP_TO(hak, v) \ | ||||||
| 	do { \ | 	do { \ | ||||||
| 		hak_oop_process_t ap =(hak)->processor->active; \ | 		hak_oop_process_t ap = (hak)->processor->active; \ | ||||||
| 		hak_ooi_t clsp_ = HAK_OOP_TO_SMOOI(ap->clsp); \ | 		hak_ooi_t clsp_ = HAK_OOP_TO_SMOOI(ap->clsp); \ | ||||||
| 		v = ap->slot[clsp_]; clsp_--; \ | 		v = ap->slot[clsp_]; clsp_--; \ | ||||||
| 		ap->clsp = HAK_SMOOI_TO_OOP(clsp_); \ | 		ap->clsp = HAK_SMOOI_TO_OOP(clsp_); \ | ||||||
| @ -217,7 +217,7 @@ static void terminate_all_processes (hak_t* hak); | |||||||
|  |  | ||||||
| #define HAK_CLSTACK_FETCH_TOP_TO(hak, v) \ | #define HAK_CLSTACK_FETCH_TOP_TO(hak, v) \ | ||||||
| 	do { \ | 	do { \ | ||||||
| 		hak_oop_process_t ap =(hak)->processor->active; \ | 		hak_oop_process_t ap = (hak)->processor->active; \ | ||||||
| 		hak_ooi_t clsp_ = HAK_OOP_TO_SMOOI(ap->clsp); \ | 		hak_ooi_t clsp_ = HAK_OOP_TO_SMOOI(ap->clsp); \ | ||||||
| 		v = ap->slot[clsp_]; \ | 		v = ap->slot[clsp_]; \ | ||||||
| 	} while (0) | 	} while (0) | ||||||
| @ -2414,7 +2414,8 @@ static HAK_INLINE int do_throw (hak_t* hak, hak_oop_t val, hak_ooi_t ip) | |||||||
| 		/* output backtrace */ | 		/* output backtrace */ | ||||||
| 		HAK_LOG0(hak, HAK_LOG_IC | HAK_LOG_INFO, "[BACKTRACE]\n"); | 		HAK_LOG0(hak, HAK_LOG_IC | HAK_LOG_INFO, "[BACKTRACE]\n"); | ||||||
| 		c = hak->active_context; | 		c = hak->active_context; | ||||||
| 		while ((hak_oop_t)c != hak->_nil) { | 		while ((hak_oop_t)c != hak->_nil) | ||||||
|  | 		{ | ||||||
| 			f = c->base; | 			f = c->base; | ||||||
| 			if (f->dbgi != hak->_nil) | 			if (f->dbgi != hak->_nil) | ||||||
| 			{ | 			{ | ||||||
| @ -2425,7 +2426,8 @@ static HAK_INLINE int do_throw (hak_t* hak, hak_oop_t val, hak_ooi_t ip) | |||||||
| 				hak_loc_t loc; | 				hak_loc_t loc; | ||||||
| 				hak_ooi_t cip; | 				hak_ooi_t cip; | ||||||
|  |  | ||||||
| 				cip = HAK_OOP_TO_SMOOI(c->ip); | 				/* use the given ip for the active context instead of the value from the ip field */ | ||||||
|  | 				cip = (c == hak->active_context)? ip: HAK_OOP_TO_SMOOI(c->ip); | ||||||
| 				dbgi = (hak_dbgi_t*)HAK_OBJ_GET_BYTE_SLOT(f->dbgi); | 				dbgi = (hak_dbgi_t*)HAK_OBJ_GET_BYTE_SLOT(f->dbgi); | ||||||
| 				HAK_MEMSET(&loc, 0, HAK_SIZEOF(loc)); | 				HAK_MEMSET(&loc, 0, HAK_SIZEOF(loc)); | ||||||
| 				loc.file = dbgi[cip].fname; | 				loc.file = dbgi[cip].fname; | ||||||
|  | |||||||
| @ -314,7 +314,7 @@ static HAK_INLINE int is_ident_char (hak_ooci_t c) | |||||||
| #define GET_CHAR_TO(hak,c) \ | #define GET_CHAR_TO(hak,c) \ | ||||||
| 	do { \ | 	do { \ | ||||||
| 		if (get_char(hak) <= -1) return -1; \ | 		if (get_char(hak) <= -1) return -1; \ | ||||||
| 		c =(hak)->c->lxc.c; \ | 		c = (hak)->c->lxc.c; \ | ||||||
| 	} while (0) | 	} while (0) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -166,14 +166,15 @@ printf "%O\n" (k:basicAt 20) | |||||||
| } | } | ||||||
| } | } | ||||||
|  |  | ||||||
| try { | ##try { | ||||||
| (Q:k) | 	printf ">>>>>>>>>>>>>>>\n" | ||||||
| } catch (e) { | 	(Q:k) | ||||||
|  | ##} catch (e) { | ||||||
| 	printf "EXCEPTION: %O\n" e | 	printf "EXCEPTION: %O\n" e | ||||||
|  |  | ||||||
| 	try { | ##	try { | ||||||
| 		throw 10000 | 		throw 10000 | ||||||
| 	} catch (e) { | ##	} catch (e) { | ||||||
| 		printf "EXCEPTION-X: %O\n" e | ##		printf "EXCEPTION-X: %O\n" e | ||||||
| 	} | ##	} | ||||||
| } | ##} | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user