|
109 | 109 | "Base type - multiple bindings.")))) |
110 | 110 |
|
111 | 111 |
|
112 | | -(subtest "Built-in function application" |
| 112 | +;; |
| 113 | +;; COMPILE-BUILT-IN-APPLY |
| 114 | + |
| 115 | +(eval-when (:compile-toplevel :load-toplevel :execute) |
| 116 | + (setf (fdefinition 'compile-built-in-apply) |
| 117 | + #'avm.lang.compiler.lisp.compile::compile-built-in-apply)) |
| 118 | + |
| 119 | +(subtest "compile-built-in-apply" |
| 120 | + |
| 121 | + (with-env (tenv aenv fenv venv) |
| 122 | + (let ((aenv1 (extend-appenv '#1=(+ 1 1) '(int int int) aenv))) |
| 123 | + (is (compile-built-in-apply '#1# venv tenv aenv1 fenv) |
| 124 | + '(the fixnum (+ 1 1)) |
| 125 | + "Base case - int addition."))) |
113 | 126 |
|
114 | 127 | (with-env (tenv aenv fenv venv) |
115 | | - (let ((aenv1 (extend-appenv '#1=(coerce 1) '(int double) aenv))) |
116 | | - (is (compile-form '#1# venv tenv aenv1 fenv) |
| 128 | + (let ((aenv1 (extend-appenv '#2=(coerce 1) '(int double) aenv))) |
| 129 | + (is (compile-built-in-apply '#2# venv tenv aenv1 fenv) |
117 | 130 | '(the double-float (avm.lang.compiler.lisp.built-in::int->double 1)) |
118 | | - "Ok."))) |
| 131 | + "Base case - COERCE of int to double."))) |
119 | 132 |
|
120 | 133 | (with-env (tenv aenv fenv venv) |
121 | | - (is-error (compile-form '(coerce 1) venv tenv aenv fenv) |
| 134 | + (is-error (compile-built-in-apply '(+ 1 1) venv tenv aenv fenv) |
122 | 135 | simple-error |
123 | 136 | "Not exist in appenv.")) |
124 | 137 |
|
125 | 138 | (with-env (tenv aenv fenv venv) |
126 | | - (let ((aenv1 (extend-appenv '#2=(+ 1 1 1) '(int int int) aenv))) |
127 | | - (is-error (compile-form '#2# venv tenv aenv1 fenv) |
| 139 | + (let ((aenv1 (extend-appenv '#3=(+ 1 1 1) '(int int int) aenv))) |
| 140 | + (is-error (compile-built-in-apply '#3# venv tenv aenv1 fenv) |
128 | 141 | simple-error |
129 | | - "Invalid number of arguments."))) |
130 | | - ) |
| 142 | + "Invalid number of arguments.")))) |
131 | 143 |
|
132 | 144 |
|
133 | 145 | (finalize) |
0 commit comments