Compare commits

1 Commits

Author SHA1 Message Date
msyds f2c5d2f3ee runtime 2026-08-24 08:25:07 -06:00
10 changed files with 134 additions and 0 deletions
+23
View File
@@ -0,0 +1,23 @@
import Development.Shake
import Development.Shake.Command
import Development.Shake.FilePath
import Development.Shake.Util
main = shakeArgs shakeOptions $ do
action $ do
sourceFiles <- getDirectoryFiles "" ["//*.scm"]
need $ (-<.> "cps") <$> sourceFiles
alternatives $ do
"*.cps" %> \out -> do
let scm = out -<.> "scm"
need [scm]
Stdout cps0 <- cmd
"csc -debug 3"
[scm]
Stdout cps1 <- cmd
"sed -e" ["s/##core#lambda/κ/g;s/lambda/λ/g;/\\[cps\\]/d"] (Stdin cps0)
writeFile' out $ ";; -*- mode:scheme -*-\n" ++ cps1
phony "clean" $ do
removeFilesAfter ".shake" ["//*"]
liftIO $ removeFiles "." ["*.cps"]
Executable
BIN
View File
Binary file not shown.
+31
View File
@@ -0,0 +1,31 @@
;; -*- mode:scheme -*-
(λ (k118)
(let ((k119 (κ
(r120)
(let ((t11 r120))
(let ((k122 (κ
(r123)
(let ((t12 r123))
(let ((t125 (set! factorial
#f
(λ (k127 n10)
(let ((k128 (κ (r129) (k127 r129))))
(let ((k131 (κ
(r132)
(if r132
(k128 1)
(let ((k134 (κ (r135) (k128 r135))))
(let ((k138 (κ
(r139)
(let ((a137 r139)) (scheme#* k134 n10 a137)))))
(let ((k142 (κ
(r143)
(let ((a141 r143)) (factorial k138 a141)))))
(scheme#- k142 n10 1))))))))
(scheme#zero? k131 n10)))))))
(let ((t13 t125))
(let ((k145 (κ (r146) (k118 r146))))
(let ((k148 (κ (r149) (r149 k145))))
(chicken.base#implicit-exit-handler k148)))))))))
(##core#callunit eval k122))))))
(##core#callunit library k119)))
+4
View File
@@ -0,0 +1,4 @@
(define (factorial n)
(if (zero? n)
1
(* n (factorial (- n 1)))))
+38
View File
@@ -0,0 +1,38 @@
import Development.Shake
import Development.Shake.Command
import Development.Shake.FilePath
import Development.Shake.Util
worldFor "program.wasm" = "gyehoek-program"
worldFor "runtime.wasm" = "gyehoek-runtime"
main = shakeArgs shakeOptions $ do
want ["gyehoek.wasm"]
alternatives $ do
"gyehoek.wasm" %> \out -> do
need ["runtime.component.wasm","program.component.wasm"]
cmd_
"wac plug --plug"
"runtime.component.wasm" "program.component.wasm"
"-o" "gyehoek.wasm"
"*.component.wasm" %> \out -> do
let wasm = out `replaceExtensions` "wasm"
need [wasm]
cmd_
"wasm-tools component new"
[wasm]
"-o" [out]
"*.wasm" %> \out -> do
let wit = "gyehoek.wit"
let wat = out -<.> "wat"
need [wit,wat]
cmd_
"wasm-tools component embed"
"-w" [worldFor out]
[wit] [wat] "-o" [out]
phony "run" $ do
need ["complete.component.wasm"]
cmd_ "wasmtime run --invoke add(1) complete.component.wasm"
phony "clean" $ do
removeFilesAfter ".shake" ["//*"]
liftIO $ removeFiles "." ["*.wasm"]
+20
View File
@@ -0,0 +1,20 @@
package gyehoek:gyehoek@0.1.0;
interface runtime {
resource scm {
make-small-int: static func(n: s32) -> scm;
}
}
interface program {
run: func() -> s32;
}
world gyehoek-runtime {
export runtime;
}
world gyehoek-program {
import runtime;
export program;
}
+8
View File
@@ -0,0 +1,8 @@
(module
(import "gyehoek:gyehoek/runtime@0.1.0"
"[static]scm.make-small-int"
(func $make-small-int (param i32) (result i32)))
(func $run (result i32)
(call $make-small-int (i32.const 123)))
(export "gyehoek:gyehoek/program@0.1.0#run"
(func $run)))
+5
View File
@@ -0,0 +1,5 @@
(module
(func $make-small-int (param $n i32) (result i32)
(i32.mul (local.get $n) (i32.const 2)))
(export "gyehoek:gyehoek/runtime@0.1.0#[static]scm.make-small-int"
(func $make-small-int)))
+4
View File
@@ -0,0 +1,4 @@
(component
(core module $main
(func (export "square") (param $n i32) (result i32)
(i32.mul (local.get $n) (local.get $n)))))
+1
View File
@@ -21,6 +21,7 @@
pkgs.wasm-tools pkgs.wasm-tools
pkgs.wac-cli pkgs.wac-cli
inputs.ghc-wasm.packages.${system}.all_9_14 inputs.ghc-wasm.packages.${system}.all_9_14
pkgs.chicken
]; ];
}; };
}; };