package bjc.utils.dice.ast; import java.util.Map; import bjc.utils.parserutils.AST; public class DiceASTFreezer { public static AST freezeAST(AST tree, Map> env) { return tree.collapse((nod) -> { if (nod instanceof VariableDiceNode) { return expandNode((VariableDiceNode) nod, env); } else { // Type is specified here so compiler can know the type // we're using return new AST(nod); } } , (op) -> (left, right) -> { return new AST(op, left, right); } , (r) -> r); } public static AST freezeAST(DiceASTExpression tree, Map env) { return tree.getAst().collapse((nod) -> { if (nod instanceof VariableDiceNode) { return expandNode2((VariableDiceNode) nod, env); } else { // Type is specified here so compiler can know the type // we're using return new AST(nod); } } , (op) -> (left, right) -> { return new AST(op, left, right); } , (r) -> r); } private static AST expandNode(VariableDiceNode vnode, Map> env) { return env.get(vnode.getVariable()); } private static AST expandNode2(VariableDiceNode vnode, Map env) { return env.get(vnode.getVariable()).getAst(); } }