Coverage report: /home/ellis/comp/core/lib/syn/gen/rs/ast.lisp
Kind | Covered | All | % |
expression | 17 | 59 | 28.8 |
branch | 4 | 10 | 40.0 |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;; ast.lisp --- GEN/RS AST Nodes
6
(in-package :syn/gen/rs)
9
(defstmt rs-comment (comment) ())
11
(defnode rs-type (c-type) ())
12
(defexpr raw-str-literal (literal-expr) ())
13
(defexpr boolean-literal (literal-expr) ())
14
(defexpr byte-literal (literal-expr) ())
15
(defexpr byte-str-literal (literal-expr) ())
16
(defexpr byte-str-raw-literal (literal-expr) ())
17
(defexpr c-str-raw-literal (literal-expr) ())
18
(defexpr c-str-literal (literal-expr) ())
19
(defexpr err-literal (literal-expr) ())
20
(defexpr match (prefix-expression) ())
23
(defnode rs-function-definition (gen/c::function-definition) ())
25
(build-context-switches
26
:package :syn/gen/rs/sym
27
:symbols *rs-symbols*)
30
:package :syn/gen/rs/sym
31
:swap-package :syn/gen/rs/swap
35
(defmacro rs-syntax (tags lambda-list &body body)
36
`(defsyntax ,tags (:rs) ,lambda-list ,@body))
39
(rs-syntax (<= >= < > + - * / = || && == != % << >> ^ | & += /= *= %= >>= <<= -= |= &= ^=)
41
"Infix expressions for multiple inputs"
42
`(make-instance 'infix-expression :op ',syn/gen::tag :members (make-nodes ,rest)))
45
(rs-syntax (* ! -) (&rest rest)
46
(if (eql (length rest) 1)
47
`(make-instance 'prefix-expression :op ',syn/gen::tag :object (make-node ,@rest))
48
`(make-instance 'infix-expression :op ',syn/gen::tag :members (make-nodes ,rest))))
51
(rs-syntax fn (name params type &body body &environment env)
52
"Define a Rust function"
53
`(make-instance 'syn/gen/c::function-definition
54
;; function name + type
55
:item ,(if (listp type)
56
(let ((first (first type)))
57
(if (and (not (listp first)) (std:fboundp! first env))
58
;; type is macro or function
59
`(gen/c::make-declaration-node (,type ,name))
60
;; type is list with type information
61
`(gen/c::make-declaration-node (,@type ,name))))
62
`(gen/c::make-declaration-node (,name ,type)))
65
(make-instance 'syn/gen/c::parameter-list
67
(make-nodes ,params :prepend syn/gen/c::make-declaration-node))
70
`(make-block ,body))))