aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2024-09-22 12:09:09 -0400
committerGravatar Peter McGoron 2024-09-22 12:09:09 -0400
commit06d19b28679c0feb46b8b6ff917bf7aec6d27004 (patch)
tree4ae8d1a829fb959c6a6f892782e4e006e9bc4653
parentadd linked list library (diff)
miniscm: string->symbol and symbol->string
-rw-r--r--miniscm/miniscm.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/miniscm/miniscm.c b/miniscm/miniscm.c
index d2ec49f..315ed8e 100644
--- a/miniscm/miniscm.c
+++ b/miniscm/miniscm.c
@@ -1218,6 +1218,8 @@ register pointer a, b;
#define OP_STRINGREF 112
#define OP_STRINGLEN 113
#define OP_LIST2STRING 114
+#define OP_STRING2SYMBOL 115
+#define OP_SYMBOL2STRING 116
static FILE *tmpfp;
static int tok;
@@ -1783,6 +1785,16 @@ register short op;
} else {
Error_0("char->integer: argument must be char");
}
+ case OP_STRING2SYMBOL: /* string->symbol */
+ if (!isstring(car(args))) {
+ Error_0("string->symbol: argument must be string");
+ }
+ s_return(mk_symbol(strvalue(car(args))));
+ case OP_SYMBOL2STRING: /* symbol->string */
+ if (!issymbol(car(args))) {
+ Error_0("symbol->string: argument must by symbol");
+ }
+ s_return(mk_string(symname(car(args))));
default:
sprintf(strbuff, "%d is illegal operator", operator);
@@ -2529,7 +2541,9 @@ pointer (*dispatch_table[])() = {
opexe_2, /* OP_CHAR2INT */
opexe_4, /* OP_STRINGREF */
opexe_4, /* OP_STRINGLEN */
- opexe_list2string /* OP_LIST2STRING */
+ opexe_list2string, /* OP_LIST2STRING */
+ opexe_2, /* OP_STRING2SYMBOL */
+ opexe_2 /* OP_SYMBOL2STRING */
};
@@ -2692,6 +2706,8 @@ init_procs()
mk_proc(OP_STRINGREF, "string-ref");
mk_proc(OP_STRINGLEN, "string-length");
mk_proc(OP_LIST2STRING, "list->string");
+ mk_proc(OP_STRING2SYMBOL, "string->symbol");
+ mk_proc(OP_SYMBOL2STRING, "symbol->string");
}