mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-15 08:47:35 +02:00
WIP, working through immutable objects
This commit is contained in:
parent
daa8f92f0c
commit
8c7bd7f96b
1 changed files with 10 additions and 7 deletions
|
@ -384,7 +384,7 @@
|
||||||
trace
|
trace
|
||||||
cps?))
|
cps?))
|
||||||
;; Core forms:
|
;; Core forms:
|
||||||
((const? exp) (c-compile-const exp (alloca? ast-id trace)))
|
((const? exp) (c-compile-const exp (alloca? ast-id trace) #f)) ;; TODO: OK to hardcode immutable to false here??
|
||||||
((prim? exp)
|
((prim? exp)
|
||||||
;; TODO: this needs to be more refined, probably w/a lookup table
|
;; TODO: this needs to be more refined, probably w/a lookup table
|
||||||
(c-code (string-append "primitive_" (mangle exp))))
|
(c-code (string-append "primitive_" (mangle exp))))
|
||||||
|
@ -444,7 +444,7 @@
|
||||||
((null? args)
|
((null? args)
|
||||||
(c-code "NULL"))
|
(c-code "NULL"))
|
||||||
((not (pair? args))
|
((not (pair? args))
|
||||||
(c-compile-const args use-alloca))
|
(c-compile-const args use-alloca immutable))
|
||||||
(else
|
(else
|
||||||
(let* ((cvar-name (mangle (gensym 'c)))
|
(let* ((cvar-name (mangle (gensym 'c)))
|
||||||
(cell (create-cons
|
(cell (create-cons
|
||||||
|
@ -461,7 +461,7 @@
|
||||||
(_c-compile-scalars args)
|
(_c-compile-scalars args)
|
||||||
num-args)))
|
num-args)))
|
||||||
|
|
||||||
(define (c-compile-vector exp use-alloca)
|
(define (c-compile-vector exp use-alloca immutable)
|
||||||
(letrec ((cvar-name (mangle (gensym 'vec)))
|
(letrec ((cvar-name (mangle (gensym 'vec)))
|
||||||
(len (vector-length exp))
|
(len (vector-length exp))
|
||||||
(ev-name (mangle (gensym 'e)))
|
(ev-name (mangle (gensym 'e)))
|
||||||
|
@ -478,7 +478,7 @@
|
||||||
(lambda (i code)
|
(lambda (i code)
|
||||||
(if (= i len)
|
(if (= i len)
|
||||||
code
|
code
|
||||||
(let ((idx-code (c-compile-const (vector-ref exp i) use-alloca)))
|
(let ((idx-code (c-compile-const (vector-ref exp i) use-alloca immutable)))
|
||||||
(loop
|
(loop
|
||||||
(+ i 1)
|
(+ i 1)
|
||||||
(c-code/vars
|
(c-code/vars
|
||||||
|
@ -499,7 +499,8 @@
|
||||||
(string-append addr-op cvar-name) ; Code is just the variable name
|
(string-append addr-op cvar-name) ; Code is just the variable name
|
||||||
(list ; Allocate empty vector
|
(list ; Allocate empty vector
|
||||||
(string-append
|
(string-append
|
||||||
c-make-macro "(" cvar-name ");"))))
|
c-make-macro "(" cvar-name ");"
|
||||||
|
(c-set-immutable-field cvar-name use-alloca immutable)))))
|
||||||
(else
|
(else
|
||||||
(let ((code
|
(let ((code
|
||||||
(c-code/vars
|
(c-code/vars
|
||||||
|
@ -509,7 +510,9 @@
|
||||||
elem-decl
|
elem-decl
|
||||||
c-make-macro "(" cvar-name ");"
|
c-make-macro "(" cvar-name ");"
|
||||||
cvar-name deref-op "num_elements = " (number->string len) ";"
|
cvar-name deref-op "num_elements = " (number->string len) ";"
|
||||||
cvar-name deref-op "elements = (object *)" ev-name ";")))))
|
cvar-name deref-op "elements = (object *)" ev-name ";"
|
||||||
|
(c-set-immutable-field cvar-name use-alloca immutable)
|
||||||
|
)))))
|
||||||
(loop 0 code))))))
|
(loop 0 code))))))
|
||||||
|
|
||||||
(define (c-compile-bytevector exp use-alloca)
|
(define (c-compile-bytevector exp use-alloca)
|
||||||
|
@ -610,7 +613,7 @@
|
||||||
((pair? exp)
|
((pair? exp)
|
||||||
(c-compile-scalars exp use-alloca immutable))
|
(c-compile-scalars exp use-alloca immutable))
|
||||||
((vector? exp)
|
((vector? exp)
|
||||||
(c-compile-vector exp use-alloca))
|
(c-compile-vector exp use-alloca immutable))
|
||||||
((bytevector? exp)
|
((bytevector? exp)
|
||||||
(c-compile-bytevector exp use-alloca))
|
(c-compile-bytevector exp use-alloca))
|
||||||
((bignum? exp)
|
((bignum? exp)
|
||||||
|
|
Loading…
Add table
Reference in a new issue