summaryrefslogtreecommitdiff
path: root/dice-lang/src/bjc/dicelang/v1/ast/optimization/ArithmeticCollapser.java
diff options
context:
space:
mode:
Diffstat (limited to 'dice-lang/src/bjc/dicelang/v1/ast/optimization/ArithmeticCollapser.java')
-rw-r--r--dice-lang/src/bjc/dicelang/v1/ast/optimization/ArithmeticCollapser.java42
1 files changed, 0 insertions, 42 deletions
diff --git a/dice-lang/src/bjc/dicelang/v1/ast/optimization/ArithmeticCollapser.java b/dice-lang/src/bjc/dicelang/v1/ast/optimization/ArithmeticCollapser.java
deleted file mode 100644
index acc1afa..0000000
--- a/dice-lang/src/bjc/dicelang/v1/ast/optimization/ArithmeticCollapser.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package bjc.dicelang.v1.ast.optimization;
-
-import bjc.dicelang.v1.ast.DiceASTUtils;
-import bjc.dicelang.v1.ast.nodes.DiceASTType;
-import bjc.dicelang.v1.ast.nodes.IDiceASTNode;
-import bjc.dicelang.v1.ast.nodes.ILiteralDiceNode;
-import bjc.dicelang.v1.ast.nodes.IntegerLiteralNode;
-import bjc.dicelang.v1.ast.nodes.OperatorDiceNode;
-import bjc.utils.data.ITree;
-import bjc.utils.data.Tree;
-import bjc.utils.funcdata.IList;
-
-import java.util.function.BinaryOperator;
-
-class ArithmeticCollapser {
- private BinaryOperator<Integer> reducer;
- private OperatorDiceNode type;
-
- public ArithmeticCollapser(BinaryOperator<Integer> reducr, OperatorDiceNode typ) {
- reducer = reducr;
- this.type = typ;
- }
-
- public ITree<IDiceASTNode> collapse(IList<ITree<IDiceASTNode>> children) {
- boolean allConstant = children.allMatch((subtree) -> {
- return subtree.transformHead((node) -> {
- if(node.getType() == DiceASTType.LITERAL)
- return ((ILiteralDiceNode) node).canOptimize();
-
- return false;
- });
- });
-
- if(!allConstant) return new Tree<>(type, children);
-
- int initState = DiceASTUtils.literalToInteger(children.first());
-
- return children.tail().reduceAux(initState, (currentNode, state) -> {
- return reducer.apply(state, DiceASTUtils.literalToInteger(currentNode));
- }, (state) -> new Tree<>(new IntegerLiteralNode(state)));
- }
-}