rev 411 - in trunk: include/prothon src

SVN User <[email protected]> Sat, 24 Apr 2004 17:26:30 -0400
Newsgroups gmane.comp.lang.prothon.cvs
Message-ID <[email protected]>
Author: mark
Date: 2004-04-24 17:26:27 -0400 (Sat, 24 Apr 2004)
New Revision: 411

Modified:
   trunk/include/prothon/prothon.h
   trunk/src/console.c
   trunk/src/interp.c
   trunk/src/interp.h
Log:
fixed permission bug in interactive console

Modified: trunk/include/prothon/prothon.h
===================================================================
--- trunk/include/prothon/prothon.h	2004-04-24 20:43:51 UTC (rev 410)
+++ trunk/include/prothon/prothon.h	2004-04-24 21:26:27 UTC (rev 411)
@@ -586,7 +586,7 @@
 // warning, string objects may contain null chars so C string result may be short
 // This corresponds to dptr member of apr_datum_t.
 #define pr_strptr(str_obj)																		\
-(                               !(str_obj) ?                                   NULL :			\
+(                                !(str_obj) ?                                   NULL :			\
   (str_obj)->data_type == DATA_TYPE_IMMDATA ?             (str_obj)->data.str        :			\
  ((str_obj)->data_type == DATA_TYPE_DATAPTR ? ((pr_str_p)((str_obj)->data.ptr))->str : NULL) )
 

Modified: trunk/src/console.c
===================================================================
--- trunk/src/console.c	2004-04-24 20:43:51 UTC (rev 410)
+++ trunk/src/console.c	2004-04-24 21:26:27 UTC (rev 411)
@@ -180,12 +180,19 @@
 #define PROTHON_HISTORY  ".prothon_history"
 
 void console(isp ist) {
-	obj_p res;
+	obj_p res, new_globals, new_locals;
 	frame_p frame = NULL;
     char buf[16];
 	int ind_level = 0, colon_flg = FALSE;
 	char histfile[512], *home;
 
+	if (!ist->frame) {
+		new_locals  = NEW_OBJ(NULL);
+		new_globals = NEW_OBJ(NULL);
+		frame = create_frame( ist, NULL, new_globals, new_globals, 
+							  new_locals, new_locals, new_locals, NULL, NULL );
+	}
+
 	if ((home = getenv("HOME")) != NULL)
 		apr_snprintf(histfile, sizeof(histfile), "%s/%s", home, PROTHON_HISTORY);
 	else

Modified: trunk/src/interp.c
===================================================================
--- trunk/src/interp.c	2004-04-24 20:43:51 UTC (rev 410)
+++ trunk/src/interp.c	2004-04-24 21:26:27 UTC (rev 411)
@@ -99,11 +99,11 @@
 							           obj_p syn_locals, obj_p dyn_locals, obj_p locals, 
 							           obj_p func_obj, code_p code_in ) {
 	frame_p frame;
-	code_p code;
+	code_p code = NULL;
 	size_t flen;
 	if (func_obj) code = obj_data_p(func_obj);
-	else		  code = code_in;
-	flen = sizeof(frame_t) + (code->max_stack_depth+STACK_PADDING) * sizeof(obj_p);
+	else          code = code_in;
+	flen = sizeof(frame_t) + ( code ? (code->max_stack_depth+STACK_PADDING) * sizeof(obj_p) : 0 );
 	frame = pr_malloc(flen);
 	memset(frame, 0, flen);
 	frame->syn_self			= syn_self;
@@ -1451,9 +1451,10 @@
 			new_frame = create_frame( ist, NULL, frame->self, frame->globals, 
 						frame->syn_locals, frame->dyn_locals, frame->locals, NULL, code );
 		else {
+			obj_p new_globals = NEW_OBJ(NULL);
 			new_locals = NEW_OBJ(NULL);
-			new_frame = create_frame( ist, NULL, OBJ(ROOT_GLOBALS), OBJ(ROOT_GLOBALS), 
-										new_locals, new_locals, new_locals, NULL, code );
+			new_frame = create_frame( ist, NULL, new_globals, new_globals, 
+									  new_locals, new_locals, new_locals, NULL, code );
 		}
 	}
 	new_frame->called_from_c = TRUE;

Modified: trunk/src/interp.h
===================================================================
--- trunk/src/interp.h	2004-04-24 20:43:51 UTC (rev 410)
+++ trunk/src/interp.h	2004-04-24 21:26:27 UTC (rev 411)
@@ -50,8 +50,6 @@
  * ====================================================================
  */
 
-
-
 // interp.h
 
 #ifndef INTERP_H
@@ -109,6 +107,10 @@
 	obj_p		free_label_list_obj;
 } fparam_proc_state_t;
 
+frame_p create_frame( isp ist, obj_p syn_self, obj_p self, obj_p globals, 
+							           obj_p syn_locals, obj_p dyn_locals, obj_p locals, 
+							           obj_p func_obj, code_p code_in );
+
 void *main_thread(apr_thread_t *handle, void *filename);
 void *user_thread(apr_thread_t *handle, void *argv);