Loading e-Knife/src/main/java/eknife/erlang/ErlangCodeFactory.java +27 −19 Original line number Diff line number Diff line Loading @@ -958,7 +958,7 @@ public class ErlangCodeFactory varElements[0] = new OtpErlangAtom("clause"); varElements[1] = new OtpErlangLong(1); varElements[2] = new OtpErlangList(this.parseEmptyVar()); varElements[3] = new OtpErlangList(new OtpErlangObject[0]); varElements[3] = new OtpErlangList(); varElements[4] = new OtpErlangList(this.parseEmptyLiteral()); return new OtpErlangTuple(varElements); Loading Loading @@ -1059,22 +1059,11 @@ public class ErlangCodeFactory // Try Catch private OtpErlangTuple parseTry(Node _try) { final List<Node> tryClauses = edg.getChildren(_try); final Node last = tryClauses.get(tryClauses.size()-1); final List<Node> tryClauses = edg.getChildrenNonResult(_try); final OtpErlangObject[] tryElements = new OtpErlangObject[6]; // Parse after Part if (last.getType() == Node.Type.AfterTry) { tryClauses.remove(last); final List<Node> body = edg.getChildren(last); final List<Node> afterExpressions = edg.getChildren(body.get(0)); tryElements[5] = this.parseAfterExpressions(afterExpressions, false); } else { tryElements[5] = new OtpErlangList(new OtpErlangObject[0]); } tryElements[5] = parseAfterTry(tryClauses); tryElements[0] = new OtpErlangAtom("try"); tryElements[1] = new OtpErlangLong(1); Loading @@ -1082,6 +1071,7 @@ public class ErlangCodeFactory // Parse try part final Node tryPart = tryClauses.remove(0); final List<Node> tryExpressions = edg.getChildren(tryPart); tryClauses.addAll(0, extractCases(tryExpressions)); tryElements[2] = this.parse(tryExpressions, false); // Parse catch part Loading @@ -1090,12 +1080,30 @@ public class ErlangCodeFactory tryElements[4] = this.parseCatchClauses(catchClauses); // Parse try_of clauses tryElements[3] = this.parseClauses(tryClauses); if (_try.getType() == Node.Type.TryOf && tryElements[3].equals(new OtpErlangList(new OtpErlangObject[0]))) tryElements[3] = this.parseCaseClauses(tryClauses); if (_try.getType() == Node.Type.TryOf && tryElements[3].equals(new OtpErlangList())) tryElements[3] = new OtpErlangList(this.parseEmptyClause()); return new OtpErlangTuple(tryElements); } private OtpErlangList parseAfterTry(List<Node> tryClauses) { Node last = tryClauses.get(tryClauses.size() - 1); if (last.getType() == Node.Type.AfterTry) { tryClauses.remove(last); final List<Node> body = edg.getChildren(last); if (!body.isEmpty()) return this.parseAfterExpressions(edg.getChildren(body.get(0)), false); } return new OtpErlangList(); } private List<Node> extractCases(List<Node> expressions) { List<Node> cases = expressions.stream().filter(n -> n.getType() == Node.Type.Case).toList(); expressions.removeAll(cases); cases.stream().map(edg::getResFromNode).forEach(expressions::remove); return cases; } private OtpErlangTuple parseEmptyClause() { final OtpErlangObject[] clauseElements = new OtpErlangObject[5]; Loading @@ -1103,7 +1111,7 @@ public class ErlangCodeFactory clauseElements[0] = new OtpErlangAtom("clause"); clauseElements[1] = new OtpErlangLong(1); clauseElements[2] = new OtpErlangList(this.parseEmptyVar()); clauseElements[3] = new OtpErlangList(new OtpErlangObject[0]); clauseElements[3] = new OtpErlangList(); clauseElements[4] = new OtpErlangList(this.parseEmptyLiteral()); return new OtpErlangTuple(clauseElements); Loading Loading @@ -1149,7 +1157,7 @@ public class ErlangCodeFactory emptyCatch[0] = new OtpErlangAtom("clause"); emptyCatch[1] = new OtpErlangLong(1); emptyCatch[2] = new OtpErlangList(this.parseCatchEmptyPattern()); emptyCatch[3] = new OtpErlangList(new OtpErlangObject[0]); emptyCatch[3] = new OtpErlangList(); emptyCatch[4] = new OtpErlangList(this.parseEmptyLiteral()); return new OtpErlangTuple(emptyCatch); Loading Loading @@ -1205,7 +1213,7 @@ public class ErlangCodeFactory { final List<Node> ors = edg.getChildren(guards); if (ors.size() == 0) return new OtpErlangList(new OtpErlangObject[0]); return new OtpErlangList(); final Node or = ors.get(0); final List<Node> ands = edg.getChildren(or); Loading Loading
e-Knife/src/main/java/eknife/erlang/ErlangCodeFactory.java +27 −19 Original line number Diff line number Diff line Loading @@ -958,7 +958,7 @@ public class ErlangCodeFactory varElements[0] = new OtpErlangAtom("clause"); varElements[1] = new OtpErlangLong(1); varElements[2] = new OtpErlangList(this.parseEmptyVar()); varElements[3] = new OtpErlangList(new OtpErlangObject[0]); varElements[3] = new OtpErlangList(); varElements[4] = new OtpErlangList(this.parseEmptyLiteral()); return new OtpErlangTuple(varElements); Loading Loading @@ -1059,22 +1059,11 @@ public class ErlangCodeFactory // Try Catch private OtpErlangTuple parseTry(Node _try) { final List<Node> tryClauses = edg.getChildren(_try); final Node last = tryClauses.get(tryClauses.size()-1); final List<Node> tryClauses = edg.getChildrenNonResult(_try); final OtpErlangObject[] tryElements = new OtpErlangObject[6]; // Parse after Part if (last.getType() == Node.Type.AfterTry) { tryClauses.remove(last); final List<Node> body = edg.getChildren(last); final List<Node> afterExpressions = edg.getChildren(body.get(0)); tryElements[5] = this.parseAfterExpressions(afterExpressions, false); } else { tryElements[5] = new OtpErlangList(new OtpErlangObject[0]); } tryElements[5] = parseAfterTry(tryClauses); tryElements[0] = new OtpErlangAtom("try"); tryElements[1] = new OtpErlangLong(1); Loading @@ -1082,6 +1071,7 @@ public class ErlangCodeFactory // Parse try part final Node tryPart = tryClauses.remove(0); final List<Node> tryExpressions = edg.getChildren(tryPart); tryClauses.addAll(0, extractCases(tryExpressions)); tryElements[2] = this.parse(tryExpressions, false); // Parse catch part Loading @@ -1090,12 +1080,30 @@ public class ErlangCodeFactory tryElements[4] = this.parseCatchClauses(catchClauses); // Parse try_of clauses tryElements[3] = this.parseClauses(tryClauses); if (_try.getType() == Node.Type.TryOf && tryElements[3].equals(new OtpErlangList(new OtpErlangObject[0]))) tryElements[3] = this.parseCaseClauses(tryClauses); if (_try.getType() == Node.Type.TryOf && tryElements[3].equals(new OtpErlangList())) tryElements[3] = new OtpErlangList(this.parseEmptyClause()); return new OtpErlangTuple(tryElements); } private OtpErlangList parseAfterTry(List<Node> tryClauses) { Node last = tryClauses.get(tryClauses.size() - 1); if (last.getType() == Node.Type.AfterTry) { tryClauses.remove(last); final List<Node> body = edg.getChildren(last); if (!body.isEmpty()) return this.parseAfterExpressions(edg.getChildren(body.get(0)), false); } return new OtpErlangList(); } private List<Node> extractCases(List<Node> expressions) { List<Node> cases = expressions.stream().filter(n -> n.getType() == Node.Type.Case).toList(); expressions.removeAll(cases); cases.stream().map(edg::getResFromNode).forEach(expressions::remove); return cases; } private OtpErlangTuple parseEmptyClause() { final OtpErlangObject[] clauseElements = new OtpErlangObject[5]; Loading @@ -1103,7 +1111,7 @@ public class ErlangCodeFactory clauseElements[0] = new OtpErlangAtom("clause"); clauseElements[1] = new OtpErlangLong(1); clauseElements[2] = new OtpErlangList(this.parseEmptyVar()); clauseElements[3] = new OtpErlangList(new OtpErlangObject[0]); clauseElements[3] = new OtpErlangList(); clauseElements[4] = new OtpErlangList(this.parseEmptyLiteral()); return new OtpErlangTuple(clauseElements); Loading Loading @@ -1149,7 +1157,7 @@ public class ErlangCodeFactory emptyCatch[0] = new OtpErlangAtom("clause"); emptyCatch[1] = new OtpErlangLong(1); emptyCatch[2] = new OtpErlangList(this.parseCatchEmptyPattern()); emptyCatch[3] = new OtpErlangList(new OtpErlangObject[0]); emptyCatch[3] = new OtpErlangList(); emptyCatch[4] = new OtpErlangList(this.parseEmptyLiteral()); return new OtpErlangTuple(emptyCatch); Loading Loading @@ -1205,7 +1213,7 @@ public class ErlangCodeFactory { final List<Node> ors = edg.getChildren(guards); if (ors.size() == 0) return new OtpErlangList(new OtpErlangObject[0]); return new OtpErlangList(); final Node or = ors.get(0); final List<Node> ands = edg.getChildren(or); Loading