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
|
package no.eliashaugsbakk.kompilator.IRGeneration;
import java.util.List;
public sealed interface Instr permits Alloc, Assign, Call {
}
// allocate a new variable: set x: string = "Hello"; mut y: string?;
//
// Alloc("x", "string", false, "Hello") // Alloc("y", "string", true, "null")
record Alloc(String name, String type, boolean mutable, String initializer) implements Instr {
@Override
public String toString() {
return "Alloc[name=" + name + ", type=" + type + ", mutable=" + mutable + ", initializer=\"" + initializer + "\"]";
}
}
// assign a value to a variable: x = "Hello";
// Assign("x", "Hello")
record Assign(String name, String value) implements Instr {
@Override
public String toString() {
return "Assign[name=" + name + ", value=\"" + value + "\"]";
}
}
// call a function: skriv("hello");
// Call("skriv", ["t1"])
record Call(String fn, List<String> args) implements Instr {
}
|