miniscm: string->symbol and symbol->string

This commit is contained in:
Peter McGoron 2024-09-22 12:09:09 -04:00
parent 194a1d01e3
commit 06d19b2867
1 changed files with 17 additions and 1 deletions

View File

@ -1218,6 +1218,8 @@ register pointer a, b;
#define OP_STRINGREF 112 #define OP_STRINGREF 112
#define OP_STRINGLEN 113 #define OP_STRINGLEN 113
#define OP_LIST2STRING 114 #define OP_LIST2STRING 114
#define OP_STRING2SYMBOL 115
#define OP_SYMBOL2STRING 116
static FILE *tmpfp; static FILE *tmpfp;
static int tok; static int tok;
@ -1783,6 +1785,16 @@ register short op;
} else { } else {
Error_0("char->integer: argument must be char"); 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: default:
sprintf(strbuff, "%d is illegal operator", operator); sprintf(strbuff, "%d is illegal operator", operator);
@ -2529,7 +2541,9 @@ pointer (*dispatch_table[])() = {
opexe_2, /* OP_CHAR2INT */ opexe_2, /* OP_CHAR2INT */
opexe_4, /* OP_STRINGREF */ opexe_4, /* OP_STRINGREF */
opexe_4, /* OP_STRINGLEN */ 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_STRINGREF, "string-ref");
mk_proc(OP_STRINGLEN, "string-length"); mk_proc(OP_STRINGLEN, "string-length");
mk_proc(OP_LIST2STRING, "list->string"); mk_proc(OP_LIST2STRING, "list->string");
mk_proc(OP_STRING2SYMBOL, "string->symbol");
mk_proc(OP_SYMBOL2STRING, "symbol->string");
} }