Haxe: add C++, JS, Neko targets. Make neko default.
[jackhill/mal.git] / haxe / Compat.hx
1 #if js
2 @:native("console")
3 extern class Console {
4 public static function log(s:Dynamic):Void;
5 }
6
7 @:native("process")
8 extern class Process {
9 public static var argv(default,null):Array<String>;
10 public static function exit(code:Int):Void;
11 }
12
13 @:jsRequire("fs")
14 extern class FS {
15 static function readFileSync(filename:String,
16 options:{encoding:String}):String;
17 }
18
19 @:jsRequire("./node_readline")
20 extern class RL {
21 static function readline(prompt:String):Null<String>;
22 }
23 #end
24
25 class Compat {
26 public static function println(s:String) {
27 #if js
28 Console.log(s);
29 #else
30 Sys.println(s);
31 #end
32 }
33
34 public static function slurp(filename:String) {
35 #if js
36 return FS.readFileSync(filename, {encoding: "utf-8"});
37 #else
38 return sys.io.File.getContent(filename);
39 #end
40 }
41
42 public static function exit(code:Int) {
43 #if js
44 Process.exit(0);
45 #else
46 Sys.exit(0);
47 #end
48 }
49
50 public static function cmdline_args() {
51 #if js
52 return Process.argv.slice(2);
53 #else
54 return Sys.args();
55 #end
56 }
57
58 public static function readline(prompt:String) {
59 #if js
60 var line = RL.readline("user> ");
61 if (line == null) { throw new haxe.io.Eof(); }
62 #else
63 Sys.print("user> ");
64 var line = Sys.stdin().readLine();
65 #end
66 return line;
67 }
68
69
70 }