aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/shedlang/compiler/shidtopatio/ShidToPatioTesting.java
blob: c384d7c4cdc9c47cd8056b929319f1b60ef81680 (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
package org.shedlang.compiler.shidtopatio;

import org.shedlang.compiler.patio.PatioSerializer;
import org.shedlang.compiler.typechecker.TypeInfos;

import java.util.Optional;

class ShidToPatioTesting {
    private ShidToPatioTesting() {}

    static ShidToPatioContext createContext(TypeInfos typeInfos) {
        var globalContext = ShidToPatioContext.GlobalContext.forTypeInfos(typeInfos);
        return ShidToPatioContext.initialForCompilationUnit(Optional.empty(), globalContext);
    }

    static String serialize(ShidToPatioContext context) {
        var builder = new StringBuilder();

        builder.append("Compilation unit elements:\n\n");
        for (var element : context.compilationUnitContext().elementsByName().values()) {
            PatioSerializer.serializeCompilationUnitElement(element, builder);
            builder.append("\n");
        }
        builder.append("\n");

        builder.append("Locals:\n");
        for (var local : context.functionContext().localsByName().values()) {
            builder.append(" * ");
            PatioSerializer.serializeLocal(local, builder);
            builder.append("\n");
        }
        builder.append("\n");

        builder.append("Instructions:\n\n");
        PatioSerializer.serializeInstructions(
            context.functionContext().instructions(),
            builder
        );

        builder.append("\n\nTemporary stack:\n");
        for (var value : context.functionContext().temporaryStack()) {
            builder.append(" * ");
            builder.append(value.toString());
            builder.append("\n");
        }

        return builder.toString();
    }
}