summaryrefslogtreecommitdiff
path: root/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instr.java
blob: 09ed4f6c010ec25b680e1ba5e97facafc6688d49 (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
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 {
}