From bc01c9dd1903d1b4309752349904a0866f18cb80 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 3 Jun 2015 23:00:40 -0400 Subject: [PATCH] Added stubs for compiling/evaluating vectors --- cgen.scm | 11 +++++++++++ cyclone.h | 2 ++ test.scm | 5 +++++ trans.scm | 1 + 4 files changed, 19 insertions(+) diff --git a/cgen.scm b/cgen.scm index 5ccd0dd1..68211cdf 100644 --- a/cgen.scm +++ b/cgen.scm @@ -316,6 +316,15 @@ (_c-compile-scalars args) num-args))) +(define (c-compile-vector exp) +;; TODO: this is just a stub, does not allocate vector contents + (let ((cvar-name (mangle (gensym 'c)))) + (c-code/vars + (string-append "&" cvar-name) ; Code is just the variable name + (list ; Allocate integer on the C stack + (string-append + "make_empty_vector(" cvar-name ");"))))) + ;; c-compile-const : const-exp -> c-pair ;; ;; Typically this function is used to compile constant values such as @@ -327,6 +336,8 @@ (c-code "nil")) ((pair? exp) (c-compile-scalars exp)) + ((vector? exp) + (c-compile-vector exp)) ((integer? exp) (let ((cvar-name (mangle (gensym 'c)))) (c-code/vars diff --git a/cyclone.h b/cyclone.h index 8662e558..2d61eb68 100644 --- a/cyclone.h +++ b/cyclone.h @@ -176,6 +176,8 @@ typedef struct {tag_type tag; FILE *fp; int mode;} port_type; typedef struct {tag_type tag; int num_elt; object *elts;} vector_type; typedef vector_type *vector; +#define make_empty_vector(v) vector_type v; v.tag = vector_tag; v.num_elt = 0; v.elts = NULL; + /* Define cons type. */ typedef struct {tag_type tag; object cons_car,cons_cdr;} cons_type; diff --git a/test.scm b/test.scm index d9b2ec79..cbda96c7 100644 --- a/test.scm +++ b/test.scm @@ -8,3 +8,8 @@ (write (make-vector 4 #t)) (write (string->list "abc")) (write (apply append '((1) (2) (3)))) +(write #(a)) +(write #(1 2 3)) +(write #((1) (2) (3))) +(write '#(1)) +(write '#()) diff --git a/trans.scm b/trans.scm index 5ebbda87..00d9d18e 100644 --- a/trans.scm +++ b/trans.scm @@ -295,6 +295,7 @@ (or (integer? exp) (real? exp) (string? exp) + (vector? exp) (char? exp) (boolean? exp)))