diff --git a/string.c b/string.c index 4f1afe23..fc2d2ab6 100644 --- a/string.c +++ b/string.c @@ -250,6 +250,30 @@ pic_str_string_p(pic_state *pic) return pic_bool_value(pic_str_p(v)); } +static pic_value +pic_str_string(pic_state *pic) +{ + size_t argc; + pic_value *argv; + pic_str *str; + char *buf; + size_t i; + + pic_get_args(pic, "*", &argc, &argv); + + buf = pic_alloc(pic, argc); + + for (i = 0; i < argc; ++i) { + pic_assert_type(pic, argv[i], char); + buf[i] = pic_char(argv[i]); + } + + str = pic_make_str(pic, buf, argc); + pic_free(pic, buf); + + return pic_obj_value(str); +} + static pic_value pic_str_make_string(pic_state *pic) { @@ -457,6 +481,7 @@ void pic_init_str(pic_state *pic) { pic_defun(pic, "string?", pic_str_string_p); + pic_defun(pic, "string", pic_str_string); pic_defun(pic, "make-string", pic_str_make_string); pic_defun(pic, "string-length", pic_str_string_length); pic_defun(pic, "string-ref", pic_str_string_ref);