rev 525 - in trunk: docs/tutorial src
SVN User <[email protected]> Fri, 21 May 2004 00:25:34 -0400
| Newsgroups | gmane.comp.lang.prothon.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: mark
Date: 2004-05-21 00:25:31 -0400 (Fri, 21 May 2004)
New Revision: 525
Modified:
trunk/docs/tutorial/index.htm
trunk/src/builtins-core.c
trunk/src/builtins-string.c
trunk/src/symbol.c
Log:
Added Symbol.init_() and changed String.init_() so you can
do Symbol("abc") and String(`abc)
Modified: trunk/docs/tutorial/index.htm
===================================================================
--- trunk/docs/tutorial/index.htm 2004-05-21 02:44:32 UTC (rev 524)
+++ trunk/docs/tutorial/index.htm 2004-05-21 04:25:31 UTC (rev 525)
@@ -59,7 +59,19 @@
<p>Like Prothon itself, the tutorial is not finished. The following topics
are not covered yet: print statement, import, modules, packages, list
comprehensions, try/finally, security system, files, console line editing.
- Email <a href="mailto:[email protected]">me</a> about any things I've
+ Email
+
+ <script language="javascript">
+
+ var name = "mark@";
+
+ var domain = "prothon.org";
+
+ document.write ("<a href=mailto:" + name + domain + ">me</a>");
+
+</script>
+
+ about any things I've
not covered that aren't on this list.</p>
<p align="center"><font size="-1">This tutorial is copyright Mark Hahn,
2004, all rights reserved. </font></p>
Modified: trunk/src/builtins-core.c
===================================================================
--- trunk/src/builtins-core.c 2004-05-21 02:44:32 UTC (rev 524)
+++ trunk/src/builtins-core.c 2004-05-21 04:25:31 UTC (rev 525)
@@ -400,9 +400,18 @@
set_obj_id(Symbol_OBJ, *, Symbol);
}
+DEF(Symbol, init_, FORM_RPARAM) {
+ char* str;
+ BIN_EMPTY_CHK();
+ STRING_PARAM(1, str);
+ del_unlock(self);
+ return sym(ist, str);
+}
+
DEF(Symbol, str_, NULL) {
obj_p str_obj = get_attr(ist, self, SYM(STRING_));
char buf[512];
+ BIN_STR_CHK(Symbol);
apr_snprintf(buf, sizeof(buf), "`%s", pr_strptr(str_obj));
return NEW_STRING(buf);
}
@@ -838,6 +847,7 @@
MODULE_ADD_SYM(Object, fromStorProxy_);
MODULE_SUB_INIT(Symbol);
+ MODULE_ADD_SYM(Symbol, init_);
MODULE_ADD_SYM(Symbol, str_);
MODULE_SUB_INIT(Seq);
Modified: trunk/src/builtins-string.c
===================================================================
--- trunk/src/builtins-string.c 2004-05-21 02:44:32 UTC (rev 524)
+++ trunk/src/builtins-string.c 2004-05-21 04:25:31 UTC (rev 525)
@@ -211,8 +211,13 @@
BIN_EMPTY_CHK();
if (!list_len(ist, parms[1]))
s = "";
- else
- s = as_str(ist, list_item(ist, parms[1], 0));
+ else {
+ obj_p obj = list_item(ist, parms[1], 0);
+ if (has_proto_QUES(ist, obj, OBJ(SYMBOL_PROTO)))
+ s = symch(ist, obj);
+ else
+ s = as_str(ist, obj);
+ }
set_string_data(ist, self, s, strlen(s));
return OBJ(NONE);
}
Modified: trunk/src/symbol.c
===================================================================
--- trunk/src/symbol.c 2004-05-21 02:44:32 UTC (rev 524)
+++ trunk/src/symbol.c 2004-05-21 04:25:31 UTC (rev 525)
@@ -224,10 +224,26 @@
obj_p sym;
int i;
size_t len = strlen(s_in);
- char* s = pr_malloc(len+1);
+ char *p, *s = pr_malloc(len+1);
strcpy(s, s_in);
if (!strcmp(s+len-5, "_BANG")) strcpy(s+len-5, "!");
if (!strcmp(s+len-5, "_QUES")) strcpy(s+len-5, "?");
+ if (!*s) goto bad_sym;
+ if (! ( *s >= 'a' && *s <= 'z' ||
+ *s >= 'A' && *s <= 'Z' || *s == '_' ) ) goto bad_sym;
+ for (p=s+1; *p; p++) {
+ if (! ( *p >= 'a' && *p <= 'z' ||
+ *p >= 'A' && *p <= 'Z' ||
+ *p >= '0' && *p <= '9' ||
+ *p == '_' || *p == '!' || *p == '?' ) ) goto bad_sym;
+ if ((*p == '!' || *p == '?') && *(p+1)) goto bad_sym;
+ }
+ goto good_sym;
+bad_sym:
+ raise_exception(ist, OBJ(INTERPRETER_EXC), "invalid symbol: '%s'", s);
+ pr_free(s);
+ return NULL;
+good_sym:
pr_lock(&symbol_tree_lock);
sym = search_trie(symbol_tree, s);
if (sym) {