swift5: step0_repl
authorOleg Montak <montak.o@ya.ru>
Wed, 9 Oct 2019 20:14:30 +0000 (23:14 +0300)
committerOleg Montak <montak.o@ya.ru>
Fri, 8 Nov 2019 18:46:18 +0000 (21:46 +0300)
.gitignore
Makefile
swift5/Makefile [new file with mode: 0644]
swift5/Sources/step0_repl/main.swift [new file with mode: 0644]
swift5/run [new file with mode: 0755]

index d5c41ff..c137197 100644 (file)
@@ -1,3 +1,4 @@
+.DS_Store
 .bash_history
 .cache
 .cargo
index fcc35bb..adbcab8 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -94,7 +94,7 @@ IMPLS = ada ada.2 awk bash basic bbc-basic c chuck clojure coffee common-lisp cp
        guile haskell haxe hy io java js julia kotlin livescript logo lua make mal \
        matlab miniMAL nasm nim objc objpascal ocaml perl perl6 php picolisp pike plpgsql \
        plsql powershell ps python python.2 r racket rexx rpython ruby rust scala scheme skew \
-       swift swift3 swift4 tcl ts vala vb vhdl vimscript wasm wren yorick
+       swift swift3 swift4 swift5 tcl ts vala vb vhdl vimscript wasm wren yorick
 
 EXTENSION = .mal
 
@@ -255,6 +255,7 @@ skew_STEP_TO_PROG =    skew/$($(1)).js
 swift_STEP_TO_PROG =   swift/$($(1))
 swift3_STEP_TO_PROG =  swift3/$($(1))
 swift4_STEP_TO_PROG =  swift4/$($(1))
+swift5_STEP_TO_PROG =  swift5/$($(1))
 tcl_STEP_TO_PROG =     tcl/$($(1)).tcl
 ts_STEP_TO_PROG =      ts/$($(1)).js
 vala_STEP_TO_PROG =    vala/$($(1))
diff --git a/swift5/Makefile b/swift5/Makefile
new file mode 100644 (file)
index 0000000..a76309c
--- /dev/null
@@ -0,0 +1,29 @@
+ifneq ($(shell which xcrun),)
+       SWIFT = xcrun -sdk macosx swiftc
+else
+       SWIFT = swiftc
+endif
+
+STEP3_DEPS = Sources/types.swift Sources/reader.swift Sources/printer.swift Sources/env.swift
+STEP4_DEPS = $(STEP3_DEPS) Sources/core.swift
+
+STEPS = step0_repl step1_read_print step2_eval step3_env \
+       step4_if_fn_do step5_tco step6_file step7_quote \
+       step8_macros step9_try stepA_mal
+
+all: $(STEPS)
+
+dist: mal
+
+mal: stepA_mal
+       cp $< $@
+
+step1_read_print step2_eval step3_env: $(STEP3_DEPS)
+step4_if_fn_do step5_tco step6_file step7_quote step8_macros step9_try stepA_mal: $(STEP4_DEPS)
+
+step%: Sources/step%/main.swift
+       $(SWIFT) $+ -o $@
+
+clean:
+       rm -f $(STEPS) mal
+
diff --git a/swift5/Sources/step0_repl/main.swift b/swift5/Sources/step0_repl/main.swift
new file mode 100644 (file)
index 0000000..88ff958
--- /dev/null
@@ -0,0 +1,23 @@
+import Foundation
+
+func READ(_ s: String) -> String {
+    return s
+}
+
+func EVAL(_ s: String) -> String {
+    return s
+}
+
+func PRINT(_ s: String) -> String {
+    return s
+}
+
+func rep(_ s: String) -> String {
+    return PRINT(EVAL(READ(s)))
+}
+
+while true {
+    print("user> ", terminator: "")
+    guard let s = readLine() else { break }
+    print(rep(s))
+}
diff --git a/swift5/run b/swift5/run
new file mode 100755 (executable)
index 0000000..0ecd249
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/bash
+exec $(dirname $0)/${STEP:-stepA_mal} "${@}"
+