Compare commits
3 Commits
9db10edd5c
...
2f5af11527
Author | SHA1 | Date | |
---|---|---|---|
|
2f5af11527 | ||
|
8a4dd4b6e5 | ||
|
f5ce3aa72a |
Binary file not shown.
|
@ -6489,7 +6489,7 @@ var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['
|
||||||
var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])();
|
var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])();
|
||||||
var ___cxa_is_pointer_type = createExportWrapper('__cxa_is_pointer_type', 1);
|
var ___cxa_is_pointer_type = createExportWrapper('__cxa_is_pointer_type', 1);
|
||||||
var dynCall_jiji = Module['dynCall_jiji'] = createExportWrapper('dynCall_jiji', 5);
|
var dynCall_jiji = Module['dynCall_jiji'] = createExportWrapper('dynCall_jiji', 5);
|
||||||
var ___emscripten_embedded_file_data = Module['___emscripten_embedded_file_data'] = 1781548;
|
var ___emscripten_embedded_file_data = Module['___emscripten_embedded_file_data'] = 1781252;
|
||||||
function invoke_i(index) {
|
function invoke_i(index) {
|
||||||
var sp = stackSave();
|
var sp = stackSave();
|
||||||
try {
|
try {
|
||||||
|
|
BIN
build/out.wasm
BIN
build/out.wasm
Binary file not shown.
4
package-lock.json
generated
4
package-lock.json
generated
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "@ludus/ludus-js-pure",
|
"name": "@ludus/ludus-js-pure",
|
||||||
"version": "0.1.9",
|
"version": "0.1.10",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@ludus/ludus-js-pure",
|
"name": "@ludus/ludus-js-pure",
|
||||||
"version": "0.1.9",
|
"version": "0.1.10",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"shadow-cljs": "^2.26.0",
|
"shadow-cljs": "^2.26.0",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@ludus/ludus-js-pure",
|
"name": "@ludus/ludus-js-pure",
|
||||||
"version": "0.1.9",
|
"version": "0.1.10",
|
||||||
"description": "A Ludus interpreter in a pure JS function.",
|
"description": "A Ludus interpreter in a pure JS function.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "build/ludus.mjs",
|
"main": "build/ludus.mjs",
|
||||||
|
|
10
prelude.ld
10
prelude.ld
|
@ -1250,6 +1250,15 @@ fn turtle_state {
|
||||||
() -> do turtle_states > unbox > last
|
() -> do turtle_states > unbox > last
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn load_turtle_state! {
|
||||||
|
"Sets the turtle state to a previously saved state. Returns the state."
|
||||||
|
(state) -> {
|
||||||
|
update! (turtle_states, append (_, state))
|
||||||
|
let call = state/call ()
|
||||||
|
if call then { add_call! (call); :ok } else :ok
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
& position () -> (x, y)
|
& position () -> (x, y)
|
||||||
fn position {
|
fn position {
|
||||||
"Returns the turtle's current position."
|
"Returns the turtle's current position."
|
||||||
|
@ -1348,6 +1357,7 @@ pkg Prelude {
|
||||||
last
|
last
|
||||||
left!
|
left!
|
||||||
list
|
list
|
||||||
|
load_turtle_state!
|
||||||
lt!
|
lt!
|
||||||
lt?
|
lt?
|
||||||
lte?
|
lte?
|
||||||
|
|
|
@ -53,6 +53,8 @@
|
||||||
|
|
||||||
(set stringify stringify*)
|
(set stringify stringify*)
|
||||||
|
|
||||||
|
(var show nil)
|
||||||
|
|
||||||
(defn- show-pkg [x]
|
(defn- show-pkg [x]
|
||||||
(def tab (struct/to-table x))
|
(def tab (struct/to-table x))
|
||||||
(set (tab :^name) nil)
|
(set (tab :^name) nil)
|
||||||
|
@ -60,41 +62,50 @@
|
||||||
(string "pkg " (x :^name) " {" (stringify tab) "}")
|
(string "pkg " (x :^name) " {" (stringify tab) "}")
|
||||||
)
|
)
|
||||||
|
|
||||||
(defn show [x]
|
(defn- dict-show [dict]
|
||||||
|
(string/join
|
||||||
|
(map
|
||||||
|
(fn [[k v]] (string (show k) " " (show v)))
|
||||||
|
(pairs dict))
|
||||||
|
", "))
|
||||||
|
|
||||||
|
(defn- show* [x]
|
||||||
(case (ludus/type x)
|
(case (ludus/type x)
|
||||||
:nil "nil"
|
:nil "nil"
|
||||||
:string (string "\"" x "\"")
|
:string (string "\"" x "\"")
|
||||||
:tuple (string "(" (string/join (map show x)) ")")
|
:tuple (string "(" (string/join (map show x) ", ") ")")
|
||||||
:list (string "[" (string/join (map show x)) "]")
|
:list (string "[" (string/join (map show x) ", ") "]")
|
||||||
:dict (string "#{" (string/join (map show x)) "}")
|
:dict (string "#{" (dict-show x) "}")
|
||||||
:set (string "${" (string/join (map show (keys x))) "}")
|
:set (string "${" (string/join (map show (keys x)) ", ") "}")
|
||||||
:box (string "box " (x :name) " [ " (show x) " ]")
|
:box (string "box " (x :name) " [ " (show x) " ]")
|
||||||
:pkg (show-pkg x)
|
:pkg (show-pkg x)
|
||||||
(stringify x)))
|
(stringify x)))
|
||||||
|
|
||||||
(var json nil)
|
(set show show*)
|
||||||
|
|
||||||
(defn- dict-json [dict]
|
# (var json nil)
|
||||||
(string/join
|
|
||||||
(map
|
|
||||||
(fn [[k v]] (string (json k) ": " (json v)))
|
|
||||||
(pairs dict))
|
|
||||||
", "))
|
|
||||||
|
|
||||||
(defn- json* [x]
|
# (defn- dict-json [dict]
|
||||||
(case (ludus/type x)
|
# (string/join
|
||||||
:nil "\"null\""
|
# (map
|
||||||
:number (string x)
|
# (fn [[k v]] (string (json k) ": " (json v)))
|
||||||
:bool (if true "\"true\"" "\"false\"")
|
# (pairs dict))
|
||||||
:string (string "\"" x "\"")
|
# ", "))
|
||||||
:keyword (string "\"" x "\"")
|
|
||||||
:tuple (string "[" (string/join (map json x) ", ") "]")
|
|
||||||
:list (string "[" (string/join (map json x) ", ")"]")
|
|
||||||
:dict (string "{" (dict-json x) "}")
|
|
||||||
:set (string "[" (string/join (map json (keys x)) ", ") "]")
|
|
||||||
(show x)))
|
|
||||||
|
|
||||||
(set json json*)
|
# (defn- json* [x]
|
||||||
|
# (case (ludus/type x)
|
||||||
|
# :nil "\"null\""
|
||||||
|
# :number (string x)
|
||||||
|
# :bool (if true "\"true\"" "\"false\"")
|
||||||
|
# :string (string "\"" x "\"")
|
||||||
|
# :keyword (string "\"" x "\"")
|
||||||
|
# :tuple (string "[" (string/join (map json x) ", ") "]")
|
||||||
|
# :list (string "[" (string/join (map json x) ", ")"]")
|
||||||
|
# :dict (string "{" (dict-json x) "}")
|
||||||
|
# :set (string "[" (string/join (map json (keys x)) ", ") "]")
|
||||||
|
# (show x)))
|
||||||
|
|
||||||
|
# (set json json*)
|
||||||
|
|
||||||
(defn show-patt [x]
|
(defn show-patt [x]
|
||||||
(case (x :type)
|
(case (x :type)
|
||||||
|
|
|
@ -53,4 +53,17 @@
|
||||||
(set (out :draw) (post :draw))
|
(set (out :draw) (post :draw))
|
||||||
(-> out j/encode string))
|
(-> out j/encode string))
|
||||||
|
|
||||||
|
# (comment
|
||||||
|
(do
|
||||||
|
(-> (ludus `
|
||||||
|
penup! ()
|
||||||
|
let s = turtle_state ()
|
||||||
|
pendown! ()
|
||||||
|
forward! (100)
|
||||||
|
rt! (0.25)
|
||||||
|
fd! (100)
|
||||||
|
load_turtle_state! (s)
|
||||||
|
pendown! ()
|
||||||
|
lt! (0.25)
|
||||||
|
fd! (50)
|
||||||
|
`)))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user