Loading EDG/src/main/java/edg/constraint/LiteralConstraint.java +4 −1 Original line number Diff line number Diff line Loading @@ -38,7 +38,10 @@ public class LiteralConstraint extends EdgeConstraint { return super.wrap(super.push(phase, cs)); } super.check(phase, Phase.SummaryGeneration); return super.wrap(super.push(phase, constraints)); Constraints newConstraints = new Constraints(); return super.wrap(super.push(phase, newConstraints)); // return super.wrap(super.push(phase, constraints)); } protected List<Constraints> resolve(Phase phase, EDG edg, Edge edge, Constraints constraints, LiteralConstraint topConstraint, int productionDepth){ return super.wrap(constraints); Loading e-Knife/src/main/java/eknife/erlang/ValueEdgeGenerator.java +14 −4 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import edg.constraint.*; import edg.graph.Edge; import edg.graph.LAST; import edg.graph.Node; import edg.graph.Variable; public class ValueEdgeGenerator { Loading Loading @@ -67,6 +68,8 @@ public class ValueEdgeGenerator { this.last.addEdge(expression, equality, Edge.Type.Value); this.last.addEdge(equality, pattern, Edge.Type.Value); this.generateImplicitRestrictions(pattern, List.of(equality)); } } private void generateDataConstructorEdges() Loading Loading @@ -250,9 +253,13 @@ public class ValueEdgeGenerator { private void generateImplicitRestrictions(Node patternNode, List<Node> controlExpressionNode){ if (this.isImplicitRestrictionNode(patternNode)) { List<Node> children = this.last.getChildren(patternNode); if (children.stream().noneMatch(c -> isImplicitRestrictionNode(c))) if (children.stream().noneMatch(this::isImplicitRestrictionNode)) for (Node node : controlExpressionNode) if (patternNode.getType() == Node.Type.Variable) this.last.addEdge(patternNode,node, Edge.Type.Value, EmptyConstraint.getConstraint()); else this.last.addEdge(patternNode, node, Edge.Type.Value, LiteralConstraint.getConstraint()); else for (Node child : children) this.generateImplicitRestrictions(child, controlExpressionNode); } Loading @@ -264,6 +271,9 @@ public class ValueEdgeGenerator { case DataConstructor: case List: return true; case Variable: if (((Variable) node).getContext() == Variable.Context.Use) return true; default: return false; } Loading e-Knife/src/test/resources/regression/bencher/b1_s56Year.erl.edg.sliced +8 −7 Original line number Diff line number Diff line Loading @@ -9,30 +9,31 @@ main(Number) Number < 7 -> Database = [[sliced, sliced, sliced, {sliced, {concerts, [{sliced, {2016, 6, 17}}, {sliced, {2016, 6, 29}}, {sliced, {2016, 7, 21}}, {sliced, {2017, 8, 14}}]}], [sliced, sliced, sliced, {sliced, [{sliced, {2007, 6, 21}}, {sliced, {2008, 10, 28}}]}], {concerts, [{sliced, {2007, 6, 21}}, {sliced, {2008, 10, 28}}]}], [sliced, sliced, sliced, {sliced, {concerts, [{sliced, {2014, 10, 4}}, {sliced, {2014, 10, 18}}, {sliced, {2013, 11, 24}}]}], [sliced, sliced, sliced, {sliced, {concerts, [{sliced, {2015, 11, 8}}, {sliced, {2016, 5, 6}}, {sliced, {2017, 7, 30}}]}], [sliced, sliced, sliced, {sliced, {concerts, [{sliced, {2016, 7, 3}}, {sliced, {2016, 9, 16}}, {sliced, {2017, 10, 24}}]}], [sliced, sliced, sliced, {sliced, {concerts, [{sliced, {2016, 5, 22}}, {sliced, {2016, 6, 10}}, {sliced, {2016, 8, 2}}, Loading @@ -43,7 +44,7 @@ main(Number) {_, Year} = Info. getConcerts(Artist) -> [_, _, _, {_, Concerts}] = Artist, [_, _, _, {concerts, Concerts}] = Artist, Concerts. getNextConcert(Artist) -> Loading Loading
EDG/src/main/java/edg/constraint/LiteralConstraint.java +4 −1 Original line number Diff line number Diff line Loading @@ -38,7 +38,10 @@ public class LiteralConstraint extends EdgeConstraint { return super.wrap(super.push(phase, cs)); } super.check(phase, Phase.SummaryGeneration); return super.wrap(super.push(phase, constraints)); Constraints newConstraints = new Constraints(); return super.wrap(super.push(phase, newConstraints)); // return super.wrap(super.push(phase, constraints)); } protected List<Constraints> resolve(Phase phase, EDG edg, Edge edge, Constraints constraints, LiteralConstraint topConstraint, int productionDepth){ return super.wrap(constraints); Loading
e-Knife/src/main/java/eknife/erlang/ValueEdgeGenerator.java +14 −4 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import edg.constraint.*; import edg.graph.Edge; import edg.graph.LAST; import edg.graph.Node; import edg.graph.Variable; public class ValueEdgeGenerator { Loading Loading @@ -67,6 +68,8 @@ public class ValueEdgeGenerator { this.last.addEdge(expression, equality, Edge.Type.Value); this.last.addEdge(equality, pattern, Edge.Type.Value); this.generateImplicitRestrictions(pattern, List.of(equality)); } } private void generateDataConstructorEdges() Loading Loading @@ -250,9 +253,13 @@ public class ValueEdgeGenerator { private void generateImplicitRestrictions(Node patternNode, List<Node> controlExpressionNode){ if (this.isImplicitRestrictionNode(patternNode)) { List<Node> children = this.last.getChildren(patternNode); if (children.stream().noneMatch(c -> isImplicitRestrictionNode(c))) if (children.stream().noneMatch(this::isImplicitRestrictionNode)) for (Node node : controlExpressionNode) if (patternNode.getType() == Node.Type.Variable) this.last.addEdge(patternNode,node, Edge.Type.Value, EmptyConstraint.getConstraint()); else this.last.addEdge(patternNode, node, Edge.Type.Value, LiteralConstraint.getConstraint()); else for (Node child : children) this.generateImplicitRestrictions(child, controlExpressionNode); } Loading @@ -264,6 +271,9 @@ public class ValueEdgeGenerator { case DataConstructor: case List: return true; case Variable: if (((Variable) node).getContext() == Variable.Context.Use) return true; default: return false; } Loading
e-Knife/src/test/resources/regression/bencher/b1_s56Year.erl.edg.sliced +8 −7 Original line number Diff line number Diff line Loading @@ -9,30 +9,31 @@ main(Number) Number < 7 -> Database = [[sliced, sliced, sliced, {sliced, {concerts, [{sliced, {2016, 6, 17}}, {sliced, {2016, 6, 29}}, {sliced, {2016, 7, 21}}, {sliced, {2017, 8, 14}}]}], [sliced, sliced, sliced, {sliced, [{sliced, {2007, 6, 21}}, {sliced, {2008, 10, 28}}]}], {concerts, [{sliced, {2007, 6, 21}}, {sliced, {2008, 10, 28}}]}], [sliced, sliced, sliced, {sliced, {concerts, [{sliced, {2014, 10, 4}}, {sliced, {2014, 10, 18}}, {sliced, {2013, 11, 24}}]}], [sliced, sliced, sliced, {sliced, {concerts, [{sliced, {2015, 11, 8}}, {sliced, {2016, 5, 6}}, {sliced, {2017, 7, 30}}]}], [sliced, sliced, sliced, {sliced, {concerts, [{sliced, {2016, 7, 3}}, {sliced, {2016, 9, 16}}, {sliced, {2017, 10, 24}}]}], [sliced, sliced, sliced, {sliced, {concerts, [{sliced, {2016, 5, 22}}, {sliced, {2016, 6, 10}}, {sliced, {2016, 8, 2}}, Loading @@ -43,7 +44,7 @@ main(Number) {_, Year} = Info. getConcerts(Artist) -> [_, _, _, {_, Concerts}] = Artist, [_, _, _, {concerts, Concerts}] = Artist, Concerts. getNextConcert(Artist) -> Loading