mirror of
https://github.com/kanaka/mal.git
synced 2024-08-18 02:00:40 +03:00
8a19f60386
- Reorder README to have implementation list after "learning tool" bullet. - This also moves tests/ and libs/ into impls. It would be preferrable to have these directories at the top level. However, this causes difficulties with the wasm implementations which need pre-open directories and have trouble with paths starting with "../../". So in lieu of that, symlink those directories to the top-level. - Move the run_argv_test.sh script into the tests directory for general hygiene.
50 lines
1.1 KiB
Vala
50 lines
1.1 KiB
Vala
class Mal.Main : GLib.Object {
|
|
static bool eof;
|
|
|
|
static construct {
|
|
eof = false;
|
|
}
|
|
|
|
public static Mal.Val? READ() {
|
|
string? line = Readline.readline("user> ");
|
|
if (line != null) {
|
|
if (line.length > 0)
|
|
Readline.History.add(line);
|
|
|
|
try {
|
|
return Reader.read_str(line);
|
|
} catch (Mal.Error err) {
|
|
GLib.stderr.printf("%s\n", err.message);
|
|
return null;
|
|
}
|
|
} else {
|
|
stdout.printf("\n");
|
|
eof = true;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static Mal.Val EVAL(Mal.Val expr) {
|
|
return expr;
|
|
}
|
|
|
|
public static void PRINT(Mal.Val value) {
|
|
stdout.printf("%s\n", pr_str(value));
|
|
}
|
|
|
|
public static void rep() {
|
|
Mal.Val? val = READ();
|
|
if (val != null) {
|
|
val = EVAL(val);
|
|
PRINT(val);
|
|
GC.Core.maybe_collect();
|
|
}
|
|
}
|
|
|
|
public static int main(string[] args) {
|
|
while (!eof)
|
|
rep();
|
|
return 0;
|
|
}
|
|
}
|