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);