summaryrefslogtreecommitdiff
path: root/dice-lang/src/examples/java/bjc/dicelang
diff options
context:
space:
mode:
Diffstat (limited to 'dice-lang/src/examples/java/bjc/dicelang')
-rw-r--r--dice-lang/src/examples/java/bjc/dicelang/examples/DiceASTLanguageTest.java26
1 files changed, 26 insertions, 0 deletions
diff --git a/dice-lang/src/examples/java/bjc/dicelang/examples/DiceASTLanguageTest.java b/dice-lang/src/examples/java/bjc/dicelang/examples/DiceASTLanguageTest.java
index 7bd85af..54f54ac 100644
--- a/dice-lang/src/examples/java/bjc/dicelang/examples/DiceASTLanguageTest.java
+++ b/dice-lang/src/examples/java/bjc/dicelang/examples/DiceASTLanguageTest.java
@@ -12,6 +12,7 @@ import bjc.dicelang.ast.DiceASTInliner;
import bjc.dicelang.ast.DiceASTParser;
import bjc.dicelang.ast.DiceASTReferenceChecker;
import bjc.dicelang.ast.nodes.IDiceASTNode;
+import bjc.dicelang.ast.optimization.DiceASTOptimizer;
import static bjc.dicelang.examples.DiceASTLanguagePragmaHandlers.*;
@@ -41,6 +42,31 @@ public class DiceASTLanguageTest {
specialCommands.put("roll", DiceASTLanguageTest::rollReference);
specialCommands.put("env", DiceASTLanguageTest::printEnv);
specialCommands.put("inline", DiceASTLanguageTest::inlineVariable);
+ specialCommands.put("optimize",
+ DiceASTLanguageTest::optimizeReference);
+ }
+
+ private static void optimizeReference(String command,
+ DiceASTLanguageState languageState) {
+ String[] args = command.split(" ");
+
+ if (args.length != 2) {
+ System.err.println(
+ "ERROR: Optimize requires the name of the expression to optimize");
+ }
+
+ languageState.doWith((astParser, enviroment) -> {
+ if (!enviroment.containsKey(args[1])) {
+ System.err.println(
+ "ERROR: Attempted to optimize undefined variable "
+ + args[1]);
+ }
+
+ AST<IDiceASTNode> optimizedTree = DiceASTOptimizer
+ .optimizeTree(enviroment.get(args[1]).getAst());
+
+ System.out.println("Optimized: " + optimizedTree);
+ });
}
/**