rev 524 - in trunk: . src

SVN User <[email protected]> Thu, 20 May 2004 22:44:35 -0400
Newsgroups gmane.comp.lang.prothon.cvs
Message-ID <[email protected]>
Author: mark
Date: 2004-05-20 22:44:32 -0400 (Thu, 20 May 2004)
New Revision: 524

Modified:
   trunk/STATUS.txt
   trunk/src/builtins-core.c
   trunk/src/parser.h
   trunk/src/parser_routines.c
   trunk/src/prothon.y
   trunk/src/symbol.c
Log:
you can now input and display symbols as `label

Modified: trunk/STATUS.txt
===================================================================
--- trunk/STATUS.txt	2004-05-21 02:11:19 UTC (rev 523)
+++ trunk/STATUS.txt	2004-05-21 02:44:32 UTC (rev 524)
@@ -1,14 +1,14 @@
 
 ----------------------- TO-DO (highest priority first) ------------------------
 
+--- Add properties methods support (__get__,  __set__, __delete__)  rename protoList
+
+--- Add __attrs__ & __protos__ functionality.
+
 --- check dict keys for mutability bit
 
 --- nesting  /* .. */ comments 
 
---- Add properties methods support (__get__,  __set__, __delete__)  rename protoList
-
---- Add __attrs__ & __protos__ functionality.
-
 --- Auto-documenter app
 
 --- networking code -- web access demonstration of security

Modified: trunk/src/builtins-core.c
===================================================================
--- trunk/src/builtins-core.c	2004-05-21 02:11:19 UTC (rev 523)
+++ trunk/src/builtins-core.c	2004-05-21 02:44:32 UTC (rev 524)
@@ -65,6 +65,7 @@
 #include <prothon/prothon_dll.h>
 
 MODULE_DECLARE(Object);
+MODULE_DECLARE(Symbol);
 MODULE_DECLARE(False);
 MODULE_DECLARE(True);
 MODULE_DECLARE(None);
@@ -389,8 +390,25 @@
 }
 
 
-// ***************************** PR_FALSE *****************************************
+// ***************************** SYMBOL *****************************************
 
+MODULE_START(Symbol)
+{
+	Symbol_OBJ = OBJ(SYMBOL_PROTO);
+	MODULE_SET_DOC(Symbol, "Symbol prototype");
+	set_attr(ist, OBJ(OBJECT), sym(ist, "Symbol"), Symbol_OBJ);
+	set_obj_id(Symbol_OBJ, *, Symbol);
+}
+
+DEF(Symbol, str_,  NULL) { 
+	obj_p str_obj = get_attr(ist, self, SYM(STRING_));
+	char buf[512];
+	apr_snprintf(buf, sizeof(buf), "`%s", pr_strptr(str_obj));
+	return NEW_STRING(buf); 
+}
+
+// ***************************** FALSE *****************************************
+
 MODULE_START(False)
 {
 	False_OBJ = OBJ(PR_FALSE);
@@ -819,6 +837,9 @@
 	MODULE_ADD_SYM(Object, toStorProxy_);
 	MODULE_ADD_SYM(Object, fromStorProxy_);
 
+	MODULE_SUB_INIT(Symbol);
+	MODULE_ADD_SYM(Symbol, str_);
+
 	MODULE_SUB_INIT(Seq);
 
 	MODULE_SUB_INIT(False);

Modified: trunk/src/parser.h
===================================================================
--- trunk/src/parser.h	2004-05-21 02:11:19 UTC (rev 523)
+++ trunk/src/parser.h	2004-05-21 02:44:32 UTC (rev 524)
@@ -190,6 +190,7 @@
 code_p ref_expr_to_ass_op(void* param, code_p ref, code_p rparm, int iop, int op);
 code_p ref_parm_body_to_def(void* param, code_p name, clist_p params, code_p self, code_p body, int flg) ;
 code_p return_expr(void* param, code_p expr);
+code_p rquote_lbl_to_obj(void* param, obj_p label);
 code_p bound_bind_params(void* param, code_p attr_ref, code_p obj);
 code_p unbound_bind_params(void* param, code_p attr_ref, code_p obj);
 code_p bound_func_params(void* param, code_p attr_ref, clist_p parms);

Modified: trunk/src/parser_routines.c
===================================================================
--- trunk/src/parser_routines.c	2004-05-21 02:11:19 UTC (rev 523)
+++ trunk/src/parser_routines.c	2004-05-21 02:44:32 UTC (rev 524)
@@ -1499,6 +1499,14 @@
 	add_to_const_list(param, obj);
 	return debug_retrn(__LINE__, p);
 }
+code_p rquote_lbl_to_obj(void* param, obj_p label) {
+	code_p p = new_code(param, 2, 1, 1, OP_PUSH);
+	obj_p symbol = sym(IST, pr_strptr(label));
+	p->code_data[0].bytecode.param = 2;
+	p->code_data[1].data = symbol;
+	add_to_const_list(param, symbol);
+	return debug_retrn(__LINE__, p);
+}
 code_p self_to_obj(void* param){
 	code_p p = new_code(param, 1, 1, 1, OP_PUSH_SELF);
 	return debug_retrn(__LINE__, p);

Modified: trunk/src/prothon.y
===================================================================
--- trunk/src/prothon.y	2004-05-21 02:11:19 UTC (rev 523)
+++ trunk/src/prothon.y	2004-05-21 02:44:32 UTC (rev 524)
@@ -181,6 +181,7 @@
 %left     UPL     
 %left     UMI    
 %nonassoc '~'	   
+%nonassoc '`'	   
 %right	  EXP	 
 %left	  '.'	   
 %left	  ':'	   
@@ -550,6 +551,7 @@
 	| 	INT_IMAG													{ $$ = float_to_obj(yylex_param, (double) $1, NEW_IMAG); }
 	|	FLOAT_IMAG													{ $$ = float_to_obj(yylex_param, $1, NEW_IMAG); }
 	| 	STRING														{ $$ = string_to_obj(yylex_param, $1, NEW_STRN); }
+	|   '`' LABEL							%prec '`'				{ $$ = rquote_lbl_to_obj(yylex_param, $2); }
 	|	target_param												{ $$ = tgtparm_to_obj(yylex_param, $1); }
 	|	'{' brace_params '}'										{ $$ = new_dict(yylex_param, $2); }
 	|	'[' list_params ']'  	 									{ $$ = new_tuple_list(yylex_param, $2, NEW_LIST_); }

Modified: trunk/src/symbol.c
===================================================================
--- trunk/src/symbol.c	2004-05-21 02:11:19 UTC (rev 523)
+++ trunk/src/symbol.c	2004-05-21 02:44:32 UTC (rev 524)
@@ -268,16 +268,9 @@
 	return NULL;
 }
 
-//********************************* str_sym ***********************************
-obj_p str_sym( isp ist, obj_p self, 
-			   int pcnt, obj_p* lbl_parm_arr, obj_p dyn_locals ){
-	return get_attr(ist, self, SYM(STRING_));
-}
-
 //********************************* init_symbol *******************************
 void init_symbol(isp ist){
 	int i;
 	for(i = 0; i < SYM_ENUM_COUNT; i++)
 		sym_id_table[i].id = sym(ist, sym_id_table[i].str);
-	set_attr(ist, OBJ(SYMBOL_PROTO), SYM(STR_), new_C_func_obj(ist, str_sym, NULL));
 }