aboutsummaryrefslogtreecommitdiff
path: root/snug-clean/src/Snug/Compile/Simulate.dcl
diff options
context:
space:
mode:
authorCamil Staps2023-01-28 12:48:43 +0100
committerCamil Staps2023-01-28 12:48:43 +0100
commitf84fca3b169d808943b5f329c177870dc87c1d51 (patch)
treec6af7707ecd8fc52c4ed4804ece707fce941b0be /snug-clean/src/Snug/Compile/Simulate.dcl
parentAdd compilation of constructors and basic values (diff)
Add stack simulator for compilation
Diffstat (limited to 'snug-clean/src/Snug/Compile/Simulate.dcl')
-rw-r--r--snug-clean/src/Snug/Compile/Simulate.dcl25
1 files changed, 25 insertions, 0 deletions
diff --git a/snug-clean/src/Snug/Compile/Simulate.dcl b/snug-clean/src/Snug/Compile/Simulate.dcl
new file mode 100644
index 0000000..a61d631
--- /dev/null
+++ b/snug-clean/src/Snug/Compile/Simulate.dcl
@@ -0,0 +1,25 @@
+definition module Snug.Compile.Simulate
+
+from Control.Applicative import class Applicative, class pure, class <*>
+from Control.Monad import class Monad
+from Control.Monad.Identity import :: Identity, instance Functor Identity,
+ instance Monad Identity, instance pure Identity, instance <*> Identity
+from Control.Monad.State import :: State, :: StateT,
+ instance Functor (StateT s m), instance Monad (StateT s m),
+ instance pure (StateT s m), instance <*> (StateT s m)
+from Data.Functor import class Functor
+
+from MIPS.MIPS32 import :: Instruction, :: Label
+from Snug.Syntax import :: BasicValue
+
+:: Simulator a :== State SimulationState a
+
+:: SimulationState
+
+simulate :: !(Simulator a) -> [Instruction]
+
+buildCons :: !Label !Int -> Simulator ()
+
+pushBasicValue :: !BasicValue -> Simulator ()
+
+indirectAndEval :: Simulator ()