-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcode.mml
104 lines (96 loc) · 1.85 KB
/
code.mml
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
use . "lang"
export let keywords [
"true"
"false"
"return"
"fn"
"if"
"else"
"case"
"switch"
"default"
"send"
"receive"
"select"
"go"
"defer"
"in"
"for"
"let"
"use"
"export"
]
export let (
controlStatement enum()
breakControl controlStatement()
continueControl controlStatement()
)
export let (
unaryOp enum()
binaryNot unaryOp()
plus unaryOp()
minus unaryOp()
logicalNot unaryOp()
)
export let (
binaryOp enum()
binaryAnd binaryOp()
binaryOr binaryOp()
xor binaryOp()
andNot binaryOp()
lshift binaryOp()
rshift binaryOp()
mul binaryOp()
div binaryOp()
mod binaryOp()
add binaryOp()
sub binaryOp()
equals binaryOp()
notEq binaryOp()
less binaryOp()
lessOrEq binaryOp()
greater binaryOp()
greaterOrEq binaryOp()
logicalAnd binaryOp()
logicalOr binaryOp()
)
export let builtin {
len: "Len"
isError: "IsError"
keys: "Keys"
format: "Format"
stdin: "Stdin",
stdout: "Stdout"
stderr: "Stderr"
int: "Int"
float: "Float"
string: "String"
bool: "Bool"
has: "Has"
isBool: "IsBool"
isInt: "IsInt"
isFloat: "IsFloat"
isString: "IsString"
isList: "IsList"
isStruct: "IsStruct"
isFunction: "IsFunction"
isChannel: "IsChannel"
exit: "Exit"
error: "Error"
panic: "Panic"
open: "Open"
close: "Close"
args: "Args"
parseAST: "ParseAST"
parseInt: "ParseInt"
parseFloat: "ParseFloat"
}
export fn flattenedStatements(itemType, listType, listProp, statements) {
fn (
type(s) has("type", s) && contains(s.type, [itemType, listType])
toList(s) s.type == itemType ? [s] : s[listProp]
)
return statements -> filter(type) -> map(toList) -> flat
}
// TODO
export fn getModuleName(path) path