aboutsummaryrefslogtreecommitdiffstats
path: root/miniscm/miniscm.c
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2024-09-08 10:10:12 -0400
committerGravatar Peter McGoron 2024-09-08 10:10:12 -0400
commit85e38a2b19ad3f36132aa733b11a0901736a99a5 (patch)
tree7f05f41d37ed0a3704763066ea11ab3dd69a4a27 /miniscm/miniscm.c
parentminiscm: add string-ref (diff)
miniscm: add better support for immutable strings, and refactor to use real strings
Diffstat (limited to '')
-rw-r--r--miniscm/miniscm.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/miniscm/miniscm.c b/miniscm/miniscm.c
index e2b062d..7500ad2 100644
--- a/miniscm/miniscm.c
+++ b/miniscm/miniscm.c
@@ -1216,6 +1216,7 @@ register pointer a, b;
#define OP_CHAR2INT 111
#define OP_STRINGREF 112
+#define OP_STRINGLEN 113
static FILE *tmpfp;
static int tok;
@@ -1977,6 +1978,13 @@ register short op;
}
s_return(mk_char_c(strvalue(x)[ivalue(y)]));
+
+ case OP_STRINGLEN:
+ if (!isstring(car(args))) {
+ Error_0("string-length -- argument must be string");
+ }
+
+ s_return(mk_number(strlen(strvalue(car(args)))));
}
}
@@ -2481,7 +2489,8 @@ pointer (*dispatch_table[])() = {
opexe_7, /* OP_WRITEOUT */
opexe_2, /* OP_CHAR2INT */
- opexe_4 /* OP_STRINGREF */
+ opexe_4, /* OP_STRINGREF */
+ opexe_4 /* OP_STRINGLEN */
};
@@ -2642,6 +2651,7 @@ init_procs()
mk_proc(OP_CHAR2INT, "char->integer");
mk_proc(OP_STRINGREF, "string-ref");
+ mk_proc(OP_STRINGLEN, "string-length");
}