aboutsummaryrefslogtreecommitdiff
path: root/miniMAL/types.json
blob: 372dff9c573f7b4209db1bb92553837ce4be6266 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
["do",

["`", "Utility Functions"],
["def", "_cmp_seqs", ["fn", ["a", "b"],
  ["if", ["not", ["=", ["count", "a"], ["count", "b"]]],
    false,
    ["if", ["empty?", "a"],
      true,
      ["if", ["equal?", ["get", "a", 0], ["get", "b", 0]],
        ["_cmp_seqs", ["rest", "a"], ["rest", "b"]],
        false]]]]],

["def", "equal?", ["fn", ["a", "b"],
  ["if", ["sequential?", "a"],
    ["if", ["sequential?", "b"],
      ["_cmp_seqs", "a", "b"],
      false],
  ["if", ["symbol?", "a"],
    ["=", ["get", "a", ["`", "val"]], ["get", "b", ["`", "val"]]],
    ["=", "a", "b"]]]]],

["def", "_clone", ["fn", ["obj"],
  ["if", ["list?", "obj"],
    ["slice", "obj", 0],
  ["if", ["vector?", "obj"],
    ["let", ["new-obj", ["slice", "obj", 0]],
      ["do",
        ["set", "new-obj", ["`", "__vector?__"], true],
        "new-obj"]],
  ["if", ["map?", "obj"],
    ["let", ["new-obj", ["hash-map"]],
      ["do",
        ["map", ["fn", ["k"],
                  ["if", [".", "obj", ["`", "hasOwnProperty"], "k"],
                    ["set", "new-obj", "k", ["get", "obj", "k"]],
                    null]],
                ["keys", "obj"]],
        "new-obj"]],
  ["if", ["malfunc?", "obj"],
    ["let", ["new-obj", ["malfunc", ["get", "obj", ["`", "fn"]],
                                    ["get", "obj", ["`", "ast"]],
                                    ["get", "obj", ["`", "env"]],
                                    ["get", "obj", ["`", "params"]]]],
      ["do",
        ["set", "new-obj", ["`", "macro?"], ["get", "obj", ["`", "macro?"]]],
        ["set", "new-obj", ["`", "__meta__"], ["get", "obj", ["`", "__meta__"]]],
        "new-obj"]],
    ["throw", "clone of unsupported type"]]]]]]],

["def", "clone", ["fn", ["obj"],
  ["let", ["new-obj", ["_clone", "obj"]],
    ["do",
      [".", "Object", ["`", "defineProperty"], "new-obj", ["`", "__meta__"],
        {"enumerable": false, "writable": true}],
      "new-obj"]]]],

["def", "assoc!", ["fn", ["a", "b", "c"], ["do", ["set", "a", "b", "c"], "a"]]],
["def", "assocs!",  ["fn", ["hm", "kvs"],
    ["if", ["empty?", "kvs"],
      "hm",
      ["do",
        ["assoc!", "hm", ["get", "kvs", 0], ["get", "kvs", 1]],
        ["assocs!", "hm", ["slice", "kvs", 2]]]]]],


["def", "Symbol", ["fn", [], null]],
["def", "symbol", ["fn", ["name"],
  ["assoc!", ["new", "Symbol"], ["`", "val"], "name"]]],

["def", "symbol?", ["fn", ["a"],
  ["isa", "a", "Symbol"]]],


["def", "keyword", ["fn", ["name"],
  ["str", ["`", "\u029e"], "name"]]],

["def", "keyword?", ["fn", ["kw"],
  ["and", ["=", ["`", "[object String]"], ["classOf", "kw"]],
          ["=", ["`", "\u029e"], ["get", "kw", 0]]]]],


["`", "Override some list defs to account for Vectors"],
["def", "sequential?", ["fn", ["a"],
  [".", "Array", ["`", "isArray"], "a"]]],

["def", "list?", ["fn", ["a"],
  ["if", [".", "Array", ["`", "isArray"], "a"],
    ["if", [".-", "a", ["`", "__vector?__"]],
      false,
      true],
    false]]],

["def", "empty?", ["fn", ["a"],
  ["if", ["sequential?", "a"],
    ["if", ["=", 0, [".-", "a", ["`", "length"]]],
      true,
      false],
    ["=", "a", null]]]],


["def", "vectorl", ["fn", ["lst"],
  ["let", ["vec", ["slice", "lst", 0]],
    ["do",
      ["set", "vec", ["`", "__vector?__"], true],
      "vec"]]]],

["def", "vector", ["fn", ["&", "args"], ["vectorl", "args"]]],

["def", "vector?", ["fn", ["a"],
  ["if", [".", "Array", ["`", "isArray"], "a"],
    ["if", [".-", "a", ["`", "__vector?__"]],
      true,
      false],
    false]]],


["def", "HashMap", ["fn", [], null]],
["def", "hash-map", ["fn", ["&", "a"],
  ["assocs!", ["new", "HashMap"], "a"]]],
["def", "map?", ["fn", ["a"],
  ["isa", "a", "HashMap"]]],

["def", "MalFunc", ["fn", [], null]],
["def", "malfunc", ["fn", ["fn", "ast", "env", "params"],
  ["assocs!", ["new", "MalFunc"],
              ["list", ["`", "fn"], "fn",
                       ["`", "ast"], "ast",
                       ["`", "env"], "env",
                       ["`", "params"], "params",
                       ["`", "macro?"], false]]]],

["def", "malfunc?", ["fn", ["a"],
  ["isa", "a", "MalFunc"]]],

["def", "Atom", ["fn", [], null]],
["def", "atom", ["fn", ["a"],
  ["let", ["atm", ["new", "Atom"]],
    ["do",
      ["set", "atm", ["`", "val"], "a"],
      "atm"]]]],
["def", "atom?", ["fn", ["a"],
  ["isa", "a", "Atom"]]],

null
]