mirror of
https://github.com/carp-lang/Carp.git
synced 2024-10-11 04:27:55 +03:00
generates setter lens for all struct members
This commit is contained in:
parent
c8a48b79ee
commit
5523fd022f
@ -26,7 +26,8 @@
|
||||
"ARG_LIST" arg-list-c
|
||||
"SETTERS" (join "\n " (map (fn [n] (str "new_struct->" n " = " n ";")) c-member-names))}
|
||||
c-program-string (template
|
||||
"#include \"functions.h\"\n\nAPI STRUCT-NAME *CONSTRUCTOR-NAME(ARG_LIST) {
|
||||
"
|
||||
#include \"functions.h\"\n\nAPI STRUCT-NAME *CONSTRUCTOR-NAME(ARG_LIST) {
|
||||
STRUCT-NAME *new_struct = malloc(sizeof(STRUCT-NAME));
|
||||
SETTERS
|
||||
return new_struct;
|
||||
@ -52,7 +53,11 @@
|
||||
(let [getter-signature (list :fn (list struct-type) member-type)
|
||||
getter-proto (str member-t " get_" (c-ify-name member-name) "(" struct-t " x)")
|
||||
getter-c (str getter-proto "{ return x->" c-member-name "; }")]
|
||||
(bake-struct-lens-function (new-builder) (str "get-" member-name) getter-signature getter-proto getter-c '()))))))
|
||||
(bake-struct-lens-function (new-builder) (str "get-" member-name) getter-signature getter-proto getter-c '()))
|
||||
(let [setter-signature (list :fn (list struct-t member-t) struct-type)
|
||||
setter-proto (str struct-t " set_" (c-ify-name member-name) "(" struct-t " x, " member-t " value)")
|
||||
setter-c (str setter-proto "{ x->" c-member-name " = value; return x; }")]
|
||||
(bake-struct-lens-function (new-builder) (str "set-" member-name) setter-signature setter-proto setter-c '()))))))
|
||||
|
||||
(defn bake-struct-lens-function [builder func-name func-signature proto c deps]
|
||||
(let [c-func-name (c-ify-name func-name)
|
||||
|
@ -18,3 +18,7 @@
|
||||
|
||||
(defn f [x] (Vector x (+ x 10)))
|
||||
(defn g [] (map-copy f [100 200 300]))
|
||||
|
||||
(defn h []
|
||||
(let [v (Vector 100 100)]
|
||||
(set-x v 666)))
|
||||
|
Loading…
Reference in New Issue
Block a user