From 6c277a724b41214e4dc1e94755a23c20fb8142a3 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 28 Jul 2015 22:33:16 -0400 Subject: [PATCH] Move string->list to scheme code --- include/cyclone/runtime.h | 16 ---------------- runtime.c | 16 ---------------- scheme/base.sld | 4 ++-- scheme/cyclone/cgen.scm | 8 +++----- scheme/cyclone/transforms.scm | 2 -- scheme/eval.scm | 1 - 6 files changed, 5 insertions(+), 42 deletions(-) diff --git a/include/cyclone/runtime.h b/include/cyclone/runtime.h index f8eb3c12..9bece7b4 100644 --- a/include/cyclone/runtime.h +++ b/include/cyclone/runtime.h @@ -125,7 +125,6 @@ string_type Cyc_number2string(object n) ; string_type Cyc_symbol2string(object sym) ; object Cyc_string2symbol(object str); string_type Cyc_list2string(object lst); -void __string2list(const char *str, cons_type *buf, int buflen); common_type Cyc_string2number(object str); void dispatch_string_91append(int argc, object clo, object cont, object str1, ...); string_type Cyc_string_append(int argc, object str1, ...); @@ -209,20 +208,6 @@ void dispatch_va(int argc, function_type_va func, object clo, object cont, objec void do_dispatch(int argc, function_type func, object clo, object *buffer); // Note: below is OK since alloca memory is not freed until function exits -#define string2list(c,s) object c = nil; { \ - char *str; \ - int len; \ - Cyc_check_str(s); \ - str = ((string_type *)s)->str; \ - len = strlen(str); \ - cons_type *buf; \ - if (len > 0) { \ - buf = alloca(sizeof(cons_type) * len); \ - __string2list(str, buf, len); \ - c = (object)&(buf[0]); \ - } \ -} - #define list2vector(v, l) object v = nil; { \ integer_type len; \ Cyc_check_cons_or_nil(l); \ @@ -339,7 +324,6 @@ extern const object primitive_integer_91_125char; extern const object primitive_string_91_125number; extern const object primitive_string_91cmp; extern const object primitive_string_91append; -extern const object primitive_string_91_125list; extern const object primitive_list_91_125string; extern const object primitive_string_91_125symbol; extern const object primitive_symbol_91_125string; diff --git a/runtime.c b/runtime.c index 2bee7da1..9efed1cf 100644 --- a/runtime.c +++ b/runtime.c @@ -872,16 +872,6 @@ string_type Cyc_list2string(object lst){ return str; } -void __string2list(const char *str, cons_type *buf, int buflen){ - int i = 0; - while (str[i]){ - buf[i].tag = cons_tag; - buf[i].cons_car = obj_char2obj(str[i]); - buf[i].cons_cdr = (i == buflen - 1) ? nil : buf + (i + 1); - i++; - } -} - common_type Cyc_string2number(object str){ common_type result; double n; @@ -1689,10 +1679,6 @@ void _string_91cmp(object cont, object args) { void _string_91append(object cont, object args) { integer_type argc = Cyc_length(args); dispatch(argc.value, (function_type)dispatch_string_91append, cont, cont, args); } -void _string_91_125list(object cont, object args) { - Cyc_check_num_args("string->list", 1, args); - { string2list(lst, car(args)); - return_funcall1(cont, lst);}} void _make_91vector(object cont, object args) { Cyc_check_num_args("make-vector", 1, args); { integer_type argc = Cyc_length(args); @@ -2365,7 +2351,6 @@ static primitive_type command_91line_91arguments_primitive = {primitive_tag, "co static primitive_type system_primitive = {primitive_tag, "system", &_cyc_system}; static primitive_type string_91cmp_primitive = {primitive_tag, "string-cmp", &_string_91cmp}; static primitive_type string_91append_primitive = {primitive_tag, "string-append", &_string_91append}; -static primitive_type string_91_125list_primitive = {primitive_tag, "string->list", &_string_91_125list}; static primitive_type list_91_125string_primitive = {primitive_tag, "list->string", &_list_91_125string}; static primitive_type string_91_125symbol_primitive = {primitive_tag, "string->symbol", &_string_91_125symbol}; static primitive_type symbol_91_125string_primitive = {primitive_tag, "symbol->string", &_symbol_91_125string}; @@ -2482,7 +2467,6 @@ const object primitive_command_91line_91arguments = &command_91line_91arguments_ const object primitive_system = &system_primitive; const object primitive_string_91cmp = &string_91cmp_primitive; const object primitive_string_91append = &string_91append_primitive; -const object primitive_string_91_125list = &string_91_125list_primitive; const object primitive_list_91_125string = &list_91_125string_primitive; const object primitive_string_91_125symbol = &string_91_125symbol_primitive; const object primitive_symbol_91_125string = &symbol_91_125string_primitive; diff --git a/scheme/base.sld b/scheme/base.sld index 67ca08de..d45d5fe9 100644 --- a/scheme/base.sld +++ b/scheme/base.sld @@ -52,7 +52,7 @@ string-copy string-copy! string-fill! - my-string->list + string->list string->vector ; TODO: ;string-upcase @@ -225,7 +225,7 @@ (let ((lst (apply vector->list (cons vec opts)))) (list->string lst))) ;; TODO: change to string->list - (define (my-string->list str . opts) + (define (string->list str . opts) (letrec ((len (string-length str)) (start (if (> (length opts) 0) (car opts) 0)) (end (if (> (length opts) 1) (cadr opts) len)) diff --git a/scheme/cyclone/cgen.scm b/scheme/cyclone/cgen.scm index 4be2d642..ac6245e4 100644 --- a/scheme/cyclone/cgen.scm +++ b/scheme/cyclone/cgen.scm @@ -481,7 +481,6 @@ ((eq? p 'integer->char) "Cyc_integer2char") ((eq? p 'string->number)"Cyc_string2number") ((eq? p 'list->string) "Cyc_list2string") - ((eq? p 'string->list) "string2list") ((eq? p 'make-vector) "Cyc_make_vector") ((eq? p 'list->vector) "list2vector") ((eq? p 'vector-length) "Cyc_vector_length") @@ -552,7 +551,6 @@ ((eq? p '/) "common_type") ((eq? p 'string->number) "common_type") ((eq? p 'list->string) "string_type") -; ((eq? p 'string->list) "object") ((eq? p 'string-cmp) "integer_type") ((eq? p 'string-append) "string_type") ((eq? p 'symbol->string) "string_type") @@ -577,7 +575,7 @@ system Cyc-installation-dir string->number - string-append string-cmp list->string string->list + string-append string-cmp list->string make-vector list->vector symbol->string number->string string-length substring @@ -605,7 +603,7 @@ ;; is obsolete and should be replaced by prim:cont? functions over time. (define (prim:allocates-object? exp) (and (prim? exp) - (member exp '(string->list list->vector)))) + (member exp '(list->vector)))) ;; c-compile-prim : prim-exp -> string -> string (define (c-compile-prim p cont) @@ -657,7 +655,7 @@ ((prim/cvar? p) ;; ;; TODO: look at functions that would actually fall into this - ;; branch, I think they are just the macro's like string->list ?? + ;; branch, I think they are just the macro's like list->vector??? ;; may be able to remove this using prim:cont? and simplify ;; the logic ;; diff --git a/scheme/cyclone/transforms.scm b/scheme/cyclone/transforms.scm index a4299b9e..900e76eb 100644 --- a/scheme/cyclone/transforms.scm +++ b/scheme/cyclone/transforms.scm @@ -570,7 +570,6 @@ string->number string-append string-cmp - string->list list->string string->symbol symbol->string @@ -639,7 +638,6 @@ set-cdr! string-set! string->symbol ;; Could be mistaken for an identifier - string->list ;; Mistaken for function call (maybe OK if it was quoted, though). same for above? make-vector ;; I/O must be done at runtime for side effects: Cyc-stdout diff --git a/scheme/eval.scm b/scheme/eval.scm index 8008d1e7..462e09dc 100644 --- a/scheme/eval.scm +++ b/scheme/eval.scm @@ -257,7 +257,6 @@ (list 'string->number string->number) (list 'string-cmp string-cmp) (list 'string-append string-append) - (list 'string->list string->list) (list 'list->string list->string) (list 'string->symbol string->symbol) (list 'symbol->string symbol->string)