forked from area9innovation/flow9
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fcexp_description.flow
66 lines (55 loc) · 1.42 KB
/
fcexp_description.flow
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
import tools/flowc/fcexp;
import runtime;
export {
// For error messages, try to generate some useful short description of this expression
fcexpDescription(e : FcExp) -> string;
}
fcexpDescription(e : FcExp) -> string {
switch (e) {
FcLet(n, t, v, s, __): n;
FcCast(__, __, __, __): "cast";
FcIf(__, __, __, __): "if";
FcVoid(__): "{}";
FcBool(b, __): b2s(b);
FcInt(__, __): "int";
FcDouble(__, __): "double";
FcString(__, __): "string";
FcVar(name, __): name;
FcCall(f, a, __): "call of " + fcexpDescription(f) + "()";
FcSwitch(__, __, __, __): "switch";
FcLambda(__, __, __): "lambda";
FcCallPrim(op, __, __): {
switch (op) {
FcEqPrim(): ("==");
FcNePrim(): ("!=");
FcGePrim(): (">=");
FcLePrim(): ("<=");
FcGtPrim(): (">");
FcLtPrim(): ("<");
FcPlusPrim(): ("+");
FcMinusPrim(): ("-");
FcMulPrim(): ("*");
FcDivPrim(): ("/");
FcModPrim(): ("%");
FcNegPrim(): ("-");
FcAndPrim(): ("&&");
FcOrPrim(): ("||");
FcNotPrim(): ("!");
FcDerefPrim(): ("^");
FcRefPrim(): ("ref");
FcFieldPrim(n): ".";
FcIndexPrim(): "array index";
FcArrayPrim(): "[ ]";
FcAssignPrim(): ":=";
FcStructPrim(n): n + "()";
FcSetMutablePrim(name): "::=";
FcCreateClosurePrim(__, __): "create closure";
FcQuote(): ("@");
FcUnquote(): ("$");
}
}
FcRequire(__, __, __): "";
FcUnsafe(__, __, __): "";
FcSeq(__, __): "{...}";
}
}