From fc2c84e731def795cf40e627c419ff526d9cf5cf Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 1 Jun 2015 20:27:30 -0400 Subject: [PATCH] Fixes for make-vector --- eval.scm | 1 + runtime.c | 6 +++--- runtime.h | 16 ++++++++-------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/eval.scm b/eval.scm index 248f3811..b6583d35 100644 --- a/eval.scm +++ b/eval.scm @@ -265,6 +265,7 @@ (list 'string->symbol string->symbol) (list 'symbol->string symbol->string) (list 'number->string number->string) + (list 'make-vector make-vector) (list 'boolean? boolean?) (list 'char? char?) (list 'eof-object? eof-object?) diff --git a/runtime.c b/runtime.c index c3f5ec9d..978ab1ff 100644 --- a/runtime.c +++ b/runtime.c @@ -1100,7 +1100,7 @@ void _string_91append(object cont, object args) { void _string_91_125list(object cont, object args) { string2list(lst, car(args)); return_funcall1(cont, &lst);} -void _make_91_125vector(object cont, object args) { +void _make_91vector(object cont, object args) { make_vector(v, car(args), cadr(args)); return_funcall1(cont, &v);} void _list_91_125string(object cont, object args) { @@ -1764,7 +1764,7 @@ static primitive_type list_91_125string_primitive = {primitive_tag, "list->strin 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}; static primitive_type number_91_125string_primitive = {primitive_tag, "number->string", &_number_91_125string}; -static primitive_type make_91_125vector_primitive = {primitive_tag, "make-vector", &_make_91_125vector}; +static primitive_type make_91vector_primitive = {primitive_tag, "make-vector", &_make_91vector}; static primitive_type boolean_127_primitive = {primitive_tag, "boolean?", &_boolean_127}; static primitive_type char_127_primitive = {primitive_tag, "char?", &_char_127}; static primitive_type eof_91object_127_primitive = {primitive_tag, "eof-object?", &_eof_91object_127}; @@ -1862,7 +1862,7 @@ 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; const object primitive_number_91_125string = &number_91_125string_primitive; -const object primitive_make_91_125vector = &make_91_125vector_primitive; +const object primitive_make_91vector = &make_91vector_primitive; const object primitive_boolean_127 = &boolean_127_primitive; const object primitive_char_127 = &char_127_primitive; const object primitive_eof_91object_127 = &eof_91object_127_primitive; diff --git a/runtime.h b/runtime.h index 18a9ffd5..e2d99bf1 100644 --- a/runtime.h +++ b/runtime.h @@ -161,14 +161,14 @@ void do_dispatch(int argc, function_type func, object clo, object *buffer); } \ } -#define make_vector(v, len, fill) object v = nil; { \ +// v = (object)alloca(sizeof(vector_type)); +#define make_vector(v, len, fill) vector_type v; { \ int i; \ - v = (object)alloca(sizeof(vector_type)); \ - v->tag = vector_tag; \ - v->num_elt = ((integer_type *)len)->value; \ - v->elts = (v->num_elt > 0) ? (object *)alloca(sizeof(object) * v->num_elt): NULL; \ - for (i = 0; i < v->num_elt; i++) { \ - v->elts[i] = fill; \ + v.tag = vector_tag; \ + v.num_elt = ((integer_type *)len)->value; \ + v.elts = (v.num_elt > 0) ? (object *)alloca(sizeof(object) * v.num_elt): NULL; \ + for (i = 0; i < v.num_elt; i++) { \ + v.elts[i] = fill; \ } \ } @@ -275,7 +275,7 @@ extern const object primitive_list_91_125string; extern const object primitive_string_91_125symbol; extern const object primitive_symbol_91_125string; extern const object primitive_number_91_125string; -extern const object primitive_make_91_125vector; +extern const object primitive_make_91vector; extern const object primitive_system; extern const object primitive_boolean_127; extern const object primitive_char_127;