rev 585 - in trunk: . include/prothon src

SVN User <[email protected]> Mon, 07 Jun 2004 23:37:32 -0400
Newsgroups gmane.comp.lang.prothon.cvs
Message-ID <[email protected]>
Author: mark
Date: 2004-06-07 23:37:28 -0400 (Mon, 07 Jun 2004)
New Revision: 585

Modified:
   trunk/CHANGES.txt
   trunk/include/prothon/prothon.h
   trunk/src/interp.c
   trunk/src/object.c
Log:
**** release ****


Modified: trunk/CHANGES.txt
===================================================================
--- trunk/CHANGES.txt	2004-06-07 13:10:17 UTC (rev 584)
+++ trunk/CHANGES.txt	2004-06-08 03:37:28 UTC (rev 585)
@@ -1,7 +1,7 @@
 
 			----- Prothon Release History ----
 
-Version 0.1.1 - Build 582 - 6/06/04
+Version 0.1.1 - Build 585 - 6/07/04
 	- Added super keyword
 	- Integers now have unlimited precision
     - Added obj.protos_ list and obj.attrs_ dictionary

Modified: trunk/include/prothon/prothon.h
===================================================================
--- trunk/include/prothon/prothon.h	2004-06-07 13:10:17 UTC (rev 584)
+++ trunk/include/prothon/prothon.h	2004-06-08 03:37:28 UTC (rev 585)
@@ -57,12 +57,12 @@
 
 //**************************** DEBUG DEFINITIONS ******************************
  
-//#define CMDLINE_FLAGS
-//#define TRACE_PARSER
-//#define DUMP_MODULE_CODE
-//#define TRACE_INTERPRETER
-//#define DUMP_OBJECTS_AT_END
-//#define DEBUG_THREADS
+#define CMDLINE_FLAGS
+#define TRACE_PARSER
+#define DUMP_MODULE_CODE
+#define TRACE_INTERPRETER
+#define DUMP_OBJECTS_AT_END
+#define DEBUG_THREADS
 
 //#define DEBUG_MEM_MGR
 //#define PROSIST_DEBUG

Modified: trunk/src/interp.c
===================================================================
--- trunk/src/interp.c	2004-06-07 13:10:17 UTC (rev 584)
+++ trunk/src/interp.c	2004-06-08 03:37:28 UTC (rev 585)
@@ -821,7 +821,9 @@
 	int i, param;
 	frame_p switch_frame = NULL, free_frame = NULL, frame = ist->frame;
 	int have_exstk, exc_try_loc = 0, exc_exc_loc = 0, return_flag = FALSE;
-	int exc_final=0, exc_final_return=0, stack_lim = frame->code->max_stack_depth;
+	int exc_final=0, exc_final_return=0; 
+	frame_p exc_free_frame = NULL, exc_switch_frame = NULL;
+	int stack_lim = frame->code->max_stack_depth;
 	obj_p exc_waiting=NULL, return_value = 0;
 
 #ifdef DUMP_MODULE_CODE
@@ -1136,6 +1138,10 @@
 			case OP_RERAISE:
 				ist->exception_obj = exc_waiting;
 				exc_waiting = 0;
+				free_frame       = exc_free_frame;
+				switch_frame     = exc_switch_frame;
+				exc_free_frame   = NULL;
+				exc_switch_frame = NULL;
 				if (exc_final_return) {
 					fr_pc = exc_final_return;
 					fr_sp = 0;
@@ -1610,6 +1616,20 @@
 			}
 			return OBJ(NONE);
 		}
+		if (free_frame && have_exstk) {
+			exc_free_frame   = free_frame;
+			exc_switch_frame = switch_frame;
+			free_frame   = NULL;
+			switch_frame = NULL;
+			fr_pc = exc_exc_loc;
+			pr_free(clist_pop(fr_exstk));
+			if (clist_len(fr_exstk)) {
+				exception_entry_t* p = (exception_entry_t*)(clist_tos(fr_exstk));
+				exc_final   = p->final;
+				exc_try_loc	= p->try_loc;
+				exc_exc_loc	= p->exc_loc;
+			} else have_exstk = FALSE;
+		}
 		if (free_frame) {
 			// free_frame(tmp_frame);  XXX
 			if (!free_frame->do_not_free)

Modified: trunk/src/object.c
===================================================================
--- trunk/src/object.c	2004-06-07 13:10:17 UTC (rev 584)
+++ trunk/src/object.c	2004-06-08 03:37:28 UTC (rev 585)
@@ -832,6 +832,9 @@
 	i32_t i, j, len;
 	obj_p proto;
 	clist_t *pao_list;
+
+	if (obj == obj_proto) return TRUE;
+
 	rdlock_rtrn(obj) 0;
 
 	if ( (!obj->has_attrs && obj->attr_proto.proto == obj_proto) ||