rev 354 - in trunk: . src

SVN User <[email protected]>
Newsgroups gmane.comp.lang.prothon.cvs
Message-ID <[email protected]>
Author: mark
Date: 2004-04-14 17:52:31 -0400 (Wed, 14 Apr 2004)
New Revision: 354

Modified:
   trunk/STATUS.txt
   trunk/src/builtins-string.c
Log:
added half-finished string.__mod__() ("x: %d" % 5)

Modified: trunk/STATUS.txt
===================================================================
--- trunk/STATUS.txt	2004-04-14 19:10:53 UTC (rev 353)
+++ trunk/STATUS.txt	2004-04-14 21:52:31 UTC (rev 354)
@@ -3,7 +3,7 @@
 
 --- change all varnames to var_names
 
---- add list comprehension, list.sort!(), string %
+--- add list comprehension, string %
 
 --- add support for APR_BINARY in File.c ('b' flag)
 --- support any object that supports file methods in stdxxx (duck std)

Modified: trunk/src/builtins-string.c
===================================================================
--- trunk/src/builtins-string.c	2004-04-14 19:10:53 UTC (rev 353)
+++ trunk/src/builtins-string.c	2004-04-14 21:52:31 UTC (rev 354)
@@ -110,6 +110,7 @@
 	return obj;
 }
 
+//********************************* STRING MODULE *****************************
 
 MODULE_DECLARE(String);
 MODULE_DECLARE(StringGen);
@@ -136,10 +137,6 @@
 	return self;
 }
 
-DEF(String, __cdatalen__, NULL) {
-	return new_int_obj(ist, sizeof(pr_str_t) + pr_strlen(self) + 1);
-}
-
 DEF(String, __hash__, NULL) {
 	i32_t res = 0x9a7c5e3;
 	char *p;
@@ -235,6 +232,44 @@
 	return obj;
 }
 
+typedef union {
+	i64_t   i64;
+	double	f64;
+	char*	str;
+} arg_t;
+
+typedef arg_t* arg_p;
+
+DEF(String, __mod__, FORM_RPARAM) {
+	obj_p	argv_obj = parms[1];
+	size_t	i, argc;
+	arg_p	argv;
+	char*   fmt_str = strch(self);
+
+	if ( has_proto_QUES(ist, argv_obj, OBJ(STRING_PROTO)) ||
+		!has_proto_QUES(ist, argv_obj,    OBJ(SEQ_PROTO)) ) {
+		argv_obj = new_list_obj(ist, 1);
+		list_append(ist, argv_obj, parms[1]);
+	}
+	argc = list_len(ist, argv_obj);
+	argv = pr_malloc(argc * sizeof(arg_t));
+	for (i=0; i < argc; i++) {
+		obj_p arg_obj = list_item(ist, argv_obj, (int) i);
+		if (has_proto_QUES(ist, arg_obj, OBJ(INT_PROTO)))
+			argv[i].i64 = arg_obj->data.i64;
+		else if (has_proto_QUES(ist, arg_obj, OBJ(FLOAT_PROTO)))
+			argv[i].f64 = arg_obj->data.f64;
+		else if (has_proto_QUES(ist, arg_obj, OBJ(STRING_PROTO)))
+			argv[i].str = strch(arg_obj);
+		else {
+			raise_exception(ist, OBJ(TYPE_EXC), "invalid type for string (%) format");
+			return NULL;
+		}
+	}
+	// ben: your argc and argv are ready for use on fmt_str and return resulting string
+	return self;
+}
+
 DEF(String, __gen__, NULL) {
 	obj_p gen_obj = new_object(ist, StringGen_OBJ);
 	gen_obj->data_type = DATA_TYPE_DATAPTR;
@@ -323,6 +358,13 @@
 	else                 return OBJ(PR_FALSE);
 }
 
+DEF(String, __cdatalen__, NULL) {
+	return new_int_obj(ist, sizeof(pr_str_t) + pr_strlen(self) + 1);
+}
+
+
+//********************************* STRINGGEN MODULE **************************
+
 MODULE_START(StringGen)
 {
 	StringGen_OBJ = new_object(ist, NULL);
@@ -347,6 +389,8 @@
 
 
 
+//********************************* MODULES INIT ******************************
+
 MAIN_MODULE_INIT(String)
 {
 	MODULE_SUB_INIT(String);
@@ -354,13 +398,13 @@
 	MODULE_ADD_SYM(String, __bool__QUES);
 	MODULE_ADD_SYM(String, __str__);
 	MODULE_ADD_SYM(String, __hash__);
-	MODULE_ADD_SYM(String, __cdatalen__);
 	MODULE_ADD_SYM(String, cmp);
 	MODULE_ADD_SYM(String, ord);
 	MODULE_ADD_SYM(String, len);
 	MODULE_ADD_SYM(String, __getitem__);
 	MODULE_ADD_SYM(String, __add__);
 	MODULE_ADD_SYM(String, __mul__);
+	MODULE_ADD_SYM(String, __mod__);
 	MODULE_ADD_SYM(String, __gen__);
 	MODULE_ADD_SYM(String, join);
 	MODULE_ADD_SYM(String, __in__QUES);
@@ -368,6 +412,7 @@
 	MODULE_ADD_SYM(String, __setitem__);
 	MODULE_ADD_SYM(String, __delitem__);
 	MODULE_ADD_SYM(String, __objlist__);
+	MODULE_ADD_SYM(String, __cdatalen__);
 
 	MODULE_SUB_INIT(StringGen);
 	MODULE_ADD_SYM(StringGen, next);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.