+.DS_Store
.bash_history
.cache
.cargo
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
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))
--- /dev/null
+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
+
--- /dev/null
+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))
+}
--- /dev/null
+#!/bin/bash
+exec $(dirname $0)/${STEP:-stepA_mal} "${@}"
+