diff options
| author | 2024-09-08 10:10:12 -0400 | |
|---|---|---|
| committer | 2024-09-08 10:10:12 -0400 | |
| commit | 85e38a2b19ad3f36132aa733b11a0901736a99a5 (patch) | |
| tree | 7f05f41d37ed0a3704763066ea11ab3dd69a4a27 /miniscm/miniscm.c | |
| parent | miniscm: 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.c | 12 |
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"); } |
