summaryrefslogtreecommitdiff
path: root/src/ast.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ast.lisp')
-rw-r--r--src/ast.lisp60
1 files changed, 3 insertions, 57 deletions
diff --git a/src/ast.lisp b/src/ast.lisp
index eef5c05..9987ddf 100644
--- a/src/ast.lisp
+++ b/src/ast.lisp
@@ -1,70 +1,16 @@
(defpackage #:sarcasm.ast
- (:use #:cl)
+ (:use #:cl #:sarcasm.types)
(:import-from #:sarcasm.util #:def/class)
(:local-nicknames
(#:a #:alexandria-2)
- (#:util #:sarcasm.util)))
+ (#:util #:sarcasm.util)
+ (#:instr #:sarcasm.instr)))
(in-package #:sarcasm.ast)
;;; TYPES
-
-(deftype i32 ()
- '(integer 0 #.(expt 2 32)))
-
-(deftype i64 ()
- '(integer 0 #. (expt 2 64)))
-
-(deftype f32 ()
- 'single-float)
-
-(deftype f64 ()
- 'double-float)
-
-(deftype numtype ()
- '(or i32 i64 f32 f64))
-
-(deftype typeidx ()
- 'i32)
-
-(deftype vectype ()
- '(bit-vector 128))
-
-(deftype funcref ()
- 't)
-
-(deftype externref ()
- 't)
-
-(deftype reftype ()
- '(or funcref externref))
-
-(deftype valtype ()
- '(or numtype vectype reftype))
-
-(defun stack-effect-type-p (thing)
- "A stack effect type is a two element list of lists of keywords.
-
-It describes the types of values consumed off the stack and returned
-to the stack by instructions."
- (and (listp thing)
- (= 2 (length thing))
- (listp (first thing))
- (listp (second thing))
- (every #'keywordp (first thing))
- (every #'keywordp (second thing))))
-
-(deftype stack-effect-type ()
- "This is not part of the standard grammar, but appears implicitly in
-the WASM table of instructions found
-
- https://webassembly.github.io/spec/core/appendix/index-instructions.html
-
-In the `Type` column."
- '(satisfies stack-effect-type-p))
-
;;; MODULE-STRUCTURES
(def/class instr ()