// =========================================================================== // This file has been generated by // Typical, version 1.13.3, // (C) 2004-2007 Robert Grimm and New York University, // on Wednesday, February 27, 2008 at 5:11:34 PM. // Edit at your own risk. // =========================================================================== package xtc.typical; import java.math.BigInteger; import java.util.List; import java.util.ArrayList; import xtc.util.Pair; import xtc.util.Runtime; import xtc.util.Function; import xtc.tree.Node; import xtc.tree.GNode; /** Type checker for Typical. */ public class TypicalAnalyzer extends Analyzer { protected String nodeType = null; public TypicalAnalyzer(Runtime runt, String nodeType) { super(runt); analyzer = analyze; this.nodeType = nodeType; } public void getScopeNodes() { processScopeNodes.add("ValueDefinition"); processScopeNodes.add("LetExpression"); processScopeNodes.add("FunExpression"); processScopeNodes.add("PatternMatch"); } final Function.F1<Tuple.T3<Name, String, String>, Node> getNameSpace = new Function.F1<Tuple.T3<Name, String, String>, Node>() { public Tuple.T3<Name, String, String> apply(final Node n) { return new Match<Tuple.T3<Name, String, String>>() { public Tuple.T3<Name, String, String> apply() { final Node arg$0 = GNode.cast(n); if ((null == arg$0)) { return null; } if (TypicalSupport.match$1(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$4 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "constructor", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4); } if (TypicalSupport.match$5(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$8 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "constructor", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$8); } if (TypicalSupport.match$9(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$12 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "constructor", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$12); } if (TypicalSupport.match$13(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$16 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "constructor", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$16); } if (TypicalSupport.match$17(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$20 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "poly", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$20); } if (TypicalSupport.match$21(arg$0)) { final String s = (arg$0.size() > 1 ? arg$0.getString(1) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$24 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "type", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$24); } if (TypicalSupport.match$25(arg$0)) { final String s = (arg$0.size() > 1 ? arg$0.getString(1) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$28 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "type", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$28); } if (TypicalSupport.match$29(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$32 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "type", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$32); } if (TypicalSupport.match$33(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$36 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "field", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$36); } if (TypicalSupport.match$37(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$40 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "field", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$40); } if (TypicalSupport.match$41(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$44 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "field", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$44); } if (TypicalSupport.match$45(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$48 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "field", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$48); } if (TypicalSupport.match$49(arg$0)) { final String s = (arg$0.size() > 1 ? arg$0.getString(1) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$52 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "field", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$52); } if (TypicalSupport.match$53(arg$0)) { final String s = (arg$0.getGeneric(0).size() > 0 ? arg$0.getGeneric(0).getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); List<Node> listName$55 = new ArrayList<Node>(); Node nodeName$54 = arg$0; nodeName$54 = nodeName$54.getGeneric(0); if ((null != nodeName$54 && processScopeNodes.contains(nodeName$54.getName()))) { processScope(nodeName$54, getScope); } checkEnterScope(nodeName$54); listName$55.add(0, nodeName$54); final Object retValue$56 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "field", "type")); for (Node no : listName$55) { checkExitScope(no); } checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$56); } if (TypicalSupport.match$57(arg$0)) { final String s = (arg$0.size() > 1 ? arg$0.getString(1) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$60 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "value", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$60); } if (TypicalSupport.match$61(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$64 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "value", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$64); } if (TypicalSupport.match$65(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$68 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "value", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$68); } if (TypicalSupport.match$69(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$72 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "value", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$72); } if (TypicalSupport.match$73(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$76 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "value", "type")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$76); } if (TypicalSupport.match$77(arg$0)) { final String s = (arg$0.size() > 0 ? arg$0.getString(0) : null); matching_nodes.add(arg$0); if ((null != arg$0 && processScopeNodes.contains(arg$0.getName()))) { processScope(arg$0, getScope); } checkEnterScope(arg$0); final Object retValue$80 = Analyzer.cast(new Tuple.T3<Name, String, String>(new Name.SimpleName(s), "node", "node")); checkExitScope(arg$0); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$80); } return null; } }.apply(); } }; final Function.F1<Scope, Node> getScope = new Function.F1<Scope, Node>() { public Scope apply(final Node n) { if (TypicalSupport.match$73(n)) { final String s = (n.size() > 0 ? n.getString(0) : null); final Node a = (n.size() > 1 ? n.getGeneric(1) : null); final Node b = (n.size() > 2 ? n.getGeneric(2) : null); return Analyzer.cast(new Scope(new ScopeKind.Named(new Name.SimpleName(s)), new Pair<Node>(a).append(new Pair<Node>(b)))); } if (TypicalSupport.match$83(n)) { final Node a = (n.size() > 1 ? n.getGeneric(1) : null); return Analyzer.cast(new Scope(new ScopeKind.Anonymous("let"), new Pair<Node>(a))); } if (TypicalSupport.match$84(n)) { final Node a = (n.size() > 0 ? n.getGeneric(0) : null); final Node b = (n.size() > 1 ? n.getGeneric(1) : null); return Analyzer.cast(new Scope(new ScopeKind.Anonymous("fun"), new Pair<Node>(a).append(new Pair<Node>(b)))); } if (TypicalSupport.match$85(n)) { final Node a = Analyzer.cast(n); return Analyzer.cast(new Scope(new ScopeKind.Anonymous("patternmatching"), new Pair<Node>(a))); } return null; } }; final TypicalTypes.raw_type<?> wildt = Analyzer.cast(new TypicalTypes.WildcardT()); final TypicalTypes.raw_type<?> typet = Analyzer.cast(new TypicalTypes.TypeName("type")); final TypicalTypes.raw_type<?> strt = Analyzer.cast(new TypicalTypes.StringT()); final TypicalTypes.raw_type<?> intt = Analyzer.cast(new TypicalTypes.IntT()); final TypicalTypes.raw_type<?> boolt = Analyzer.cast(new TypicalTypes.BoolT()); final TypicalTypes.raw_type<?> floatt = Analyzer.cast(new TypicalTypes.Float64T()); final TypicalTypes.raw_type<?> nodet = Analyzer.cast(new TypicalTypes.NodeTypeT()); final Function.F1<String, TypicalTypes.raw_type<?>> getTypeName = new Function.F1<String, TypicalTypes.raw_type<?>>() { public String apply(final TypicalTypes.raw_type<?> t) { return (null == Primitives.isBottom.apply(t) ? null : Primitives.isBottom.apply(t) ? "null type" : new Match<String>() { public String apply() { final TypicalTypes.raw_type<?> arg$87 = Analyzer.cast(t); if ((null == arg$87)) { return null; } if ((null != arg$87)) switch (arg$87.tag()) { case PairOfType: if (TypicalSupport.match$117(arg$87)) { final TypicalTypes.raw_type<?> t1 = Analyzer.cast(arg$87.getTuple().get1()); final TypicalTypes.raw_type<?> t2 = Analyzer.cast(arg$87.getTuple().get2()); return Analyzer.cast(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply("pair of types of ", getTypeName.apply(t1)), " -> "), getTypeName.apply(t2))); } break; case VariableT: if (TypicalSupport.match$118(arg$87)) { final String str = Analyzer.cast(arg$87.getTuple().get1()); return Analyzer.cast(new Let<String>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(Analyzer.cast(Primitives.get.apply(str, hashTable))); } public String apply() { return Analyzer.cast(null == Primitives.isBottom.apply(ty) ? null : Primitives.isBottom.apply(ty) ? "variable type" : getTypeName.apply(ty)); } }.apply()); } break; case StringT: if (TypicalSupport.match$92(arg$87)) { return Analyzer.cast("string"); } break; case FunctionT: if (TypicalSupport.match$98(arg$87)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$87.getTuple().get1()); final TypicalTypes.raw_type<?> t = Analyzer.cast(arg$87.getTuple().get2()); return Analyzer.cast(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply("function type (", getTypeName.apply(TypicalSupport.head$99.apply(tl))), getTypeListName.apply(TypicalSupport.tail$100.apply(tl), "")), ") -> "), getTypeName.apply(t))); } break; case IntT: if (TypicalSupport.match$89(arg$87)) { return Analyzer.cast("integer"); } break; case VariantT: if (TypicalSupport.match$101(arg$87)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$87.getTuple().get1()); return Analyzer.cast(new Let<String>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(TypicalSupport.head$99.apply(tl)); } public String apply() { return Analyzer.cast(new Match<String>() { public String apply() { final TypicalTypes.raw_type<?> arg$105 = Analyzer.cast(t); if ((null == arg$105)) { return null; } if ((null != arg$105)) switch (arg$105.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$105)) { final String s = Analyzer.cast(arg$105.getTuple().get1()); return Analyzer.cast(s); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } break; case Float64T: if (TypicalSupport.match$91(arg$87)) { return Analyzer.cast("64-bit float"); } break; case ConstructorT: if (TypicalSupport.match$95(arg$87)) { final String s = Analyzer.cast(arg$87.getTuple().get1()); return Analyzer.cast(s); } break; case PolyVariantT: if (TypicalSupport.match$119(arg$87)) { return Analyzer.cast("node"); } break; case NodeTypeT: if (TypicalSupport.match$120(arg$87)) { return Analyzer.cast("node"); } break; case AnyT: if (TypicalSupport.match$94(arg$87)) { return Analyzer.cast("'any'"); } break; case WildcardT: if (TypicalSupport.match$93(arg$87)) { return Analyzer.cast("wildcard"); } break; case ConstructedT: if (TypicalSupport.match$116(arg$87)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$87.getTuple().get1()); final String s = Analyzer.cast(arg$87.getTuple().get2()); return Analyzer.cast(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(s, " of ("), getTypeName.apply(TypicalSupport.head$99.apply(tl))), getTypeListName.apply(TypicalSupport.tail$100.apply(tl), "")), ")")); } break; case TypeName: if (TypicalSupport.match$96(arg$87)) { final String s = Analyzer.cast(arg$87.getTuple().get1()); return Analyzer.cast(s); } break; case Float32T: if (TypicalSupport.match$90(arg$87)) { return Analyzer.cast("32-bit float"); } break; case BoolT: if (TypicalSupport.match$88(arg$87)) { return Analyzer.cast("boolean"); } break; case FieldT: if (TypicalSupport.match$97(arg$87)) { final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$87.getTuple().get3()); return Analyzer.cast(getTypeName.apply(ty)); } break; case TupleT: if (TypicalSupport.match$115(arg$87)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$87.getTuple().get1()); return Analyzer.cast(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply("tuple type (", getTypeName.apply(TypicalSupport.head$99.apply(tl))), getTypeListName.apply(TypicalSupport.tail$100.apply(tl), "")), ")")); } break; case RecordT: if (TypicalSupport.match$108(arg$87)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$87.getTuple().get1()); return Analyzer.cast(new Let<String>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(TypicalSupport.head$99.apply(tl)); } public String apply() { return Analyzer.cast(new Match<String>() { public String apply() { final TypicalTypes.raw_type<?> arg$112 = Analyzer.cast(t); if ((null == arg$112)) { return null; } if ((null != arg$112)) switch (arg$112.tag()) { case FieldT: if (TypicalSupport.match$97(arg$112)) { final String s = Analyzer.cast(arg$112.getTuple().get1()); return Analyzer.cast(s); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }; final Function.F2<String, Pair<TypicalTypes.raw_type<?>>, String> getTypeListName = new Function.F2<String, Pair<TypicalTypes.raw_type<?>>, String>() { public String apply(final Pair<TypicalTypes.raw_type<?>> tl, final String str) { return (null == Primitives.isBottom.apply(tl) ? null : Primitives.isBottom.apply(tl) ? str : new Match<String>() { public String apply() { final Pair<TypicalTypes.raw_type<?>> arg$122 = Analyzer.cast(tl); if ((null == arg$122)) { return null; } if (TypicalSupport.match$123(arg$122)) { return Analyzer.cast(str); } if ((null != arg$122 && !((Pair)arg$122).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$124 = Analyzer.cast(arg$122); final TypicalTypes.raw_type<?> x = Analyzer.cast(Primitives.wrapHead(list$124)); final Pair<TypicalTypes.raw_type<?>> xs = Analyzer.cast(Primitives.wrapTail(list$124)); return Analyzer.cast(getTypeListName.apply(xs, Primitives.concat.apply(Primitives.concat.apply(str, ","), getTypeName.apply(x)))); } return null; } }.apply()); } }; final Function.F1<TypicalTypes.raw_type<?>, Node> analyze = new Function.F1<TypicalTypes.raw_type<?>, Node>() { public TypicalTypes.raw_type<?> apply(final Node no) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Node arg$126 = GNode.cast(no); if ((null == arg$126)) { return null; } if (TypicalSupport.match$127(arg$126)) { final Node n = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Pair<Node> l = Analyzer.cast(Primitives.getChildren(arg$126, 1, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$133 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<Node> nl; final Pair<TypicalTypes.raw_type<?>> atts; final Pair<String> strList; { nl = Analyzer.cast(TypicalSupport.append$128.apply(new Pair<Node>(n), l)); TypicalSupport.map$129.apply(scanNode, nl); atts = Analyzer.cast(processAttributes.apply(nl)); createTypeRecord.apply(atts); preload.apply(no); strList = Analyzer.cast(getNodeTypes.apply(nl)); Primitives.annotate.apply(no, "__node_types", new TypicalTypes.StringList(strList)); TypicalSupport.map$130.apply(analyzeTypeDefinition, nl); processFunctionCalls.apply(nl); processScopeSpace.apply(nl); TypicalSupport.map$130.apply(analyze, nl); checkUnusedParameters.apply(nl); TypicalSupport.map$129.apply(resolveNode, nl); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$133); } return Analyzer.cast(retValue$133); } if (TypicalSupport.match$21(arg$126)) { final Node tp = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final String s = (arg$126.size() > 1 ? arg$126.getString(1) : null); final Node dec = (arg$126.size() > 2 ? arg$126.getGeneric(2) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$139 = Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "visited") ? null : Primitives.hasAnnotation.apply(no, "visited") ? null : new Let<TypicalTypes.raw_type<?>>() { { Primitives.annotate.apply(no, "visited", wildt); Primitives.annotate.apply(dec, "parent", new TypicalTypes.StringName(s)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$136 = checkMonomorphic.apply(no, dec); if ((null != var$136 && !var$136)) { showMessage("error", Primitives.concat.apply(s, " must be a monomorphic variant"), null); } if ((null == var$136)) { return null; } if (var$136) { return (null == Primitives.isBottom.apply(tp) ? null : Primitives.isBottom.apply(tp) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tdec; { tdec = Analyzer.cast(analyze.apply(dec)); redefine.apply(no, tdec, getNameSpace); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(tdec); } }.apply() : new Let<TypicalTypes.raw_type<?>>() { final Pair<Node> nl; final Pair<String> vars; { nl = Analyzer.cast(getNodeList.apply(tp)); vars = Analyzer.cast(getTypeVariables.apply(nl, Pair.<String>empty())); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(vars) || !Primitives.isNotBottom.apply(vars) ? null : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tdec; { Primitives.annotate.apply(dec, "type_variables", new TypicalTypes.StringList(vars)); Primitives.annotate.apply(no, "type_variables", new TypicalTypes.StringList(vars)); tdec = Analyzer.cast(analyze.apply(dec)); checkUnusedVariables.apply(vars, dec); redefine.apply(no, tdec, getNameSpace); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(tdec); } }.apply()); } }.apply()); } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$139); } return Analyzer.cast(retValue$139); } if (TypicalSupport.match$33(arg$126)) { final String s = (arg$126.size() > 0 ? arg$126.getString(0) : null); final Node n = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$143 = Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "visited") ? null : Primitives.hasAnnotation.apply(no, "visited") ? Analyzer.cast(lookup2.apply(no, getNameSpace)) : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; { Primitives.annotate.apply(no, "visited", wildt); t = Analyzer.cast(analyze.apply(n)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(t) || !Primitives.isNotBottom.apply(t) ? null : new Let<TypicalTypes.raw_type<?>>() { { define5.apply(no, new TypicalTypes.FieldT("type", s, t), "error", Primitives.concat.apply(Primitives.concat.apply("attribute ", s), " has been previously defined"), getNameSpace); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.FieldT("type", s, t)); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$143); } return Analyzer.cast(retValue$143); } if (TypicalSupport.match$37(arg$126)) { final String s = (arg$126.size() > 0 ? arg$126.getString(0) : null); final Node n = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$147 = Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "visited") ? null : Primitives.hasAnnotation.apply(no, "visited") ? Analyzer.cast(lookup2.apply(no, getNameSpace)) : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; { Primitives.annotate.apply(no, "visited", wildt); t = Analyzer.cast(analyze.apply(n)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(t) || !Primitives.isNotBottom.apply(t) ? null : new Let<TypicalTypes.raw_type<?>>() { { define5.apply(no, new TypicalTypes.FieldT("type", s, t), "error", Primitives.concat.apply(Primitives.concat.apply("attribute ", s), " has been previously defined"), getNameSpace); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.FieldT("type", s, t)); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$147); } return Analyzer.cast(retValue$147); } if (TypicalSupport.match$148(arg$126)) { final String s = (arg$126.size() > 0 ? arg$126.getString(0) : null); final Pair<Node> l = Analyzer.cast(Primitives.getChildren(arg$126, 1, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$153 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { TypicalSupport.map$130.apply(analyze, l); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<Object>() { public Object apply() { final Boolean var$150 = Primitives.equal.apply("raw_type", s); if ((null != var$150 && !var$150)) { showMessage("error", "raw_type is expected in equality definition", null); } if ((null == var$150)) { return null; } if (var$150) { return null; } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$153); } return Analyzer.cast(retValue$153); } if (TypicalSupport.match$154(arg$126)) { final Node up = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node n = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); final Pair<Node> l = Analyzer.cast(Primitives.getChildren(arg$126, 2, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$183 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String s; final Pair<Node> nl; final TypicalTypes.raw_type<?> t; { s = Analyzer.cast(getString.apply(up)); nl = Analyzer.cast(TypicalSupport.append$128.apply(new Pair<Node>(n), l)); t = Analyzer.cast(Analyzer.cast(lookup4.apply(up, "error", Primitives.concat.apply(Primitives.concat.apply("constructor ", s), " is undefined"), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$168 = Analyzer.cast(t); if ((null == arg$168)) { return null; } if ((null != arg$168)) switch (arg$168.tag()) { case ConstructorT: if (TypicalSupport.match$156(arg$168)) { final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$168.getTuple().get3()); return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$175 = Analyzer.cast(ty); if ((null == arg$175)) { return null; } if ((null != arg$175)) switch (arg$175.tag()) { case TupleT: if (TypicalSupport.match$115(arg$175)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$175.getTuple().get1()); return Analyzer.cast(null == Primitives.lessInt.apply(Primitives.length.apply(nl), Primitives.length.apply(tl)) ? null : Primitives.lessInt.apply(Primitives.length.apply(nl), Primitives.length.apply(tl)) ? error(Primitives.concat.apply(s, " does not have enough children"), null) : null == Primitives.greaterInt.apply(Primitives.length.apply(nl), Primitives.length.apply(tl)) || !Primitives.greaterInt.apply(Primitives.length.apply(nl), Primitives.length.apply(tl)) ? null : error(Primitives.concat.apply(s, " has too many children"), null)); } break; default: break; }; if (true) { return Analyzer.cast(new Require<Object>() { public Object apply() { final Boolean var$178 = Primitives.equal.apply(Primitives.length.apply(nl), BigInteger.valueOf(1)); if ((null != var$178 && !var$178)) { showMessage("error", Primitives.concat.apply(s, " must have only one child"), null); } if ((null == var$178)) { return null; } if (var$178) { return null; } return null; } }.apply()); } return null; } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(error("raw_type constructor is expected in equality definition", null)); } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$183); } return Analyzer.cast(retValue$183); } if (TypicalSupport.match$184(arg$126)) { final Pair<Node> l = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$188 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String str; final Pair<String> vars; final Pair<TypicalTypes.raw_type<?>> tl; { str = Analyzer.cast(getAnnotatedString.apply(no, "parent")); vars = Analyzer.cast(getAnnotatedStringList.apply(no, "type_variables")); Primitives.annotateList.apply(l, "parent", new TypicalTypes.StringName(str)); Analyzer.discard(null == Primitives.isNotBottom.apply(vars) || !Primitives.isNotBottom.apply(vars) ? null : Primitives.annotateList.apply(l, "type_variables", new TypicalTypes.StringList(vars))); tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, l)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : new TypicalTypes.RecordT(tl)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$188); } return Analyzer.cast(retValue$188); } if (TypicalSupport.match$41(arg$126)) { final String s = (arg$126.size() > 0 ? arg$126.getString(0) : null); final Node n = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$192 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String ano; final Pair<String> vars; final TypicalTypes.raw_type<?> t; { ano = Analyzer.cast(getAnnotatedString.apply(no, "parent")); vars = Analyzer.cast(getAnnotatedStringList.apply(no, "type_variables")); Analyzer.discard(null == Primitives.isNotBottom.apply(vars) || !Primitives.isNotBottom.apply(vars) ? null : Primitives.annotate.apply(n, "type_variables", new TypicalTypes.StringList(vars))); t = Analyzer.cast(analyze.apply(n)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == isDefined.apply(no, getNameSpace) ? null : isDefined.apply(no, getNameSpace) ? error(Primitives.concat.apply(Primitives.concat.apply("field ", s), " has been previously defined"), null) : null == Primitives.isNotBottom.apply(t) || !Primitives.isNotBottom.apply(t) ? null : new Let<TypicalTypes.raw_type<?>>() { { redefine.apply(no, new TypicalTypes.FieldT(ano, s, t), getNameSpace); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.FieldT(ano, s, t)); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$192); } return Analyzer.cast(retValue$192); } if (TypicalSupport.match$193(arg$126)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$196 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String str; final Pair<String> vars; final Pair<TypicalTypes.raw_type<?>> tl; { str = Analyzer.cast(getAnnotatedString.apply(no, "parent")); vars = Analyzer.cast(getAnnotatedStringList.apply(no, "type_variables")); Primitives.annotateList.apply(nl, "parent", new TypicalTypes.StringName(str)); Analyzer.discard(null == Primitives.isNotBottom.apply(vars) || !Primitives.isNotBottom.apply(vars) ? null : Primitives.annotateList.apply(nl, "type_variables", new TypicalTypes.StringList(vars))); tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, nl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : new TypicalTypes.VariantT(tl)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$196); } return Analyzer.cast(retValue$196); } if (TypicalSupport.match$13(arg$126)) { final String s = (arg$126.size() > 0 ? arg$126.getString(0) : null); final Node n = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$200 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String ano; final Pair<String> vars; final TypicalTypes.raw_type<?> t; { ano = Analyzer.cast(getAnnotatedString.apply(no, "parent")); vars = Analyzer.cast(getAnnotatedStringList.apply(no, "type_variables")); Analyzer.discard(null == Primitives.isNotBottom.apply(vars) || !Primitives.isNotBottom.apply(vars) ? null : Primitives.annotate.apply(n, "type_variables", new TypicalTypes.StringList(vars))); Primitives.annotate.apply(n, "parent", new TypicalTypes.StringName(ano)); t = Analyzer.cast(analyze.apply(n)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == isDefined.apply(no, getNameSpace) ? null : isDefined.apply(no, getNameSpace) ? error(Primitives.concat.apply(Primitives.concat.apply("constructor ", s), " has been previously defined"), null) : new Let<TypicalTypes.raw_type<?>>() { { redefine.apply(no, new TypicalTypes.ConstructorT(ano, s, t), getNameSpace); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.ConstructorT(ano, s, t)); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$200); } return Analyzer.cast(retValue$200); } if (TypicalSupport.match$201(arg$126)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$204 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String str; { str = Analyzer.cast(getAnnotatedString.apply(no, "parent")); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == reachableFromNode.apply(str) ? null : reachableFromNode.apply(str) ? new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, nl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? new TypicalTypes.PolyVariantT(tl) : null); } }.apply() : error("polymorphic variant is not allowed outside node closure", null)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$204); } return Analyzer.cast(retValue$204); } if (TypicalSupport.match$17(arg$126)) { final String s1 = (arg$126.size() > 0 ? arg$126.getString(0) : null); final String s2 = (arg$126.size() > 1 ? arg$126.getString(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$216 = Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$213 = isDefined.apply(GNode.create("UserDefinedType", s2), getNameSpace); if ((null != var$213 && !var$213)) { showMessage("error", Primitives.concat.apply(s2, " is undefined"), null); } if ((null == var$213)) { return null; } if (var$213) { return (null == isDefined.apply(no, getNameSpace) ? null : isDefined.apply(no, getNameSpace) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(Analyzer.cast(lookup2.apply(no, getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$210 = Analyzer.cast(t); if ((null == arg$210)) { return null; } if ((null != arg$210)) switch (arg$210.tag()) { case TypeName: if (TypicalSupport.match$96(arg$210)) { final String s = Analyzer.cast(arg$210.getTuple().get1()); return Analyzer.cast(null == Primitives.equal.apply(s, s2) ? null : Primitives.equal.apply(s, s2) ? t : error(Primitives.concat.apply(Primitives.concat.apply(s1, " is previously defined with "), s), null)); } break; default: break; }; if (true) { return Analyzer.cast(error(Primitives.concat.apply(Primitives.concat.apply(s1, " is previously defined with "), getTypeName.apply(t)), null)); } return null; } }.apply()); } }.apply() : new Let<TypicalTypes.raw_type<?>>() { { redefine.apply(no, new TypicalTypes.TypeName(s2), getNameSpace); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.TypeName(s2)); } }.apply()); } return null; } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$216); } return Analyzer.cast(retValue$216); } if (TypicalSupport.match$217(arg$126)) { final Node n = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$220 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { Primitives.annotate.apply(n, "non_exhaustive", wildt); Primitives.annotate.apply(n, "no_binding_check", wildt); Primitives.annotate.apply(n, "ensure_node", wildt); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(analyze.apply(n)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$220); } return Analyzer.cast(retValue$220); } if (TypicalSupport.match$221(arg$126)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$227 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, nl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; { res = Analyzer.cast(TypicalSupport.foldl$223.apply(unify, tl, wildt)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$224 = Primitives.isNotBottom.apply(res); if ((null != var$224 && !var$224)) { showMessage("error", Primitives.concat.apply("types of pattern matches in matching structure ", "do not match together"), null); } if ((null == var$224)) { return null; } if (var$224) { return res; } return null; } }.apply()); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$227); } return Analyzer.cast(retValue$227); } if (TypicalSupport.match$77(arg$126)) { final String tagStr = (arg$126.size() > 0 ? arg$126.getString(0) : null); final String typeStr = (arg$126.size() > 1 ? arg$126.getString(1) : null); final Node pat = (arg$126.size() > 2 ? arg$126.getGeneric(2) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$233 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(Analyzer.cast(lookup4.apply(GNode.create("UserDefinedType", typeStr), "error", Primitives.concat.apply(typeStr, " is an undefined type"), getNameSpace))); Primitives.annotate.apply(pat, "no_binding_check", wildt); Primitives.annotate.apply(pat, "non_exhaustive", wildt); Primitives.annotate.apply(pat, "ensure_node", wildt); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(ty) || !Primitives.isNotBottom.apply(ty) ? null : null == Primitives.not.apply(isDefined.apply(GNode.create("UserDefinedType", Primitives.concat.apply("tag", tagStr)), getNameSpace)) ? null : Primitives.not.apply(isDefined.apply(GNode.create("UserDefinedType", Primitives.concat.apply("tag", tagStr)), getNameSpace)) ? new Let<TypicalTypes.raw_type<?>>() { { redefine.apply(GNode.create("UserDefinedType", Primitives.concat.apply("tag", tagStr)), new TypicalTypes.TypeName(typeStr), getNameSpace); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(analyze.apply(pat)); } }.apply() : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ta; { ta = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", Primitives.concat.apply("tag", tagStr)), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$230 = Primitives.isNotBottom.apply(unify.apply(ta, ty)); if ((null != var$230 && !var$230)) { showMessage("error", Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply("tag ", tagStr), " must be defined with "), getTypeName.apply(ta)), ", found "), getTypeName.apply(ty)), null); } if ((null == var$230)) { return null; } if (var$230) { return analyze.apply(pat); } return null; } }.apply()); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$233); } return Analyzer.cast(retValue$233); } if (TypicalSupport.match$73(arg$126)) { final Node p = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); final Node v = (arg$126.size() > 2 ? arg$126.getGeneric(2) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$245 = Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "visited") ? null : Primitives.hasAnnotation.apply(no, "visited") ? Analyzer.cast(lookup2.apply(no, getNameSpace)) : new Let<TypicalTypes.raw_type<?>>() { { Primitives.annotate.apply(no, "visited", wildt); visitDepend.apply(no); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(Primitives.hasAnnotation.apply(no, "secondary")) ? null : Primitives.not.apply(Primitives.hasAnnotation.apply(no, "secondary")) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> pts; { pts = Analyzer.cast(analyze.apply(p)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$239 = Analyzer.cast(pts); if ((null == arg$239)) { return null; } if ((null != arg$239)) switch (arg$239.tag()) { case TupleT: if (TypicalSupport.match$236(arg$239)) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ty; final TypicalTypes.raw_type<?> ret; { ty = Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE)); redefine.apply(no, ty, getNameSpace); processMutual.apply(no); ret = Analyzer.cast(analyze.apply(v)); unify.apply(ty, ret); resolveMutual.apply(no); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(Analyzer.cast(lookup2.apply(no, getNameSpace))); } }.apply()); } if (TypicalSupport.match$115(arg$239)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$239.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ty; final TypicalTypes.raw_type<?> ret; { ty = Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE)); redefine.apply(no, new TypicalTypes.FunctionT(tl, ty), getNameSpace); processMutual.apply(no); ret = Analyzer.cast(analyze.apply(v)); unify.apply(ty, ret); resolveMutual.apply(no); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(Analyzer.cast(lookup2.apply(no, getNameSpace))); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply() : Analyzer.cast(lookup2.apply(no, getNameSpace))); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$245); } return Analyzer.cast(retValue$245); } if (TypicalSupport.match$84(arg$126)) { final Node p = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node v = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$257 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> pts; { pts = Analyzer.cast(analyze.apply(p)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$251 = Analyzer.cast(pts); if ((null == arg$251)) { return null; } if ((null != arg$251)) switch (arg$251.tag()) { case TupleT: if (TypicalSupport.match$236(arg$251)) { return Analyzer.cast(error("FunEpression must have parameters", null)); } if (TypicalSupport.match$115(arg$251)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$251.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ret; final TypicalTypes.raw_type<?> funT; { ret = Analyzer.cast(analyze.apply(v)); funT = Analyzer.cast(new TypicalTypes.FunctionT(tl, ret)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(resolveType.apply(funT)); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$257); } return Analyzer.cast(retValue$257); } if (TypicalSupport.match$258(arg$126)) { final Pair<Node> pl = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$261 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, pl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : new TypicalTypes.TupleT(tl)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$261); } return Analyzer.cast(retValue$261); } if (TypicalSupport.match$69(arg$126)) { final String s = (arg$126.size() > 0 ? arg$126.getString(0) : null); final Node n = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$267 = Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$264 = Primitives.not.apply(isDefinedLocally.apply(no, getNameSpace)); if ((null != var$264 && !var$264)) { showMessage("error", Primitives.concat.apply(Primitives.concat.apply("parameter ", s), " has been previously defined"), null); } if ((null == var$264)) { return null; } if (var$264) { return (null == Primitives.isBottom.apply(n) ? null : Primitives.isBottom.apply(n) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE)); define3.apply(no, ty, getNameSpace); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(ty); } }.apply() : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(analyze.apply(n)); define3.apply(no, t, getNameSpace); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(t); } }.apply()); } return null; } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$267); } return Analyzer.cast(retValue$267); } if (TypicalSupport.match$268(arg$126)) { final Node n1 = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node n2 = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$281 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(analyze.apply(n1)); ty = Analyzer.cast(analyze.apply(n2)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$274 = Analyzer.cast(ty); if ((null == arg$274)) { return null; } if ((null != arg$274)) switch (arg$274.tag()) { case PairOfType: if (TypicalSupport.match$117(arg$274)) { final TypicalTypes.raw_type<?> t1 = Analyzer.cast(arg$274.getTuple().get1()); final TypicalTypes.raw_type<?> t2 = Analyzer.cast(arg$274.getTuple().get2()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == t1)) { return null; } if ((null == t)) { return null; } final TypicalTypes.raw_type<?> result$277 = unify.apply(t, t1); if ((null == result$277)) { return Analyzer.cast(error(Primitives.concat.apply("type of the expression does not match ", "the type of patterns"), null)); } return result$277; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(t2); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$281); } return Analyzer.cast(retValue$281); } if (TypicalSupport.match$282(arg$126)) { final Pair<Node> l = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$285 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> typeList; { Analyzer.discard(null == Primitives.hasAnnotation.apply(no, "no_binding_check") || !Primitives.hasAnnotation.apply(no, "no_binding_check") ? null : Primitives.annotateList.apply(l, "no_binding_check", wildt)); Analyzer.discard(null == Primitives.hasAnnotation.apply(no, "ensure_node") || !Primitives.hasAnnotation.apply(no, "ensure_node") ? null : Primitives.annotateList.apply(l, "ensure_node", wildt)); typeList = Analyzer.cast(TypicalSupport.map$130.apply(analyze, l)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, typeList)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, typeList)) ? null : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; { res = Analyzer.cast(TypicalSupport.foldl$223.apply(unify, typeList, wildt)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(res) ? null : Primitives.isNotBottom.apply(res) ? new Let<TypicalTypes.raw_type<?>>() { { Analyzer.discard(null == Primitives.hasAnnotation.apply(no, "is_reduce") ? null : Primitives.hasAnnotation.apply(no, "is_reduce") ? checkReduceMatching.apply(l) : checkIrredundant.apply(l)); Analyzer.discard(null == Primitives.not.apply(Primitives.hasAnnotation.apply(no, "non_exhaustive")) ? null : Primitives.not.apply(Primitives.hasAnnotation.apply(no, "non_exhaustive")) ? checkExhaustive.apply(l) : Boolean.TRUE); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(res); } }.apply() : error(Primitives.concat.apply("types of pattern matches in pattern matching structure ", "do not match together"), null)); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$285); } return Analyzer.cast(retValue$285); } if (TypicalSupport.match$85(arg$126)) { final Node pat = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node ne = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$289 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tpat; final TypicalTypes.raw_type<?> tne; final Pair<String> strList; final Pair<String> newList; { Analyzer.discard(null == Primitives.hasAnnotation.apply(no, "no_binding_check") || !Primitives.hasAnnotation.apply(no, "no_binding_check") ? null : Primitives.annotate.apply(pat, "no_binding_check", wildt)); Analyzer.discard(null == Primitives.hasAnnotation.apply(no, "ensure_node") || !Primitives.hasAnnotation.apply(no, "ensure_node") ? null : Primitives.annotate.apply(pat, "ensure_node", wildt)); tpat = Analyzer.cast(analyze.apply(pat)); tne = Analyzer.cast(analyze.apply(ne)); strList = Analyzer.cast(retrieveVariables.apply(pat)); Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(strList)); newList = Analyzer.cast(removeUsedVariables.apply(strList, pat)); checkUnusedVariables.apply(newList, ne); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.and.apply(Primitives.isNotBottom.apply(tpat), Primitives.isNotBottom.apply(tne)) || !Primitives.and.apply(Primitives.isNotBottom.apply(tpat), Primitives.isNotBottom.apply(tne)) ? null : new TypicalTypes.PairOfType(tpat, tne)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$289); } return Analyzer.cast(retValue$289); } if (TypicalSupport.match$290(arg$126)) { final Pair<Node> pl = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$295 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { Analyzer.discard(null == Primitives.hasAnnotation.apply(no, "no_binding_check") || !Primitives.hasAnnotation.apply(no, "no_binding_check") ? null : Primitives.annotateList.apply(pl, "no_binding_check", wildt)); tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, pl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; { res = Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "ensure_node") ? null : Primitives.hasAnnotation.apply(no, "ensure_node") ? checkNodeList.apply(tl) : TypicalSupport.foldl$223.apply(unify, tl, wildt)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.and.apply(Primitives.isBottom.apply(res), Primitives.not.apply(Primitives.hasAnnotation.apply(no, "ensure_node"))) ? null : Primitives.and.apply(Primitives.isBottom.apply(res), Primitives.not.apply(Primitives.hasAnnotation.apply(no, "ensure_node"))) ? error("types of the patterns do not match together", null) : new Let<TypicalTypes.raw_type<?>>() { final Pair<String> strList; { strList = Analyzer.cast(retrieveVariables.apply(TypicalSupport.head$292.apply(pl))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == haveSameVariables.apply(strList, TypicalSupport.tail$291.apply(pl)) ? null : haveSameVariables.apply(strList, TypicalSupport.tail$291.apply(pl)) ? new Let<TypicalTypes.raw_type<?>>() { { Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(strList)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(res); } }.apply() : error("parallel patterns do not have the same variables", null)); } }.apply()); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$295); } return Analyzer.cast(retValue$295); } if (TypicalSupport.match$296(arg$126)) { final Pair<Node> pl = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$299 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { Analyzer.discard(null == Primitives.hasAnnotation.apply(no, "no_binding_check") || !Primitives.hasAnnotation.apply(no, "no_binding_check") ? null : Primitives.annotateList.apply(pl, "no_binding_check", wildt)); tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, pl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : new Let<TypicalTypes.raw_type<?>>() { final Pair<String> strList; { strList = Analyzer.cast(combineVariables.apply(pl)); Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(strList)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.TupleT(tl)); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$299); } return Analyzer.cast(retValue$299); } if (TypicalSupport.match$300(arg$126)) { final Node p = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node e = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$305 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tp; final TypicalTypes.raw_type<?> te; { Analyzer.discard(null == Primitives.hasAnnotation.apply(no, "no_binding_check") || !Primitives.hasAnnotation.apply(no, "no_binding_check") ? null : Primitives.annotate.apply(p, "no_binding_check", wildt)); tp = Analyzer.cast(analyze.apply(p)); te = Analyzer.cast(analyze.apply(e)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == boolt)) { return null; } if ((null == te)) { return null; } final TypicalTypes.raw_type<?> result$302 = unify.apply(te, boolt); if ((null == result$302)) { return Analyzer.cast(error(Primitives.concat.apply("expected boolean, found ", getTypeName.apply(te)), e)); } return result$302; } }.apply(); Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(retrieveVariables.apply(p))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(Primitives.hasAnnotation.apply(p, "has_bindings")) ? null : Primitives.not.apply(Primitives.hasAnnotation.apply(p, "has_bindings")) ? tp : new Let<TypicalTypes.raw_type<?>>() { { Primitives.annotate.apply(no, "has_bindings", wildt); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(tp); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$305); } return Analyzer.cast(retValue$305); } if (TypicalSupport.match$57(arg$126)) { final Node p = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final String s = (arg$126.size() > 1 ? arg$126.getString(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$318 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tp; { Analyzer.discard(null == Primitives.hasAnnotation.apply(no, "no_binding_check") || !Primitives.hasAnnotation.apply(no, "no_binding_check") ? null : Primitives.annotate.apply(p, "no_binding_check", wildt)); tp = Analyzer.cast(analyze.apply(p)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$315 = Primitives.not.apply(isDefinedLocally.apply(no, getNameSpace)); if ((null != var$315 && !var$315)) { showMessage("error", Primitives.concat.apply(Primitives.concat.apply("variable ", s), " has been previously defined"), null); } if ((null == var$315)) { return null; } if (var$315) { return new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; final Pair<String> strList; { res = Analyzer.cast(null == Primitives.isBottom.apply(tp) ? null : Primitives.isBottom.apply(tp) ? null : new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$312 = Analyzer.cast(tp); if ((null == arg$312)) { return null; } if ((null != arg$312)) switch (arg$312.tag()) { case WildcardT: if (TypicalSupport.match$93(arg$312)) { return Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE)); } break; default: break; }; if (true) { return Analyzer.cast(tp); } return null; } }.apply()); redefine.apply(no, res, getNameSpace); strList = Analyzer.cast(TypicalSupport.append$310.apply(retrieveVariables.apply(p), new Pair<String>(s))); Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(strList)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.and.apply(Primitives.hasAnnotation.apply(p, "has_bindings"), Primitives.not.apply(Primitives.hasAnnotation.apply(no, "no_binding_check"))) ? null : Primitives.and.apply(Primitives.hasAnnotation.apply(p, "has_bindings"), Primitives.not.apply(Primitives.hasAnnotation.apply(no, "no_binding_check"))) ? error("AsPattern contains bindings in the pattern", null) : res); } }.apply(); } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$318); } return Analyzer.cast(retValue$318); } if (TypicalSupport.match$319(arg$126)) { final Node pat = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node ty = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$324 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tp; final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> res; { Analyzer.discard(null == Primitives.hasAnnotation.apply(no, "no_binding_check") || !Primitives.hasAnnotation.apply(no, "no_binding_check") ? null : Primitives.annotate.apply(pat, "no_binding_check", wildt)); tp = Analyzer.cast(analyze.apply(pat)); t = Analyzer.cast(analyze.apply(ty)); res = Analyzer.cast(unify.apply(t, tp)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == t)) { return null; } if ((null == tp)) { return null; } final TypicalTypes.raw_type<?> result$321 = unify.apply(t, tp); if ((null == result$321)) { return Analyzer.cast(error(Primitives.concat.apply("type of the pattern does not match ", "with the explicit type"), pat)); } return result$321; } }.apply(); Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(retrieveVariables.apply(pat))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(Primitives.hasAnnotation.apply(pat, "has_bindings")) ? null : Primitives.not.apply(Primitives.hasAnnotation.apply(pat, "has_bindings")) ? res : new Let<TypicalTypes.raw_type<?>>() { { Primitives.annotate.apply(no, "has_bindings", wildt); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(res); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$324); } return Analyzer.cast(retValue$324); } if (TypicalSupport.match$325(arg$126)) { final Node n = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node con = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$333 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> tl; { Analyzer.discard(null == Primitives.hasAnnotation.apply(no, "no_binding_check") || !Primitives.hasAnnotation.apply(no, "no_binding_check") ? null : new Let<Object>() { { Primitives.annotate.apply(n, "no_binding_check", wildt); } public Object apply() { return Analyzer.cast(Primitives.annotate.apply(con, "no_binding_check", wildt)); } }.apply()); t = Analyzer.cast(analyze.apply(n)); tl = Analyzer.cast(analyze.apply(con)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.and.apply(Primitives.isNotBottom.apply(t), Primitives.isNotBottom.apply(tl)) || !Primitives.and.apply(Primitives.isNotBottom.apply(t), Primitives.isNotBottom.apply(tl)) ? null : null == isListType.apply(tl) ? null : isListType.apply(tl) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; { res = Analyzer.cast(unify.apply(tl, new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(t), "list"))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$330 = Primitives.isNotBottom.apply(res); if ((null != var$330 && !var$330)) { showMessage("error", Primitives.concat.apply(Primitives.concat.apply("type of the head does not match with ", "type in the list"), " in cons pattern"), null); } if ((null == var$330)) { return null; } if (var$330) { return new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$329 = Primitives.or.apply(Primitives.not.apply(isNodeType.apply(t)), checkBindings.apply(new Pair<Node>(n).append(new Pair<Node>(con)), BigInteger.valueOf(0), BigInteger.valueOf(0))); if ((null != var$329 && !var$329)) { showMessage("error", "bindings in different nodes in cons pattern", null); } if ((null == var$329)) { return null; } if (var$329) { return new Let<TypicalTypes.raw_type<?>>() { final Pair<String> strList; { strList = Analyzer.cast(TypicalSupport.union$326.apply(retrieveVariables.apply(n), retrieveVariables.apply(con))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isEmpty.apply(strList) ? null : Primitives.isEmpty.apply(strList) ? res : new Let<TypicalTypes.raw_type<?>>() { { Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(strList)); Primitives.annotate.apply(no, "has_bindings", wildt); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(res); } }.apply()); } }.apply(); } return null; } }.apply(); } return null; } }.apply()); } }.apply() : error("the tail of a cons pattern must be a list", null)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$333); } return Analyzer.cast(retValue$333); } if (TypicalSupport.match$334(arg$126)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$351 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { Analyzer.discard(null == Primitives.hasAnnotation.apply(no, "no_binding_check") || !Primitives.hasAnnotation.apply(no, "no_binding_check") ? null : Primitives.annotateList.apply(nl, "no_binding_check", wildt)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$342 = Analyzer.cast(nl); if ((null == arg$342)) { return null; } if (TypicalSupport.match$336(arg$342)) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> varT; { varT = Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(varT), "list")); } }.apply()); } if (true) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, nl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; { res = Analyzer.cast(TypicalSupport.foldl$223.apply(unify, tl, wildt)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$347 = Primitives.isNotBottom.apply(res); if ((null != var$347 && !var$347)) { showMessage("error", "types do not match in list pattern", null); } if ((null == var$347)) { return null; } if (var$347) { return new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$346 = Primitives.or.apply(Primitives.not.apply(isNodeType.apply(res)), checkBindings.apply(nl, BigInteger.valueOf(0), BigInteger.valueOf(0))); if ((null != var$346 && !var$346)) { showMessage("error", Primitives.concat.apply("bindings in different nodes ", "in list pattern"), null); } if ((null == var$346)) { return null; } if (var$346) { return new Let<TypicalTypes.raw_type<?>>() { final Pair<String> strList; { strList = Analyzer.cast(combineVariables.apply(nl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isEmpty.apply(strList) ? null : Primitives.isEmpty.apply(strList) ? new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(res), "list") : new Let<TypicalTypes.raw_type<?>>() { { Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(strList)); Primitives.annotate.apply(no, "has_bindings", wildt); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(res), "list")); } }.apply()); } }.apply(); } return null; } }.apply(); } return null; } }.apply()); } }.apply()); } }.apply()); } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$351); } return Analyzer.cast(retValue$351); } if (TypicalSupport.match$352(arg$126)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$375 = Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$363 = Analyzer.cast(nl); if ((null == arg$363)) { return null; } if (TypicalSupport.match$336(arg$363)) { return Analyzer.cast(error("empty record pattern", null)); } if ((null != arg$363 && !((Pair)arg$363).isEmpty())) { final Pair<Node> list$365 = Analyzer.cast(arg$363); final Node x = GNode.cast(Primitives.wrapHead(list$365)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$365)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tx; { tx = Analyzer.cast(analyze.apply(x)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$369 = Analyzer.cast(tx); if ((null == arg$369)) { return null; } if ((null != arg$369)) switch (arg$369.tag()) { case FieldT: if (TypicalSupport.match$97(arg$369)) { final String s = Analyzer.cast(arg$369.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<String> strList; { Primitives.annotateList.apply(xs, "parent", new TypicalTypes.StringName(s)); TypicalSupport.map$130.apply(analyze, xs); strList = Analyzer.cast(combineVariables.apply(nl)); Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(strList)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", s), getNameSpace))); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } return null; } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$375); } return Analyzer.cast(retValue$375); } if (TypicalSupport.match$376(arg$126)) { final Node name = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node p = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$393 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String s; final TypicalTypes.raw_type<?> t; { s = Analyzer.cast(getString.apply(name)); t = Analyzer.cast(Analyzer.cast(lookup4.apply(no, "error", Primitives.concat.apply(Primitives.concat.apply("field ", s), " is undefined"), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$384 = Analyzer.cast(t); if ((null == arg$384)) { return null; } if ((null != arg$384)) switch (arg$384.tag()) { case FieldT: if (TypicalSupport.match$97(arg$384)) { final String str = Analyzer.cast(arg$384.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String ps; { ps = Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "parent") ? null : Primitives.hasAnnotation.apply(no, "parent") ? new Let<String>() { final String stri; { stri = Analyzer.cast(getAnnotatedString.apply(no, "parent")); } public String apply() { return Analyzer.cast(stri); } }.apply() : str); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$389 = Primitives.equal.apply(ps, str); if ((null != var$389 && !var$389)) { showMessage("error", Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply("record ", ps), " does not contain the field "), s), null); } if ((null == var$389)) { return null; } if (var$389) { return new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tp; { tp = Analyzer.cast(analyze.apply(p)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == t)) { return null; } if ((null == tp)) { return null; } final TypicalTypes.raw_type<?> result$388 = unify.apply(t, tp); if ((null == result$388)) { return Analyzer.cast(error(Primitives.concat.apply(Primitives.concat.apply("type of the pattern does not match with ", "the declared type of field "), s), null)); } return result$388; } }.apply(); Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(retrieveVariables.apply(p))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(t); } }.apply(); } return null; } }.apply()); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$393); } return Analyzer.cast(retValue$393); } if (TypicalSupport.match$65(arg$126)) { final String s = (arg$126.size() > 0 ? arg$126.getString(0) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$397 = Analyzer.cast(null == isDefinedLocally.apply(no, getNameSpace) ? null : isDefinedLocally.apply(no, getNameSpace) ? new Let<TypicalTypes.raw_type<?>>() { { Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(new Pair<String>(s))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(Analyzer.cast(lookup2.apply(no, getNameSpace))); } }.apply() : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE)); define3.apply(no, t, getNameSpace); Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(new Pair<String>(s))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(t); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$397); } return Analyzer.cast(retValue$397); } if (TypicalSupport.match$5(arg$126)) { final String s = (arg$126.size() > 0 ? arg$126.getString(0) : null); final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$126, 1, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$491 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ty; final Boolean check; { ty = Analyzer.cast(Analyzer.cast(lookup4.apply(no, "error", Primitives.concat.apply(Primitives.concat.apply("constructor ", s), " is undefined"), getNameSpace))); check = Analyzer.cast(Primitives.hasAnnotation.apply(no, "no_binding_check")); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(ty) || !Primitives.isNotBottom.apply(ty) ? null : new Let<TypicalTypes.raw_type<?>>() { final String p; final TypicalTypes.raw_type<?> t; { p = Analyzer.cast(getParent.apply(ty)); t = Analyzer.cast(null == Primitives.not.apply(hasTypeVariables.apply(p)) ? null : Primitives.not.apply(hasTypeVariables.apply(p)) ? ty : copy.apply(ty)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$444 = Analyzer.cast(nl); if ((null == arg$444)) { return null; } if (TypicalSupport.match$400(arg$444)) { final Pair<Node> pl = Analyzer.cast(Primitives.getChildren(arg$444.get(0), 0, arg$444.get(0).size())); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { Analyzer.discard(null == check || !check ? null : Primitives.annotateList.apply(pl, "no_binding_check", wildt)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$463 = Analyzer.cast(t); if ((null == arg$463)) { return null; } if ((null != arg$463)) switch (arg$463.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$463)) { final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$463.getTuple().get3()); return Analyzer.cast(null == Primitives.isBottom.apply(ty) ? null : Primitives.isBottom.apply(ty) ? error(Primitives.concat.apply(Primitives.concat.apply("constructor ", s), " must have no children"), null) : new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$472 = Analyzer.cast(ty); if ((null == arg$472)) { return null; } if ((null != arg$472)) switch (arg$472.tag()) { case TupleT: if (TypicalSupport.match$115(arg$472)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$472.getTuple().get1()); return Analyzer.cast(null == Primitives.lessInt.apply(Primitives.length.apply(pl), Primitives.length.apply(tl)) ? null : Primitives.lessInt.apply(Primitives.length.apply(pl), Primitives.length.apply(tl)) ? error(Primitives.concat.apply(Primitives.concat.apply("constructor ", s), " does not have enough children"), null) : null == Primitives.greaterInt.apply(Primitives.length.apply(pl), Primitives.length.apply(tl)) ? null : Primitives.greaterInt.apply(Primitives.length.apply(pl), Primitives.length.apply(tl)) ? error(Primitives.concat.apply(Primitives.concat.apply("constructor ", s), " has too many children"), null) : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; { res = Analyzer.cast(processArguments.apply(pl, tl, t)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(res) || !Primitives.isNotBottom.apply(res) ? null : new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$475 = Primitives.or.apply(Primitives.or.apply(Primitives.not.apply(isNodeType.apply(t)), check), checkBindings.apply(pl, BigInteger.valueOf(0), BigInteger.valueOf(0))); if ((null != var$475 && !var$475)) { showMessage("error", Primitives.concat.apply("bindings in different nodes ***", "in the node pattern"), null); } if ((null == var$475)) { return null; } if (var$475) { return new Let<TypicalTypes.raw_type<?>>() { final Pair<String> strList; { strList = Analyzer.cast(combineVariables.apply(pl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isEmpty.apply(strList) ? null : Primitives.isEmpty.apply(strList) ? res : new Let<TypicalTypes.raw_type<?>>() { { Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(strList)); Primitives.annotate.apply(no, "has_bindings", wildt); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(res); } }.apply()); } }.apply(); } return null; } }.apply()); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$477 = Primitives.equal.apply(Primitives.length.apply(pl), BigInteger.valueOf(1)); if ((null != var$477 && !var$477)) { showMessage("error", Primitives.concat.apply(s, " must have only one child"), null); } if ((null == var$477)) { return null; } if (var$477) { return new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; { res = Analyzer.cast(processArguments.apply(pl, new Pair<TypicalTypes.raw_type<?>>(ty), t)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(res) || !Primitives.isNotBottom.apply(res) ? null : new Let<TypicalTypes.raw_type<?>>() { final Pair<String> strList; { strList = Analyzer.cast(combineVariables.apply(pl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isEmpty.apply(strList) ? null : Primitives.isEmpty.apply(strList) ? res : new Let<TypicalTypes.raw_type<?>>() { { Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(strList)); Primitives.annotate.apply(no, "has_bindings", wildt); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(res); } }.apply()); } }.apply()); } }.apply(); } return null; } }.apply()); } return null; } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(error(Primitives.concat.apply("expected constructor type, found ", getTypeName.apply(t)), null)); } return null; } }.apply()); } }.apply()); } if (TypicalSupport.match$435(arg$444)) { return Analyzer.cast(t); } if (TypicalSupport.match$336(arg$444)) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$485 = Analyzer.cast(t); if ((null == arg$485)) { return null; } if ((null != arg$485)) switch (arg$485.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$485)) { final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$485.getTuple().get3()); return Analyzer.cast(null == Primitives.isBottom.apply(ty) ? null : Primitives.isBottom.apply(ty) ? t : error(Primitives.concat.apply(Primitives.concat.apply("constructor ", s), " does not have enough children"), null)); } break; default: break; }; if (true) { return Analyzer.cast(error(Primitives.concat.apply("expected constructor type, found ", getTypeName.apply(t)), null)); } return null; } }.apply()); } if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$491); } return Analyzer.cast(retValue$491); } if (TypicalSupport.match$492(arg$126)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$495 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, nl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : new TypicalTypes.TupleT(tl)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$495); } return Analyzer.cast(retValue$495); } if (TypicalSupport.match$496(arg$126)) { final Node left = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node right = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$503 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tl; final TypicalTypes.raw_type<?> tr; { tl = Analyzer.cast(analyze.apply(left)); tr = Analyzer.cast(analyze.apply(right)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == boolt)) { return null; } final TypicalTypes.raw_type<?> result$499 = unify.apply(boolt, tl); if ((null == result$499)) { return Analyzer.cast(error(Primitives.concat.apply("expected boolean, found ", getTypeName.apply(tl)), left)); } return result$499; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == boolt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$500 = unify.apply(boolt, tr); if ((null == result$500)) { return Analyzer.cast(error(Primitives.concat.apply("expected boolean, found ", getTypeName.apply(tr)), right)); } return result$500; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(boolt); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$503); } return Analyzer.cast(retValue$503); } if (TypicalSupport.match$504(arg$126)) { final Node left = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node right = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$511 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tl; final TypicalTypes.raw_type<?> tr; { tl = Analyzer.cast(analyze.apply(left)); tr = Analyzer.cast(analyze.apply(right)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == boolt)) { return null; } final TypicalTypes.raw_type<?> result$507 = unify.apply(boolt, tl); if ((null == result$507)) { return Analyzer.cast(error(Primitives.concat.apply("expected boolean, found ", getTypeName.apply(tl)), left)); } return result$507; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == boolt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$508 = unify.apply(boolt, tr); if ((null == result$508)) { return Analyzer.cast(error(Primitives.concat.apply("expected boolean, found ", getTypeName.apply(tr)), right)); } return result$508; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(boolt); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$511); } return Analyzer.cast(retValue$511); } if (TypicalSupport.match$512(arg$126)) { final Node left = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node right = (arg$126.size() > 2 ? arg$126.getGeneric(2) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$517 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tl; final TypicalTypes.raw_type<?> tr; { tl = Analyzer.cast(analyze.apply(left)); tr = Analyzer.cast(analyze.apply(right)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$514 = unify.apply(tl, tr); if ((null == result$514)) { return Analyzer.cast(error(Primitives.concat.apply("types of left and right expressions", " do not match"), null)); } return result$514; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(boolt); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$517); } return Analyzer.cast(retValue$517); } if (TypicalSupport.match$518(arg$126)) { final Node left = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final String s = (arg$126.size() > 1 ? arg$126.getString(1) : null); final Node right = (arg$126.size() > 2 ? arg$126.getGeneric(2) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$565 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tl; final TypicalTypes.raw_type<?> tr; { tl = Analyzer.cast(analyze.apply(left)); tr = Analyzer.cast(analyze.apply(right)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final String arg$541 = Analyzer.cast(s); if ((null == arg$541)) { return null; } if ((null != "<=" && "<=".equals(arg$541))) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == intt)) { return null; } final TypicalTypes.raw_type<?> result$544 = unify.apply(tl, intt); if ((null == result$544)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tl)), left)); } return result$544; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == intt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$545 = unify.apply(tr, intt); if ((null == result$545)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tr)), right)); } return result$545; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(boolt); } }.apply()); } if ((null != "<" && "<".equals(arg$541))) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == intt)) { return null; } final TypicalTypes.raw_type<?> result$548 = unify.apply(tl, intt); if ((null == result$548)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tl)), left)); } return result$548; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == intt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$549 = unify.apply(tr, intt); if ((null == result$549)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tr)), right)); } return result$549; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(boolt); } }.apply()); } if ((null != ">=" && ">=".equals(arg$541))) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == intt)) { return null; } final TypicalTypes.raw_type<?> result$552 = unify.apply(tl, intt); if ((null == result$552)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tl)), left)); } return result$552; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == intt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$553 = unify.apply(tr, intt); if ((null == result$553)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tr)), right)); } return result$553; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(boolt); } }.apply()); } if ((null != ">" && ">".equals(arg$541))) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == intt)) { return null; } final TypicalTypes.raw_type<?> result$556 = unify.apply(tl, intt); if ((null == result$556)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tl)), left)); } return result$556; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == intt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$557 = unify.apply(tr, intt); if ((null == result$557)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tr)), right)); } return result$557; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(boolt); } }.apply()); } if (true) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == floatt)) { return null; } final TypicalTypes.raw_type<?> result$560 = unify.apply(tl, floatt); if ((null == result$560)) { return Analyzer.cast(error(Primitives.concat.apply(Primitives.concat.apply("expected 64-bit float", ", found "), getTypeName.apply(tl)), left)); } return result$560; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == floatt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$561 = unify.apply(tr, floatt); if ((null == result$561)) { return Analyzer.cast(error(Primitives.concat.apply(Primitives.concat.apply("expected 64-bit float", ", found "), getTypeName.apply(tr)), right)); } return result$561; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(boolt); } }.apply()); } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$565); } return Analyzer.cast(retValue$565); } if (TypicalSupport.match$566(arg$126)) { final Node left = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final String s = (arg$126.size() > 1 ? arg$126.getString(1) : null); final Node right = (arg$126.size() > 2 ? arg$126.getGeneric(2) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$621 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tl; final TypicalTypes.raw_type<?> tr; { tl = Analyzer.cast(analyze.apply(left)); tr = Analyzer.cast(analyze.apply(right)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final String arg$593 = Analyzer.cast(s); if ((null == arg$593)) { return null; } if ((null != "+" && "+".equals(arg$593))) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == intt)) { return null; } final TypicalTypes.raw_type<?> result$596 = unify.apply(tl, intt); if ((null == result$596)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tl)), left)); } return result$596; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == intt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$597 = unify.apply(tr, intt); if ((null == result$597)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tr)), right)); } return result$597; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(intt); } }.apply()); } if ((null != "-" && "-".equals(arg$593))) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == intt)) { return null; } final TypicalTypes.raw_type<?> result$600 = unify.apply(tl, intt); if ((null == result$600)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tl)), left)); } return result$600; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == intt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$601 = unify.apply(tr, intt); if ((null == result$601)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tr)), right)); } return result$601; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(intt); } }.apply()); } if ((null != "*" && "*".equals(arg$593))) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == intt)) { return null; } final TypicalTypes.raw_type<?> result$604 = unify.apply(tl, intt); if ((null == result$604)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tl)), left)); } return result$604; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == intt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$605 = unify.apply(tr, intt); if ((null == result$605)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tr)), right)); } return result$605; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(intt); } }.apply()); } if ((null != "/" && "/".equals(arg$593))) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == intt)) { return null; } final TypicalTypes.raw_type<?> result$608 = unify.apply(tl, intt); if ((null == result$608)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tl)), left)); } return result$608; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == intt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$609 = unify.apply(tr, intt); if ((null == result$609)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tr)), right)); } return result$609; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(intt); } }.apply()); } if ((null != "%" && "%".equals(arg$593))) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == intt)) { return null; } final TypicalTypes.raw_type<?> result$612 = unify.apply(tl, intt); if ((null == result$612)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tl)), left)); } return result$612; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == intt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$613 = unify.apply(tr, intt); if ((null == result$613)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tr)), right)); } return result$613; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(intt); } }.apply()); } if (true) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == floatt)) { return null; } final TypicalTypes.raw_type<?> result$616 = unify.apply(tl, floatt); if ((null == result$616)) { return Analyzer.cast(error(Primitives.concat.apply(Primitives.concat.apply("expected 64-bit float", ", found "), getTypeName.apply(tl)), left)); } return result$616; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == floatt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$617 = unify.apply(tr, floatt); if ((null == result$617)) { return Analyzer.cast(error(Primitives.concat.apply(Primitives.concat.apply("expected 64-bit float", ", found "), getTypeName.apply(tr)), right)); } return result$617; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(floatt); } }.apply()); } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$621); } return Analyzer.cast(retValue$621); } if (TypicalSupport.match$622(arg$126)) { final Node left = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final String s = (arg$126.size() > 1 ? arg$126.getString(1) : null); final Node right = (arg$126.size() > 2 ? arg$126.getGeneric(2) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$677 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tl; final TypicalTypes.raw_type<?> tr; { tl = Analyzer.cast(analyze.apply(left)); tr = Analyzer.cast(analyze.apply(right)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final String arg$649 = Analyzer.cast(s); if ((null == arg$649)) { return null; } if ((null != "+" && "+".equals(arg$649))) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == intt)) { return null; } final TypicalTypes.raw_type<?> result$652 = unify.apply(tl, intt); if ((null == result$652)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tl)), left)); } return result$652; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == intt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$653 = unify.apply(tr, intt); if ((null == result$653)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tr)), right)); } return result$653; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(intt); } }.apply()); } if ((null != "-" && "-".equals(arg$649))) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == intt)) { return null; } final TypicalTypes.raw_type<?> result$656 = unify.apply(tl, intt); if ((null == result$656)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tl)), left)); } return result$656; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == intt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$657 = unify.apply(tr, intt); if ((null == result$657)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tr)), right)); } return result$657; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(intt); } }.apply()); } if ((null != "*" && "*".equals(arg$649))) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == intt)) { return null; } final TypicalTypes.raw_type<?> result$660 = unify.apply(tl, intt); if ((null == result$660)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tl)), left)); } return result$660; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == intt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$661 = unify.apply(tr, intt); if ((null == result$661)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tr)), right)); } return result$661; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(intt); } }.apply()); } if ((null != "/" && "/".equals(arg$649))) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == intt)) { return null; } final TypicalTypes.raw_type<?> result$664 = unify.apply(tl, intt); if ((null == result$664)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tl)), left)); } return result$664; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == intt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$665 = unify.apply(tr, intt); if ((null == result$665)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tr)), right)); } return result$665; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(intt); } }.apply()); } if ((null != "%" && "%".equals(arg$649))) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == intt)) { return null; } final TypicalTypes.raw_type<?> result$668 = unify.apply(tl, intt); if ((null == result$668)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tl)), left)); } return result$668; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == intt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$669 = unify.apply(tr, intt); if ((null == result$669)) { return Analyzer.cast(error(Primitives.concat.apply("expected integer, found ", getTypeName.apply(tr)), right)); } return result$669; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(intt); } }.apply()); } if (true) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == floatt)) { return null; } final TypicalTypes.raw_type<?> result$672 = unify.apply(tl, floatt); if ((null == result$672)) { return Analyzer.cast(error(Primitives.concat.apply(Primitives.concat.apply("expected 64-bit float", ", found "), getTypeName.apply(tl)), left)); } return result$672; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == floatt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$673 = unify.apply(tr, floatt); if ((null == result$673)) { return Analyzer.cast(error(Primitives.concat.apply(Primitives.concat.apply("expected 64-bit float", ", found "), getTypeName.apply(tr)), right)); } return result$673; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(floatt); } }.apply()); } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$677); } return Analyzer.cast(retValue$677); } if (TypicalSupport.match$678(arg$126)) { final Node left = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node right = (arg$126.size() > 2 ? arg$126.getGeneric(2) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$685 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tl; final TypicalTypes.raw_type<?> tr; { tl = Analyzer.cast(analyze.apply(left)); tr = Analyzer.cast(analyze.apply(right)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tl)) { return null; } if ((null == strt)) { return null; } final TypicalTypes.raw_type<?> result$681 = unify.apply(tl, strt); if ((null == result$681)) { return Analyzer.cast(error(Primitives.concat.apply("expected string, found ", getTypeName.apply(tl)), left)); } return result$681; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == strt)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$682 = unify.apply(tr, strt); if ((null == result$682)) { return Analyzer.cast(error(Primitives.concat.apply("expected string, found ", getTypeName.apply(tr)), right)); } return result$682; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(strt); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$685); } return Analyzer.cast(retValue$685); } if (TypicalSupport.match$686(arg$126)) { final Node n = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node con = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$691 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> tl; { t = Analyzer.cast(analyze.apply(n)); tl = Analyzer.cast(analyze.apply(con)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.and.apply(Primitives.isNotBottom.apply(t), Primitives.isNotBottom.apply(tl)) || !Primitives.and.apply(Primitives.isNotBottom.apply(t), Primitives.isNotBottom.apply(tl)) ? null : null == isListType.apply(tl) ? null : isListType.apply(tl) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; { res = Analyzer.cast(unify.apply(tl, new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(t), "list"))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$688 = Primitives.isNotBottom.apply(res); if ((null != var$688 && !var$688)) { showMessage("error", "type of the head does not match type of the tail", null); } if ((null == var$688)) { return null; } if (var$688) { return res; } return null; } }.apply()); } }.apply() : error("the tail of a cons expression must be a list", null)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$691); } return Analyzer.cast(retValue$691); } if (TypicalSupport.match$692(arg$126)) { final Pair<Node> pl = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2279 = Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$1485 = Analyzer.cast(pl); if ((null == arg$1485)) { return null; } if (TypicalSupport.match$694(arg$1485)) { final Node mod = Analyzer.cast(arg$1485.get(0)); final Node name = Analyzer.cast(arg$1485.get(1)); final Node args = Analyzer.cast(arg$1485.get(2)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String mol; final String s; final Pair<Node> nl; { mol = Analyzer.cast(getString.apply(mod)); s = Analyzer.cast(getString.apply(name)); nl = Analyzer.cast(getNodeList.apply(args)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final String arg$1489 = Analyzer.cast(mol); if ((null == arg$1489)) { return null; } if ((null != "List" && "List".equals(arg$1489))) { return Analyzer.cast(null == isDefined.apply(GNode.create("Parameter", Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), null), getNameSpace) ? null : isDefined.apply(GNode.create("Parameter", Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), null), getNameSpace) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> funcType; { funcType = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("Parameter", Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), null), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(processFunctionApplication.apply(copy.apply(funcType), nl)); } }.apply() : error(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), " is undefined"), null)); } if ((null != "String" && "String".equals(arg$1489))) { return Analyzer.cast(null == isDefined.apply(GNode.create("Parameter", Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), null), getNameSpace) ? null : isDefined.apply(GNode.create("Parameter", Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), null), getNameSpace) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> funcType; { funcType = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("Parameter", Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), null), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(processFunctionApplication.apply(copy.apply(funcType), nl)); } }.apply() : error(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), " is undefined"), null)); } if ((null != "Map" && "Map".equals(arg$1489))) { return Analyzer.cast(null == isDefined.apply(GNode.create("Parameter", Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), null), getNameSpace) ? null : isDefined.apply(GNode.create("Parameter", Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), null), getNameSpace) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> funcType; { funcType = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("Parameter", Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), null), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(processFunctionApplication.apply(copy.apply(funcType), nl)); } }.apply() : error(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), " is undefined"), null)); } if ((null != "Float32" && "Float32".equals(arg$1489))) { return Analyzer.cast(null == isDefined.apply(GNode.create("Parameter", Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), null), getNameSpace) ? null : isDefined.apply(GNode.create("Parameter", Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), null), getNameSpace) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> funcType; { funcType = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("Parameter", Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), null), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(processFunctionApplication.apply(copy.apply(funcType), nl)); } }.apply() : error(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), " is undefined"), null)); } if ((null != "Prelude" && "Prelude".equals(arg$1489))) { return Analyzer.cast(null == isDefined.apply(GNode.create("Parameter", s, null), getNameSpace) ? null : isDefined.apply(GNode.create("Parameter", s, null), getNameSpace) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> funcType; { funcType = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("Parameter", s, null), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(processFunctionApplication.apply(copy.apply(funcType), nl)); } }.apply() : error(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(mol, "."), s), " is undefined"), null)); } if (true) { return Analyzer.cast(error(Primitives.concat.apply(Primitives.concat.apply("module ", mol), " is undefined"), null)); } return null; } }.apply()); } }.apply()); } if (TypicalSupport.match$699(arg$1485)) { final Node name = Analyzer.cast(arg$1485.get(0)); final Node args = Analyzer.cast(arg$1485.get(1)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String s; final Pair<Node> nl; { s = Analyzer.cast(getString.apply(name)); nl = Analyzer.cast(getNodeList.apply(args)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final String arg$1884 = Analyzer.cast(s); if ((null == arg$1884)) { return null; } if ((null != "lookup" && "lookup".equals(arg$1884))) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$1943 = Analyzer.cast(nl); if ((null == arg$1943)) { return null; } if (TypicalSupport.match$702(arg$1943)) { final Node e1 = Analyzer.cast(arg$1943.get(0)); final Node strNode = Analyzer.cast(arg$1943.get(1)); final Node errNode = Analyzer.cast(arg$1943.get(2)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String str; final Node e2; final TypicalTypes.raw_type<?> t1; final TypicalTypes.raw_type<?> t2; { str = Analyzer.cast(getString.apply(strNode)); e2 = Analyzer.cast(new Match<Node>() { public Node apply() { final Node arg$1958 = GNode.cast(errNode); if ((null == arg$1958)) { return null; } if (TypicalSupport.match$705(arg$1958)) { final Node ne = (arg$1958.size() > 1 ? arg$1958.getGeneric(1) : null); matching_nodes.add(arg$1958); if ((null != arg$1958 && processScopeNodes.contains(arg$1958.getName()))) { processScope(arg$1958, getScope); } checkEnterScope(arg$1958); final Object retValue$1962 = Analyzer.cast(ne); checkExitScope(arg$1958); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$1962); } if (true) { matching_nodes.add(arg$1958); if ((null != arg$1958 && processScopeNodes.contains(arg$1958.getName()))) { processScope(arg$1958, getScope); } checkEnterScope(arg$1958); final Object retValue$1965 = Analyzer.cast(error("ErrorClause is expected", null)); checkExitScope(arg$1958); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$1965); } return null; } }.apply()); t1 = Analyzer.cast(analyze.apply(e1)); t2 = Analyzer.cast(analyze.apply(e2)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$1967 = ensureNodeType.apply(t1); if ((null == result$1967)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(t1)), e1)); } return result$1967; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == strt)) { return null; } if ((null == t2)) { return null; } final TypicalTypes.raw_type<?> result$1968 = unify.apply(t2, strt); if ((null == result$1968)) { return Analyzer.cast(error(Primitives.concat.apply("expected string, found ", getTypeName.apply(t2)), e2)); } return result$1968; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$1957 = isDefined.apply(GNode.create("UserDefinedType", Primitives.concat.apply("tag", str)), getNameSpace); if ((null != var$1957 && !var$1957)) { showMessage("error", Primitives.concat.apply(Primitives.concat.apply("tag ", str), " is undefined"), null); } if ((null == var$1957)) { return null; } if (var$1957) { return Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", Primitives.concat.apply("tag", str)), getNameSpace)); } return null; } }.apply()); } }.apply()); } if (TypicalSupport.match$727(arg$1943)) { final Node e1 = Analyzer.cast(arg$1943.get(0)); final Node errNode = Analyzer.cast(arg$1943.get(1)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Node e2; final TypicalTypes.raw_type<?> t1; final TypicalTypes.raw_type<?> t2; { e2 = Analyzer.cast(new Match<Node>() { public Node apply() { final Node arg$1981 = GNode.cast(errNode); if ((null == arg$1981)) { return null; } if (TypicalSupport.match$705(arg$1981)) { final Node ne = (arg$1981.size() > 1 ? arg$1981.getGeneric(1) : null); matching_nodes.add(arg$1981); if ((null != arg$1981 && processScopeNodes.contains(arg$1981.getName()))) { processScope(arg$1981, getScope); } checkEnterScope(arg$1981); final Object retValue$1985 = Analyzer.cast(ne); checkExitScope(arg$1981); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$1985); } if (true) { matching_nodes.add(arg$1981); if ((null != arg$1981 && processScopeNodes.contains(arg$1981.getName()))) { processScope(arg$1981, getScope); } checkEnterScope(arg$1981); final Object retValue$1988 = Analyzer.cast(error("ErrorClause is expected", null)); checkExitScope(arg$1981); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$1988); } return null; } }.apply()); t1 = Analyzer.cast(analyze.apply(e1)); t2 = Analyzer.cast(analyze.apply(e2)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$1990 = ensureNodeType.apply(t1); if ((null == result$1990)) { return Analyzer.cast(error(Primitives.concat.apply("node is expedted, found ", getTypeName.apply(t1)), e1)); } return result$1990; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == strt)) { return null; } if ((null == t2)) { return null; } final TypicalTypes.raw_type<?> result$1991 = unify.apply(t2, strt); if ((null == result$1991)) { return Analyzer.cast(error(Primitives.concat.apply("expected string, found ", getTypeName.apply(t2)), e2)); } return result$1991; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(typet); } }.apply()); } if (TypicalSupport.match$750(arg$1943)) { final Node e1 = Analyzer.cast(arg$1943.get(0)); final Node strNode = Analyzer.cast(arg$1943.get(1)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; final String str; { t1 = Analyzer.cast(analyze.apply(e1)); str = Analyzer.cast(getString.apply(strNode)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$1996 = ensureNodeType.apply(t1); if ((null == result$1996)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(t1)), e1)); } return result$1996; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$1995 = isDefined.apply(GNode.create("UserDefinedType", Primitives.concat.apply("tag", str)), getNameSpace); if ((null != var$1995 && !var$1995)) { showMessage("error", Primitives.concat.apply(Primitives.concat.apply("tag ", str), " is undefined"), null); } if ((null == var$1995)) { return null; } if (var$1995) { return Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", Primitives.concat.apply("tag", str)), getNameSpace)); } return null; } }.apply()); } }.apply()); } if (TypicalSupport.match$755(arg$1943)) { final Node e1 = Analyzer.cast(arg$1943.get(0)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; { t1 = Analyzer.cast(analyze.apply(e1)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$1999 = ensureNodeType.apply(t1); if ((null == result$1999)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(t1)), e1)); } return result$1999; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(typet); } }.apply()); } if (true) { return Analyzer.cast(error(Primitives.concat.apply(s, " is applied with invalid arguments"), null)); } return null; } }.apply()); } if ((null != "lookup_locally" && "lookup_locally".equals(arg$1884))) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$2059 = Analyzer.cast(nl); if ((null == arg$2059)) { return null; } if (TypicalSupport.match$702(arg$2059)) { final Node e1 = Analyzer.cast(arg$2059.get(0)); final Node strNode = Analyzer.cast(arg$2059.get(1)); final Node errNode = Analyzer.cast(arg$2059.get(2)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String str; final Node e2; final TypicalTypes.raw_type<?> t1; final TypicalTypes.raw_type<?> t2; { str = Analyzer.cast(getString.apply(strNode)); e2 = Analyzer.cast(new Match<Node>() { public Node apply() { final Node arg$2074 = GNode.cast(errNode); if ((null == arg$2074)) { return null; } if (TypicalSupport.match$705(arg$2074)) { final Node ne = (arg$2074.size() > 1 ? arg$2074.getGeneric(1) : null); matching_nodes.add(arg$2074); if ((null != arg$2074 && processScopeNodes.contains(arg$2074.getName()))) { processScope(arg$2074, getScope); } checkEnterScope(arg$2074); final Object retValue$2078 = Analyzer.cast(ne); checkExitScope(arg$2074); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$2078); } if (true) { matching_nodes.add(arg$2074); if ((null != arg$2074 && processScopeNodes.contains(arg$2074.getName()))) { processScope(arg$2074, getScope); } checkEnterScope(arg$2074); final Object retValue$2081 = Analyzer.cast(error("ErrorClause is expected", null)); checkExitScope(arg$2074); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$2081); } return null; } }.apply()); t1 = Analyzer.cast(analyze.apply(e1)); t2 = Analyzer.cast(analyze.apply(e2)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$2083 = ensureNodeType.apply(t1); if ((null == result$2083)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(t1)), e1)); } return result$2083; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == strt)) { return null; } if ((null == t2)) { return null; } final TypicalTypes.raw_type<?> result$2084 = unify.apply(t2, strt); if ((null == result$2084)) { return Analyzer.cast(error(Primitives.concat.apply("expected string, found ", getTypeName.apply(t2)), e2)); } return result$2084; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$2073 = isDefined.apply(GNode.create("UserDefinedType", Primitives.concat.apply("tag", str)), getNameSpace); if ((null != var$2073 && !var$2073)) { showMessage("error", Primitives.concat.apply(Primitives.concat.apply("tag ", str), " is undefined"), null); } if ((null == var$2073)) { return null; } if (var$2073) { return Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", Primitives.concat.apply("tag", str)), getNameSpace)); } return null; } }.apply()); } }.apply()); } if (TypicalSupport.match$727(arg$2059)) { final Node e1 = Analyzer.cast(arg$2059.get(0)); final Node errNode = Analyzer.cast(arg$2059.get(1)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Node e2; final TypicalTypes.raw_type<?> t1; final TypicalTypes.raw_type<?> t2; { e2 = Analyzer.cast(new Match<Node>() { public Node apply() { final Node arg$2097 = GNode.cast(errNode); if ((null == arg$2097)) { return null; } if (TypicalSupport.match$705(arg$2097)) { final Node ne = (arg$2097.size() > 1 ? arg$2097.getGeneric(1) : null); matching_nodes.add(arg$2097); if ((null != arg$2097 && processScopeNodes.contains(arg$2097.getName()))) { processScope(arg$2097, getScope); } checkEnterScope(arg$2097); final Object retValue$2101 = Analyzer.cast(ne); checkExitScope(arg$2097); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$2101); } if (true) { matching_nodes.add(arg$2097); if ((null != arg$2097 && processScopeNodes.contains(arg$2097.getName()))) { processScope(arg$2097, getScope); } checkEnterScope(arg$2097); final Object retValue$2104 = Analyzer.cast(error("ErrorClause is expected", null)); checkExitScope(arg$2097); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$2104); } return null; } }.apply()); t1 = Analyzer.cast(analyze.apply(e1)); t2 = Analyzer.cast(analyze.apply(e2)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$2106 = ensureNodeType.apply(t1); if ((null == result$2106)) { return Analyzer.cast(error(Primitives.concat.apply("node is expedted, found ", getTypeName.apply(t1)), e1)); } return result$2106; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == strt)) { return null; } if ((null == t2)) { return null; } final TypicalTypes.raw_type<?> result$2107 = unify.apply(t2, strt); if ((null == result$2107)) { return Analyzer.cast(error(Primitives.concat.apply("expected string, found ", getTypeName.apply(t2)), e2)); } return result$2107; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(typet); } }.apply()); } if (TypicalSupport.match$750(arg$2059)) { final Node e1 = Analyzer.cast(arg$2059.get(0)); final Node strNode = Analyzer.cast(arg$2059.get(1)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; final String str; { t1 = Analyzer.cast(analyze.apply(e1)); str = Analyzer.cast(getString.apply(strNode)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$2112 = ensureNodeType.apply(t1); if ((null == result$2112)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(t1)), e1)); } return result$2112; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$2111 = isDefined.apply(GNode.create("UserDefinedType", Primitives.concat.apply("tag", str)), getNameSpace); if ((null != var$2111 && !var$2111)) { showMessage("error", Primitives.concat.apply(Primitives.concat.apply("tag ", str), " is undefined"), null); } if ((null == var$2111)) { return null; } if (var$2111) { return Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", Primitives.concat.apply("tag", str)), getNameSpace)); } return null; } }.apply()); } }.apply()); } if (TypicalSupport.match$755(arg$2059)) { final Node e1 = Analyzer.cast(arg$2059.get(0)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; { t1 = Analyzer.cast(analyze.apply(e1)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$2115 = ensureNodeType.apply(t1); if ((null == result$2115)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(t1)), e1)); } return result$2115; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(typet); } }.apply()); } if (true) { return Analyzer.cast(error(Primitives.concat.apply(s, " is applied with invalid arguments"), null)); } return null; } }.apply()); } if ((null != "define" && "define".equals(arg$1884))) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$2145 = Analyzer.cast(nl); if ((null == arg$2145)) { return null; } if (TypicalSupport.match$702(arg$2145)) { final Node e1 = Analyzer.cast(arg$2145.get(0)); final Node e2 = Analyzer.cast(arg$2145.get(1)); final Node errNode = Analyzer.cast(arg$2145.get(2)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Node e3; final TypicalTypes.raw_type<?> t1; final TypicalTypes.raw_type<?> t3; { e3 = Analyzer.cast(new Match<Node>() { public Node apply() { final Node arg$2158 = GNode.cast(errNode); if ((null == arg$2158)) { return null; } if (TypicalSupport.match$705(arg$2158)) { final Node ne = (arg$2158.size() > 1 ? arg$2158.getGeneric(1) : null); matching_nodes.add(arg$2158); if ((null != arg$2158 && processScopeNodes.contains(arg$2158.getName()))) { processScope(arg$2158, getScope); } checkEnterScope(arg$2158); final Object retValue$2162 = Analyzer.cast(ne); checkExitScope(arg$2158); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$2162); } if (true) { matching_nodes.add(arg$2158); if ((null != arg$2158 && processScopeNodes.contains(arg$2158.getName()))) { processScope(arg$2158, getScope); } checkEnterScope(arg$2158); final Object retValue$2165 = Analyzer.cast(error("ErrorClause is expected", null)); checkExitScope(arg$2158); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$2165); } return null; } }.apply()); t1 = Analyzer.cast(analyze.apply(e1)); analyze.apply(e2); t3 = Analyzer.cast(analyze.apply(e3)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$2167 = ensureNodeType.apply(t1); if ((null == result$2167)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(t1)), e1)); } return result$2167; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == t3)) { return null; } if ((null == strt)) { return null; } final TypicalTypes.raw_type<?> result$2168 = unify.apply(t3, strt); if ((null == result$2168)) { return Analyzer.cast(error(Primitives.concat.apply("expected string, found ", getTypeName.apply(t3)), e3)); } return result$2168; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(wildt); } }.apply()); } if (TypicalSupport.match$699(arg$2145)) { final Node e1 = Analyzer.cast(arg$2145.get(0)); final Node e2 = Analyzer.cast(arg$2145.get(1)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; { t1 = Analyzer.cast(analyze.apply(e1)); analyze.apply(e2); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$2171 = ensureNodeType.apply(t1); if ((null == result$2171)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(t1)), e1)); } return result$2171; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(wildt); } }.apply()); } if (true) { return Analyzer.cast(error(Primitives.concat.apply(s, " is applied with invalid arguments"), null)); } return null; } }.apply()); } if ((null != "redefine" && "redefine".equals(arg$1884))) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$2178 = Analyzer.cast(nl); if ((null == arg$2178)) { return null; } if (TypicalSupport.match$699(arg$2178)) { final Node e1 = Analyzer.cast(arg$2178.get(0)); final Node e2 = Analyzer.cast(arg$2178.get(1)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; { t1 = Analyzer.cast(analyze.apply(e1)); analyze.apply(e2); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$2181 = ensureNodeType.apply(t1); if ((null == result$2181)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(t1)), e1)); } return result$2181; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(wildt); } }.apply()); } if (true) { return Analyzer.cast(error(Primitives.concat.apply(s, " is applied with invalid arguments"), null)); } return null; } }.apply()); } if ((null != "is_defined" && "is_defined".equals(arg$1884))) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$2188 = Analyzer.cast(nl); if ((null == arg$2188)) { return null; } if (TypicalSupport.match$755(arg$2188)) { final Node e1 = Analyzer.cast(arg$2188.get(0)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; { t1 = Analyzer.cast(analyze.apply(e1)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$2191 = ensureNodeType.apply(t1); if ((null == result$2191)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(t1)), e1)); } return result$2191; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(boolt); } }.apply()); } if (true) { return Analyzer.cast(error(Primitives.concat.apply(s, "must have one argument"), null)); } return null; } }.apply()); } if ((null != "is_defined_locally" && "is_defined_locally".equals(arg$1884))) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$2198 = Analyzer.cast(nl); if ((null == arg$2198)) { return null; } if (TypicalSupport.match$755(arg$2198)) { final Node e1 = Analyzer.cast(arg$2198.get(0)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; { t1 = Analyzer.cast(analyze.apply(e1)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$2201 = ensureNodeType.apply(t1); if ((null == result$2201)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(t1)), e1)); } return result$2201; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(boolt); } }.apply()); } if (true) { return Analyzer.cast(error(Primitives.concat.apply(s, "must have one argument"), null)); } return null; } }.apply()); } if ((null != "annotate" && "annotate".equals(arg$1884))) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$2212 = Analyzer.cast(nl); if ((null == arg$2212)) { return null; } if (TypicalSupport.match$694(arg$2212)) { final Node e1 = Analyzer.cast(arg$2212.get(0)); final Node e2 = Analyzer.cast(arg$2212.get(1)); final Node e3 = Analyzer.cast(arg$2212.get(2)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; final TypicalTypes.raw_type<?> t2; final TypicalTypes.raw_type<?> t3; { t1 = Analyzer.cast(analyze.apply(e1)); t2 = Analyzer.cast(analyze.apply(e2)); t3 = Analyzer.cast(analyze.apply(e3)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$2217 = ensureNodeType.apply(t1); if ((null == result$2217)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(t1)), e1)); } return result$2217; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == strt)) { return null; } if ((null == t2)) { return null; } final TypicalTypes.raw_type<?> result$2218 = unify.apply(t2, strt); if ((null == result$2218)) { return Analyzer.cast(error(Primitives.concat.apply("expected string, found ", getTypeName.apply(t2)), e2)); } return result$2218; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == t3)) { return null; } if ((null == typet)) { return null; } final TypicalTypes.raw_type<?> result$2219 = unify.apply(t3, typet); if ((null == result$2219)) { return Analyzer.cast(error(Primitives.concat.apply("expected type, found ", getTypeName.apply(t3)), e3)); } return result$2219; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(wildt); } }.apply()); } if (true) { return Analyzer.cast(null); } return null; } }.apply()); } if ((null != "has_annotation" && "has_annotation".equals(arg$1884))) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$2228 = Analyzer.cast(nl); if ((null == arg$2228)) { return null; } if (TypicalSupport.match$699(arg$2228)) { final Node e1 = Analyzer.cast(arg$2228.get(0)); final Node e2 = Analyzer.cast(arg$2228.get(1)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; final TypicalTypes.raw_type<?> t2; { t1 = Analyzer.cast(analyze.apply(e1)); t2 = Analyzer.cast(analyze.apply(e2)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$2232 = ensureNodeType.apply(t1); if ((null == result$2232)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(t1)), e1)); } return result$2232; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == strt)) { return null; } if ((null == t2)) { return null; } final TypicalTypes.raw_type<?> result$2233 = unify.apply(t2, strt); if ((null == result$2233)) { return Analyzer.cast(error(Primitives.concat.apply("expected string, found ", getTypeName.apply(t2)), e2)); } return result$2233; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(boolt); } }.apply()); } if (true) { return Analyzer.cast(null); } return null; } }.apply()); } if ((null != "get_annotation" && "get_annotation".equals(arg$1884))) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$2242 = Analyzer.cast(nl); if ((null == arg$2242)) { return null; } if (TypicalSupport.match$699(arg$2242)) { final Node e1 = Analyzer.cast(arg$2242.get(0)); final Node e2 = Analyzer.cast(arg$2242.get(1)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; final TypicalTypes.raw_type<?> t2; { t1 = Analyzer.cast(analyze.apply(e1)); t2 = Analyzer.cast(analyze.apply(e2)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$2246 = ensureNodeType.apply(t1); if ((null == result$2246)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(t1)), e1)); } return result$2246; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == strt)) { return null; } if ((null == t2)) { return null; } final TypicalTypes.raw_type<?> result$2247 = unify.apply(t2, strt); if ((null == result$2247)) { return Analyzer.cast(error(Primitives.concat.apply("expected string, found ", getTypeName.apply(t2)), e2)); } return result$2247; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(typet); } }.apply()); } if (true) { return Analyzer.cast(null); } return null; } }.apply()); } if ((null != "annotate_list" && "annotate_list".equals(arg$1884))) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$2258 = Analyzer.cast(nl); if ((null == arg$2258)) { return null; } if (TypicalSupport.match$694(arg$2258)) { final Node e1 = Analyzer.cast(arg$2258.get(0)); final Node e2 = Analyzer.cast(arg$2258.get(1)); final Node e3 = Analyzer.cast(arg$2258.get(2)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; final TypicalTypes.raw_type<?> t2; final TypicalTypes.raw_type<?> t3; { t1 = Analyzer.cast(analyze.apply(e1)); t2 = Analyzer.cast(analyze.apply(e2)); t3 = Analyzer.cast(analyze.apply(e3)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == t1)) { return null; } if ((null == ensureNodeList)) { return null; } final TypicalTypes.raw_type<?> result$2263 = ensureNodeList.apply(t1); if ((null == result$2263)) { return Analyzer.cast(error(Primitives.concat.apply("expected list of node, found ", getTypeName.apply(t1)), e1)); } return result$2263; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == strt)) { return null; } if ((null == t2)) { return null; } final TypicalTypes.raw_type<?> result$2264 = unify.apply(t2, strt); if ((null == result$2264)) { return Analyzer.cast(error(Primitives.concat.apply("expected string, found ", getTypeName.apply(t2)), e2)); } return result$2264; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == t3)) { return null; } if ((null == typet)) { return null; } final TypicalTypes.raw_type<?> result$2265 = unify.apply(t3, typet); if ((null == result$2265)) { return Analyzer.cast(error(Primitives.concat.apply("expected type, found ", getTypeName.apply(t2)), e2)); } return result$2265; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(wildt); } }.apply()); } if (true) { return Analyzer.cast(null); } return null; } }.apply()); } if (true) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Node lo; final TypicalTypes.raw_type<?> funcT; final Node nod; final Pair<String> muts; { lo = Analyzer.cast(TypicalSupport.head$292.apply(pl)); funcT = Analyzer.cast(Analyzer.cast(lookup4.apply(lo, "error", Primitives.concat.apply(s, " is undefined"), getNameSpace))); nod = Analyzer.cast(null == isDefined.apply(GNode.create("NameSpaceStructure", s, null, null), getNameSpace) || !isDefined.apply(GNode.create("NameSpaceStructure", s, null, null), getNameSpace) ? null : Analyzer.cast(lookup2.apply(GNode.create("NameSpaceStructure", s, null, null), getNameSpace))); muts = Analyzer.cast(null == Primitives.isNotBottom.apply(nod) || !Primitives.isNotBottom.apply(nod) ? null : getAnnotatedStringList.apply(nod, "mutual")); Analyzer.discard(null == Primitives.isNotBottom.apply(muts) || !Primitives.isNotBottom.apply(muts) ? null : Primitives.annotateList.apply(nl, "mutual", new TypicalTypes.StringList(TypicalSupport.append$310.apply(muts, new Pair<String>(s))))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(funcT) || !Primitives.isNotBottom.apply(funcT) ? null : new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2271 = Analyzer.cast(funcT); if ((null == arg$2271)) { return null; } if ((null != arg$2271)) switch (arg$2271.tag()) { case VariableT: if (TypicalSupport.match$118(arg$2271)) { return Analyzer.cast(processFunctionApplication.apply(funcT, nl)); } break; case FunctionT: if (TypicalSupport.match$98(arg$2271)) { return Analyzer.cast(processFunctionApplication.apply(copy.apply(funcT), nl)); } break; default: break; }; if ((null == arg$2271)) { return Analyzer.cast(null); } if (true) { return Analyzer.cast(error(Primitives.concat.apply("expected function type, found ", getTypeName.apply(funcT)), null)); } return null; } }.apply()); } }.apply()); } return null; } }.apply()); } }.apply()); } if (true) { return Analyzer.cast(null); } return null; } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2279); } return Analyzer.cast(retValue$2279); } if (TypicalSupport.match$2280(arg$126)) { final Node pat = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node e = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2285 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> left; final TypicalTypes.raw_type<?> right; { left = Analyzer.cast(analyze.apply(pat)); right = Analyzer.cast(analyze.apply(e)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == right)) { return null; } if ((null == left)) { return null; } final TypicalTypes.raw_type<?> result$2282 = unify.apply(left, right); if ((null == result$2282)) { return Analyzer.cast(error("types of the pattern and the expression do not match", null)); } return result$2282; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(boolt); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2285); } return Analyzer.cast(retValue$2285); } if (TypicalSupport.match$2286(arg$126)) { final Node pat = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2289 = Analyzer.cast(analyze.apply(pat)); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2289); } return Analyzer.cast(retValue$2289); } if (TypicalSupport.match$49(arg$126)) { final Node n = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final String s = (arg$126.size() > 1 ? arg$126.getString(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2391 = Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Node arg$2340 = GNode.cast(n); if ((null == arg$2340)) { return null; } if (TypicalSupport.match$9(arg$2340)) { final String str = (arg$2340.size() > 0 ? arg$2340.getString(0) : null); matching_nodes.add(arg$2340); if ((null != arg$2340 && processScopeNodes.contains(arg$2340.getName()))) { processScope(arg$2340, getScope); } checkEnterScope(arg$2340); final Object retValue$2344 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String name; { name = Analyzer.cast(null == Primitives.equal.apply("Prelude", str) ? null : Primitives.equal.apply("Prelude", str) ? s : Primitives.concat.apply(Primitives.concat.apply(str, "."), s)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == isDefined.apply(GNode.create("Parameter", name, null), getNameSpace) ? null : isDefined.apply(GNode.create("Parameter", name, null), getNameSpace) ? Analyzer.cast(lookup2.apply(GNode.create("Parameter", name, null), getNameSpace)) : error(Primitives.concat.apply(name, " is undefined"), null)); } }.apply()); checkExitScope(arg$2340); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$2344); } if (true) { matching_nodes.add(arg$2340); if ((null != arg$2340 && processScopeNodes.contains(arg$2340.getName()))) { processScope(arg$2340, getScope); } checkEnterScope(arg$2340); final Object retValue$2387 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> temp; final TypicalTypes.raw_type<?> tn; final TypicalTypes.raw_type<?> ts; { temp = Analyzer.cast(analyze.apply(n)); tn = Analyzer.cast(resolveRecordType.apply(temp)); ts = Analyzer.cast(Analyzer.cast(lookup4.apply(no, "error", Primitives.concat.apply(Primitives.concat.apply("field ", s), " is undefined"), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(ts) || !Primitives.isNotBottom.apply(ts) ? null : new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2365 = Analyzer.cast(tn); if ((null == arg$2365)) { return null; } if ((null != arg$2365)) switch (arg$2365.tag()) { case VariableT: if (TypicalSupport.match$118(arg$2365)) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2381 = Analyzer.cast(ts); if ((null == arg$2381)) { return null; } if ((null != arg$2381)) switch (arg$2381.tag()) { case FieldT: if (TypicalSupport.match$97(arg$2381)) { final String pa = Analyzer.cast(arg$2381.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; { res = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", pa), getNameSpace))); unify.apply(tn, res); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(ts); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } break; case RecordT: if (TypicalSupport.match$108(arg$2365)) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2372 = Analyzer.cast(ts); if ((null == arg$2372)) { return null; } if ((null != arg$2372)) switch (arg$2372.tag()) { case FieldT: if (TypicalSupport.match$97(arg$2372)) { final String pa = Analyzer.cast(arg$2372.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; final TypicalTypes.raw_type<?> tem; { res = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", pa), getNameSpace))); tem = Analyzer.cast(unify.apply(tn, res)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$2375 = Primitives.isNotBottom.apply(tem); if ((null != var$2375 && !var$2375)) { showMessage("error", Primitives.concat.apply(Primitives.concat.apply(getTypeName.apply(tn), " does not contain the field "), s), null); } if ((null == var$2375)) { return null; } if (var$2375) { return ts; } return null; } }.apply()); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(error(Primitives.concat.apply("expected record, found ", getTypeName.apply(tn)), null)); } return null; } }.apply()); } }.apply()); checkExitScope(arg$2340); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$2387); } return null; } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2391); } return Analyzer.cast(retValue$2391); } if (TypicalSupport.match$2392(arg$126)) { final Node n = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2397 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(analyze.apply(n)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == boolt)) { return null; } if ((null == t)) { return null; } final TypicalTypes.raw_type<?> result$2394 = unify.apply(t, boolt); if ((null == result$2394)) { return Analyzer.cast(error(Primitives.concat.apply("expected boolean, found ", getTypeName.apply(t)), null)); } return result$2394; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2397); } return Analyzer.cast(retValue$2397); } if (TypicalSupport.match$83(arg$126)) { final Node n1 = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node n2 = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2402 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<Node> nl; final Pair<TypicalTypes.entry> enList; { nl = Analyzer.cast(getNodeList.apply(n1)); enList = Analyzer.cast(analyzeBindings.apply(nl, Pair.<TypicalTypes.entry>empty())); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$2399.apply(Primitives.isBottom, enList)) || !Primitives.not.apply(TypicalSupport.exists$2399.apply(Primitives.isBottom, enList)) ? null : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; final Pair<String> strList; { res = Analyzer.cast(analyzeExpression.apply(n2, enList)); strList = Analyzer.cast(getNames.apply(enList)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(res) || !Primitives.isNotBottom.apply(res) ? null : new Let<TypicalTypes.raw_type<?>>() { { checkUnusedVariables.apply(strList, n2); Primitives.annotate.apply(no, "variables", new TypicalTypes.StringList(strList)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(res); } }.apply()); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2402); } return Analyzer.cast(retValue$2402); } if (TypicalSupport.match$2403(arg$126)) { final Node n = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2412 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(analyze.apply(n)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2407 = Analyzer.cast(t); if ((null == arg$2407)) { return null; } if ((null != arg$2407)) switch (arg$2407.tag()) { case PairOfType: if (TypicalSupport.match$117(arg$2407)) { final TypicalTypes.raw_type<?> tl = Analyzer.cast(arg$2407.getTuple().get1()); final TypicalTypes.raw_type<?> ret = Analyzer.cast(arg$2407.getTuple().get2()); return Analyzer.cast(new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(tl), ret)); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2412); } return Analyzer.cast(retValue$2412); } if (TypicalSupport.match$2413(arg$126)) { final Pair<Node> l = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2417 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Node last; final TypicalTypes.raw_type<?> te; { last = Analyzer.cast(TypicalSupport.nth$2414.apply(l, Primitives.subtractInt.apply(Primitives.length.apply(l), BigInteger.valueOf(1)))); te = Analyzer.cast(analyze.apply(last)); TypicalSupport.map$130.apply(analyze, removeLast.apply(l)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(te); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2417); } return Analyzer.cast(retValue$2417); } if (TypicalSupport.match$2418(arg$126)) { final Node e = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node ne = (arg$126.size() > 2 ? arg$126.getGeneric(2) : null); final Node atNode = (arg$126.size() > 3 ? arg$126.getGeneric(3) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2427 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> te; final TypicalTypes.raw_type<?> tne; { te = Analyzer.cast(analyze.apply(e)); tne = Analyzer.cast(analyze.apply(ne)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == boolt)) { return null; } if ((null == te)) { return null; } final TypicalTypes.raw_type<?> result$2423 = unify.apply(te, boolt); if ((null == result$2423)) { return Analyzer.cast(error(Primitives.concat.apply("expected boolean, found ", getTypeName.apply(te)), e)); } return result$2423; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == strt)) { return null; } if ((null == tne)) { return null; } final TypicalTypes.raw_type<?> result$2424 = unify.apply(tne, strt); if ((null == result$2424)) { return Analyzer.cast(error(Primitives.concat.apply("expected string, found ", getTypeName.apply(tne)), ne)); } return result$2424; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isBottom.apply(atNode) ? null : Primitives.isBottom.apply(atNode) ? null : new Let<TypicalTypes.raw_type<?>>() { final String s; final TypicalTypes.raw_type<?> ts; { s = Analyzer.cast(getString.apply(atNode)); ts = Analyzer.cast(Analyzer.cast(lookup4.apply(atNode, "error", Primitives.concat.apply(s, " is undefined"), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == ts)) { return null; } if ((null == ensureNodeType)) { return null; } final TypicalTypes.raw_type<?> result$2422 = ensureNodeType.apply(ts); if ((null == result$2422)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(ts)), null)); } return result$2422; } }.apply()); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2427); } return Analyzer.cast(retValue$2427); } if (TypicalSupport.match$2428(arg$126)) { final Node n1 = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node n2 = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2431 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { analyze.apply(n2); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(analyze.apply(n1)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2431); } return Analyzer.cast(retValue$2431); } if (TypicalSupport.match$705(arg$126)) { final Node e = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); final Node n = (arg$126.size() > 2 ? arg$126.getGeneric(2) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2439 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(analyze.apply(e)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == strt)) { return null; } if ((null == t)) { return null; } final TypicalTypes.raw_type<?> result$2436 = unify.apply(t, strt); if ((null == result$2436)) { return Analyzer.cast(error(Primitives.concat.apply("expected string, found ", getTypeName.apply(t)), e)); } return result$2436; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isBottom.apply(n) ? null : Primitives.isBottom.apply(n) ? new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE) : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tn; { tn = Analyzer.cast(analyze.apply(n)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == ensureNodeType)) { return null; } if ((null == tn)) { return null; } final TypicalTypes.raw_type<?> result$2435 = ensureNodeType.apply(tn); if ((null == result$2435)) { return Analyzer.cast(error(Primitives.concat.apply("expected node, found ", getTypeName.apply(tn)), null)); } return result$2435; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE)); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2439); } return Analyzer.cast(retValue$2439); } if (TypicalSupport.match$2440(arg$126)) { final Node e1 = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node e2 = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2447 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; final TypicalTypes.raw_type<?> t2; { t1 = Analyzer.cast(analyze.apply(e1)); t2 = Analyzer.cast(analyze.apply(e2)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == t1)) { return null; } if ((null == boolt)) { return null; } final TypicalTypes.raw_type<?> result$2443 = unify.apply(t1, boolt); if ((null == result$2443)) { return Analyzer.cast(error(Primitives.concat.apply("expected boolean, found ", getTypeName.apply(t1)), e1)); } return result$2443; } }.apply(); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == strt)) { return null; } if ((null == t2)) { return null; } final TypicalTypes.raw_type<?> result$2444 = unify.apply(t2, strt); if ((null == result$2444)) { return Analyzer.cast(error(Primitives.concat.apply("expected string, found ", getTypeName.apply(t2)), e1)); } return result$2444; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2447); } return Analyzer.cast(retValue$2447); } if (TypicalSupport.match$9(arg$126)) { final String s = (arg$126.size() > 0 ? arg$126.getString(0) : null); final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$126, 1, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2521 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(Analyzer.cast(lookup4.apply(no, "error", Primitives.concat.apply(Primitives.concat.apply("constructor ", s), " is undefined"), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(ty) || !Primitives.isNotBottom.apply(ty) ? null : new Let<TypicalTypes.raw_type<?>>() { final String p; final TypicalTypes.raw_type<?> t; { p = Analyzer.cast(getParent.apply(ty)); t = Analyzer.cast(null == Primitives.not.apply(hasTypeVariables.apply(p)) ? null : Primitives.not.apply(hasTypeVariables.apply(p)) ? ty : copy.apply(ty)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$2484 = Analyzer.cast(nl); if ((null == arg$2484)) { return null; } if (TypicalSupport.match$336(arg$2484)) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2489 = Analyzer.cast(t); if ((null == arg$2489)) { return null; } if ((null != arg$2489)) switch (arg$2489.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$2489)) { final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$2489.getTuple().get3()); return Analyzer.cast(null == Primitives.isBottom.apply(ty) ? null : Primitives.isBottom.apply(ty) ? t : error(Primitives.concat.apply(Primitives.concat.apply("contructor ", s), " does not have enough children"), null)); } break; default: break; }; if (true) { return Analyzer.cast(error(Primitives.concat.apply("expected constructor type, found ", getTypeName.apply(t)), null)); } return null; } }.apply()); } if (true) { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2505 = Analyzer.cast(t); if ((null == arg$2505)) { return null; } if ((null != arg$2505)) switch (arg$2505.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$2505)) { final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$2505.getTuple().get3()); return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2512 = Analyzer.cast(ty); if ((null == arg$2512)) { return null; } if ((null != arg$2512)) switch (arg$2512.tag()) { case TupleT: if (TypicalSupport.match$115(arg$2512)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$2512.getTuple().get1()); return Analyzer.cast(null == Primitives.lessInt.apply(Primitives.length.apply(nl), Primitives.length.apply(tl)) ? null : Primitives.lessInt.apply(Primitives.length.apply(nl), Primitives.length.apply(tl)) ? error(Primitives.concat.apply(Primitives.concat.apply("constructor ", s), "does not have enough children"), null) : null == Primitives.greaterInt.apply(Primitives.length.apply(nl), Primitives.length.apply(tl)) ? null : Primitives.greaterInt.apply(Primitives.length.apply(nl), Primitives.length.apply(tl)) ? error(Primitives.concat.apply(Primitives.concat.apply("constructor ", s), "has too many children"), null) : processArguments.apply(nl, tl, t)); } break; default: break; }; if (true) { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$2515 = Primitives.equal.apply(Primitives.length.apply(nl), BigInteger.valueOf(1)); if ((null != var$2515 && !var$2515)) { showMessage("error", Primitives.concat.apply(s, " must have only one child"), null); } if ((null == var$2515)) { return null; } if (var$2515) { return processArguments.apply(nl, new Pair<TypicalTypes.raw_type<?>>(ty), t); } return null; } }.apply()); } return null; } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(error(Primitives.concat.apply("expected constructor type, found ", getTypeName.apply(t)), null)); } return null; } }.apply()); } return null; } }.apply()); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2521); } return Analyzer.cast(retValue$2521); } if (TypicalSupport.match$2522(arg$126)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2789 = Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$2655 = Analyzer.cast(nl); if ((null == arg$2655)) { return null; } if (TypicalSupport.match$336(arg$2655)) { return Analyzer.cast(error("empty record expression", null)); } if ((null != arg$2655 && !((Pair)arg$2655).isEmpty())) { final Pair<Node> list$2657 = Analyzer.cast(arg$2655); final Node x = GNode.cast(Primitives.wrapHead(list$2657)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$2657)); return Analyzer.cast(null == Primitives.isBottom.apply(x) ? null : Primitives.isBottom.apply(x) ? new Let<TypicalTypes.raw_type<?>>() { final Pair<Node> tai; final Node hea; final TypicalTypes.raw_type<?> tx; { tai = Analyzer.cast(TypicalSupport.tail$291.apply(TypicalSupport.tail$291.apply(nl))); hea = Analyzer.cast(TypicalSupport.head$292.apply(TypicalSupport.tail$291.apply(nl))); tx = Analyzer.cast(analyze.apply(hea)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2722 = Analyzer.cast(tx); if ((null == arg$2722)) { return null; } if ((null != arg$2722)) switch (arg$2722.tag()) { case FieldT: if (TypicalSupport.match$97(arg$2722)) { final String s = Analyzer.cast(arg$2722.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { Primitives.annotateList.apply(tai, "parent", new TypicalTypes.StringName(s)); tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, tai)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> recT; { recT = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", s), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2729 = Analyzer.cast(recT); if ((null == arg$2729)) { return null; } if ((null != arg$2729)) switch (arg$2729.tag()) { case RecordT: if (TypicalSupport.match$108(arg$2729)) { final Pair<TypicalTypes.raw_type<?>> rectl = Analyzer.cast(arg$2729.getTuple().get1()); return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$2732 = Primitives.equal.apply(Primitives.length.apply(rectl), Primitives.addInt.apply(Primitives.length.apply(tl), BigInteger.valueOf(1))); if ((null != var$2732 && !var$2732)) { showMessage("error", Primitives.concat.apply(s, " does not have enough fields"), no); } if ((null == var$2732)) { return null; } if (var$2732) { return new TypicalTypes.RecordT(Primitives.wrapCons(tx, tl)); } return null; } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply() : new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Node arg$2735 = GNode.cast(x); if ((null == arg$2735)) { return null; } if (TypicalSupport.match$2540(arg$2735)) { matching_nodes.add(arg$2735); if ((null != arg$2735 && processScopeNodes.contains(arg$2735.getName()))) { processScope(arg$2735, getScope); } checkEnterScope(arg$2735); final Object retValue$2745 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<Node> tai; final Node hea; final TypicalTypes.raw_type<?> tx; { tai = Analyzer.cast(TypicalSupport.tail$291.apply(TypicalSupport.tail$291.apply(nl))); hea = Analyzer.cast(TypicalSupport.head$292.apply(TypicalSupport.tail$291.apply(nl))); tx = Analyzer.cast(analyze.apply(hea)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2740 = Analyzer.cast(tx); if ((null == arg$2740)) { return null; } if ((null != arg$2740)) switch (arg$2740.tag()) { case FieldT: if (TypicalSupport.match$97(arg$2740)) { final String s = Analyzer.cast(arg$2740.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { Primitives.annotateList.apply(tai, "parent", new TypicalTypes.StringName(s)); tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, tai)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", s), getNameSpace))); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); checkExitScope(arg$2735); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$2745); } if (TypicalSupport.match$2550(arg$2735)) { final Node e = (arg$2735.size() > 0 ? arg$2735.getGeneric(0) : null); matching_nodes.add(arg$2735); if ((null != arg$2735 && processScopeNodes.contains(arg$2735.getName()))) { processScope(arg$2735, getScope); } checkEnterScope(arg$2735); final Object retValue$2781 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tx; { tx = Analyzer.cast(resolveRecordType.apply(analyze.apply(e))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2763 = Analyzer.cast(tx); if ((null == arg$2763)) { return null; } if ((null != arg$2763)) switch (arg$2763.tag()) { case VariableT: if (TypicalSupport.match$118(arg$2763)) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ht; { ht = Analyzer.cast(analyze.apply(TypicalSupport.head$292.apply(xs))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(ht) ? null : Primitives.isNotBottom.apply(ht) ? new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2775 = Analyzer.cast(ht); if ((null == arg$2775)) { return null; } if ((null != arg$2775)) switch (arg$2775.tag()) { case FieldT: if (TypicalSupport.match$97(arg$2775)) { final String s = Analyzer.cast(arg$2775.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { Primitives.annotateList.apply(TypicalSupport.tail$291.apply(xs), "parent", new TypicalTypes.StringName(s)); tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, TypicalSupport.tail$291.apply(xs))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> recT; { recT = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", s), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(unify.apply(recT, tx)); } }.apply()); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply() : null); } }.apply()); } break; case RecordT: if (TypicalSupport.match$108(arg$2763)) { final Pair<TypicalTypes.raw_type<?>> rectl = Analyzer.cast(arg$2763.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> field; { field = Analyzer.cast(TypicalSupport.head$99.apply(rectl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2768 = Analyzer.cast(field); if ((null == arg$2768)) { return null; } if ((null != arg$2768)) switch (arg$2768.tag()) { case FieldT: if (TypicalSupport.match$97(arg$2768)) { final String s = Analyzer.cast(arg$2768.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { Primitives.annotateList.apply(xs, "parent", new TypicalTypes.StringName(s)); tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, xs)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : tx); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(error(Primitives.concat.apply("expected record type, found ", getTypeName.apply(tx)), null)); } return null; } }.apply()); } }.apply()); checkExitScope(arg$2735); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$2781); } if (true) { matching_nodes.add(arg$2735); if ((null != arg$2735 && processScopeNodes.contains(arg$2735.getName()))) { processScope(arg$2735, getScope); } checkEnterScope(arg$2735); final Object retValue$2784 = Analyzer.cast(null); checkExitScope(arg$2735); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$2784); } return null; } }.apply()); } return null; } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2789); } return Analyzer.cast(retValue$2789); } if (TypicalSupport.match$45(arg$126)) { final String s = (arg$126.size() > 0 ? arg$126.getString(0) : null); final Node p = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2807 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(Analyzer.cast(lookup4.apply(no, "error", Primitives.concat.apply(Primitives.concat.apply("field ", s), " is undefined"), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2798 = Analyzer.cast(t); if ((null == arg$2798)) { return null; } if ((null != arg$2798)) switch (arg$2798.tag()) { case FieldT: if (TypicalSupport.match$97(arg$2798)) { final String str = Analyzer.cast(arg$2798.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String ps; { ps = Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "parent") ? null : Primitives.hasAnnotation.apply(no, "parent") ? new Let<String>() { final String stri; { stri = Analyzer.cast(getAnnotatedString.apply(no, "parent")); } public String apply() { return Analyzer.cast(stri); } }.apply() : str); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$2803 = Primitives.equal.apply(ps, str); if ((null != var$2803 && !var$2803)) { showMessage("error", Primitives.concat.apply(Primitives.concat.apply(ps, " does not contain the field "), s), null); } if ((null == var$2803)) { return null; } if (var$2803) { return new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tp; { tp = Analyzer.cast(analyze.apply(p)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == t)) { return null; } if ((null == tp)) { return null; } final TypicalTypes.raw_type<?> result$2802 = unify.apply(t, tp); if ((null == result$2802)) { return Analyzer.cast(error(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply("type of field ", s), " must be "), getTypeName.apply(t)), ", found "), getTypeName.apply(tp)), null)); } return result$2802; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(t); } }.apply(); } return null; } }.apply()); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2807); } return Analyzer.cast(retValue$2807); } if (TypicalSupport.match$2808(arg$126)) { final Node e1 = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node e2 = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2813 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; final TypicalTypes.raw_type<?> t2; { t1 = Analyzer.cast(analyze.apply(e1)); t2 = Analyzer.cast(analyze.apply(e2)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == t1)) { return null; } if ((null == boolt)) { return null; } final TypicalTypes.raw_type<?> result$2810 = unify.apply(t1, boolt); if ((null == result$2810)) { return Analyzer.cast(error(Primitives.concat.apply("expected boolean, found ", getTypeName.apply(t1)), null)); } return result$2810; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(t2); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2813); } return Analyzer.cast(retValue$2813); } if (TypicalSupport.match$2814(arg$126)) { final Node e1 = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node e2 = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); final Node e3 = (arg$126.size() > 2 ? arg$126.getGeneric(2) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2821 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; final TypicalTypes.raw_type<?> t2; final TypicalTypes.raw_type<?> t3; { t1 = Analyzer.cast(analyze.apply(e1)); t2 = Analyzer.cast(analyze.apply(e2)); t3 = Analyzer.cast(analyze.apply(e3)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == t1)) { return null; } if ((null == boolt)) { return null; } final TypicalTypes.raw_type<?> result$2818 = unify.apply(t1, boolt); if ((null == result$2818)) { return Analyzer.cast(error(Primitives.concat.apply("expected boolean, found ", getTypeName.apply(t1)), null)); } return result$2818; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == t3)) { return null; } if ((null == t2)) { return null; } final TypicalTypes.raw_type<?> result$2817 = unify.apply(t2, t3); if ((null == result$2817)) { return Analyzer.cast(error("types of if and else expressions do not match", null)); } return result$2817; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2821); } return Analyzer.cast(retValue$2821); } if (TypicalSupport.match$2822(arg$126)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2840 = Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$2831 = Analyzer.cast(nl); if ((null == arg$2831)) { return null; } if (TypicalSupport.match$336(arg$2831)) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> varT; { varT = Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(varT), "list")); } }.apply()); } if (true) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, nl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(ancestor.apply(TypicalSupport.nodeMatch$2826)) ? null : Primitives.isNotBottom.apply(ancestor.apply(TypicalSupport.nodeMatch$2826)) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; { res = Analyzer.cast(checkNodeList.apply(tl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isBottom.apply(res) ? null : Primitives.isBottom.apply(res) ? null : new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(nodet), "list")); } }.apply() : null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; { res = Analyzer.cast(TypicalSupport.foldl$223.apply(unify, tl, wildt)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$2836 = Primitives.isNotBottom.apply(res); if ((null != var$2836 && !var$2836)) { showMessage("error", "types do not match in list literal", null); } if ((null == var$2836)) { return null; } if (var$2836) { return new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(res), "list"); } return null; } }.apply()); } }.apply()); } }.apply()); } return null; } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2840); } return Analyzer.cast(retValue$2840); } if (TypicalSupport.match$2841(arg$126)) { final Node ops = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node lit = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); final Node pat = (arg$126.size() > 2 ? arg$126.getGeneric(2) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2850 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<String> opList; final TypicalTypes.raw_type<?> nodeL; final TypicalTypes.raw_type<?> tpat; { analyze.apply(ops); opList = Analyzer.cast(getStringList.apply(ops)); analyze.apply(lit); Primitives.annotate.apply(pat, "is_reduce", wildt); Primitives.annotate.apply(pat, "non_exhaustive", wildt); nodeL = Analyzer.cast(new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(nodet), "list")); tpat = Analyzer.cast(analyze.apply(pat)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$2845 = Analyzer.cast(tpat); if ((null == arg$2845)) { return null; } if ((null != arg$2845)) switch (arg$2845.tag()) { case PairOfType: if (TypicalSupport.match$117(arg$2845)) { final TypicalTypes.raw_type<?> right = Analyzer.cast(arg$2845.getTuple().get2()); return Analyzer.cast(null == Primitives.contains.apply("list", opList) ? null : Primitives.contains.apply("list", opList) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> rightL; { rightL = Analyzer.cast(new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(right), "list")); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(nodeL), rightL)); } }.apply() : new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(nodeL), right)); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2850); } return Analyzer.cast(retValue$2850); } if (TypicalSupport.match$2851(arg$126)) { final Pair<String> sl = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2854 = Analyzer.cast(null == Primitives.and.apply(Primitives.contains.apply("list", sl), Primitives.contains.apply("singleton", sl)) ? null : Primitives.and.apply(Primitives.contains.apply("list", sl), Primitives.contains.apply("singleton", sl)) ? error("'list' and 'singleton' are not compatible", null) : null == Primitives.and.apply(Primitives.contains.apply("list", sl), Primitives.contains.apply("set", sl)) ? null : Primitives.and.apply(Primitives.contains.apply("list", sl), Primitives.contains.apply("set", sl)) ? error("'list' and 'set' are not compatible", null) : null == Primitives.and.apply(Primitives.contains.apply("singleton", sl), Primitives.contains.apply("set", sl)) ? null : Primitives.and.apply(Primitives.contains.apply("singleton", sl), Primitives.contains.apply("set", sl)) ? error("'singleton' and 'set' are not compatible", null) : null == Primitives.and.apply(Primitives.contains.apply("required", sl), Primitives.contains.apply("optional", sl)) ? null : Primitives.and.apply(Primitives.contains.apply("required", sl), Primitives.contains.apply("optional", sl)) ? error("'required' and 'optional' are not compatible", null) : new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(strt), "list")); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2854); } return Analyzer.cast(retValue$2854); } if (TypicalSupport.match$61(arg$126)) { final String s = (arg$126.size() > 0 ? arg$126.getString(0) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2858 = Analyzer.cast(Analyzer.cast(lookup4.apply(no, "error", Primitives.concat.apply(s, " is undefined"), getNameSpace))); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2858); } return Analyzer.cast(retValue$2858); } if (TypicalSupport.match$1(arg$126)) { final String s = (arg$126.size() > 0 ? arg$126.getString(0) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2862 = Analyzer.cast(Analyzer.cast(lookup4.apply(no, "error", Primitives.concat.apply(s, " is undefined"), getNameSpace))); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2862); } return Analyzer.cast(retValue$2862); } if (TypicalSupport.match$29(arg$126)) { final String s = (arg$126.size() > 0 ? arg$126.getString(0) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2868 = Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$2865 = isDefined.apply(no, getNameSpace); if ((null != var$2865 && !var$2865)) { showMessage("error", Primitives.concat.apply(Primitives.concat.apply("type ", s), " is undefined"), null); } if ((null == var$2865)) { return null; } if (var$2865) { return new TypicalTypes.TypeName(s); } return null; } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2868); } return Analyzer.cast(retValue$2868); } if (TypicalSupport.match$2869(arg$126)) { final String s = (arg$126.size() > 0 ? arg$126.getString(0) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2872 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<String> vars; { vars = Analyzer.cast(getAnnotatedStringList.apply(no, "type_variables")); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.or.apply(Primitives.isBottom.apply(vars), Primitives.not.apply(Primitives.contains.apply(s, vars))) ? null : Primitives.or.apply(Primitives.isBottom.apply(vars), Primitives.not.apply(Primitives.contains.apply(s, vars))) ? error(Primitives.concat.apply(Primitives.concat.apply("type variable ", s), " is undefined"), null) : new TypicalTypes.VariableT(s, Boolean.TRUE)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2872); } return Analyzer.cast(retValue$2872); } if (TypicalSupport.match$2873(arg$126)) { final Node n = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2876 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String s; { s = Analyzer.cast(getString.apply(n)); Analyzer.cast(Primitives.put.apply(s, nodet, hashTable)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(nodet); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2876); } return Analyzer.cast(retValue$2876); } if (TypicalSupport.match$2877(arg$126)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2880 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String str; { str = Analyzer.cast(getAnnotatedString.apply(no, "parent")); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == reachableFromNode.apply(str) ? null : reachableFromNode.apply(str) ? new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, nl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? new TypicalTypes.PolyVariantT(tl) : null); } }.apply() : error("polymorphic variant is not allowed outside node closure", null)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2880); } return Analyzer.cast(retValue$2880); } if (TypicalSupport.match$2881(arg$126)) { final Pair<Node> l = Analyzer.cast(Primitives.getChildren(arg$126, 0, arg$126.size())); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2884 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String str; final Pair<String> vars; final Pair<TypicalTypes.raw_type<?>> tl; { str = Analyzer.cast(getAnnotatedString.apply(no, "parent")); vars = Analyzer.cast(getAnnotatedStringList.apply(no, "type_variables")); Analyzer.discard(null == Primitives.isNotBottom.apply(vars) || !Primitives.isNotBottom.apply(vars) ? null : Primitives.annotateList.apply(l, "type_variables", new TypicalTypes.StringList(vars))); Primitives.annotateList.apply(l, "parent", new TypicalTypes.StringName(str)); tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, l)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : new TypicalTypes.TupleT(tl)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2884); } return Analyzer.cast(retValue$2884); } if (TypicalSupport.match$25(arg$126)) { final Node n = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final String s = (arg$126.size() > 1 ? arg$126.getString(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2896 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String str; final Pair<String> vars; final TypicalTypes.raw_type<?> t; { str = Analyzer.cast(getAnnotatedString.apply(no, "parent")); vars = Analyzer.cast(getAnnotatedStringList.apply(no, "type_variables")); Analyzer.discard(null == Primitives.isNotBottom.apply(vars) || !Primitives.isNotBottom.apply(vars) ? null : Primitives.annotate.apply(n, "type_variables", new TypicalTypes.StringList(vars))); Primitives.annotate.apply(n, "parent", new TypicalTypes.StringName(str)); t = Analyzer.cast(analyze.apply(n)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final String arg$2890 = Analyzer.cast(s); if ((null == arg$2890)) { return null; } if ((null != "list" && "list".equals(arg$2890))) { return Analyzer.cast(null == Primitives.isNotBottom.apply(t) || !Primitives.isNotBottom.apply(t) ? null : new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(t), s)); } if ((null != "var" && "var".equals(arg$2890))) { return Analyzer.cast(null == Primitives.isNotBottom.apply(t) || !Primitives.isNotBottom.apply(t) ? null : new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(t), s)); } if ((null != "opt" && "opt".equals(arg$2890))) { return Analyzer.cast(t); } if (true) { return Analyzer.cast(new Require<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Boolean var$2892 = isDefined.apply(no, getNameSpace); if ((null != var$2892 && !var$2892)) { showMessage("error", Primitives.concat.apply(Primitives.concat.apply("type ", s), " is undefined"), null); } if ((null == var$2892)) { return null; } if (var$2892) { return new Let<TypicalTypes.raw_type<?>>() { final Node nod; final Pair<String> var_list; { nod = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("NameSpaceStructure", s, null, null), getNameSpace))); var_list = Analyzer.cast(getAnnotatedStringList.apply(nod, "type_variables")); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isBottom.apply(var_list) ? null : Primitives.isBottom.apply(var_list) ? error(Primitives.concat.apply(s, " is not a constructed type"), null) : null == Primitives.not.apply(Primitives.equal.apply(Primitives.length.apply(var_list), BigInteger.valueOf(1))) ? null : Primitives.not.apply(Primitives.equal.apply(Primitives.length.apply(var_list), BigInteger.valueOf(1))) ? error(Primitives.concat.apply(Primitives.concat.apply("constructed type ", s), " does not have enough type parameters"), null) : null == Primitives.isNotBottom.apply(t) || !Primitives.isNotBottom.apply(t) ? null : new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(t), s)); } }.apply(); } return null; } }.apply()); } return null; } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2896); } return Analyzer.cast(retValue$2896); } if (TypicalSupport.match$2897(arg$126)) { final Node n = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node tv = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2900 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String s; { s = Analyzer.cast(getString.apply(tv)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == isDefined.apply(GNode.create("UserDefinedType", s), getNameSpace) ? null : isDefined.apply(GNode.create("UserDefinedType", s), getNameSpace) ? error(Primitives.concat.apply(s, " has been previously defined"), null) : new Let<TypicalTypes.raw_type<?>>() { final Pair<String> vars; final TypicalTypes.raw_type<?> t; { vars = Analyzer.cast(getAnnotatedStringList.apply(no, "type_variables")); Analyzer.discard(null == Primitives.isNotBottom.apply(vars) || !Primitives.isNotBottom.apply(vars) ? null : Primitives.annotate.apply(n, "type_variabls", new TypicalTypes.StringList(vars))); t = Analyzer.cast(analyze.apply(n)); redefine.apply(GNode.create("UserDefinedType", s), t, getNameSpace); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(t); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2900); } return Analyzer.cast(retValue$2900); } if (TypicalSupport.match$2901(arg$126)) { final Node n1 = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final Node n2 = (arg$126.size() > 1 ? arg$126.getGeneric(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2922 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<String> vars; final Pair<Node> nl; final Pair<TypicalTypes.raw_type<?>> tl; final TypicalTypes.raw_type<?> ret; { vars = Analyzer.cast(getAnnotatedStringList.apply(no, "type_variables")); nl = Analyzer.cast(new Match<Pair<Node>>() { public Pair<Node> apply() { final Node arg$2911 = GNode.cast(n1); if ((null == arg$2911)) { return null; } if (TypicalSupport.match$2881(arg$2911)) { final Pair<Node> l = Analyzer.cast(Primitives.getChildren(arg$2911, 0, arg$2911.size())); matching_nodes.add(arg$2911); if ((null != arg$2911 && processScopeNodes.contains(arg$2911.getName()))) { processScope(arg$2911, getScope); } checkEnterScope(arg$2911); final Object retValue$2915 = Analyzer.cast(l); checkExitScope(arg$2911); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$2915); } if (true) { matching_nodes.add(arg$2911); if ((null != arg$2911 && processScopeNodes.contains(arg$2911.getName()))) { processScope(arg$2911, getScope); } checkEnterScope(arg$2911); final Object retValue$2918 = Analyzer.cast(new Pair<Node>(n1)); checkExitScope(arg$2911); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$2918); } return null; } }.apply()); Analyzer.discard(null == Primitives.isNotBottom.apply(vars) || !Primitives.isNotBottom.apply(vars) ? null : Primitives.annotateList.apply(Primitives.wrapCons(n2, nl), "type_variables", new TypicalTypes.StringList(vars))); tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, nl)); ret = Analyzer.cast(analyze.apply(n2)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.and.apply(Primitives.isNotBottom.apply(ret), Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl))) || !Primitives.and.apply(Primitives.isNotBottom.apply(ret), Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl))) ? null : new TypicalTypes.FunctionT(tl, ret)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2922); } return Analyzer.cast(retValue$2922); } if (TypicalSupport.match$2923(arg$126)) { final Node n = (arg$126.size() > 0 ? arg$126.getGeneric(0) : null); final String s = (arg$126.size() > 1 ? arg$126.getString(1) : null); matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2926 = Analyzer.cast(null == Primitives.not.apply(isDefined.apply(GNode.create("UserDefinedType", s), getNameSpace)) ? null : Primitives.not.apply(isDefined.apply(GNode.create("UserDefinedType", s), getNameSpace)) ? error(Primitives.concat.apply(Primitives.concat.apply("type ", s), " is undefined"), null) : new Let<TypicalTypes.raw_type<?>>() { final Node nod; final Pair<Node> nl; { nod = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("NameSpaceStructure", s, null, null), getNameSpace))); nl = Analyzer.cast(getNodeList.apply(n)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(Primitives.hasAnnotation.apply(nod, "type_variables")) ? null : Primitives.not.apply(Primitives.hasAnnotation.apply(nod, "type_variables")) ? error(Primitives.concat.apply(s, " is not a contructed type"), null) : new Let<TypicalTypes.raw_type<?>>() { final Pair<String> vars; final Pair<TypicalTypes.raw_type<?>> tl; { vars = Analyzer.cast(getAnnotatedStringList.apply(nod, "type_variables")); Analyzer.discard(null == Primitives.isNotBottom.apply(vars) || !Primitives.isNotBottom.apply(vars) ? null : Primitives.annotateList.apply(nl, "type_variables", new TypicalTypes.StringList(vars))); tl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, nl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.lessInt.apply(Primitives.length.apply(nl), Primitives.length.apply(vars)) ? null : Primitives.lessInt.apply(Primitives.length.apply(nl), Primitives.length.apply(vars)) ? error(Primitives.concat.apply(Primitives.concat.apply("contructed type ", s), " does not have enough type parameters"), null) : null == Primitives.greaterInt.apply(Primitives.length.apply(nl), Primitives.length.apply(vars)) ? null : Primitives.greaterInt.apply(Primitives.length.apply(nl), Primitives.length.apply(vars)) ? error(Primitives.concat.apply(Primitives.concat.apply("contructed type ", s), " has too many type parameters"), null) : null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tl)) ? null : new TypicalTypes.ConstructedT(tl, s)); } }.apply()); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2926); } return Analyzer.cast(retValue$2926); } if (TypicalSupport.match$2927(arg$126)) { matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2930 = Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE)); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2930); } return Analyzer.cast(retValue$2930); } if (TypicalSupport.match$2931(arg$126)) { matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2934 = Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE)); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2934); } return Analyzer.cast(retValue$2934); } if (TypicalSupport.match$2935(arg$126)) { matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2938 = Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE)); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2938); } return Analyzer.cast(retValue$2938); } if (TypicalSupport.match$2939(arg$126)) { matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2942 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final String str; { str = Analyzer.cast(getAnnotatedString.apply(no, "parent")); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == reachableFromNode.apply(str) ? null : reachableFromNode.apply(str) ? new TypicalTypes.AnyT() : error("any is not allowed outside node closure", null)); } }.apply()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2942); } return Analyzer.cast(retValue$2942); } if (TypicalSupport.match$2943(arg$126)) { matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2946 = Analyzer.cast(strt); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2946); } return Analyzer.cast(retValue$2946); } if (TypicalSupport.match$2947(arg$126)) { matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2950 = Analyzer.cast(strt); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2950); } return Analyzer.cast(retValue$2950); } if (TypicalSupport.match$2951(arg$126)) { matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2954 = Analyzer.cast(intt); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2954); } return Analyzer.cast(retValue$2954); } if (TypicalSupport.match$2955(arg$126)) { matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2958 = Analyzer.cast(intt); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2958); } return Analyzer.cast(retValue$2958); } if (TypicalSupport.match$2959(arg$126)) { matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2962 = Analyzer.cast(boolt); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2962); } return Analyzer.cast(retValue$2962); } if (TypicalSupport.match$2963(arg$126)) { matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2966 = Analyzer.cast(boolt); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2966); } return Analyzer.cast(retValue$2966); } if (TypicalSupport.match$2967(arg$126)) { matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2970 = Analyzer.cast(floatt); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2970); } return Analyzer.cast(retValue$2970); } if (TypicalSupport.match$2971(arg$126)) { matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2974 = Analyzer.cast(floatt); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2974); } return Analyzer.cast(retValue$2974); } if (TypicalSupport.match$2975(arg$126)) { matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2978 = Analyzer.cast(new TypicalTypes.Float32T()); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2978); } return Analyzer.cast(retValue$2978); } if (true) { matching_nodes.add(arg$126); if ((null != arg$126 && processScopeNodes.contains(arg$126.getName()))) { processScope(arg$126, getScope); } checkEnterScope(arg$126); final Object retValue$2981 = Analyzer.cast(null); checkExitScope(arg$126); matching_nodes.remove(matching_nodes.size() - 1); if ((null != arg$126)) { arg$126.setProperty("__type", retValue$2981); } return Analyzer.cast(retValue$2981); } return null; } }.apply(); } }; final Function.F2<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>> unify = new Function.F2<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply(final TypicalTypes.raw_type<?> t1, final TypicalTypes.raw_type<?> t2) { return (null == Primitives.or.apply(Primitives.isBottom.apply(t1), Primitives.isBottom.apply(t2)) ? null : Primitives.or.apply(Primitives.isBottom.apply(t1), Primitives.isBottom.apply(t2)) ? null : new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Tuple.T2<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>> arg$2983 = Analyzer.cast(new Tuple.T2<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>>(t1, t2)); if ((null == arg$2983)) { return null; } if (TypicalSupport.match$2984(arg$2983)) { return Analyzer.cast(t2); } if (TypicalSupport.match$2985(arg$2983)) { return Analyzer.cast(t1); } if (TypicalSupport.match$2986(arg$2983)) { return Analyzer.cast(t1); } if (TypicalSupport.match$2987(arg$2983)) { return Analyzer.cast(t1); } if (TypicalSupport.match$2988(arg$2983)) { return Analyzer.cast(t1); } if (TypicalSupport.match$2989(arg$2983)) { return Analyzer.cast(t1); } if (TypicalSupport.match$2990(arg$2983)) { return Analyzer.cast(t1); } if (TypicalSupport.match$2991(arg$2983)) { return Analyzer.cast(t1); } if (TypicalSupport.match$2992(arg$2983)) { return Analyzer.cast(new TypicalTypes.AnyT()); } if (TypicalSupport.match$2993(arg$2983)) { return Analyzer.cast(new TypicalTypes.AnyT()); } if (TypicalSupport.match$2994(arg$2983)) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; { res = Analyzer.cast(unify.apply(t2, strt)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.or.apply(Primitives.isNotBottom.apply(res), Primitives.isNotBottom.apply(ensureNodeType.apply(t2))) || !Primitives.or.apply(Primitives.isNotBottom.apply(res), Primitives.isNotBottom.apply(ensureNodeType.apply(t2))) ? null : t1); } }.apply()); } if (TypicalSupport.match$2995(arg$2983)) { return Analyzer.cast(unify.apply(t2, t1)); } if (TypicalSupport.match$2996(arg$2983)) { return Analyzer.cast(null == Primitives.isNotBottom.apply(ensureNodeType.apply(t2)) || !Primitives.isNotBottom.apply(ensureNodeType.apply(t2)) ? null : t1); } if (TypicalSupport.match$2997(arg$2983)) { return Analyzer.cast(null == Primitives.isNotBottom.apply(ensureNodeType.apply(t1)) || !Primitives.isNotBottom.apply(ensureNodeType.apply(t1)) ? null : t2); } if (TypicalSupport.match$2998(arg$2983)) { final String s1 = Analyzer.cast(arg$2983.get1().getTuple().get1()); final String s2 = Analyzer.cast(arg$2983.get2().getTuple().get1()); return Analyzer.cast(null == Primitives.equal.apply(s1, s2) || !Primitives.equal.apply(s1, s2) ? null : t1); } if (TypicalSupport.match$2999(arg$2983)) { final String s = Analyzer.cast(arg$2983.get1().getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> res; { t = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", s), getNameSpace))); res = Analyzer.cast(unify.apply(t, t2)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(res) || !Primitives.isNotBottom.apply(res) ? null : t1); } }.apply()); } if (TypicalSupport.match$3000(arg$2983)) { return Analyzer.cast(unify.apply(t2, t1)); } if (TypicalSupport.match$3001(arg$2983)) { final String str1 = Analyzer.cast(arg$2983.get1().getTuple().get1()); final String str2 = Analyzer.cast(arg$2983.get2().getTuple().get1()); return Analyzer.cast(null == Primitives.equal.apply(str1, str2) ? null : Primitives.equal.apply(str1, str2) ? t1 : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(Analyzer.cast(Primitives.get.apply(str1, hashTable))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isBottom.apply(t) ? null : Primitives.isBottom.apply(t) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(Analyzer.cast(Primitives.get.apply(str2, hashTable))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isBottom.apply(ty) ? null : Primitives.isBottom.apply(ty) ? new Let<TypicalTypes.raw_type<?>>() { { Analyzer.cast(Primitives.put.apply(str1, t2, hashTable)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(t2); } }.apply() : unify.apply(t1, ty)); } }.apply() : unify.apply(t, t2)); } }.apply()); } if (TypicalSupport.match$3002(arg$2983)) { final String str = Analyzer.cast(arg$2983.get1().getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(Analyzer.cast(Primitives.get.apply(str, hashTable))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isBottom.apply(t) ? null : Primitives.isBottom.apply(t) ? (null == containTypeVar.apply(t2, str) ? null : containTypeVar.apply(t2, str) ? null : new Let<TypicalTypes.raw_type<?>>() { { Analyzer.cast(Primitives.put.apply(str, t2, hashTable)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(t2); } }.apply()) : unify.apply(t, t2)); } }.apply()); } if (TypicalSupport.match$3003(arg$2983)) { return Analyzer.cast(unify.apply(t2, t1)); } if (TypicalSupport.match$3004(arg$2983)) { final TypicalTypes.raw_type<?> tl1 = Analyzer.cast(arg$2983.get1().getTuple().get1()); final TypicalTypes.raw_type<?> tr1 = Analyzer.cast(arg$2983.get1().getTuple().get2()); final TypicalTypes.raw_type<?> tl2 = Analyzer.cast(arg$2983.get2().getTuple().get1()); final TypicalTypes.raw_type<?> tr2 = Analyzer.cast(arg$2983.get2().getTuple().get2()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tl; final TypicalTypes.raw_type<?> tr; { tl = Analyzer.cast(unify.apply(tl1, tl2)); tr = Analyzer.cast(unify.apply(tr1, tr2)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.and.apply(Primitives.isNotBottom.apply(tl), Primitives.isNotBottom.apply(tr)) || !Primitives.and.apply(Primitives.isNotBottom.apply(tl), Primitives.isNotBottom.apply(tr)) ? null : new TypicalTypes.PairOfType(tl, tr)); } }.apply()); } if (TypicalSupport.match$3005(arg$2983)) { final String s1 = Analyzer.cast(arg$2983.get1().getTuple().get1()); final String s2 = Analyzer.cast(arg$2983.get1().getTuple().get2()); final TypicalTypes.raw_type<?> ty1 = Analyzer.cast(arg$2983.get1().getTuple().get3()); final String s3 = Analyzer.cast(arg$2983.get2().getTuple().get1()); final String s4 = Analyzer.cast(arg$2983.get2().getTuple().get2()); final TypicalTypes.raw_type<?> ty2 = Analyzer.cast(arg$2983.get2().getTuple().get3()); return Analyzer.cast(null == Primitives.and.apply(Primitives.equal.apply(s1, s3), Primitives.equal.apply(s2, s4)) ? null : Primitives.and.apply(Primitives.equal.apply(s1, s3), Primitives.equal.apply(s2, s4)) ? t1 : unify.apply(ty1, ty2)); } if (TypicalSupport.match$3006(arg$2983)) { final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$2983.get1().getTuple().get3()); return Analyzer.cast(unify.apply(ty, t2)); } if (TypicalSupport.match$3007(arg$2983)) { final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$2983.get2().getTuple().get3()); return Analyzer.cast(unify.apply(ty, t1)); } if (TypicalSupport.match$3008(arg$2983)) { final Pair<TypicalTypes.raw_type<?>> tl1 = Analyzer.cast(arg$2983.get1().getTuple().get1()); final Pair<TypicalTypes.raw_type<?>> tl2 = Analyzer.cast(arg$2983.get2().getTuple().get1()); return Analyzer.cast(null == Primitives.equal.apply(Primitives.length.apply(tl1), Primitives.length.apply(tl2)) || !Primitives.equal.apply(Primitives.length.apply(tl1), Primitives.length.apply(tl2)) ? null : new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(unifyTwoList.apply(tl1, tl2)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(tl) || !Primitives.isNotBottom.apply(tl) ? null : new TypicalTypes.RecordT(tl)); } }.apply()); } if (TypicalSupport.match$3009(arg$2983)) { final Pair<TypicalTypes.raw_type<?>> tl1 = Analyzer.cast(arg$2983.get1().getTuple().get1()); final Pair<TypicalTypes.raw_type<?>> tl2 = Analyzer.cast(arg$2983.get2().getTuple().get1()); return Analyzer.cast(null == Primitives.equal.apply(Primitives.length.apply(tl1), Primitives.length.apply(tl2)) || !Primitives.equal.apply(Primitives.length.apply(tl1), Primitives.length.apply(tl2)) ? null : new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(unifyTwoList.apply(tl1, tl2)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(tl) || !Primitives.isNotBottom.apply(tl) ? null : new TypicalTypes.TupleT(tl)); } }.apply()); } if (TypicalSupport.match$3010(arg$2983)) { final Pair<TypicalTypes.raw_type<?>> tl1 = Analyzer.cast(arg$2983.get1().getTuple().get1()); final String s1 = Analyzer.cast(arg$2983.get1().getTuple().get2()); final Pair<TypicalTypes.raw_type<?>> tl2 = Analyzer.cast(arg$2983.get2().getTuple().get1()); final String s2 = Analyzer.cast(arg$2983.get2().getTuple().get2()); return Analyzer.cast(null == Primitives.and.apply(Primitives.equal.apply(Primitives.length.apply(tl1), Primitives.length.apply(tl2)), Primitives.equal.apply(s1, s2)) || !Primitives.and.apply(Primitives.equal.apply(Primitives.length.apply(tl1), Primitives.length.apply(tl2)), Primitives.equal.apply(s1, s2)) ? null : new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(unifyTwoList.apply(tl1, tl2)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(tl) || !Primitives.isNotBottom.apply(tl) ? null : new TypicalTypes.ConstructedT(tl, s1)); } }.apply()); } if (TypicalSupport.match$3011(arg$2983)) { final Pair<TypicalTypes.raw_type<?>> tl1 = Analyzer.cast(arg$2983.get1().getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(TypicalSupport.head$99.apply(tl1)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(unify.apply(ty, t2)); } }.apply()); } if (TypicalSupport.match$3012(arg$2983)) { final Pair<TypicalTypes.raw_type<?>> tl2 = Analyzer.cast(arg$2983.get2().getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(TypicalSupport.head$99.apply(tl2)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(unify.apply(t1, ty)); } }.apply()); } if (TypicalSupport.match$3013(arg$2983)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$2983.get1().getTuple().get1()); return Analyzer.cast(null == checkPolyUnify.apply(tl, t2) || !checkPolyUnify.apply(tl, t2) ? null : t1); } if (TypicalSupport.match$3014(arg$2983)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$2983.get2().getTuple().get1()); return Analyzer.cast(null == checkPolyUnify.apply(tl, t1) || !checkPolyUnify.apply(tl, t1) ? null : t2); } if (TypicalSupport.match$3015(arg$2983)) { final Pair<TypicalTypes.raw_type<?>> tl1 = Analyzer.cast(arg$2983.get1().getTuple().get1()); final Pair<TypicalTypes.raw_type<?>> tl2 = Analyzer.cast(arg$2983.get2().getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> h1; final TypicalTypes.raw_type<?> h2; { h1 = Analyzer.cast(TypicalSupport.head$99.apply(tl1)); h2 = Analyzer.cast(TypicalSupport.head$99.apply(tl2)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Tuple.T2<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>> arg$3019 = Analyzer.cast(new Tuple.T2<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>>(h1, h2)); if ((null == arg$3019)) { return null; } if (TypicalSupport.match$3017(arg$3019)) { final String p1 = Analyzer.cast(arg$3019.get1().getTuple().get1()); final String p2 = Analyzer.cast(arg$3019.get2().getTuple().get1()); return Analyzer.cast(null == Primitives.equal.apply(p1, p2) || !Primitives.equal.apply(p1, p2) ? null : null == Primitives.not.apply(hasTypeVariables.apply(p1)) ? null : Primitives.not.apply(hasTypeVariables.apply(p1)) ? new TypicalTypes.TypeName(p1) : new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(unifyTwoList.apply(tl1, tl2)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(tl) || !Primitives.isNotBottom.apply(tl) ? null : new TypicalTypes.VariantT(tl)); } }.apply()); } if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } if (TypicalSupport.match$3022(arg$2983)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$2983.get1().getTuple().get1()); final String p2 = Analyzer.cast(arg$2983.get2().getTuple().get1()); final String s2 = Analyzer.cast(arg$2983.get2().getTuple().get2()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> h; { h = Analyzer.cast(TypicalSupport.head$99.apply(tl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$3026 = Analyzer.cast(h); if ((null == arg$3026)) { return null; } if ((null != arg$3026)) switch (arg$3026.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$3026)) { final String p1 = Analyzer.cast(arg$3026.getTuple().get1()); return Analyzer.cast(null == Primitives.equal.apply(p1, p2) || !Primitives.equal.apply(p1, p2) ? null : null == Primitives.not.apply(hasTypeVariables.apply(p1)) ? null : Primitives.not.apply(hasTypeVariables.apply(p1)) ? new TypicalTypes.TypeName(p1) : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> res; { t = Analyzer.cast(getConstructorType.apply(s2, tl)); res = Analyzer.cast(unify.apply(t, t2)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(res) || !Primitives.isNotBottom.apply(res) ? null : t1); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } if (TypicalSupport.match$3029(arg$2983)) { return Analyzer.cast(unify.apply(t2, t1)); } if (TypicalSupport.match$3017(arg$2983)) { final String s1 = Analyzer.cast(arg$2983.get1().getTuple().get1()); final String s2 = Analyzer.cast(arg$2983.get1().getTuple().get2()); final TypicalTypes.raw_type<?> ty1 = Analyzer.cast(arg$2983.get1().getTuple().get3()); final String s3 = Analyzer.cast(arg$2983.get2().getTuple().get1()); final String s4 = Analyzer.cast(arg$2983.get2().getTuple().get2()); final TypicalTypes.raw_type<?> ty2 = Analyzer.cast(arg$2983.get2().getTuple().get3()); return Analyzer.cast(null == Primitives.equal.apply(s1, s3) || !Primitives.equal.apply(s1, s3) ? null : null == Primitives.not.apply(hasTypeVariables.apply(s1)) ? null : Primitives.not.apply(hasTypeVariables.apply(s1)) ? (null == Primitives.equal.apply(s2, s4) ? null : Primitives.equal.apply(s2, s4) ? t1 : new TypicalTypes.TypeName(s1)) : null == Primitives.equal.apply(s2, s4) ? null : Primitives.equal.apply(s2, s4) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> res; { res = Analyzer.cast(unify.apply(ty1, ty2)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(res) ? null : Primitives.isNotBottom.apply(res) ? new TypicalTypes.ConstructorT(s1, s2, res) : null == Primitives.isBottom.apply(ty1) ? null : Primitives.isBottom.apply(ty1) ? t1 : null); } }.apply() : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> res1; final TypicalTypes.raw_type<?> res2; { t = Analyzer.cast(copy.apply(new TypicalTypes.TypeName(s1))); res1 = Analyzer.cast(unify.apply(t, t1)); res2 = Analyzer.cast(unify.apply(res1, t2)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(res2); } }.apply()); } if (TypicalSupport.match$3031(arg$2983)) { final Pair<TypicalTypes.raw_type<?>> tl1 = Analyzer.cast(arg$2983.get1().getTuple().get1()); final TypicalTypes.raw_type<?> ret1 = Analyzer.cast(arg$2983.get1().getTuple().get2()); final Pair<TypicalTypes.raw_type<?>> tl2 = Analyzer.cast(arg$2983.get2().getTuple().get1()); final TypicalTypes.raw_type<?> ret2 = Analyzer.cast(arg$2983.get2().getTuple().get2()); return Analyzer.cast(null == Primitives.equal.apply(Primitives.length.apply(tl1), Primitives.length.apply(tl2)) || !Primitives.equal.apply(Primitives.length.apply(tl1), Primitives.length.apply(tl2)) ? null : new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; final TypicalTypes.raw_type<?> ret; { tl = Analyzer.cast(unifyTwoList.apply(tl1, tl2)); ret = Analyzer.cast(unify.apply(ret1, ret2)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.and.apply(Primitives.isNotBottom.apply(tl), Primitives.isNotBottom.apply(ret)) || !Primitives.and.apply(Primitives.isNotBottom.apply(tl), Primitives.isNotBottom.apply(ret)) ? null : new TypicalTypes.FunctionT(tl, ret)); } }.apply()); } if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }; final Function.F2<Boolean, TypicalTypes.raw_type<?>, String> containTypeVar = new Function.F2<Boolean, TypicalTypes.raw_type<?>, String>() { public Boolean apply(final TypicalTypes.raw_type<?> t, final String s) { return new Match<Boolean>() { public Boolean apply() { final TypicalTypes.raw_type<?> arg$3033 = Analyzer.cast(t); if ((null == arg$3033)) { return null; } if ((null != arg$3033)) switch (arg$3033.tag()) { case PairOfType: if (TypicalSupport.match$117(arg$3033)) { final TypicalTypes.raw_type<?> t1 = Analyzer.cast(arg$3033.getTuple().get1()); final TypicalTypes.raw_type<?> t2 = Analyzer.cast(arg$3033.getTuple().get2()); return Analyzer.cast(Primitives.or.apply(containTypeVar.apply(t1, s), containTypeVar.apply(t2, s))); } break; case VariableT: if (TypicalSupport.match$118(arg$3033)) { final String str = Analyzer.cast(arg$3033.getTuple().get1()); return Analyzer.cast(null == Primitives.equal.apply(s, str) ? null : Primitives.equal.apply(s, str) ? Boolean.TRUE : new Let<Boolean>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(Analyzer.cast(Primitives.get.apply(str, hashTable))); } public Boolean apply() { return Analyzer.cast(null == Primitives.isBottom.apply(ty) ? null : Primitives.isBottom.apply(ty) ? Boolean.FALSE : containTypeVar.apply(ty, s)); } }.apply()); } break; case FunctionT: if (TypicalSupport.match$98(arg$3033)) { final Pair<TypicalTypes.raw_type<?>> l = Analyzer.cast(arg$3033.getTuple().get1()); final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$3033.getTuple().get2()); return Analyzer.cast(Primitives.or.apply(containTypeVar.apply(ty, s), containTypeVarList.apply(l, s))); } break; case ConstructedT: if (TypicalSupport.match$116(arg$3033)) { final Pair<TypicalTypes.raw_type<?>> l = Analyzer.cast(arg$3033.getTuple().get1()); return Analyzer.cast(containTypeVarList.apply(l, s)); } break; case TupleT: if (TypicalSupport.match$115(arg$3033)) { final Pair<TypicalTypes.raw_type<?>> l = Analyzer.cast(arg$3033.getTuple().get1()); return Analyzer.cast(containTypeVarList.apply(l, s)); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply(); } }; final Function.F2<Boolean, Pair<TypicalTypes.raw_type<?>>, String> containTypeVarList = new Function.F2<Boolean, Pair<TypicalTypes.raw_type<?>>, String>() { public Boolean apply(final Pair<TypicalTypes.raw_type<?>> l, final String s) { return new Match<Boolean>() { public Boolean apply() { final Pair<TypicalTypes.raw_type<?>> arg$3040 = Analyzer.cast(l); if ((null == arg$3040)) { return null; } if (TypicalSupport.match$123(arg$3040)) { return Analyzer.cast(Boolean.FALSE); } if ((null != arg$3040 && !((Pair)arg$3040).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$3042 = Analyzer.cast(arg$3040); final TypicalTypes.raw_type<?> x = Analyzer.cast(Primitives.wrapHead(list$3042)); final Pair<TypicalTypes.raw_type<?>> xs = Analyzer.cast(Primitives.wrapTail(list$3042)); return Analyzer.cast(Primitives.or.apply(containTypeVar.apply(x, s), containTypeVarList.apply(xs, s))); } return null; } }.apply(); } }; final Function.F2<Pair<TypicalTypes.raw_type<?>>, Pair<TypicalTypes.raw_type<?>>, Pair<TypicalTypes.raw_type<?>>> unifyTwoList = new Function.F2<Pair<TypicalTypes.raw_type<?>>, Pair<TypicalTypes.raw_type<?>>, Pair<TypicalTypes.raw_type<?>>>() { public Pair<TypicalTypes.raw_type<?>> apply(final Pair<TypicalTypes.raw_type<?>> tl1, final Pair<TypicalTypes.raw_type<?>> tl2) { return new Match<Pair<TypicalTypes.raw_type<?>>>() { public Pair<TypicalTypes.raw_type<?>> apply() { final Pair<TypicalTypes.raw_type<?>> arg$3044 = Analyzer.cast(tl1); if ((null == arg$3044)) { return null; } if (TypicalSupport.match$123(arg$3044)) { return Analyzer.cast(Pair.<TypicalTypes.raw_type<?>>empty()); } if ((null != arg$3044 && !((Pair)arg$3044).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$3046 = Analyzer.cast(arg$3044); final TypicalTypes.raw_type<?> x = Analyzer.cast(Primitives.wrapHead(list$3046)); final Pair<TypicalTypes.raw_type<?>> xs = Analyzer.cast(Primitives.wrapTail(list$3046)); return Analyzer.cast(new Match<Pair<TypicalTypes.raw_type<?>>>() { public Pair<TypicalTypes.raw_type<?>> apply() { final Pair<TypicalTypes.raw_type<?>> arg$3050 = Analyzer.cast(tl2); if ((null == arg$3050)) { return null; } if ((null != arg$3050 && !((Pair)arg$3050).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$3051 = Analyzer.cast(arg$3050); final TypicalTypes.raw_type<?> y = Analyzer.cast(Primitives.wrapHead(list$3051)); final Pair<TypicalTypes.raw_type<?>> ys = Analyzer.cast(Primitives.wrapTail(list$3051)); return Analyzer.cast(new Let<Pair<TypicalTypes.raw_type<?>>>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(unify.apply(x, y)); } public Pair<TypicalTypes.raw_type<?>> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(t) || !Primitives.isNotBottom.apply(t) ? null : Primitives.wrapCons(t, unifyTwoList.apply(xs, ys))); } }.apply()); } if (true) { return Analyzer.cast(null); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F2<TypicalTypes.raw_type<?>, String, Pair<TypicalTypes.raw_type<?>>> getConstructorType = new Function.F2<TypicalTypes.raw_type<?>, String, Pair<TypicalTypes.raw_type<?>>>() { public TypicalTypes.raw_type<?> apply(final String name, final Pair<TypicalTypes.raw_type<?>> tl) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<TypicalTypes.raw_type<?>> arg$3054 = Analyzer.cast(tl); if ((null == arg$3054)) { return null; } if (TypicalSupport.match$123(arg$3054)) { return Analyzer.cast(null); } if ((null != arg$3054 && !((Pair)arg$3054).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$3056 = Analyzer.cast(arg$3054); final TypicalTypes.raw_type<?> x = Analyzer.cast(Primitives.wrapHead(list$3056)); final Pair<TypicalTypes.raw_type<?>> xs = Analyzer.cast(Primitives.wrapTail(list$3056)); return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$3060 = Analyzer.cast(x); if ((null == arg$3060)) { return null; } if ((null != arg$3060)) switch (arg$3060.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$3060)) { final String s = Analyzer.cast(arg$3060.getTuple().get2()); return Analyzer.cast(null == Primitives.equal.apply(name, s) ? null : Primitives.equal.apply(name, s) ? x : getConstructorType.apply(name, xs)); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F2<TypicalTypes.raw_type<?>, String, Pair<TypicalTypes.raw_type<?>>> getFieldType = new Function.F2<TypicalTypes.raw_type<?>, String, Pair<TypicalTypes.raw_type<?>>>() { public TypicalTypes.raw_type<?> apply(final String name, final Pair<TypicalTypes.raw_type<?>> tl) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<TypicalTypes.raw_type<?>> arg$3064 = Analyzer.cast(tl); if ((null == arg$3064)) { return null; } if (TypicalSupport.match$123(arg$3064)) { return Analyzer.cast(null); } if ((null != arg$3064 && !((Pair)arg$3064).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$3066 = Analyzer.cast(arg$3064); final TypicalTypes.raw_type<?> x = Analyzer.cast(Primitives.wrapHead(list$3066)); final Pair<TypicalTypes.raw_type<?>> xs = Analyzer.cast(Primitives.wrapTail(list$3066)); return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$3070 = Analyzer.cast(x); if ((null == arg$3070)) { return null; } if ((null != arg$3070)) switch (arg$3070.tag()) { case FieldT: if (TypicalSupport.match$97(arg$3070)) { final String s = Analyzer.cast(arg$3070.getTuple().get2()); return Analyzer.cast(null == Primitives.equal.apply(name, s) ? null : Primitives.equal.apply(name, s) ? x : getFieldType.apply(name, xs)); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F2<Boolean, Pair<TypicalTypes.raw_type<?>>, TypicalTypes.raw_type<?>> checkPolyUnify = new Function.F2<Boolean, Pair<TypicalTypes.raw_type<?>>, TypicalTypes.raw_type<?>>() { public Boolean apply(final Pair<TypicalTypes.raw_type<?>> tl, final TypicalTypes.raw_type<?> t) { return new Match<Boolean>() { public Boolean apply() { final Pair<TypicalTypes.raw_type<?>> arg$3074 = Analyzer.cast(tl); if ((null == arg$3074)) { return null; } if (TypicalSupport.match$123(arg$3074)) { return Analyzer.cast(Boolean.FALSE); } if ((null != arg$3074 && !((Pair)arg$3074).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$3076 = Analyzer.cast(arg$3074); final TypicalTypes.raw_type<?> x = Analyzer.cast(Primitives.wrapHead(list$3076)); final Pair<TypicalTypes.raw_type<?>> xs = Analyzer.cast(Primitives.wrapTail(list$3076)); return Analyzer.cast(new Let<Boolean>() { final TypicalTypes.raw_type<?> res; { res = Analyzer.cast(unify.apply(x, t)); } public Boolean apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(res) ? null : Primitives.isNotBottom.apply(res) ? Boolean.TRUE : checkPolyUnify.apply(xs, t)); } }.apply()); } return null; } }.apply(); } }; final Function.F1<Object, Node> scanNode = new Function.F1<Object, Node>() { public Object apply(final Node n) { return new Match<Object>() { public Object apply() { final Node arg$3078 = GNode.cast(n); if ((null == arg$3078)) { return null; } if (TypicalSupport.match$73(arg$3078)) { final String s = (arg$3078.size() > 0 ? arg$3078.getString(0) : null); matching_nodes.add(arg$3078); if ((null != arg$3078 && processScopeNodes.contains(arg$3078.getName()))) { processScope(arg$3078, getScope); } checkEnterScope(arg$3078); final Object retValue$3084 = Analyzer.cast(new Require<Object>() { public Object apply() { final Boolean var$3081 = Primitives.not.apply(isDefined.apply(n, getNameSpace)); if ((null != var$3081 && !var$3081)) { showMessage("error", Primitives.concat.apply(s, " has been previously defined"), n); } if ((null == var$3081)) { return null; } if (var$3081) { return new Let<Object>() { { redefine.apply(n, wildt, getNameSpace); define3.apply(GNode.create("NameSpaceStructure", s, null, null), n, getNameSpace); } public Object apply() { return Analyzer.cast(null); } }.apply(); } return null; } }.apply()); checkExitScope(arg$3078); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3084); } if (TypicalSupport.match$21(arg$3078)) { final String s = (arg$3078.size() > 1 ? arg$3078.getString(1) : null); matching_nodes.add(arg$3078); if ((null != arg$3078 && processScopeNodes.contains(arg$3078.getName()))) { processScope(arg$3078, getScope); } checkEnterScope(arg$3078); final Object retValue$3090 = Analyzer.cast(new Require<Object>() { public Object apply() { final Boolean var$3087 = Primitives.not.apply(isDefined.apply(n, getNameSpace)); if ((null != var$3087 && !var$3087)) { showMessage("error", Primitives.concat.apply(Primitives.concat.apply("type ", s), " has been previously defined"), n); } if ((null == var$3087)) { return null; } if (var$3087) { return new Let<Object>() { { redefine.apply(GNode.create("NameSpaceStructure", s, null, null), n, getNameSpace); redefine.apply(n, wildt, getNameSpace); } public Object apply() { return Analyzer.cast(null); } }.apply(); } return null; } }.apply()); checkExitScope(arg$3078); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3090); } if (true) { matching_nodes.add(arg$3078); if ((null != arg$3078 && processScopeNodes.contains(arg$3078.getName()))) { processScope(arg$3078, getScope); } checkEnterScope(arg$3078); final Object retValue$3093 = Analyzer.cast(null); checkExitScope(arg$3078); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3093); } return null; } }.apply(); } }; final Function.F1<TypicalTypes.raw_type<?>, Node> analyzeTypeDefinition = new Function.F1<TypicalTypes.raw_type<?>, Node>() { public TypicalTypes.raw_type<?> apply(final Node n) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Node arg$3095 = GNode.cast(n); if ((null == arg$3095)) { return null; } if (TypicalSupport.match$3096(arg$3095)) { matching_nodes.add(arg$3095); if ((null != arg$3095 && processScopeNodes.contains(arg$3095.getName()))) { processScope(arg$3095, getScope); } checkEnterScope(arg$3095); final Object retValue$3099 = Analyzer.cast(analyze.apply(n)); checkExitScope(arg$3095); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3099); } if (true) { matching_nodes.add(arg$3095); if ((null != arg$3095 && processScopeNodes.contains(arg$3095.getName()))) { processScope(arg$3095, getScope); } checkEnterScope(arg$3095); final Object retValue$3102 = Analyzer.cast(null); checkExitScope(arg$3095); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3102); } return null; } }.apply(); } }; final Function.F1<Pair<TypicalTypes.raw_type<?>>, Pair<Node>> processAttributes = new Function.F1<Pair<TypicalTypes.raw_type<?>>, Pair<Node>>() { public Pair<TypicalTypes.raw_type<?>> apply(final Pair<Node> nl) { return new Match<Pair<TypicalTypes.raw_type<?>>>() { public Pair<TypicalTypes.raw_type<?>> apply() { final Pair<Node> arg$3104 = Analyzer.cast(nl); if ((null == arg$3104)) { return null; } if (TypicalSupport.match$336(arg$3104)) { return Analyzer.cast(Pair.<TypicalTypes.raw_type<?>>empty()); } if ((null != arg$3104 && !((Pair)arg$3104).isEmpty())) { final Pair<Node> list$3106 = Analyzer.cast(arg$3104); final Node x = GNode.cast(Primitives.wrapHead(list$3106)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$3106)); return Analyzer.cast(new Match<Pair<TypicalTypes.raw_type<?>>>() { public Pair<TypicalTypes.raw_type<?>> apply() { final Node arg$3120 = GNode.cast(x); if ((null == arg$3120)) { return null; } if (TypicalSupport.match$3108(arg$3120)) { matching_nodes.add(arg$3120); if ((null != arg$3120 && processScopeNodes.contains(arg$3120.getName()))) { processScope(arg$3120, getScope); } checkEnterScope(arg$3120); final Object retValue$3124 = Analyzer.cast(Primitives.wrapCons(analyze.apply(x), processAttributes.apply(xs))); checkExitScope(arg$3120); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3124); } if (TypicalSupport.match$3112(arg$3120)) { matching_nodes.add(arg$3120); if ((null != arg$3120 && processScopeNodes.contains(arg$3120.getName()))) { processScope(arg$3120, getScope); } checkEnterScope(arg$3120); final Object retValue$3128 = Analyzer.cast(Primitives.wrapCons(analyze.apply(x), processAttributes.apply(xs))); checkExitScope(arg$3120); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3128); } if (true) { matching_nodes.add(arg$3120); if ((null != arg$3120 && processScopeNodes.contains(arg$3120.getName()))) { processScope(arg$3120, getScope); } checkEnterScope(arg$3120); final Object retValue$3131 = Analyzer.cast(processAttributes.apply(xs)); checkExitScope(arg$3120); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3131); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F1<Object, Pair<Node>> processScopeSpace = new Function.F1<Object, Pair<Node>>() { public Object apply(final Pair<Node> nl) { return new Let<Object>() { final Pair<Node> noList; final Node n1; final Node n2; final Pair<TypicalTypes.call> calls1; final Pair<TypicalTypes.call> calls2; final Pair<String> callees1; final Pair<String> callees2; { noList = Analyzer.cast(getScopeSpace.apply(nl, Pair.<Node>empty())); n1 = Analyzer.cast(TypicalSupport.head$292.apply(noList)); n2 = Analyzer.cast(TypicalSupport.head$292.apply(TypicalSupport.tail$291.apply(noList))); calls1 = Analyzer.cast(getCall.apply(n1, "", Pair.<TypicalTypes.call>empty())); calls2 = Analyzer.cast(getCall.apply(n2, "", Pair.<TypicalTypes.call>empty())); callees1 = Analyzer.cast(getCallees.apply(calls1, Pair.<String>empty())); callees2 = Analyzer.cast(getCallees.apply(calls2, Pair.<String>empty())); } public Object apply() { return Analyzer.cast(visitFunctions.apply(TypicalSupport.union$326.apply(callees1, callees2), nl)); } }.apply(); } }; final Function.F2<Pair<Node>, Pair<Node>, Pair<Node>> getScopeSpace = new Function.F2<Pair<Node>, Pair<Node>, Pair<Node>>() { public Pair<Node> apply(final Pair<Node> nl, final Pair<Node> res) { return new Match<Pair<Node>>() { public Pair<Node> apply() { final Pair<Node> arg$3134 = Analyzer.cast(nl); if ((null == arg$3134)) { return null; } if (TypicalSupport.match$336(arg$3134)) { return Analyzer.cast(res); } if ((null != arg$3134 && !((Pair)arg$3134).isEmpty())) { final Pair<Node> list$3136 = Analyzer.cast(arg$3134); final Node x = GNode.cast(Primitives.wrapHead(list$3136)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$3136)); return Analyzer.cast(new Match<Pair<Node>>() { public Pair<Node> apply() { final Node arg$3150 = GNode.cast(x); if ((null == arg$3150)) { return null; } if (TypicalSupport.match$3138(arg$3150)) { matching_nodes.add(arg$3150); if ((null != arg$3150 && processScopeNodes.contains(arg$3150.getName()))) { processScope(arg$3150, getScope); } checkEnterScope(arg$3150); final Object retValue$3154 = Analyzer.cast(getScopeSpace.apply(xs, Primitives.wrapCons(x, res))); checkExitScope(arg$3150); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3154); } if (TypicalSupport.match$3142(arg$3150)) { matching_nodes.add(arg$3150); if ((null != arg$3150 && processScopeNodes.contains(arg$3150.getName()))) { processScope(arg$3150, getScope); } checkEnterScope(arg$3150); final Object retValue$3158 = Analyzer.cast(getScopeSpace.apply(xs, Primitives.wrapCons(x, res))); checkExitScope(arg$3150); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3158); } if (true) { matching_nodes.add(arg$3150); if ((null != arg$3150 && processScopeNodes.contains(arg$3150.getName()))) { processScope(arg$3150, getScope); } checkEnterScope(arg$3150); final Object retValue$3161 = Analyzer.cast(getScopeSpace.apply(xs, res)); checkExitScope(arg$3150); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3161); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F2<Object, Pair<String>, Pair<Node>> visitFunctions = new Function.F2<Object, Pair<String>, Pair<Node>>() { public Object apply(final Pair<String> strL, final Pair<Node> nl) { return new Match<Object>() { public Object apply() { final Pair<Node> arg$3164 = Analyzer.cast(nl); if ((null == arg$3164)) { return null; } if (TypicalSupport.match$336(arg$3164)) { return Analyzer.cast(null); } if ((null != arg$3164 && !((Pair)arg$3164).isEmpty())) { final Pair<Node> list$3166 = Analyzer.cast(arg$3164); final Node x = GNode.cast(Primitives.wrapHead(list$3166)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$3166)); return Analyzer.cast(new Match<Object>() { public Object apply() { final Node arg$3176 = GNode.cast(x); if ((null == arg$3176)) { return null; } if (TypicalSupport.match$73(arg$3176)) { final String s = (arg$3176.size() > 0 ? arg$3176.getString(0) : null); matching_nodes.add(arg$3176); if ((null != arg$3176 && processScopeNodes.contains(arg$3176.getName()))) { processScope(arg$3176, getScope); } checkEnterScope(arg$3176); final Object retValue$3180 = Analyzer.cast(null == Primitives.contains.apply(s, strL) ? null : Primitives.contains.apply(s, strL) ? new Let<Object>() { { analyze.apply(x); } public Object apply() { return Analyzer.cast(visitFunctions.apply(strL, xs)); } }.apply() : visitFunctions.apply(strL, xs)); checkExitScope(arg$3176); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3180); } if (true) { matching_nodes.add(arg$3176); if ((null != arg$3176 && processScopeNodes.contains(arg$3176.getName()))) { processScope(arg$3176, getScope); } checkEnterScope(arg$3176); final Object retValue$3183 = Analyzer.cast(visitFunctions.apply(strL, xs)); checkExitScope(arg$3176); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3183); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F2<Pair<String>, Pair<TypicalTypes.call>, Pair<String>> getCallees = new Function.F2<Pair<String>, Pair<TypicalTypes.call>, Pair<String>>() { public Pair<String> apply(final Pair<TypicalTypes.call> cl, final Pair<String> res) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<TypicalTypes.call> arg$3186 = Analyzer.cast(cl); if ((null == arg$3186)) { return null; } if (TypicalSupport.match$3187(arg$3186)) { return Analyzer.cast(res); } if ((null != arg$3186 && !((Pair)arg$3186).isEmpty())) { final Pair<TypicalTypes.call> list$3188 = Analyzer.cast(arg$3186); final TypicalTypes.call x = Analyzer.cast(Primitives.wrapHead(list$3188)); final Pair<TypicalTypes.call> xs = Analyzer.cast(Primitives.wrapTail(list$3188)); return Analyzer.cast(new Let<Pair<String>>() { final String name; { name = Analyzer.cast(null == x ? null : x.callee); } public Pair<String> apply() { return Analyzer.cast(getCallees.apply(xs, Primitives.wrapCons(name, res))); } }.apply()); } return null; } }.apply(); } }; final Function.F2<Pair<String>, String, Node> getTypeNames = new Function.F2<Pair<String>, String, Node>() { public Pair<String> apply(final String s, final Node n) { return (null == Primitives.isBottom.apply(n) ? null : Primitives.isBottom.apply(n) ? Pair.<String>empty() : new Match<Pair<String>>() { public Pair<String> apply() { final Node arg$3190 = GNode.cast(n); if ((null == arg$3190)) { return null; } if (TypicalSupport.match$193(arg$3190)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3190, 0, arg$3190.size())); matching_nodes.add(arg$3190); if ((null != arg$3190 && processScopeNodes.contains(arg$3190.getName()))) { processScope(arg$3190, getScope); } checkEnterScope(arg$3190); final Object retValue$3194 = Analyzer.cast(getTypeNameList.apply(s, nl)); checkExitScope(arg$3190); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3194); } if (TypicalSupport.match$201(arg$3190)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3190, 0, arg$3190.size())); matching_nodes.add(arg$3190); if ((null != arg$3190 && processScopeNodes.contains(arg$3190.getName()))) { processScope(arg$3190, getScope); } checkEnterScope(arg$3190); final Object retValue$3198 = Analyzer.cast(getTypeNameList.apply(s, nl)); checkExitScope(arg$3190); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3198); } if (TypicalSupport.match$2881(arg$3190)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3190, 0, arg$3190.size())); matching_nodes.add(arg$3190); if ((null != arg$3190 && processScopeNodes.contains(arg$3190.getName()))) { processScope(arg$3190, getScope); } checkEnterScope(arg$3190); final Object retValue$3202 = Analyzer.cast(getTypeNameList.apply(s, nl)); checkExitScope(arg$3190); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3202); } if (TypicalSupport.match$2877(arg$3190)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3190, 0, arg$3190.size())); matching_nodes.add(arg$3190); if ((null != arg$3190 && processScopeNodes.contains(arg$3190.getName()))) { processScope(arg$3190, getScope); } checkEnterScope(arg$3190); final Object retValue$3206 = Analyzer.cast(getTypeNameList.apply(s, nl)); checkExitScope(arg$3190); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3206); } if (TypicalSupport.match$13(arg$3190)) { final Node no = (arg$3190.size() > 1 ? arg$3190.getGeneric(1) : null); matching_nodes.add(arg$3190); if ((null != arg$3190 && processScopeNodes.contains(arg$3190.getName()))) { processScope(arg$3190, getScope); } checkEnterScope(arg$3190); final Object retValue$3210 = Analyzer.cast(getTypeNames.apply(s, no)); checkExitScope(arg$3190); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3210); } if (TypicalSupport.match$29(arg$3190)) { final String str = (arg$3190.size() > 0 ? arg$3190.getString(0) : null); matching_nodes.add(arg$3190); if ((null != arg$3190 && processScopeNodes.contains(arg$3190.getName()))) { processScope(arg$3190, getScope); } checkEnterScope(arg$3190); final Object retValue$3214 = Analyzer.cast(null == Primitives.or.apply(Primitives.equal.apply(s, str), Primitives.not.apply(isDefined.apply(GNode.create("UserDefinedType", str), getNameSpace))) ? null : Primitives.or.apply(Primitives.equal.apply(s, str), Primitives.not.apply(isDefined.apply(GNode.create("UserDefinedType", str), getNameSpace))) ? Pair.<String>empty() : new Pair<String>(str)); checkExitScope(arg$3190); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3214); } if (TypicalSupport.match$17(arg$3190)) { final String str = (arg$3190.size() > 1 ? arg$3190.getString(1) : null); matching_nodes.add(arg$3190); if ((null != arg$3190 && processScopeNodes.contains(arg$3190.getName()))) { processScope(arg$3190, getScope); } checkEnterScope(arg$3190); final Object retValue$3218 = Analyzer.cast(null == isDefined.apply(GNode.create("UserDefinedType", str), getNameSpace) ? null : isDefined.apply(GNode.create("UserDefinedType", str), getNameSpace) ? new Let<Pair<String>>() { final Node no; { no = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("NameSpaceStructure", str, null, null), getNameSpace))); Primitives.annotate.apply(no, "monomorphic", wildt); } public Pair<String> apply() { return Analyzer.cast(null == Primitives.equal.apply(s, str) ? null : Primitives.equal.apply(s, str) ? Pair.<String>empty() : new Pair<String>(str)); } }.apply() : Pair.<String>empty()); checkExitScope(arg$3190); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3218); } if (TypicalSupport.match$25(arg$3190)) { final Node tn = (arg$3190.size() > 0 ? arg$3190.getGeneric(0) : null); matching_nodes.add(arg$3190); if ((null != arg$3190 && processScopeNodes.contains(arg$3190.getName()))) { processScope(arg$3190, getScope); } checkEnterScope(arg$3190); final Object retValue$3222 = Analyzer.cast(getTypeNames.apply(s, tn)); checkExitScope(arg$3190); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3222); } if (true) { matching_nodes.add(arg$3190); if ((null != arg$3190 && processScopeNodes.contains(arg$3190.getName()))) { processScope(arg$3190, getScope); } checkEnterScope(arg$3190); final Object retValue$3225 = Analyzer.cast(Pair.<String>empty()); checkExitScope(arg$3190); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3225); } return null; } }.apply()); } }; final Function.F2<Pair<String>, String, Pair<Node>> getTypeNameList = new Function.F2<Pair<String>, String, Pair<Node>>() { public Pair<String> apply(final String s, final Pair<Node> nl) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<Node> arg$3227 = Analyzer.cast(nl); if ((null == arg$3227)) { return null; } if (TypicalSupport.match$336(arg$3227)) { return Analyzer.cast(Pair.<String>empty()); } if ((null != arg$3227 && !((Pair)arg$3227).isEmpty())) { final Pair<Node> list$3229 = Analyzer.cast(arg$3227); final Node x = GNode.cast(Primitives.wrapHead(list$3229)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$3229)); return Analyzer.cast(TypicalSupport.union$326.apply(getTypeNames.apply(s, x), getTypeNameList.apply(s, xs))); } return null; } }.apply(); } }; final Function.F2<Pair<String>, String, Pair<Node>> getReachableTypes = new Function.F2<Pair<String>, String, Pair<Node>>() { public Pair<String> apply(final String s, final Pair<Node> nl) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<Node> arg$3231 = Analyzer.cast(nl); if ((null == arg$3231)) { return null; } if (TypicalSupport.match$336(arg$3231)) { return Analyzer.cast(null); } if ((null != arg$3231 && !((Pair)arg$3231).isEmpty())) { final Pair<Node> list$3233 = Analyzer.cast(arg$3231); final Node x = GNode.cast(Primitives.wrapHead(list$3233)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$3233)); return Analyzer.cast(new Match<Pair<String>>() { public Pair<String> apply() { final Node arg$3243 = GNode.cast(x); if ((null == arg$3243)) { return null; } if (TypicalSupport.match$21(arg$3243)) { final String str = (arg$3243.size() > 1 ? arg$3243.getString(1) : null); final Node n = (arg$3243.size() > 2 ? arg$3243.getGeneric(2) : null); matching_nodes.add(arg$3243); if ((null != arg$3243 && processScopeNodes.contains(arg$3243.getName()))) { processScope(arg$3243, getScope); } checkEnterScope(arg$3243); final Object retValue$3247 = Analyzer.cast(null == Primitives.equal.apply(str, s) ? null : Primitives.equal.apply(str, s) ? new Let<Pair<String>>() { { Primitives.annotate.apply(x, "__node", wildt); } public Pair<String> apply() { return Analyzer.cast(getTypeNames.apply(s, n)); } }.apply() : getReachableTypes.apply(s, xs)); checkExitScope(arg$3243); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3247); } if (true) { matching_nodes.add(arg$3243); if ((null != arg$3243 && processScopeNodes.contains(arg$3243.getName()))) { processScope(arg$3243, getScope); } checkEnterScope(arg$3243); final Object retValue$3250 = Analyzer.cast(getReachableTypes.apply(s, xs)); checkExitScope(arg$3243); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3250); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F1<Pair<String>, Pair<Node>> getNodeTypes = new Function.F1<Pair<String>, Pair<Node>>() { public Pair<String> apply(final Pair<Node> nl) { return new Let<Pair<String>>() { final Pair<String> strL; { strL = Analyzer.cast(getReachableTypes.apply(nodeType, nl)); } public Pair<String> apply() { return Analyzer.cast(null == Primitives.isBottom.apply(strL) ? null : Primitives.isBottom.apply(strL) ? error("Can not find the root node definition", null) : processNodeType.apply(strL, nl, new Pair<String>(nodeType))); } }.apply(); } }; final Function.F3<Pair<String>, Pair<String>, Pair<Node>, Pair<String>> processNodeType = new Function.F3<Pair<String>, Pair<String>, Pair<Node>, Pair<String>>() { public Pair<String> apply(final Pair<String> strL, final Pair<Node> nl, final Pair<String> resL) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<String> arg$3253 = Analyzer.cast(strL); if ((null == arg$3253)) { return null; } if (TypicalSupport.match$3254(arg$3253)) { return Analyzer.cast(resL); } if ((null != arg$3253 && !((Pair)arg$3253).isEmpty())) { final Pair<String> list$3255 = Analyzer.cast(arg$3253); final String x = Analyzer.cast(Primitives.wrapHead(list$3255)); final Pair<String> xs = Analyzer.cast(Primitives.wrapTail(list$3255)); return Analyzer.cast(null == Primitives.contains.apply(x, resL) ? null : Primitives.contains.apply(x, resL) ? processNodeType.apply(xs, nl, resL) : new Let<Pair<String>>() { final Pair<String> l; final Pair<String> newStrL; { l = Analyzer.cast(getReachableTypes.apply(x, nl)); newStrL = Analyzer.cast(unionAppend.apply(xs, l)); } public Pair<String> apply() { return Analyzer.cast(processNodeType.apply(newStrL, nl, Primitives.wrapCons(x, resL))); } }.apply()); } return null; } }.apply(); } }; final Function.F2<Pair<String>, Pair<String>, Pair<String>> unionAppend = new Function.F2<Pair<String>, Pair<String>, Pair<String>>() { public Pair<String> apply(final Pair<String> l1, final Pair<String> l2) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<String> arg$3257 = Analyzer.cast(l2); if ((null == arg$3257)) { return null; } if (TypicalSupport.match$3254(arg$3257)) { return Analyzer.cast(l1); } if ((null != arg$3257 && !((Pair)arg$3257).isEmpty())) { final Pair<String> list$3259 = Analyzer.cast(arg$3257); final String x = Analyzer.cast(Primitives.wrapHead(list$3259)); final Pair<String> xs = Analyzer.cast(Primitives.wrapTail(list$3259)); return Analyzer.cast(null == Primitives.contains.apply(x, l1) ? null : Primitives.contains.apply(x, l1) ? unionAppend.apply(l1, xs) : new Let<Pair<String>>() { final Pair<String> l; { l = Analyzer.cast(TypicalSupport.append$310.apply(l1, new Pair<String>(x))); } public Pair<String> apply() { return Analyzer.cast(unionAppend.apply(l, xs)); } }.apply()); } return null; } }.apply(); } }; final Function.F1<Boolean, String> reachableFromNode = new Function.F1<Boolean, String>() { public Boolean apply(final String s) { return (null == Primitives.equal.apply(nodeType, s) ? null : Primitives.equal.apply(nodeType, s) ? Boolean.TRUE : null == isDefined.apply(GNode.create("NameSpaceStructure", s, null, null), getNameSpace) ? null : isDefined.apply(GNode.create("NameSpaceStructure", s, null, null), getNameSpace) ? new Let<Boolean>() { final Node nod; { nod = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("NameSpaceStructure", s, null, null), getNameSpace))); } public Boolean apply() { return Analyzer.cast(Primitives.hasAnnotation.apply(nod, "__node")); } }.apply() : Boolean.FALSE); } }; final Function.F2<Boolean, Node, Node> checkMonomorphic = new Function.F2<Boolean, Node, Node>() { public Boolean apply(final Node n, final Node dec) { return (null == Primitives.not.apply(Primitives.hasAnnotation.apply(n, "monomorphic")) ? null : Primitives.not.apply(Primitives.hasAnnotation.apply(n, "monomorphic")) ? Boolean.TRUE : new Match<Boolean>() { public Boolean apply() { final Node arg$3261 = GNode.cast(dec); if ((null == arg$3261)) { return null; } if (TypicalSupport.match$3262(arg$3261)) { matching_nodes.add(arg$3261); if ((null != arg$3261 && processScopeNodes.contains(arg$3261.getName()))) { processScope(arg$3261, getScope); } checkEnterScope(arg$3261); final Object retValue$3265 = Analyzer.cast(Boolean.FALSE); checkExitScope(arg$3261); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3265); } if (true) { matching_nodes.add(arg$3261); if ((null != arg$3261 && processScopeNodes.contains(arg$3261.getName()))) { processScope(arg$3261, getScope); } checkEnterScope(arg$3261); final Object retValue$3268 = Analyzer.cast(Boolean.TRUE); checkExitScope(arg$3261); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3268); } return null; } }.apply()); } }; final Function.F2<Pair<TypicalTypes.entry>, Pair<Node>, Pair<TypicalTypes.entry>> analyzeBindings = new Function.F2<Pair<TypicalTypes.entry>, Pair<Node>, Pair<TypicalTypes.entry>>() { public Pair<TypicalTypes.entry> apply(final Pair<Node> nl, final Pair<TypicalTypes.entry> enList) { return new Match<Pair<TypicalTypes.entry>>() { public Pair<TypicalTypes.entry> apply() { final Pair<Node> arg$3270 = Analyzer.cast(nl); if ((null == arg$3270)) { return null; } if (TypicalSupport.match$336(arg$3270)) { return Analyzer.cast(enList); } if ((null != arg$3270 && !((Pair)arg$3270).isEmpty())) { final Pair<Node> list$3272 = Analyzer.cast(arg$3270); final Node x = GNode.cast(Primitives.wrapHead(list$3272)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$3272)); return Analyzer.cast(new Let<Pair<TypicalTypes.entry>>() { final TypicalTypes.entry en; { en = Analyzer.cast(analyzeBinding.apply(x)); } public Pair<TypicalTypes.entry> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(en) ? null : Primitives.isNotBottom.apply(en) ? (null == Primitives.isBottom.apply(null == en ? null : en.entryName) ? null : Primitives.isBottom.apply(null == en ? null : en.entryName) ? analyzeBindings.apply(xs, enList) : null == Primitives.not.apply(checkDefined.apply(null == en ? null : en.entryName, enList)) ? null : Primitives.not.apply(checkDefined.apply(null == en ? null : en.entryName, enList)) ? analyzeBindings.apply(xs, TypicalSupport.append$3273.apply(enList, new Pair<TypicalTypes.entry>(en))) : new Let<Pair<TypicalTypes.entry>>() { { error(Primitives.concat.apply(null == en ? null : en.entryName, " has been previously defined"), x); } public Pair<TypicalTypes.entry> apply() { return Analyzer.cast(analyzeBindings.apply(xs, TypicalSupport.append$3273.apply(enList, null))); } }.apply()) : analyzeBindings.apply(xs, TypicalSupport.append$3273.apply(enList, new Pair<TypicalTypes.entry>(en)))); } }.apply()); } return null; } }.apply(); } }; final Function.F2<Boolean, String, Pair<TypicalTypes.entry>> checkDefined = new Function.F2<Boolean, String, Pair<TypicalTypes.entry>>() { public Boolean apply(final String name, final Pair<TypicalTypes.entry> enList) { return new Match<Boolean>() { public Boolean apply() { final Pair<TypicalTypes.entry> arg$3275 = Analyzer.cast(enList); if ((null == arg$3275)) { return null; } if (TypicalSupport.match$3276(arg$3275)) { return Analyzer.cast(Boolean.FALSE); } if ((null != arg$3275 && !((Pair)arg$3275).isEmpty())) { final Pair<TypicalTypes.entry> list$3277 = Analyzer.cast(arg$3275); final TypicalTypes.entry x = Analyzer.cast(Primitives.wrapHead(list$3277)); final Pair<TypicalTypes.entry> xs = Analyzer.cast(Primitives.wrapTail(list$3277)); return Analyzer.cast(null == Primitives.equal.apply(name, null == x ? null : x.entryName) ? null : Primitives.equal.apply(name, null == x ? null : x.entryName) ? Boolean.TRUE : checkDefined.apply(name, xs)); } return null; } }.apply(); } }; final Function.F1<TypicalTypes.entry, Node> analyzeBinding = new Function.F1<TypicalTypes.entry, Node>() { public TypicalTypes.entry apply(final Node n) { return new Match<TypicalTypes.entry>() { public TypicalTypes.entry apply() { final Node arg$3279 = GNode.cast(n); if ((null == arg$3279)) { return null; } if (TypicalSupport.match$3280(arg$3279)) { final Node l = (arg$3279.size() > 0 ? arg$3279.getGeneric(0) : null); final Node r = (arg$3279.size() > 1 ? arg$3279.getGeneric(1) : null); matching_nodes.add(arg$3279); if ((null != arg$3279 && processScopeNodes.contains(arg$3279.getName()))) { processScope(arg$3279, getScope); } checkEnterScope(arg$3279); final Object retValue$3313 = Analyzer.cast(new Let<TypicalTypes.entry>() { final TypicalTypes.raw_type<?> tr; { tr = Analyzer.cast(analyze.apply(r)); } public TypicalTypes.entry apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(tr) || !Primitives.isNotBottom.apply(tr) ? null : new Match<TypicalTypes.entry>() { public TypicalTypes.entry apply() { final Node arg$3296 = GNode.cast(l); if ((null == arg$3296)) { return null; } if (TypicalSupport.match$3282(arg$3296)) { final Node var = Analyzer.cast(arg$3296.getGeneric(0)); final Node typ = (arg$3296.size() > 1 ? arg$3296.getGeneric(1) : null); matching_nodes.add(arg$3296); if ((null != arg$3296 && processScopeNodes.contains(arg$3296.getName()))) { processScope(arg$3296, getScope); } checkEnterScope(arg$3296); final Object retValue$3302 = Analyzer.cast(new Let<TypicalTypes.entry>() { final TypicalTypes.raw_type<?> ty; final String s; { ty = Analyzer.cast(analyze.apply(typ)); s = Analyzer.cast(getString.apply(var)); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == ty)) { return null; } if ((null == tr)) { return null; } final TypicalTypes.raw_type<?> result$3299 = unify.apply(tr, ty); if ((null == result$3299)) { return Analyzer.cast(error("types of left and right expressions do not match", null)); } return result$3299; } }.apply(); Primitives.annotate.apply(var, "__type", ty); Primitives.annotate.apply(l, "__type", ty); Primitives.annotate.apply(n, "__type", ty); } public TypicalTypes.entry apply() { return Analyzer.cast(new TypicalTypes.entry(s, ty)); } }.apply()); checkExitScope(arg$3296); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3302); } if (TypicalSupport.match$65(arg$3296)) { final String s = (arg$3296.size() > 0 ? arg$3296.getString(0) : null); matching_nodes.add(arg$3296); if ((null != arg$3296 && processScopeNodes.contains(arg$3296.getName()))) { processScope(arg$3296, getScope); } checkEnterScope(arg$3296); final Object retValue$3306 = Analyzer.cast(new Let<TypicalTypes.entry>() { { Primitives.annotate.apply(l, "__type", tr); Primitives.annotate.apply(n, "__type", tr); } public TypicalTypes.entry apply() { return Analyzer.cast(new TypicalTypes.entry(s, tr)); } }.apply()); checkExitScope(arg$3296); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3306); } if (true) { matching_nodes.add(arg$3296); if ((null != arg$3296 && processScopeNodes.contains(arg$3296.getName()))) { processScope(arg$3296, getScope); } checkEnterScope(arg$3296); final Object retValue$3309 = Analyzer.cast(new Let<TypicalTypes.entry>() { { Primitives.annotate.apply(l, "__type", tr); Primitives.annotate.apply(n, "__type", tr); } public TypicalTypes.entry apply() { return Analyzer.cast(new TypicalTypes.entry(null, tr)); } }.apply()); checkExitScope(arg$3296); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3309); } return null; } }.apply()); } }.apply()); checkExitScope(arg$3279); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3313); } if (true) { matching_nodes.add(arg$3279); if ((null != arg$3279 && processScopeNodes.contains(arg$3279.getName()))) { processScope(arg$3279, getScope); } checkEnterScope(arg$3279); final Object retValue$3316 = Analyzer.cast(null); checkExitScope(arg$3279); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3316); } return null; } }.apply(); } }; final Function.F2<TypicalTypes.raw_type<?>, Node, Pair<TypicalTypes.entry>> analyzeExpression = new Function.F2<TypicalTypes.raw_type<?>, Node, Pair<TypicalTypes.entry>>() { public TypicalTypes.raw_type<?> apply(final Node n, final Pair<TypicalTypes.entry> enList) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Node arg$3318 = GNode.cast(n); if ((null == arg$3318)) { return null; } if (true) { matching_nodes.add(arg$3318); if ((null != arg$3318 && processScopeNodes.contains(arg$3318.getName()))) { processScope(arg$3318, getScope); } checkEnterScope(arg$3318); final Object retValue$3322 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { TypicalSupport.map$3319.apply(defineEntry, enList); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(analyze.apply(n)); } }.apply()); checkExitScope(arg$3318); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3322); } return null; } }.apply(); } }; final Function.F1<Object, TypicalTypes.entry> defineEntry = new Function.F1<Object, TypicalTypes.entry>() { public Object apply(final TypicalTypes.entry en) { return new Let<Object>() { { redefine.apply(GNode.create("LowerID", null == en ? null : en.entryName), null == en ? null : en.entryType, getNameSpace); } public Object apply() { return Analyzer.cast(null); } }.apply(); } }; final Function.F1<Boolean, TypicalTypes.raw_type<?>> isNodeType = new Function.F1<Boolean, TypicalTypes.raw_type<?>>() { public Boolean apply(final TypicalTypes.raw_type<?> t) { return new Match<Boolean>() { public Boolean apply() { final TypicalTypes.raw_type<?> arg$3324 = Analyzer.cast(t); if ((null == arg$3324)) { return null; } if ((null != arg$3324)) switch (arg$3324.tag()) { case VariableT: if (TypicalSupport.match$118(arg$3324)) { final String str = Analyzer.cast(arg$3324.getTuple().get1()); return Analyzer.cast(new Let<Boolean>() { final TypicalTypes.raw_type<?> t1; { t1 = Analyzer.cast(Analyzer.cast(Primitives.get.apply(str, hashTable))); } public Boolean apply() { return Analyzer.cast(null == Primitives.isBottom.apply(t1) ? null : Primitives.isBottom.apply(t1) ? Boolean.FALSE : isNodeType.apply(t1)); } }.apply()); } break; case ConstructedT: if (TypicalSupport.match$3338(arg$3324)) { return Analyzer.cast(Boolean.TRUE); } break; case VariantT: if (TypicalSupport.match$101(arg$3324)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$3324.getTuple().get1()); return Analyzer.cast(new Let<Boolean>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(TypicalSupport.head$99.apply(tl)); } public Boolean apply() { return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.raw_type<?> arg$3332 = Analyzer.cast(ty); if ((null == arg$3332)) { return null; } if ((null != arg$3332)) switch (arg$3332.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$3332)) { final String s = Analyzer.cast(arg$3332.getTuple().get1()); return Analyzer.cast(reachableFromNode.apply(s)); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } break; case TypeName: if (TypicalSupport.match$96(arg$3324)) { final String s = Analyzer.cast(arg$3324.getTuple().get1()); return Analyzer.cast(reachableFromNode.apply(s)); } break; case ConstructorT: if (TypicalSupport.match$95(arg$3324)) { final String s = Analyzer.cast(arg$3324.getTuple().get1()); return Analyzer.cast(reachableFromNode.apply(s)); } break; case PolyVariantT: if (TypicalSupport.match$119(arg$3324)) { return Analyzer.cast(Boolean.TRUE); } break; case FieldT: if (TypicalSupport.match$97(arg$3324)) { final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$3324.getTuple().get3()); return Analyzer.cast(isNodeType.apply(ty)); } break; case NodeTypeT: if (TypicalSupport.match$120(arg$3324)) { return Analyzer.cast(Boolean.TRUE); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply(); } }; final Function.F1<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>> ensureNodeType = new Function.F1<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply(final TypicalTypes.raw_type<?> t) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$3340 = Analyzer.cast(t); if ((null == arg$3340)) { return null; } if ((null != arg$3340)) switch (arg$3340.tag()) { case VariableT: if (TypicalSupport.match$118(arg$3340)) { final String str = Analyzer.cast(arg$3340.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; { t1 = Analyzer.cast(Analyzer.cast(Primitives.get.apply(str, hashTable))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isBottom.apply(t1) ? null : Primitives.isBottom.apply(t1) ? new Let<TypicalTypes.raw_type<?>>() { { Analyzer.cast(Primitives.put.apply(str, nodet, hashTable)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(nodet); } }.apply() : ensureNodeType.apply(t1)); } }.apply()); } break; case ConstructedT: if (TypicalSupport.match$3338(arg$3340)) { return Analyzer.cast(nodet); } break; default: break; }; if (true) { return Analyzer.cast(null == isNodeType.apply(t) || !isNodeType.apply(t) ? null : nodet); } return null; } }.apply(); } }; final Function.F1<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>> ensureNodeList = new Function.F1<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply(final TypicalTypes.raw_type<?> t) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$3344 = Analyzer.cast(t); if ((null == arg$3344)) { return null; } if ((null != arg$3344)) switch (arg$3344.tag()) { case VariableT: if (TypicalSupport.match$118(arg$3344)) { final String str = Analyzer.cast(arg$3344.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t1; { t1 = Analyzer.cast(Analyzer.cast(Primitives.get.apply(str, hashTable))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isBottom.apply(t1) ? null : Primitives.isBottom.apply(t1) ? new Let<TypicalTypes.raw_type<?>>() { { Analyzer.cast(Primitives.put.apply(str, new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(nodet), "list"), hashTable)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(nodet); } }.apply() : ensureNodeList.apply(t1)); } }.apply()); } break; case ConstructedT: if (TypicalSupport.match$3346(arg$3344)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$3344.getTuple().get1()); return Analyzer.cast(ensureNodeType.apply(TypicalSupport.head$99.apply(tl))); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply(); } }; final Function.F1<TypicalTypes.raw_type<?>, Pair<TypicalTypes.raw_type<?>>> checkNodeList = new Function.F1<TypicalTypes.raw_type<?>, Pair<TypicalTypes.raw_type<?>>>() { public TypicalTypes.raw_type<?> apply(final Pair<TypicalTypes.raw_type<?>> tl) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<TypicalTypes.raw_type<?>> arg$3348 = Analyzer.cast(tl); if ((null == arg$3348)) { return null; } if (TypicalSupport.match$123(arg$3348)) { return Analyzer.cast(nodet); } if ((null != arg$3348 && !((Pair)arg$3348).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$3350 = Analyzer.cast(arg$3348); final TypicalTypes.raw_type<?> x = Analyzer.cast(Primitives.wrapHead(list$3350)); final Pair<TypicalTypes.raw_type<?>> xs = Analyzer.cast(Primitives.wrapTail(list$3350)); return Analyzer.cast(null == isNodeType.apply(x) ? null : isNodeType.apply(x) ? checkNodeList.apply(xs) : error(Primitives.concat.apply("expected node, found ", getTypeName.apply(x)), null)); } return null; } }.apply(); } }; final Function.F1<Boolean, TypicalTypes.raw_type<?>> isNodeList = new Function.F1<Boolean, TypicalTypes.raw_type<?>>() { public Boolean apply(final TypicalTypes.raw_type<?> t) { return new Match<Boolean>() { public Boolean apply() { final TypicalTypes.raw_type<?> arg$3352 = Analyzer.cast(t); if ((null == arg$3352)) { return null; } if ((null != arg$3352)) switch (arg$3352.tag()) { case VariableT: if (TypicalSupport.match$118(arg$3352)) { final String str = Analyzer.cast(arg$3352.getTuple().get1()); return Analyzer.cast(new Let<Boolean>() { final TypicalTypes.raw_type<?> t1; { t1 = Analyzer.cast(Analyzer.cast(Primitives.get.apply(str, hashTable))); } public Boolean apply() { return Analyzer.cast(null == Primitives.isBottom.apply(t1) ? null : Primitives.isBottom.apply(t1) ? Boolean.FALSE : isNodeList.apply(t1)); } }.apply()); } break; case ConstructedT: if (TypicalSupport.match$3346(arg$3352)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$3352.getTuple().get1()); return Analyzer.cast(isNodeType.apply(TypicalSupport.head$99.apply(tl))); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply(); } }; final Function.F1<Boolean, TypicalTypes.raw_type<?>> isListType = new Function.F1<Boolean, TypicalTypes.raw_type<?>>() { public Boolean apply(final TypicalTypes.raw_type<?> t) { return new Let<Boolean>() { final TypicalTypes.raw_type<?> lt; { lt = Analyzer.cast(new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(wildt), "list")); } public Boolean apply() { return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.raw_type<?> arg$3356 = Analyzer.cast(t); if ((null == arg$3356)) { return null; } if ((null != arg$3356)) switch (arg$3356.tag()) { case VariableT: if (TypicalSupport.match$118(arg$3356)) { return Analyzer.cast(Boolean.TRUE); } break; case WildcardT: if (TypicalSupport.match$93(arg$3356)) { return Analyzer.cast(Boolean.TRUE); } break; case ConstructedT: if (TypicalSupport.match$3346(arg$3356)) { return Analyzer.cast(Boolean.TRUE); } break; case TypeName: if (TypicalSupport.match$96(arg$3356)) { return Analyzer.cast(Primitives.isNotBottom.apply(unify.apply(t, lt))); } break; case FieldT: if (TypicalSupport.match$97(arg$3356)) { final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$3356.getTuple().get3()); return Analyzer.cast(Primitives.isNotBottom.apply(unify.apply(ty, lt))); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } }.apply(); } }; final Function.F3<Boolean, Pair<Node>, BigInteger, BigInteger> checkBindings = new Function.F3<Boolean, Pair<Node>, BigInteger, BigInteger>() { public Boolean apply(final Pair<Node> nl, final BigInteger index, final BigInteger var) { return new Match<Boolean>() { public Boolean apply() { final Pair<Node> arg$3363 = Analyzer.cast(nl); if ((null == arg$3363)) { return null; } if (TypicalSupport.match$336(arg$3363)) { return Analyzer.cast(Primitives.lessEqualInt.apply(index, BigInteger.valueOf(1))); } if ((null != arg$3363 && !((Pair)arg$3363).isEmpty())) { final Pair<Node> list$3365 = Analyzer.cast(arg$3363); final Node x = GNode.cast(Primitives.wrapHead(list$3365)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$3365)); return Analyzer.cast(null == Primitives.hasAnnotation.apply(x, "has_bindings") ? null : Primitives.hasAnnotation.apply(x, "has_bindings") ? (null == Primitives.and.apply(Primitives.equal.apply(index, BigInteger.valueOf(0)), Primitives.equal.apply(var, BigInteger.valueOf(0))) ? null : Primitives.and.apply(Primitives.equal.apply(index, BigInteger.valueOf(0)), Primitives.equal.apply(var, BigInteger.valueOf(0))) ? checkBindings.apply(xs, BigInteger.valueOf(1), BigInteger.valueOf(0)) : Boolean.FALSE) : null == Primitives.hasAnnotation.apply(x, "variables") ? null : Primitives.hasAnnotation.apply(x, "variables") ? (null == Primitives.equal.apply(index, BigInteger.valueOf(0)) ? null : Primitives.equal.apply(index, BigInteger.valueOf(0)) ? checkBindings.apply(xs, BigInteger.valueOf(0), Primitives.addInt.apply(var, BigInteger.valueOf(1))) : Boolean.FALSE) : checkBindings.apply(xs, index, var)); } return null; } }.apply(); } }; final Function.F1<Pair<String>, Pair<Node>> combineVariables = new Function.F1<Pair<String>, Pair<Node>>() { public Pair<String> apply(final Pair<Node> nl) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<Node> arg$3367 = Analyzer.cast(nl); if ((null == arg$3367)) { return null; } if (TypicalSupport.match$336(arg$3367)) { return Analyzer.cast(Pair.<String>empty()); } if ((null != arg$3367 && !((Pair)arg$3367).isEmpty())) { final Pair<Node> list$3369 = Analyzer.cast(arg$3367); final Node x = GNode.cast(Primitives.wrapHead(list$3369)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$3369)); return Analyzer.cast(TypicalSupport.union$326.apply(retrieveVariables.apply(x), combineVariables.apply(xs))); } return null; } }.apply(); } }; final Function.F2<Boolean, Pair<String>, Pair<Node>> haveSameVariables = new Function.F2<Boolean, Pair<String>, Pair<Node>>() { public Boolean apply(final Pair<String> strList, final Pair<Node> nl) { return new Match<Boolean>() { public Boolean apply() { final Pair<Node> arg$3371 = Analyzer.cast(nl); if ((null == arg$3371)) { return null; } if (TypicalSupport.match$336(arg$3371)) { return Analyzer.cast(Boolean.TRUE); } if ((null != arg$3371 && !((Pair)arg$3371).isEmpty())) { final Pair<Node> list$3373 = Analyzer.cast(arg$3371); final Node x = GNode.cast(Primitives.wrapHead(list$3373)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$3373)); return Analyzer.cast(new Let<Boolean>() { final Pair<String> xList; { xList = Analyzer.cast(retrieveVariables.apply(x)); } public Boolean apply() { return Analyzer.cast(null == Primitives.and.apply(listContains.apply(strList, xList), listContains.apply(xList, strList)) ? null : Primitives.and.apply(listContains.apply(strList, xList), listContains.apply(xList, strList)) ? haveSameVariables.apply(strList, xs) : Boolean.FALSE); } }.apply()); } return null; } }.apply(); } }; final Function.F1<Pair<String>, Node> retrieveVariables = new Function.F1<Pair<String>, Node>() { public Pair<String> apply(final Node n) { return (null == Primitives.hasAnnotation.apply(n, "variables") ? null : Primitives.hasAnnotation.apply(n, "variables") ? new Let<Pair<String>>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(Primitives.getAnnotation.apply(n, "variables")); } public Pair<String> apply() { return Analyzer.cast(new Match<Pair<String>>() { public Pair<String> apply() { final TypicalTypes.raw_type<?> arg$3375 = Analyzer.cast(ty); if ((null == arg$3375)) { return null; } if ((null != arg$3375)) switch (arg$3375.tag()) { case StringList: if (TypicalSupport.match$3376(arg$3375)) { final Pair<String> res = Analyzer.cast(arg$3375.getTuple().get1()); return Analyzer.cast(res); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply() : Pair.<String>empty()); } }; final Function.F2<Boolean, Pair<String>, Pair<String>> listContains = new Function.F2<Boolean, Pair<String>, Pair<String>>() { public Boolean apply(final Pair<String> l1, final Pair<String> l2) { return new Match<Boolean>() { public Boolean apply() { final Pair<String> arg$3378 = Analyzer.cast(l2); if ((null == arg$3378)) { return null; } if (TypicalSupport.match$3254(arg$3378)) { return Analyzer.cast(Boolean.TRUE); } if ((null != arg$3378 && !((Pair)arg$3378).isEmpty())) { final Pair<String> list$3380 = Analyzer.cast(arg$3378); final String x = Analyzer.cast(Primitives.wrapHead(list$3380)); final Pair<String> xs = Analyzer.cast(Primitives.wrapTail(list$3380)); return Analyzer.cast(Primitives.and.apply(Primitives.contains.apply(x, l1), listContains.apply(l1, xs))); } return null; } }.apply(); } }; final Function.F1<String, Node> getString = new Function.F1<String, Node>() { public String apply(final Node n) { return new Match<String>() { public String apply() { final Node arg$3382 = GNode.cast(n); if ((null == arg$3382)) { return null; } if (TypicalSupport.match$61(arg$3382)) { final String str = (arg$3382.size() > 0 ? arg$3382.getString(0) : null); matching_nodes.add(arg$3382); if ((null != arg$3382 && processScopeNodes.contains(arg$3382.getName()))) { processScope(arg$3382, getScope); } checkEnterScope(arg$3382); final Object retValue$3386 = Analyzer.cast(str); checkExitScope(arg$3382); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3386); } if (TypicalSupport.match$1(arg$3382)) { final String str = (arg$3382.size() > 0 ? arg$3382.getString(0) : null); matching_nodes.add(arg$3382); if ((null != arg$3382 && processScopeNodes.contains(arg$3382.getName()))) { processScope(arg$3382, getScope); } checkEnterScope(arg$3382); final Object retValue$3390 = Analyzer.cast(str); checkExitScope(arg$3382); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3390); } if (TypicalSupport.match$2869(arg$3382)) { final String str = (arg$3382.size() > 0 ? arg$3382.getString(0) : null); matching_nodes.add(arg$3382); if ((null != arg$3382 && processScopeNodes.contains(arg$3382.getName()))) { processScope(arg$3382, getScope); } checkEnterScope(arg$3382); final Object retValue$3394 = Analyzer.cast(str); checkExitScope(arg$3382); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3394); } if (TypicalSupport.match$65(arg$3382)) { final String str = (arg$3382.size() > 0 ? arg$3382.getString(0) : null); matching_nodes.add(arg$3382); if ((null != arg$3382 && processScopeNodes.contains(arg$3382.getName()))) { processScope(arg$3382, getScope); } checkEnterScope(arg$3382); final Object retValue$3398 = Analyzer.cast(str); checkExitScope(arg$3382); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3398); } if (TypicalSupport.match$69(arg$3382)) { final String str = (arg$3382.size() > 0 ? arg$3382.getString(0) : null); matching_nodes.add(arg$3382); if ((null != arg$3382 && processScopeNodes.contains(arg$3382.getName()))) { processScope(arg$3382, getScope); } checkEnterScope(arg$3382); final Object retValue$3402 = Analyzer.cast(str); checkExitScope(arg$3382); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3402); } if (true) { matching_nodes.add(arg$3382); if ((null != arg$3382 && processScopeNodes.contains(arg$3382.getName()))) { processScope(arg$3382, getScope); } checkEnterScope(arg$3382); final Object retValue$3405 = Analyzer.cast(null); checkExitScope(arg$3382); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3405); } return null; } }.apply(); } }; final Function.F1<Pair<String>, Node> getStringList = new Function.F1<Pair<String>, Node>() { public Pair<String> apply(final Node n) { return new Match<Pair<String>>() { public Pair<String> apply() { final Node arg$3407 = GNode.cast(n); if ((null == arg$3407)) { return null; } if (TypicalSupport.match$2851(arg$3407)) { final Pair<String> strL = Analyzer.cast(Primitives.getChildren(arg$3407, 0, arg$3407.size())); matching_nodes.add(arg$3407); if ((null != arg$3407 && processScopeNodes.contains(arg$3407.getName()))) { processScope(arg$3407, getScope); } checkEnterScope(arg$3407); final Object retValue$3411 = Analyzer.cast(strL); checkExitScope(arg$3407); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3411); } if (true) { matching_nodes.add(arg$3407); if ((null != arg$3407 && processScopeNodes.contains(arg$3407.getName()))) { processScope(arg$3407, getScope); } checkEnterScope(arg$3407); final Object retValue$3414 = Analyzer.cast(null); checkExitScope(arg$3407); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3414); } return null; } }.apply(); } }; final Function.F1<String, TypicalTypes.raw_type<?>> getParent = new Function.F1<String, TypicalTypes.raw_type<?>>() { public String apply(final TypicalTypes.raw_type<?> t) { return new Match<String>() { public String apply() { final TypicalTypes.raw_type<?> arg$3416 = Analyzer.cast(t); if ((null == arg$3416)) { return null; } if ((null != arg$3416)) switch (arg$3416.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$3416)) { final String s = Analyzer.cast(arg$3416.getTuple().get1()); return Analyzer.cast(s); } break; case FieldT: if (TypicalSupport.match$97(arg$3416)) { final String s = Analyzer.cast(arg$3416.getTuple().get1()); return Analyzer.cast(s); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply(); } }; final Function.F1<Pair<Node>, Node> getNodeList = new Function.F1<Pair<Node>, Node>() { public Pair<Node> apply(final Node n) { return new Match<Pair<Node>>() { public Pair<Node> apply() { final Node arg$3420 = GNode.cast(n); if ((null == arg$3420)) { return null; } if (TypicalSupport.match$3421(arg$3420)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3420, 0, arg$3420.size())); matching_nodes.add(arg$3420); if ((null != arg$3420 && processScopeNodes.contains(arg$3420.getName()))) { processScope(arg$3420, getScope); } checkEnterScope(arg$3420); final Object retValue$3424 = Analyzer.cast(nl); checkExitScope(arg$3420); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3424); } if (TypicalSupport.match$3425(arg$3420)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3420, 0, arg$3420.size())); matching_nodes.add(arg$3420); if ((null != arg$3420 && processScopeNodes.contains(arg$3420.getName()))) { processScope(arg$3420, getScope); } checkEnterScope(arg$3420); final Object retValue$3428 = Analyzer.cast(nl); checkExitScope(arg$3420); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3428); } if (TypicalSupport.match$3429(arg$3420)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3420, 0, arg$3420.size())); matching_nodes.add(arg$3420); if ((null != arg$3420 && processScopeNodes.contains(arg$3420.getName()))) { processScope(arg$3420, getScope); } checkEnterScope(arg$3420); final Object retValue$3432 = Analyzer.cast(nl); checkExitScope(arg$3420); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3432); } if (TypicalSupport.match$258(arg$3420)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3420, 0, arg$3420.size())); matching_nodes.add(arg$3420); if ((null != arg$3420 && processScopeNodes.contains(arg$3420.getName()))) { processScope(arg$3420, getScope); } checkEnterScope(arg$3420); final Object retValue$3436 = Analyzer.cast(nl); checkExitScope(arg$3420); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3436); } if (TypicalSupport.match$3437(arg$3420)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3420, 0, arg$3420.size())); matching_nodes.add(arg$3420); if ((null != arg$3420 && processScopeNodes.contains(arg$3420.getName()))) { processScope(arg$3420, getScope); } checkEnterScope(arg$3420); final Object retValue$3440 = Analyzer.cast(nl); checkExitScope(arg$3420); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3440); } if (TypicalSupport.match$3441(arg$3420)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3420.getGeneric(0), 0, arg$3420.getGeneric(0).size())); matching_nodes.add(arg$3420); if ((null != arg$3420 && processScopeNodes.contains(arg$3420.getName()))) { processScope(arg$3420, getScope); } checkEnterScope(arg$3420); List<Node> listName$3443 = new ArrayList<Node>(); Node nodeName$3442 = arg$3420; nodeName$3442 = nodeName$3442.getGeneric(0); if ((null != nodeName$3442 && processScopeNodes.contains(nodeName$3442.getName()))) { processScope(nodeName$3442, getScope); } checkEnterScope(nodeName$3442); listName$3443.add(0, nodeName$3442); final Object retValue$3444 = Analyzer.cast(nl); for (Node no : listName$3443) { checkExitScope(no); } checkExitScope(arg$3420); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3444); } if (true) { matching_nodes.add(arg$3420); if ((null != arg$3420 && processScopeNodes.contains(arg$3420.getName()))) { processScope(arg$3420, getScope); } checkEnterScope(arg$3420); final Object retValue$3447 = Analyzer.cast(null); checkExitScope(arg$3420); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3447); } return null; } }.apply(); } }; final Function.F2<Pair<String>, Pair<Node>, Pair<String>> getTypeVariables = new Function.F2<Pair<String>, Pair<Node>, Pair<String>>() { public Pair<String> apply(final Pair<Node> nl, final Pair<String> resList) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<Node> arg$3449 = Analyzer.cast(nl); if ((null == arg$3449)) { return null; } if (TypicalSupport.match$336(arg$3449)) { return Analyzer.cast(resList); } if ((null != arg$3449 && !((Pair)arg$3449).isEmpty())) { final Pair<Node> list$3451 = Analyzer.cast(arg$3449); final Node x = GNode.cast(Primitives.wrapHead(list$3451)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$3451)); return Analyzer.cast(new Let<Pair<String>>() { final String s; { s = Analyzer.cast(getString.apply(x)); } public Pair<String> apply() { return Analyzer.cast(null == Primitives.not.apply(Primitives.contains.apply(s, resList)) ? null : Primitives.not.apply(Primitives.contains.apply(s, resList)) ? getTypeVariables.apply(xs, TypicalSupport.append$310.apply(resList, new Pair<String>(s))) : error(Primitives.concat.apply(Primitives.concat.apply("type variable ", s), " has been previously defined"), null)); } }.apply()); } return null; } }.apply(); } }; final Function.F2<Pair<String>, Pair<Node>, Pair<String>> get_params = new Function.F2<Pair<String>, Pair<Node>, Pair<String>>() { public Pair<String> apply(final Pair<Node> nl, final Pair<String> res) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<Node> arg$3453 = Analyzer.cast(nl); if ((null == arg$3453)) { return null; } if (TypicalSupport.match$336(arg$3453)) { return Analyzer.cast(res); } if ((null != arg$3453 && !((Pair)arg$3453).isEmpty())) { final Pair<Node> list$3455 = Analyzer.cast(arg$3453); final Node x = GNode.cast(Primitives.wrapHead(list$3455)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$3455)); return Analyzer.cast(new Match<Pair<String>>() { public Pair<String> apply() { final Node arg$3465 = GNode.cast(x); if ((null == arg$3465)) { return null; } if (TypicalSupport.match$69(arg$3465)) { final String s = (arg$3465.size() > 0 ? arg$3465.getString(0) : null); matching_nodes.add(arg$3465); if ((null != arg$3465 && processScopeNodes.contains(arg$3465.getName()))) { processScope(arg$3465, getScope); } checkEnterScope(arg$3465); final Object retValue$3469 = Analyzer.cast(get_params.apply(xs, TypicalSupport.append$310.apply(res, new Pair<String>(s)))); checkExitScope(arg$3465); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3469); } if (true) { matching_nodes.add(arg$3465); if ((null != arg$3465 && processScopeNodes.contains(arg$3465.getName()))) { processScope(arg$3465, getScope); } checkEnterScope(arg$3465); final Object retValue$3472 = Analyzer.cast(null); checkExitScope(arg$3465); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3472); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F2<Boolean, String, Pair<Node>> isUsedInList = new Function.F2<Boolean, String, Pair<Node>>() { public Boolean apply(final String s, final Pair<Node> nl) { return new Match<Boolean>() { public Boolean apply() { final Pair<Node> arg$3475 = Analyzer.cast(nl); if ((null == arg$3475)) { return null; } if (TypicalSupport.match$336(arg$3475)) { return Analyzer.cast(Boolean.FALSE); } if ((null != arg$3475 && !((Pair)arg$3475).isEmpty())) { final Pair<Node> list$3477 = Analyzer.cast(arg$3475); final Node x = GNode.cast(Primitives.wrapHead(list$3477)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$3477)); return Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, x), isUsedInList.apply(s, xs))); } return null; } }.apply(); } }; final Function.F2<Boolean, String, Node> isUsedVariable = new Function.F2<Boolean, String, Node>() { public Boolean apply(final String s, final Node no) { return (null == Primitives.isBottom.apply(no) ? null : Primitives.isBottom.apply(no) ? Boolean.FALSE : new Match<Boolean>() { public Boolean apply() { final Node arg$3479 = GNode.cast(no); if ((null == arg$3479)) { return null; } if (TypicalSupport.match$492(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3483 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3483); } if (TypicalSupport.match$692(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3487 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3487); } if (TypicalSupport.match$3429(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3491 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3491); } if (TypicalSupport.match$2413(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3495 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3495); } if (TypicalSupport.match$9(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 1, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3499 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3499); } if (TypicalSupport.match$2522(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3503 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3503); } if (TypicalSupport.match$2822(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3507 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3507); } if (TypicalSupport.match$282(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3511 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3511); } if (TypicalSupport.match$290(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3515 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3515); } if (TypicalSupport.match$296(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3519 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3519); } if (TypicalSupport.match$3520(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3523 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3523); } if (TypicalSupport.match$334(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3527 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3527); } if (TypicalSupport.match$352(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3531 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3531); } if (TypicalSupport.match$3437(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3535 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3535); } if (TypicalSupport.match$5(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 1, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3539 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3539); } if (TypicalSupport.match$193(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3543 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3543); } if (TypicalSupport.match$184(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3547 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3547); } if (TypicalSupport.match$2881(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3551 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3551); } if (TypicalSupport.match$3425(arg$3479)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3479, 0, arg$3479.size())); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3555 = Analyzer.cast(isUsedInList.apply(s, nl)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3555); } if (TypicalSupport.match$2286(arg$3479)) { final Node n = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3559 = Analyzer.cast(isUsedVariable.apply(s, n)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3559); } if (TypicalSupport.match$49(arg$3479)) { final Node n = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3563 = Analyzer.cast(isUsedVariable.apply(s, n)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3563); } if (TypicalSupport.match$2392(arg$3479)) { final Node n = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3567 = Analyzer.cast(isUsedVariable.apply(s, n)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3567); } if (TypicalSupport.match$2403(arg$3479)) { final Node n = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3571 = Analyzer.cast(isUsedVariable.apply(s, n)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3571); } if (TypicalSupport.match$45(arg$3479)) { final Node n = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3575 = Analyzer.cast(isUsedVariable.apply(s, n)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3575); } if (TypicalSupport.match$3280(arg$3479)) { final Node n = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3579 = Analyzer.cast(isUsedVariable.apply(s, n)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3579); } if (TypicalSupport.match$13(arg$3479)) { final Node n = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3583 = Analyzer.cast(isUsedVariable.apply(s, n)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3583); } if (TypicalSupport.match$41(arg$3479)) { final Node n = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3587 = Analyzer.cast(isUsedVariable.apply(s, n)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3587); } if (TypicalSupport.match$2897(arg$3479)) { final Node n = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3591 = Analyzer.cast(isUsedVariable.apply(s, n)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3591); } if (TypicalSupport.match$25(arg$3479)) { final Node n = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3595 = Analyzer.cast(isUsedVariable.apply(s, n)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3595); } if (TypicalSupport.match$2923(arg$3479)) { final Node n = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3599 = Analyzer.cast(isUsedVariable.apply(s, n)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3599); } if (TypicalSupport.match$2873(arg$3479)) { final Node n = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3603 = Analyzer.cast(isUsedVariable.apply(s, n)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3603); } if (TypicalSupport.match$2550(arg$3479)) { final Node n = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3607 = Analyzer.cast(isUsedVariable.apply(s, n)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3607); } if (TypicalSupport.match$57(arg$3479)) { final Node n = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3611 = Analyzer.cast(isUsedVariable.apply(s, n)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3611); } if (TypicalSupport.match$85(arg$3479)) { final Node n = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3615 = Analyzer.cast(new Let<Boolean>() { final Pair<String> strList; { strList = Analyzer.cast(retrieveVariables.apply(no)); } public Boolean apply() { return Analyzer.cast(null == Primitives.contains.apply(s, strList) ? null : Primitives.contains.apply(s, strList) ? Boolean.FALSE : isUsedVariable.apply(s, n)); } }.apply()); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3615); } if (TypicalSupport.match$83(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3619 = Analyzer.cast(new Let<Boolean>() { final Pair<String> strList; { strList = Analyzer.cast(retrieveVariables.apply(no)); } public Boolean apply() { return Analyzer.cast(null == Primitives.contains.apply(s, strList) ? null : Primitives.contains.apply(s, strList) ? Boolean.FALSE : Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); } }.apply()); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3619); } if (TypicalSupport.match$84(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3641 = Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final Node arg$3630 = GNode.cast(n1); if ((null == arg$3630)) { return null; } if (TypicalSupport.match$258(arg$3630)) { final Pair<Node> pl = Analyzer.cast(Primitives.getChildren(arg$3630, 0, arg$3630.size())); matching_nodes.add(arg$3630); if ((null != arg$3630 && processScopeNodes.contains(arg$3630.getName()))) { processScope(arg$3630, getScope); } checkEnterScope(arg$3630); final Object retValue$3634 = Analyzer.cast(new Let<Boolean>() { final Pair<String> strList; { strList = Analyzer.cast(get_params.apply(pl, Pair.<String>empty())); } public Boolean apply() { return Analyzer.cast(null == Primitives.contains.apply(s, strList) ? null : Primitives.contains.apply(s, strList) ? Boolean.FALSE : isUsedVariable.apply(s, n2)); } }.apply()); checkExitScope(arg$3630); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3634); } if (true) { matching_nodes.add(arg$3630); if ((null != arg$3630 && processScopeNodes.contains(arg$3630.getName()))) { processScope(arg$3630, getScope); } checkEnterScope(arg$3630); final Object retValue$3637 = Analyzer.cast(Boolean.FALSE); checkExitScope(arg$3630); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3637); } return null; } }.apply()); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3641); } if (TypicalSupport.match$496(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3645 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3645); } if (TypicalSupport.match$504(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3649 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3649); } if (TypicalSupport.match$512(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 2 ? arg$3479.getGeneric(2) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3653 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3653); } if (TypicalSupport.match$518(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 2 ? arg$3479.getGeneric(2) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3657 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3657); } if (TypicalSupport.match$566(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 2 ? arg$3479.getGeneric(2) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3661 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3661); } if (TypicalSupport.match$622(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 2 ? arg$3479.getGeneric(2) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3665 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3665); } if (TypicalSupport.match$686(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3669 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3669); } if (TypicalSupport.match$2280(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3673 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3673); } if (TypicalSupport.match$268(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3677 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3677); } if (TypicalSupport.match$678(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 2 ? arg$3479.getGeneric(2) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3681 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3681); } if (TypicalSupport.match$2808(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3685 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3685); } if (TypicalSupport.match$300(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3689 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3689); } if (TypicalSupport.match$319(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3693 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3693); } if (TypicalSupport.match$325(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3697 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3697); } if (TypicalSupport.match$376(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3701 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3701); } if (TypicalSupport.match$2428(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3705 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3705); } if (TypicalSupport.match$2440(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3709 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3709); } if (TypicalSupport.match$2901(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3713 = Analyzer.cast(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3713); } if (TypicalSupport.match$65(arg$3479)) { final String str = (arg$3479.size() > 0 ? arg$3479.getString(0) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3717 = Analyzer.cast(Primitives.equal.apply(s, str)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3717); } if (TypicalSupport.match$61(arg$3479)) { final String str = (arg$3479.size() > 0 ? arg$3479.getString(0) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3721 = Analyzer.cast(Primitives.equal.apply(s, str)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3721); } if (TypicalSupport.match$2869(arg$3479)) { final String str = (arg$3479.size() > 0 ? arg$3479.getString(0) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3725 = Analyzer.cast(Primitives.equal.apply(s, str)); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3725); } if (TypicalSupport.match$705(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); final Node n3 = (arg$3479.size() > 2 ? arg$3479.getGeneric(2) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3729 = Analyzer.cast(Primitives.or.apply(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2)), isUsedVariable.apply(s, n3))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3729); } if (TypicalSupport.match$2841(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); final Node n3 = (arg$3479.size() > 2 ? arg$3479.getGeneric(2) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3733 = Analyzer.cast(Primitives.or.apply(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2)), isUsedVariable.apply(s, n3))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3733); } if (TypicalSupport.match$2814(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); final Node n3 = (arg$3479.size() > 2 ? arg$3479.getGeneric(2) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3737 = Analyzer.cast(Primitives.or.apply(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2)), isUsedVariable.apply(s, n3))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3737); } if (TypicalSupport.match$2418(arg$3479)) { final Node n1 = (arg$3479.size() > 0 ? arg$3479.getGeneric(0) : null); final Node n2 = (arg$3479.size() > 1 ? arg$3479.getGeneric(1) : null); final Node n3 = (arg$3479.size() > 2 ? arg$3479.getGeneric(2) : null); final Node n4 = (arg$3479.size() > 3 ? arg$3479.getGeneric(3) : null); matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3741 = Analyzer.cast(Primitives.or.apply(Primitives.or.apply(Primitives.or.apply(isUsedVariable.apply(s, n1), isUsedVariable.apply(s, n2)), isUsedVariable.apply(s, n3)), isUsedVariable.apply(s, n4))); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3741); } if (true) { matching_nodes.add(arg$3479); if ((null != arg$3479 && processScopeNodes.contains(arg$3479.getName()))) { processScope(arg$3479, getScope); } checkEnterScope(arg$3479); final Object retValue$3744 = Analyzer.cast(Boolean.FALSE); checkExitScope(arg$3479); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3744); } return null; } }.apply()); } }; final Function.F2<Object, Pair<String>, Node> checkUnusedVariables = new Function.F2<Object, Pair<String>, Node>() { public Object apply(final Pair<String> strList, final Node no) { return new Match<Object>() { public Object apply() { final Pair<String> arg$3746 = Analyzer.cast(strList); if ((null == arg$3746)) { return null; } if (TypicalSupport.match$3254(arg$3746)) { return Analyzer.cast(null); } if ((null != arg$3746 && !((Pair)arg$3746).isEmpty())) { final Pair<String> list$3748 = Analyzer.cast(arg$3746); final String x = Analyzer.cast(Primitives.wrapHead(list$3748)); final Pair<String> xs = Analyzer.cast(Primitives.wrapTail(list$3748)); return Analyzer.cast(null == Primitives.not.apply(isUsedVariable.apply(x, no)) ? null : Primitives.not.apply(isUsedVariable.apply(x, no)) ? new Let<Object>() { { warning(Primitives.concat.apply(x, " is an unused variable"), null); } public Object apply() { return Analyzer.cast(checkUnusedVariables.apply(xs, no)); } }.apply() : checkUnusedVariables.apply(xs, no)); } return null; } }.apply(); } }; final Function.F1<Pair<String>, Pair<TypicalTypes.entry>> getNames = new Function.F1<Pair<String>, Pair<TypicalTypes.entry>>() { public Pair<String> apply(final Pair<TypicalTypes.entry> enList) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<TypicalTypes.entry> arg$3750 = Analyzer.cast(enList); if ((null == arg$3750)) { return null; } if (TypicalSupport.match$3276(arg$3750)) { return Analyzer.cast(Pair.<String>empty()); } if ((null != arg$3750 && !((Pair)arg$3750).isEmpty())) { final Pair<TypicalTypes.entry> list$3752 = Analyzer.cast(arg$3750); final TypicalTypes.entry x = Analyzer.cast(Primitives.wrapHead(list$3752)); final Pair<TypicalTypes.entry> xs = Analyzer.cast(Primitives.wrapTail(list$3752)); return Analyzer.cast(TypicalSupport.append$310.apply(new Pair<String>(null == x ? null : x.entryName), getNames.apply(xs))); } return null; } }.apply(); } }; final Function.F2<BigInteger, String, Pair<Node>> countInList = new Function.F2<BigInteger, String, Pair<Node>>() { public BigInteger apply(final String s, final Pair<Node> nl) { return new Match<BigInteger>() { public BigInteger apply() { final Pair<Node> arg$3754 = Analyzer.cast(nl); if ((null == arg$3754)) { return null; } if (TypicalSupport.match$336(arg$3754)) { return Analyzer.cast(BigInteger.valueOf(0)); } if ((null != arg$3754 && !((Pair)arg$3754).isEmpty())) { final Pair<Node> list$3756 = Analyzer.cast(arg$3754); final Node x = GNode.cast(Primitives.wrapHead(list$3756)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$3756)); return Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, x), countInList.apply(s, xs))); } return null; } }.apply(); } }; final Function.F2<BigInteger, String, Node> countAppearance = new Function.F2<BigInteger, String, Node>() { public BigInteger apply(final String s, final Node no) { return (null == Primitives.isBottom.apply(no) ? null : Primitives.isBottom.apply(no) ? BigInteger.valueOf(0) : new Match<BigInteger>() { public BigInteger apply() { final Node arg$3758 = GNode.cast(no); if ((null == arg$3758)) { return null; } if (TypicalSupport.match$492(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 0, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3762 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3762); } if (TypicalSupport.match$692(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 0, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3766 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3766); } if (TypicalSupport.match$3429(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 0, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3770 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3770); } if (TypicalSupport.match$2413(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 0, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3774 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3774); } if (TypicalSupport.match$9(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 1, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3778 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3778); } if (TypicalSupport.match$2522(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 0, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3782 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3782); } if (TypicalSupport.match$2822(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 0, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3786 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3786); } if (TypicalSupport.match$282(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 0, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3790 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3790); } if (TypicalSupport.match$290(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 0, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3794 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3794); } if (TypicalSupport.match$296(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 0, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3798 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3798); } if (TypicalSupport.match$3520(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 0, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3802 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3802); } if (TypicalSupport.match$334(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 0, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3806 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3806); } if (TypicalSupport.match$352(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 0, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3810 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3810); } if (TypicalSupport.match$3437(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 0, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3814 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3814); } if (TypicalSupport.match$5(arg$3758)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$3758, 1, arg$3758.size())); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3818 = Analyzer.cast(countInList.apply(s, nl)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3818); } if (TypicalSupport.match$2286(arg$3758)) { final Node n = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3822 = Analyzer.cast(countAppearance.apply(s, n)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3822); } if (TypicalSupport.match$49(arg$3758)) { final Node n = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3826 = Analyzer.cast(countAppearance.apply(s, n)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3826); } if (TypicalSupport.match$2392(arg$3758)) { final Node n = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3830 = Analyzer.cast(countAppearance.apply(s, n)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3830); } if (TypicalSupport.match$2403(arg$3758)) { final Node n = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3834 = Analyzer.cast(countAppearance.apply(s, n)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3834); } if (TypicalSupport.match$45(arg$3758)) { final Node n = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3838 = Analyzer.cast(countAppearance.apply(s, n)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3838); } if (TypicalSupport.match$3280(arg$3758)) { final Node n = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3842 = Analyzer.cast(countAppearance.apply(s, n)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3842); } if (TypicalSupport.match$57(arg$3758)) { final Node n = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3846 = Analyzer.cast(countAppearance.apply(s, n)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3846); } if (TypicalSupport.match$85(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3850 = Analyzer.cast(new Let<BigInteger>() { final Pair<String> strList; { strList = Analyzer.cast(retrieveVariables.apply(no)); } public BigInteger apply() { return Analyzer.cast(null == Primitives.contains.apply(s, strList) ? null : Primitives.contains.apply(s, strList) ? BigInteger.valueOf(0) : Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); } }.apply()); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3850); } if (TypicalSupport.match$83(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3854 = Analyzer.cast(new Let<BigInteger>() { final Pair<String> strList; { strList = Analyzer.cast(retrieveVariables.apply(no)); } public BigInteger apply() { return Analyzer.cast(null == Primitives.contains.apply(s, strList) ? null : Primitives.contains.apply(s, strList) ? BigInteger.valueOf(0) : Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); } }.apply()); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3854); } if (TypicalSupport.match$496(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3858 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3858); } if (TypicalSupport.match$504(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3862 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3862); } if (TypicalSupport.match$512(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 2 ? arg$3758.getGeneric(2) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3866 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3866); } if (TypicalSupport.match$518(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 2 ? arg$3758.getGeneric(2) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3870 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3870); } if (TypicalSupport.match$566(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 2 ? arg$3758.getGeneric(2) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3874 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3874); } if (TypicalSupport.match$622(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 2 ? arg$3758.getGeneric(2) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3878 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3878); } if (TypicalSupport.match$686(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3882 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3882); } if (TypicalSupport.match$2280(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3886 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3886); } if (TypicalSupport.match$268(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3890 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3890); } if (TypicalSupport.match$678(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 2 ? arg$3758.getGeneric(2) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3894 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3894); } if (TypicalSupport.match$2808(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3898 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3898); } if (TypicalSupport.match$300(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3902 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3902); } if (TypicalSupport.match$319(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3906 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3906); } if (TypicalSupport.match$325(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3910 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3910); } if (TypicalSupport.match$376(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3914 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3914); } if (TypicalSupport.match$2428(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3918 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3918); } if (TypicalSupport.match$2440(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3922 = Analyzer.cast(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3922); } if (TypicalSupport.match$65(arg$3758)) { final String str = (arg$3758.size() > 0 ? arg$3758.getString(0) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3926 = Analyzer.cast(null == Primitives.equal.apply(s, str) ? null : Primitives.equal.apply(s, str) ? BigInteger.valueOf(1) : BigInteger.valueOf(0)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3926); } if (TypicalSupport.match$61(arg$3758)) { final String str = (arg$3758.size() > 0 ? arg$3758.getString(0) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3930 = Analyzer.cast(null == Primitives.equal.apply(s, str) ? null : Primitives.equal.apply(s, str) ? BigInteger.valueOf(1) : BigInteger.valueOf(0)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3930); } if (TypicalSupport.match$705(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); final Node n3 = (arg$3758.size() > 2 ? arg$3758.getGeneric(2) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3934 = Analyzer.cast(Primitives.addInt.apply(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2)), countAppearance.apply(s, n3))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3934); } if (TypicalSupport.match$2841(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); final Node n3 = (arg$3758.size() > 2 ? arg$3758.getGeneric(2) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3938 = Analyzer.cast(Primitives.addInt.apply(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2)), countAppearance.apply(s, n3))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3938); } if (TypicalSupport.match$2814(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); final Node n3 = (arg$3758.size() > 2 ? arg$3758.getGeneric(2) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3942 = Analyzer.cast(Primitives.addInt.apply(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2)), countAppearance.apply(s, n3))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3942); } if (TypicalSupport.match$2418(arg$3758)) { final Node n1 = (arg$3758.size() > 0 ? arg$3758.getGeneric(0) : null); final Node n2 = (arg$3758.size() > 1 ? arg$3758.getGeneric(1) : null); final Node n3 = (arg$3758.size() > 2 ? arg$3758.getGeneric(2) : null); final Node n4 = (arg$3758.size() > 3 ? arg$3758.getGeneric(3) : null); matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3946 = Analyzer.cast(Primitives.addInt.apply(Primitives.addInt.apply(Primitives.addInt.apply(countAppearance.apply(s, n1), countAppearance.apply(s, n2)), countAppearance.apply(s, n3)), countAppearance.apply(s, n4))); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3946); } if (true) { matching_nodes.add(arg$3758); if ((null != arg$3758 && processScopeNodes.contains(arg$3758.getName()))) { processScope(arg$3758, getScope); } checkEnterScope(arg$3758); final Object retValue$3949 = Analyzer.cast(BigInteger.valueOf(0)); checkExitScope(arg$3758); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3949); } return null; } }.apply()); } }; final Function.F2<Pair<String>, Pair<String>, Node> removeUsedVariables = new Function.F2<Pair<String>, Pair<String>, Node>() { public Pair<String> apply(final Pair<String> strList, final Node no) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<String> arg$3951 = Analyzer.cast(strList); if ((null == arg$3951)) { return null; } if (TypicalSupport.match$3254(arg$3951)) { return Analyzer.cast(Pair.<String>empty()); } if ((null != arg$3951 && !((Pair)arg$3951).isEmpty())) { final Pair<String> list$3953 = Analyzer.cast(arg$3951); final String x = Analyzer.cast(Primitives.wrapHead(list$3953)); final Pair<String> xs = Analyzer.cast(Primitives.wrapTail(list$3953)); return Analyzer.cast(null == Primitives.greaterInt.apply(countAppearance.apply(x, no), BigInteger.valueOf(1)) ? null : Primitives.greaterInt.apply(countAppearance.apply(x, no), BigInteger.valueOf(1)) ? removeUsedVariables.apply(xs, no) : TypicalSupport.append$310.apply(new Pair<String>(x), removeUsedVariables.apply(xs, no))); } return null; } }.apply(); } }; final Function.F1<Object, Pair<Node>> checkUnusedParameters = new Function.F1<Object, Pair<Node>>() { public Object apply(final Pair<Node> nl) { return new Match<Object>() { public Object apply() { final Pair<Node> arg$3955 = Analyzer.cast(nl); if ((null == arg$3955)) { return null; } if (TypicalSupport.match$336(arg$3955)) { return Analyzer.cast(null); } if ((null != arg$3955 && !((Pair)arg$3955).isEmpty())) { final Pair<Node> list$3957 = Analyzer.cast(arg$3955); final Node x = GNode.cast(Primitives.wrapHead(list$3957)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$3957)); return Analyzer.cast(new Match<Object>() { public Object apply() { final Node arg$3968 = GNode.cast(x); if ((null == arg$3968)) { return null; } if (TypicalSupport.match$73(arg$3968)) { final Node p = (arg$3968.size() > 1 ? arg$3968.getGeneric(1) : null); final Node v = (arg$3968.size() > 2 ? arg$3968.getGeneric(2) : null); matching_nodes.add(arg$3968); if ((null != arg$3968 && processScopeNodes.contains(arg$3968.getName()))) { processScope(arg$3968, getScope); } checkEnterScope(arg$3968); final Object retValue$3972 = Analyzer.cast(new Let<Object>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(Analyzer.cast(lookup2.apply(x, getNameSpace))); } public Object apply() { return Analyzer.cast(null == Primitives.isBottom.apply(t) ? null : Primitives.isBottom.apply(t) ? checkUnusedParameters.apply(xs) : null == Primitives.isNotBottom.apply(p) || !Primitives.isNotBottom.apply(p) ? null : new Let<Object>() { final Pair<Node> nl; final Pair<String> vars; { nl = Analyzer.cast(getNodeList.apply(p)); vars = Analyzer.cast(TypicalSupport.map$3960.apply(getString, nl)); checkUnusedVariables.apply(vars, v); } public Object apply() { return Analyzer.cast(checkUnusedParameters.apply(xs)); } }.apply()); } }.apply()); checkExitScope(arg$3968); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3972); } if (true) { matching_nodes.add(arg$3968); if ((null != arg$3968 && processScopeNodes.contains(arg$3968.getName()))) { processScope(arg$3968, getScope); } checkEnterScope(arg$3968); final Object retValue$3975 = Analyzer.cast(checkUnusedParameters.apply(xs)); checkExitScope(arg$3968); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$3975); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F2<String, Node, String> getAnnotatedString = new Function.F2<String, Node, String>() { public String apply(final Node n, final String s) { return new Let<String>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(Primitives.getAnnotation.apply(n, s)); } public String apply() { return Analyzer.cast(new Match<String>() { public String apply() { final TypicalTypes.raw_type<?> arg$3978 = Analyzer.cast(t); if ((null == arg$3978)) { return null; } if ((null != arg$3978)) switch (arg$3978.tag()) { case StringName: if (TypicalSupport.match$3979(arg$3978)) { final String res = Analyzer.cast(arg$3978.getTuple().get1()); return Analyzer.cast(res); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply(); } }; final Function.F2<Pair<String>, Node, String> getAnnotatedStringList = new Function.F2<Pair<String>, Node, String>() { public Pair<String> apply(final Node n, final String s) { return new Let<Pair<String>>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(Primitives.getAnnotation.apply(n, s)); } public Pair<String> apply() { return Analyzer.cast(new Match<Pair<String>>() { public Pair<String> apply() { final TypicalTypes.raw_type<?> arg$3981 = Analyzer.cast(t); if ((null == arg$3981)) { return null; } if ((null != arg$3981)) switch (arg$3981.tag()) { case StringList: if (TypicalSupport.match$3376(arg$3981)) { final Pair<String> res = Analyzer.cast(arg$3981.getTuple().get1()); return Analyzer.cast(res); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply(); } }; final Function.F1<Boolean, String> hasTypeVariables = new Function.F1<Boolean, String>() { public Boolean apply(final String s) { return (null == isDefined.apply(GNode.create("NameSpaceStructure", s, null, null), getNameSpace) ? null : isDefined.apply(GNode.create("NameSpaceStructure", s, null, null), getNameSpace) ? new Let<Boolean>() { final Node nod; { nod = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("NameSpaceStructure", s, null, null), getNameSpace))); } public Boolean apply() { return Analyzer.cast(Primitives.hasAnnotation.apply(nod, "type_variables")); } }.apply() : Boolean.FALSE); } }; protected class removeLast { public <T0> Pair<T0> apply(final Pair<T0> nl) { return new Match<Pair<T0>>() { public Pair<T0> apply() { final Pair<T0> arg$3984 = nl; if ((null == arg$3984)) { return null; } if (TypicalSupport.match$3985(arg$3984)) { return Pair.<T0>empty(); } if (TypicalSupport.match$3986(arg$3984)) { return Pair.<T0>empty(); } if ((null != arg$3984 && !((Pair)arg$3984).isEmpty())) { final Pair<T0> list$3987 = arg$3984; final T0 x = Primitives.wrapHead(list$3987); final Pair<T0> xs = Primitives.wrapTail(list$3987); return new Primitives.Append<T0>().apply(new Pair<T0>(x), removeLast.apply(xs)); } return null; } }.apply(); } } final removeLast removeLast = new removeLast(); final Function.F2<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>, Pair<Node>> processFunctionApplication = new Function.F2<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>, Pair<Node>>() { public TypicalTypes.raw_type<?> apply(final TypicalTypes.raw_type<?> t, final Pair<Node> nl) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$3989 = Analyzer.cast(t); if ((null == arg$3989)) { return null; } if ((null != arg$3989)) switch (arg$3989.tag()) { case VariableT: if (TypicalSupport.match$118(arg$3989)) { final String str = Analyzer.cast(arg$3989.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(Analyzer.cast(Primitives.get.apply(str, hashTable))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(ty) ? null : Primitives.isNotBottom.apply(ty) ? processFunctionApplication.apply(ty, nl) : new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tnl; { tnl = Analyzer.cast(TypicalSupport.map$130.apply(analyze, nl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tnl)) || !Primitives.not.apply(TypicalSupport.exists$185.apply(Primitives.isBottom, tnl)) ? null : new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ret; { ret = Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE)); Analyzer.cast(Primitives.put.apply(str, new TypicalTypes.FunctionT(tnl, ret), hashTable)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(ret); } }.apply()); } }.apply()); } }.apply()); } break; case FunctionT: if (TypicalSupport.match$98(arg$3989)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$3989.getTuple().get1()); final TypicalTypes.raw_type<?> ret = Analyzer.cast(arg$3989.getTuple().get2()); return Analyzer.cast(null == Primitives.greaterInt.apply(Primitives.length.apply(nl), Primitives.length.apply(tl)) ? null : Primitives.greaterInt.apply(Primitives.length.apply(nl), Primitives.length.apply(tl)) ? error("too many arguments in function application", null) : processArguments.apply(nl, tl, ret)); } break; default: break; }; if (true) { return Analyzer.cast(error(Primitives.concat.apply("expected function, found ", getTypeName.apply(t)), null)); } return null; } }.apply(); } }; final Function.F1<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>> copy = new Function.F1<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply(final TypicalTypes.raw_type<?> t) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$3993 = Analyzer.cast(t); if ((null == arg$3993)) { return null; } if ((null != arg$3993)) switch (arg$3993.tag()) { case FunctionT: if (TypicalSupport.match$98(arg$3993)) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<String> vars; { vars = Analyzer.cast(collectTypeVariables.apply(t)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(replaceTypeVariables.apply(vars, t)); } }.apply()); } break; case VariantT: if (TypicalSupport.match$101(arg$3993)) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<String> vars; { vars = Analyzer.cast(collectTypeVariables.apply(t)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(replaceTypeVariables.apply(vars, t)); } }.apply()); } break; case TypeName: if (TypicalSupport.match$96(arg$3993)) { final String s = Analyzer.cast(arg$3993.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", s), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(copy.apply(t)); } }.apply()); } break; case ConstructorT: if (TypicalSupport.match$95(arg$3993)) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<String> vars; { vars = Analyzer.cast(collectTypeVariables.apply(t)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(replaceTypeVariables.apply(vars, t)); } }.apply()); } break; case FieldT: if (TypicalSupport.match$97(arg$3993)) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<String> vars; { vars = Analyzer.cast(collectTypeVariables.apply(t)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(replaceTypeVariables.apply(vars, t)); } }.apply()); } break; case RecordT: if (TypicalSupport.match$108(arg$3993)) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<String> vars; { vars = Analyzer.cast(collectTypeVariables.apply(t)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(replaceTypeVariables.apply(vars, t)); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(t); } return null; } }.apply(); } }; final Function.F2<TypicalTypes.raw_type<?>, Pair<String>, TypicalTypes.raw_type<?>> replaceTypeVariables = new Function.F2<TypicalTypes.raw_type<?>, Pair<String>, TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply(final Pair<String> vars, final TypicalTypes.raw_type<?> t) { return (null == Primitives.isBottom.apply(vars) ? null : Primitives.isBottom.apply(vars) ? t : new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<String> arg$4001 = Analyzer.cast(vars); if ((null == arg$4001)) { return null; } if (TypicalSupport.match$3254(arg$4001)) { return Analyzer.cast(t); } if ((null != arg$4001 && !((Pair)arg$4001).isEmpty())) { final Pair<String> list$4003 = Analyzer.cast(arg$4001); final String x = Analyzer.cast(Primitives.wrapHead(list$4003)); final Pair<String> xs = Analyzer.cast(Primitives.wrapTail(list$4003)); return Analyzer.cast(replaceTypeVariables.apply(xs, replace.apply(t, x, freshName.apply("type")))); } return null; } }.apply()); } }; final Function.F1<Pair<String>, TypicalTypes.raw_type<?>> collectTypeVariables = new Function.F1<Pair<String>, TypicalTypes.raw_type<?>>() { public Pair<String> apply(final TypicalTypes.raw_type<?> t) { return new Match<Pair<String>>() { public Pair<String> apply() { final TypicalTypes.raw_type<?> arg$4005 = Analyzer.cast(t); if ((null == arg$4005)) { return null; } if ((null != arg$4005)) switch (arg$4005.tag()) { case PairOfType: if (TypicalSupport.match$117(arg$4005)) { final TypicalTypes.raw_type<?> t1 = Analyzer.cast(arg$4005.getTuple().get1()); final TypicalTypes.raw_type<?> t2 = Analyzer.cast(arg$4005.getTuple().get2()); return Analyzer.cast(new Let<Pair<String>>() { final Pair<String> vars1; final Pair<String> vars2; { vars1 = Analyzer.cast(collectTypeVariables.apply(t1)); vars2 = Analyzer.cast(collectTypeVariables.apply(t2)); } public Pair<String> apply() { return Analyzer.cast(TypicalSupport.union$326.apply(vars1, vars2)); } }.apply()); } break; case VariableT: if (TypicalSupport.match$4006(arg$4005)) { final String str = Analyzer.cast(arg$4005.getTuple().get1()); return Analyzer.cast(new Pair<String>(str)); } break; case FunctionT: if (TypicalSupport.match$98(arg$4005)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$4005.getTuple().get1()); final TypicalTypes.raw_type<?> ret = Analyzer.cast(arg$4005.getTuple().get2()); return Analyzer.cast(new Let<Pair<String>>() { final Pair<String> vars1; final Pair<String> vars2; { vars1 = Analyzer.cast(collectTypeVariables.apply(ret)); vars2 = Analyzer.cast(makeUnion.apply(tl)); } public Pair<String> apply() { return Analyzer.cast(TypicalSupport.union$326.apply(vars1, vars2)); } }.apply()); } break; case ConstructedT: if (TypicalSupport.match$116(arg$4005)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$4005.getTuple().get1()); return Analyzer.cast(makeUnion.apply(tl)); } break; case VariantT: if (TypicalSupport.match$101(arg$4005)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$4005.getTuple().get1()); return Analyzer.cast(makeUnion.apply(tl)); } break; case ConstructorT: if (TypicalSupport.match$95(arg$4005)) { final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$4005.getTuple().get3()); return Analyzer.cast(collectTypeVariables.apply(ty)); } break; case FieldT: if (TypicalSupport.match$97(arg$4005)) { final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$4005.getTuple().get3()); return Analyzer.cast(collectTypeVariables.apply(ty)); } break; case TupleT: if (TypicalSupport.match$115(arg$4005)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$4005.getTuple().get1()); return Analyzer.cast(makeUnion.apply(tl)); } break; case RecordT: if (TypicalSupport.match$108(arg$4005)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$4005.getTuple().get1()); return Analyzer.cast(makeUnion.apply(tl)); } break; default: break; }; if (true) { return Analyzer.cast(Pair.<String>empty()); } return null; } }.apply(); } }; final Function.F1<Pair<String>, Pair<TypicalTypes.raw_type<?>>> makeUnion = new Function.F1<Pair<String>, Pair<TypicalTypes.raw_type<?>>>() { public Pair<String> apply(final Pair<TypicalTypes.raw_type<?>> tl) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<TypicalTypes.raw_type<?>> arg$4016 = Analyzer.cast(tl); if ((null == arg$4016)) { return null; } if (TypicalSupport.match$123(arg$4016)) { return Analyzer.cast(Pair.<String>empty()); } if ((null != arg$4016 && !((Pair)arg$4016).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$4018 = Analyzer.cast(arg$4016); final TypicalTypes.raw_type<?> x = Analyzer.cast(Primitives.wrapHead(list$4018)); final Pair<TypicalTypes.raw_type<?>> xs = Analyzer.cast(Primitives.wrapTail(list$4018)); return Analyzer.cast(TypicalSupport.union$326.apply(collectTypeVariables.apply(x), makeUnion.apply(xs))); } return null; } }.apply(); } }; final Function.F3<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>, String, String> replace = new Function.F3<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>, String, String>() { public TypicalTypes.raw_type<?> apply(final TypicalTypes.raw_type<?> t, final String str, final String newVar) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$4020 = Analyzer.cast(t); if ((null == arg$4020)) { return null; } if ((null != arg$4020)) switch (arg$4020.tag()) { case PairOfType: if (TypicalSupport.match$117(arg$4020)) { final TypicalTypes.raw_type<?> t1 = Analyzer.cast(arg$4020.getTuple().get1()); final TypicalTypes.raw_type<?> t2 = Analyzer.cast(arg$4020.getTuple().get2()); return Analyzer.cast(new TypicalTypes.PairOfType(replace.apply(t1, str, newVar), replace.apply(t2, str, newVar))); } break; case VariableT: if (TypicalSupport.match$118(arg$4020)) { final String s = Analyzer.cast(arg$4020.getTuple().get1()); return Analyzer.cast(null == Primitives.equal.apply(s, str) ? null : Primitives.equal.apply(s, str) ? new TypicalTypes.VariableT(newVar, Boolean.FALSE) : t); } break; case FunctionT: if (TypicalSupport.match$98(arg$4020)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$4020.getTuple().get1()); final TypicalTypes.raw_type<?> ret = Analyzer.cast(arg$4020.getTuple().get2()); return Analyzer.cast(new TypicalTypes.FunctionT(replaceList.apply(tl, str, newVar), replace.apply(ret, str, newVar))); } break; case ConstructedT: if (TypicalSupport.match$116(arg$4020)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$4020.getTuple().get1()); final String s = Analyzer.cast(arg$4020.getTuple().get2()); return Analyzer.cast(new TypicalTypes.ConstructedT(replaceList.apply(tl, str, newVar), s)); } break; case VariantT: if (TypicalSupport.match$101(arg$4020)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$4020.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(TypicalSupport.head$99.apply(tl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$4029 = Analyzer.cast(ty); if ((null == arg$4029)) { return null; } if ((null != arg$4029)) switch (arg$4029.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$4029)) { final String s = Analyzer.cast(arg$4029.getTuple().get1()); return Analyzer.cast(null == hasTypeVariables.apply(s) ? null : hasTypeVariables.apply(s) ? new TypicalTypes.VariantT(replaceList.apply(tl, str, newVar)) : t); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } break; case ConstructorT: if (TypicalSupport.match$95(arg$4020)) { final String s1 = Analyzer.cast(arg$4020.getTuple().get1()); final String s2 = Analyzer.cast(arg$4020.getTuple().get2()); final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$4020.getTuple().get3()); return Analyzer.cast(new TypicalTypes.ConstructorT(s1, s2, replace.apply(ty, str, newVar))); } break; case FieldT: if (TypicalSupport.match$97(arg$4020)) { final String s1 = Analyzer.cast(arg$4020.getTuple().get1()); final String s2 = Analyzer.cast(arg$4020.getTuple().get2()); final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$4020.getTuple().get3()); return Analyzer.cast(new TypicalTypes.FieldT(s1, s2, replace.apply(ty, str, newVar))); } break; case TupleT: if (TypicalSupport.match$115(arg$4020)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$4020.getTuple().get1()); return Analyzer.cast(new TypicalTypes.TupleT(replaceList.apply(tl, str, newVar))); } break; case RecordT: if (TypicalSupport.match$108(arg$4020)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$4020.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(TypicalSupport.head$99.apply(tl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$4036 = Analyzer.cast(ty); if ((null == arg$4036)) { return null; } if ((null != arg$4036)) switch (arg$4036.tag()) { case FieldT: if (TypicalSupport.match$97(arg$4036)) { final String s = Analyzer.cast(arg$4036.getTuple().get1()); return Analyzer.cast(null == hasTypeVariables.apply(s) ? null : hasTypeVariables.apply(s) ? new TypicalTypes.RecordT(replaceList.apply(tl, str, newVar)) : t); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(t); } return null; } }.apply(); } }; final Function.F3<Pair<TypicalTypes.raw_type<?>>, Pair<TypicalTypes.raw_type<?>>, String, String> replaceList = new Function.F3<Pair<TypicalTypes.raw_type<?>>, Pair<TypicalTypes.raw_type<?>>, String, String>() { public Pair<TypicalTypes.raw_type<?>> apply(final Pair<TypicalTypes.raw_type<?>> tl, final String str, final String newStr) { return new Match<Pair<TypicalTypes.raw_type<?>>>() { public Pair<TypicalTypes.raw_type<?>> apply() { final Pair<TypicalTypes.raw_type<?>> arg$4043 = Analyzer.cast(tl); if ((null == arg$4043)) { return null; } if (TypicalSupport.match$123(arg$4043)) { return Analyzer.cast(Pair.<TypicalTypes.raw_type<?>>empty()); } if ((null != arg$4043 && !((Pair)arg$4043).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$4045 = Analyzer.cast(arg$4043); final TypicalTypes.raw_type<?> x = Analyzer.cast(Primitives.wrapHead(list$4045)); final Pair<TypicalTypes.raw_type<?>> xs = Analyzer.cast(Primitives.wrapTail(list$4045)); return Analyzer.cast(Primitives.wrapCons(replace.apply(x, str, newStr), replaceList.apply(xs, str, newStr))); } return null; } }.apply(); } }; final Function.F1<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>> resolveType = new Function.F1<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply(final TypicalTypes.raw_type<?> t) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$4047 = Analyzer.cast(t); if ((null == arg$4047)) { return null; } if ((null != arg$4047)) switch (arg$4047.tag()) { case PairOfType: if (TypicalSupport.match$117(arg$4047)) { final TypicalTypes.raw_type<?> t1 = Analyzer.cast(arg$4047.getTuple().get1()); final TypicalTypes.raw_type<?> t2 = Analyzer.cast(arg$4047.getTuple().get2()); return Analyzer.cast(new TypicalTypes.PairOfType(resolveType.apply(t1), resolveType.apply(t2))); } break; case VariableT: if (TypicalSupport.match$118(arg$4047)) { final String str = Analyzer.cast(arg$4047.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> newT; { newT = Analyzer.cast(Analyzer.cast(Primitives.get.apply(str, hashTable))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(null == Primitives.isBottom.apply(newT) ? null : Primitives.isBottom.apply(newT) ? new TypicalTypes.VariableT(str, Boolean.TRUE) : resolveType.apply(newT)); } }.apply()); } break; case FunctionT: if (TypicalSupport.match$98(arg$4047)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$4047.getTuple().get1()); final TypicalTypes.raw_type<?> ret = Analyzer.cast(arg$4047.getTuple().get2()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> left; { left = Analyzer.cast(TypicalSupport.map$4050.apply(resolveType, tl)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.FunctionT(left, resolveType.apply(ret))); } }.apply()); } break; case VariantT: if (TypicalSupport.match$101(arg$4047)) { final Pair<TypicalTypes.raw_type<?>> tyList = Analyzer.cast(arg$4047.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> con; { con = Analyzer.cast(TypicalSupport.head$99.apply(tyList)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$4057 = Analyzer.cast(con); if ((null == arg$4057)) { return null; } if ((null != arg$4057)) switch (arg$4057.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$4057)) { final String s = Analyzer.cast(arg$4057.getTuple().get1()); return Analyzer.cast(null == Primitives.not.apply(hasTypeVariables.apply(s)) ? null : Primitives.not.apply(hasTypeVariables.apply(s)) ? t : new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(TypicalSupport.map$4050.apply(resolveType, tyList)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.VariantT(tl)); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } break; case ConstructedT: if (TypicalSupport.match$116(arg$4047)) { final Pair<TypicalTypes.raw_type<?>> tyList = Analyzer.cast(arg$4047.getTuple().get1()); final String s = Analyzer.cast(arg$4047.getTuple().get2()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(TypicalSupport.map$4050.apply(resolveType, tyList)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.ConstructedT(tl, s)); } }.apply()); } break; case ConstructorT: if (TypicalSupport.match$95(arg$4047)) { final String s1 = Analyzer.cast(arg$4047.getTuple().get1()); final String s2 = Analyzer.cast(arg$4047.getTuple().get2()); final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$4047.getTuple().get3()); return Analyzer.cast(new TypicalTypes.ConstructorT(s1, s2, resolveType.apply(ty))); } break; case FieldT: if (TypicalSupport.match$97(arg$4047)) { final String s1 = Analyzer.cast(arg$4047.getTuple().get1()); final String s2 = Analyzer.cast(arg$4047.getTuple().get2()); final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$4047.getTuple().get3()); return Analyzer.cast(new TypicalTypes.FieldT(s1, s2, resolveType.apply(ty))); } break; case TupleT: if (TypicalSupport.match$115(arg$4047)) { final Pair<TypicalTypes.raw_type<?>> tyList = Analyzer.cast(arg$4047.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(TypicalSupport.map$4050.apply(resolveType, tyList)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.TupleT(tl)); } }.apply()); } break; case RecordT: if (TypicalSupport.match$108(arg$4047)) { final Pair<TypicalTypes.raw_type<?>> tyList = Analyzer.cast(arg$4047.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final Pair<TypicalTypes.raw_type<?>> tl; { tl = Analyzer.cast(TypicalSupport.map$4050.apply(resolveType, tyList)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new TypicalTypes.RecordT(tl)); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(t); } return null; } }.apply(); } }; final Function.F3<TypicalTypes.raw_type<?>, Pair<Node>, Pair<TypicalTypes.raw_type<?>>, TypicalTypes.raw_type<?>> processArguments = new Function.F3<TypicalTypes.raw_type<?>, Pair<Node>, Pair<TypicalTypes.raw_type<?>>, TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply(final Pair<Node> nl, final Pair<TypicalTypes.raw_type<?>> tl, final TypicalTypes.raw_type<?> retType) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<Node> arg$4065 = Analyzer.cast(nl); if ((null == arg$4065)) { return null; } if (TypicalSupport.match$336(arg$4065)) { return Analyzer.cast(null == Primitives.isEmpty.apply(tl) ? null : Primitives.isEmpty.apply(tl) ? retType : new TypicalTypes.FunctionT(tl, retType)); } if ((null != arg$4065 && !((Pair)arg$4065).isEmpty())) { final Pair<Node> list$4067 = Analyzer.cast(arg$4065); final Node x = GNode.cast(Primitives.wrapHead(list$4067)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$4067)); return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Pair<TypicalTypes.raw_type<?>> arg$4073 = Analyzer.cast(tl); if ((null == arg$4073)) { return null; } if ((null != arg$4073 && !((Pair)arg$4073).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$4074 = Analyzer.cast(arg$4073); final TypicalTypes.raw_type<?> y = Analyzer.cast(Primitives.wrapHead(list$4074)); final Pair<TypicalTypes.raw_type<?>> ys = Analyzer.cast(Primitives.wrapTail(list$4074)); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> tx; final Pair<String> muts; final String preStr; { tx = Analyzer.cast(analyze.apply(x)); muts = Analyzer.cast(getAnnotatedStringList.apply(x, "mutual")); preStr = Analyzer.cast(null == Primitives.isNotBottom.apply(muts) ? null : Primitives.isNotBottom.apply(muts) ? Primitives.concat.apply(Primitives.concat.apply("in mutual functions: ", joinStringList.apply(muts, "")), "; ") : ""); new Guard<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { if ((null == unify)) { return null; } if ((null == tx)) { return null; } if ((null == y)) { return null; } final TypicalTypes.raw_type<?> result$4076 = unify.apply(tx, y); if ((null == result$4076)) { return Analyzer.cast(error(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(preStr, " expected "), getTypeName.apply(y)), ", found "), getTypeName.apply(tx)), x)); } return result$4076; } }.apply(); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(processArguments.apply(xs, ys, retType)); } }.apply()); } if (true) { return Analyzer.cast(null); } return null; } }.apply()); } if (true) { return Analyzer.cast(null); } return null; } }.apply(); } }; final Function.F1<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>> resolveRecordType = new Function.F1<TypicalTypes.raw_type<?>, TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply(final TypicalTypes.raw_type<?> t) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$4079 = Analyzer.cast(t); if ((null == arg$4079)) { return null; } if ((null != arg$4079)) switch (arg$4079.tag()) { case VariableT: if (TypicalSupport.match$118(arg$4079)) { final String str = Analyzer.cast(arg$4079.getTuple().get1()); return Analyzer.cast(null == isDefined.apply(GNode.create("UserDefinedType", str), getNameSpace) ? null : isDefined.apply(GNode.create("UserDefinedType", str), getNameSpace) ? new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", str), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(resolveRecordType.apply(ty)); } }.apply() : t); } break; case TypeName: if (TypicalSupport.match$96(arg$4079)) { final String s = Analyzer.cast(arg$4079.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", s), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(resolveRecordType.apply(ty)); } }.apply()); } break; case FieldT: if (TypicalSupport.match$97(arg$4079)) { final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$4079.getTuple().get3()); return Analyzer.cast(resolveRecordType.apply(ty)); } break; default: break; }; if (true) { return Analyzer.cast(t); } return null; } }.apply(); } }; final Function.F1<Pair<Object>, Pair<Node>> processFunctionCalls = new Function.F1<Pair<Object>, Pair<Node>>() { public Pair<Object> apply(final Pair<Node> nl) { return new Let<Pair<Object>>() { final TypicalTypes.graph tl; final Pair<TypicalTypes.call> edges; final Pair<Pair<String>> circles; final Pair<Pair<String>> g; final Pair<TypicalTypes.nodeRec> res; { tl = Analyzer.cast(buildGraph.apply(nl)); edges = Analyzer.cast(removeWrongEdges.apply(null == tl ? null : tl.edges, null == tl ? null : tl.functionList)); circles = Analyzer.cast(findCircles.apply(edges)); g = Analyzer.cast(groupCircles.apply(circles, null == tl ? null : tl.functionList)); res = Analyzer.cast(getResult.apply(null == tl ? null : tl.functionList, edges, g)); } public Pair<Object> apply() { return Analyzer.cast(TypicalSupport.map$4084.apply(rememberOnNode, res)); } }.apply(); } }; final Function.F1<Object, TypicalTypes.nodeRec> rememberOnNode = new Function.F1<Object, TypicalTypes.nodeRec>() { public Object apply(final TypicalTypes.nodeRec n) { return new Let<Object>() { final Node nod; { nod = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("NameSpaceStructure", null == n ? null : n.name, null, null), getNameSpace))); Primitives.annotate.apply(nod, "mutual", new TypicalTypes.StringList(null == n ? null : n.mutualList)); Primitives.annotate.apply(nod, "depend", new TypicalTypes.StringList(null == n ? null : n.dependList)); } public Object apply() { return Analyzer.cast(null); } }.apply(); } }; final Function.F1<TypicalTypes.graph, Pair<Node>> buildGraph = new Function.F1<TypicalTypes.graph, Pair<Node>>() { public TypicalTypes.graph apply(final Pair<Node> l) { return new Match<TypicalTypes.graph>() { public TypicalTypes.graph apply() { final Pair<Node> arg$4085 = Analyzer.cast(l); if ((null == arg$4085)) { return null; } if (TypicalSupport.match$336(arg$4085)) { return Analyzer.cast(new TypicalTypes.graph(Pair.<String>empty(), Pair.<TypicalTypes.call>empty())); } if ((null != arg$4085 && !((Pair)arg$4085).isEmpty())) { final Pair<Node> list$4087 = Analyzer.cast(arg$4085); final Node x = GNode.cast(Primitives.wrapHead(list$4087)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$4087)); return Analyzer.cast(new Match<TypicalTypes.graph>() { public TypicalTypes.graph apply() { final Node arg$4098 = GNode.cast(x); if ((null == arg$4098)) { return null; } if (TypicalSupport.match$73(arg$4098)) { final String s = (arg$4098.size() > 0 ? arg$4098.getString(0) : null); final Node n = (arg$4098.size() > 2 ? arg$4098.getGeneric(2) : null); matching_nodes.add(arg$4098); if ((null != arg$4098 && processScopeNodes.contains(arg$4098.getName()))) { processScope(arg$4098, getScope); } checkEnterScope(arg$4098); final Object retValue$4102 = Analyzer.cast(new Let<TypicalTypes.graph>() { final Pair<TypicalTypes.call> cal; final TypicalTypes.graph grap; { cal = Analyzer.cast(getCall.apply(n, s, Pair.<TypicalTypes.call>empty())); grap = Analyzer.cast(buildGraph.apply(xs)); } public TypicalTypes.graph apply() { return Analyzer.cast(new TypicalTypes.graph(Primitives.wrapCons(s, null == grap ? null : grap.functionList), TypicalSupport.union$4090.apply(cal, null == grap ? null : grap.edges))); } }.apply()); checkExitScope(arg$4098); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4102); } if (true) { matching_nodes.add(arg$4098); if ((null != arg$4098 && processScopeNodes.contains(arg$4098.getName()))) { processScope(arg$4098, getScope); } checkEnterScope(arg$4098); final Object retValue$4105 = Analyzer.cast(buildGraph.apply(xs)); checkExitScope(arg$4098); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4105); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F2<Pair<TypicalTypes.call>, Pair<TypicalTypes.call>, Pair<String>> removeWrongEdges = new Function.F2<Pair<TypicalTypes.call>, Pair<TypicalTypes.call>, Pair<String>>() { public Pair<TypicalTypes.call> apply(final Pair<TypicalTypes.call> edList, final Pair<String> strList) { return new Match<Pair<TypicalTypes.call>>() { public Pair<TypicalTypes.call> apply() { final Pair<TypicalTypes.call> arg$4108 = Analyzer.cast(edList); if ((null == arg$4108)) { return null; } if (TypicalSupport.match$3187(arg$4108)) { return Analyzer.cast(Pair.<TypicalTypes.call>empty()); } if ((null != arg$4108 && !((Pair)arg$4108).isEmpty())) { final Pair<TypicalTypes.call> list$4110 = Analyzer.cast(arg$4108); final TypicalTypes.call x = Analyzer.cast(Primitives.wrapHead(list$4110)); final Pair<TypicalTypes.call> xs = Analyzer.cast(Primitives.wrapTail(list$4110)); return Analyzer.cast(null == Primitives.contains.apply(null == x ? null : x.callee, strList) ? null : Primitives.contains.apply(null == x ? null : x.callee, strList) ? Primitives.wrapCons(x, removeWrongEdges.apply(xs, strList)) : removeWrongEdges.apply(xs, strList)); } return null; } }.apply(); } }; final Function.F3<Pair<TypicalTypes.call>, Pair<Node>, String, Pair<TypicalTypes.call>> getCallList = new Function.F3<Pair<TypicalTypes.call>, Pair<Node>, String, Pair<TypicalTypes.call>>() { public Pair<TypicalTypes.call> apply(final Pair<Node> nl, final String s, final Pair<TypicalTypes.call> li) { return new Match<Pair<TypicalTypes.call>>() { public Pair<TypicalTypes.call> apply() { final Pair<Node> arg$4112 = Analyzer.cast(nl); if ((null == arg$4112)) { return null; } if (TypicalSupport.match$336(arg$4112)) { return Analyzer.cast(Pair.<TypicalTypes.call>empty()); } if ((null != arg$4112 && !((Pair)arg$4112).isEmpty())) { final Pair<Node> list$4114 = Analyzer.cast(arg$4112); final Node x = GNode.cast(Primitives.wrapHead(list$4114)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$4114)); return Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> li1; final Pair<TypicalTypes.call> li2; { li1 = Analyzer.cast(getCall.apply(x, s, li)); li2 = Analyzer.cast(getCallList.apply(xs, s, li)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li1, li2)); } }.apply()); } return null; } }.apply(); } }; final Function.F3<Pair<TypicalTypes.call>, Node, String, Pair<TypicalTypes.call>> getCall = new Function.F3<Pair<TypicalTypes.call>, Node, String, Pair<TypicalTypes.call>>() { public Pair<TypicalTypes.call> apply(final Node no, final String s, final Pair<TypicalTypes.call> li) { return (null == Primitives.isBottom.apply(no) ? null : Primitives.isBottom.apply(no) ? li : new Match<Pair<TypicalTypes.call>>() { public Pair<TypicalTypes.call> apply() { final Node arg$4116 = GNode.cast(no); if ((null == arg$4116)) { return null; } if (TypicalSupport.match$492(arg$4116)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4116, 0, arg$4116.size())); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4120 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caList; { caList = Analyzer.cast(getCallList.apply(nl, s, li)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, caList)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4120); } if (TypicalSupport.match$3437(arg$4116)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4116, 0, arg$4116.size())); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4124 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caList; { caList = Analyzer.cast(getCallList.apply(nl, s, li)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, caList)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4124); } if (TypicalSupport.match$282(arg$4116)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4116, 0, arg$4116.size())); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4128 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caList; { caList = Analyzer.cast(getCallList.apply(nl, s, li)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, caList)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4128); } if (TypicalSupport.match$2413(arg$4116)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4116, 0, arg$4116.size())); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4132 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caList; { caList = Analyzer.cast(getCallList.apply(nl, s, li)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, caList)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4132); } if (TypicalSupport.match$9(arg$4116)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4116, 1, arg$4116.size())); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4136 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caList; { caList = Analyzer.cast(getCallList.apply(nl, s, li)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, caList)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4136); } if (TypicalSupport.match$2522(arg$4116)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4116, 0, arg$4116.size())); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4140 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caList; { caList = Analyzer.cast(getCallList.apply(nl, s, li)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, caList)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4140); } if (TypicalSupport.match$2822(arg$4116)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4116, 0, arg$4116.size())); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4144 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caList; { caList = Analyzer.cast(getCallList.apply(nl, s, li)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, caList)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4144); } if (TypicalSupport.match$221(arg$4116)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4116, 0, arg$4116.size())); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4148 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caList; { caList = Analyzer.cast(getCallList.apply(nl, s, li)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, caList)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4148); } if (TypicalSupport.match$496(arg$4116)) { final Node left = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node right = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4152 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caLeft; final Pair<TypicalTypes.call> caRight; final Pair<TypicalTypes.call> res; { caLeft = Analyzer.cast(getCall.apply(left, s, li)); caRight = Analyzer.cast(getCall.apply(right, s, li)); res = Analyzer.cast(TypicalSupport.union$4090.apply(caLeft, caRight)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, res)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4152); } if (TypicalSupport.match$504(arg$4116)) { final Node left = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node right = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4156 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caLeft; final Pair<TypicalTypes.call> caRight; final Pair<TypicalTypes.call> res; { caLeft = Analyzer.cast(getCall.apply(left, s, li)); caRight = Analyzer.cast(getCall.apply(right, s, li)); res = Analyzer.cast(TypicalSupport.union$4090.apply(caLeft, caRight)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, res)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4156); } if (TypicalSupport.match$512(arg$4116)) { final Node left = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node right = (arg$4116.size() > 2 ? arg$4116.getGeneric(2) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4160 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caLeft; final Pair<TypicalTypes.call> caRight; final Pair<TypicalTypes.call> res; { caLeft = Analyzer.cast(getCall.apply(left, s, li)); caRight = Analyzer.cast(getCall.apply(right, s, li)); res = Analyzer.cast(TypicalSupport.union$4090.apply(caLeft, caRight)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, res)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4160); } if (TypicalSupport.match$518(arg$4116)) { final Node left = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node right = (arg$4116.size() > 2 ? arg$4116.getGeneric(2) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4164 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caLeft; final Pair<TypicalTypes.call> caRight; final Pair<TypicalTypes.call> res; { caLeft = Analyzer.cast(getCall.apply(left, s, li)); caRight = Analyzer.cast(getCall.apply(right, s, li)); res = Analyzer.cast(TypicalSupport.union$4090.apply(caLeft, caRight)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, res)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4164); } if (TypicalSupport.match$566(arg$4116)) { final Node left = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node right = (arg$4116.size() > 2 ? arg$4116.getGeneric(2) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4168 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caLeft; final Pair<TypicalTypes.call> caRight; final Pair<TypicalTypes.call> res; { caLeft = Analyzer.cast(getCall.apply(left, s, li)); caRight = Analyzer.cast(getCall.apply(right, s, li)); res = Analyzer.cast(TypicalSupport.union$4090.apply(caLeft, caRight)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, res)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4168); } if (TypicalSupport.match$622(arg$4116)) { final Node left = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node right = (arg$4116.size() > 2 ? arg$4116.getGeneric(2) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4172 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caLeft; final Pair<TypicalTypes.call> caRight; final Pair<TypicalTypes.call> res; { caLeft = Analyzer.cast(getCall.apply(left, s, li)); caRight = Analyzer.cast(getCall.apply(right, s, li)); res = Analyzer.cast(TypicalSupport.union$4090.apply(caLeft, caRight)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, res)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4172); } if (TypicalSupport.match$686(arg$4116)) { final Node left = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node right = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4176 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caLeft; final Pair<TypicalTypes.call> caRight; final Pair<TypicalTypes.call> res; { caLeft = Analyzer.cast(getCall.apply(left, s, li)); caRight = Analyzer.cast(getCall.apply(right, s, li)); res = Analyzer.cast(TypicalSupport.union$4090.apply(caLeft, caRight)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, res)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4176); } if (TypicalSupport.match$83(arg$4116)) { final Node left = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node right = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4180 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caLeft; final Pair<TypicalTypes.call> caRight; final Pair<TypicalTypes.call> res; { caLeft = Analyzer.cast(getCall.apply(left, s, li)); caRight = Analyzer.cast(getCall.apply(right, s, li)); res = Analyzer.cast(TypicalSupport.union$4090.apply(caLeft, caRight)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, res)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4180); } if (TypicalSupport.match$268(arg$4116)) { final Node left = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node right = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4184 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caLeft; final Pair<TypicalTypes.call> caRight; final Pair<TypicalTypes.call> res; { caLeft = Analyzer.cast(getCall.apply(left, s, li)); caRight = Analyzer.cast(getCall.apply(right, s, li)); res = Analyzer.cast(TypicalSupport.union$4090.apply(caLeft, caRight)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, res)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4184); } if (TypicalSupport.match$2418(arg$4116)) { final Node left = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node right = (arg$4116.size() > 2 ? arg$4116.getGeneric(2) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4188 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caLeft; final Pair<TypicalTypes.call> caRight; final Pair<TypicalTypes.call> res; { caLeft = Analyzer.cast(getCall.apply(left, s, li)); caRight = Analyzer.cast(getCall.apply(right, s, li)); res = Analyzer.cast(TypicalSupport.union$4090.apply(caLeft, caRight)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, res)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4188); } if (TypicalSupport.match$2808(arg$4116)) { final Node left = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node right = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4192 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caLeft; final Pair<TypicalTypes.call> caRight; final Pair<TypicalTypes.call> res; { caLeft = Analyzer.cast(getCall.apply(left, s, li)); caRight = Analyzer.cast(getCall.apply(right, s, li)); res = Analyzer.cast(TypicalSupport.union$4090.apply(caLeft, caRight)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, res)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4192); } if (TypicalSupport.match$2428(arg$4116)) { final Node left = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node right = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4196 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caLeft; final Pair<TypicalTypes.call> caRight; final Pair<TypicalTypes.call> res; { caLeft = Analyzer.cast(getCall.apply(left, s, li)); caRight = Analyzer.cast(getCall.apply(right, s, li)); res = Analyzer.cast(TypicalSupport.union$4090.apply(caLeft, caRight)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, res)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4196); } if (TypicalSupport.match$2440(arg$4116)) { final Node left = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node right = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4200 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caLeft; final Pair<TypicalTypes.call> caRight; final Pair<TypicalTypes.call> res; { caLeft = Analyzer.cast(getCall.apply(left, s, li)); caRight = Analyzer.cast(getCall.apply(right, s, li)); res = Analyzer.cast(TypicalSupport.union$4090.apply(caLeft, caRight)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, res)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4200); } if (TypicalSupport.match$678(arg$4116)) { final Node left = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node right = (arg$4116.size() > 2 ? arg$4116.getGeneric(2) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4204 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> caLeft; final Pair<TypicalTypes.call> caRight; final Pair<TypicalTypes.call> res; { caLeft = Analyzer.cast(getCall.apply(left, s, li)); caRight = Analyzer.cast(getCall.apply(right, s, li)); res = Analyzer.cast(TypicalSupport.union$4090.apply(caLeft, caRight)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, res)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4204); } if (TypicalSupport.match$2814(arg$4116)) { final Node e1 = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); final Node e2 = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); final Node e3 = (arg$4116.size() > 2 ? arg$4116.getGeneric(2) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4208 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<TypicalTypes.call> ca1; final Pair<TypicalTypes.call> ca2; final Pair<TypicalTypes.call> ca3; final Pair<TypicalTypes.call> ca4; { ca1 = Analyzer.cast(getCall.apply(e1, s, li)); ca2 = Analyzer.cast(getCall.apply(e2, s, li)); ca3 = Analyzer.cast(getCall.apply(e3, s, li)); ca4 = Analyzer.cast(TypicalSupport.union$4090.apply(TypicalSupport.union$4090.apply(ca1, ca2), ca3)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, ca4)); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4208); } if (TypicalSupport.match$692(arg$4116)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4116, 0, arg$4116.size())); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4220 = Analyzer.cast(new Match<Pair<TypicalTypes.call>>() { public Pair<TypicalTypes.call> apply() { final Pair<Node> arg$4214 = Analyzer.cast(nl); if ((null == arg$4214)) { return null; } if (TypicalSupport.match$4211(arg$4214)) { final Node name = Analyzer.cast(arg$4214.get(0)); final Node args = Analyzer.cast(arg$4214.get(1)); return Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final Pair<Node> el; final String str; final Pair<TypicalTypes.call> caList; final TypicalTypes.call ca; { el = Analyzer.cast(getNodeList.apply(args)); str = Analyzer.cast(getString.apply(name)); caList = Analyzer.cast(getCallList.apply(el, s, li)); ca = Analyzer.cast(new TypicalTypes.call(s, str)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, Primitives.wrapCons(ca, caList))); } }.apply()); } if (TypicalSupport.match$4212(arg$4214)) { final Pair<Node> el = Analyzer.cast(Primitives.getChildren(arg$4214.get(2), 0, arg$4214.get(2).size())); return Analyzer.cast(TypicalSupport.union$4090.apply(li, getCallList.apply(el, s, li))); } if (true) { return Analyzer.cast(null); } return null; } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4220); } if (TypicalSupport.match$61(arg$4116)) { final String str = (arg$4116.size() > 0 ? arg$4116.getString(0) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4224 = Analyzer.cast(new Let<Pair<TypicalTypes.call>>() { final TypicalTypes.call ca; { ca = Analyzer.cast(new TypicalTypes.call(s, str)); } public Pair<TypicalTypes.call> apply() { return Analyzer.cast(TypicalSupport.union$4090.apply(li, new Pair<TypicalTypes.call>(ca))); } }.apply()); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4224); } if (TypicalSupport.match$2280(arg$4116)) { final Node e = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4228 = Analyzer.cast(TypicalSupport.union$4090.apply(li, getCall.apply(e, s, li))); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4228); } if (TypicalSupport.match$49(arg$4116)) { final Node e = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4232 = Analyzer.cast(TypicalSupport.union$4090.apply(li, getCall.apply(e, s, li))); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4232); } if (TypicalSupport.match$84(arg$4116)) { final Node e = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4236 = Analyzer.cast(TypicalSupport.union$4090.apply(li, getCall.apply(e, s, li))); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4236); } if (TypicalSupport.match$2392(arg$4116)) { final Node e = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4240 = Analyzer.cast(TypicalSupport.union$4090.apply(li, getCall.apply(e, s, li))); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4240); } if (TypicalSupport.match$3280(arg$4116)) { final Node e = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4244 = Analyzer.cast(TypicalSupport.union$4090.apply(li, getCall.apply(e, s, li))); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4244); } if (TypicalSupport.match$2403(arg$4116)) { final Node e = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4248 = Analyzer.cast(TypicalSupport.union$4090.apply(li, getCall.apply(e, s, li))); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4248); } if (TypicalSupport.match$85(arg$4116)) { final Node e = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4252 = Analyzer.cast(TypicalSupport.union$4090.apply(li, getCall.apply(e, s, li))); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4252); } if (TypicalSupport.match$45(arg$4116)) { final Node e = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4256 = Analyzer.cast(TypicalSupport.union$4090.apply(li, getCall.apply(e, s, li))); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4256); } if (TypicalSupport.match$217(arg$4116)) { final Node e = (arg$4116.size() > 0 ? arg$4116.getGeneric(0) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4260 = Analyzer.cast(TypicalSupport.union$4090.apply(li, getCall.apply(e, s, li))); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4260); } if (TypicalSupport.match$77(arg$4116)) { final Node e = (arg$4116.size() > 2 ? arg$4116.getGeneric(2) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4264 = Analyzer.cast(TypicalSupport.union$4090.apply(li, getCall.apply(e, s, li))); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4264); } if (TypicalSupport.match$2841(arg$4116)) { final Node e = (arg$4116.size() > 2 ? arg$4116.getGeneric(2) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4268 = Analyzer.cast(TypicalSupport.union$4090.apply(li, getCall.apply(e, s, li))); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4268); } if (TypicalSupport.match$705(arg$4116)) { final Node e = (arg$4116.size() > 1 ? arg$4116.getGeneric(1) : null); matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4272 = Analyzer.cast(TypicalSupport.union$4090.apply(li, getCall.apply(e, s, li))); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4272); } if (true) { matching_nodes.add(arg$4116); if ((null != arg$4116 && processScopeNodes.contains(arg$4116.getName()))) { processScope(arg$4116, getScope); } checkEnterScope(arg$4116); final Object retValue$4275 = Analyzer.cast(li); checkExitScope(arg$4116); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4275); } return null; } }.apply()); } }; final Function.F6<Pair<Pair<String>>, Pair<String>, String, Pair<String>, Pair<String>, Pair<Pair<String>>, Pair<TypicalTypes.call>> findPathsList = new Function.F6<Pair<Pair<String>>, Pair<String>, String, Pair<String>, Pair<String>, Pair<Pair<String>>, Pair<TypicalTypes.call>>() { public Pair<Pair<String>> apply(final Pair<String> fromList, final String des, final Pair<String> curPath, final Pair<String> visitedNodes, final Pair<Pair<String>> paths, final Pair<TypicalTypes.call> edges) { return new Match<Pair<Pair<String>>>() { public Pair<Pair<String>> apply() { final Pair<String> arg$4277 = Analyzer.cast(fromList); if ((null == arg$4277)) { return null; } if (TypicalSupport.match$3254(arg$4277)) { return Analyzer.cast(paths); } if ((null != arg$4277 && !((Pair)arg$4277).isEmpty())) { final Pair<String> list$4279 = Analyzer.cast(arg$4277); final String x = Analyzer.cast(Primitives.wrapHead(list$4279)); final Pair<String> xs = Analyzer.cast(Primitives.wrapTail(list$4279)); return Analyzer.cast(new Let<Pair<Pair<String>>>() { final Pair<Pair<String>> paths1; { paths1 = Analyzer.cast(findPaths.apply(x, des, curPath, visitedNodes, paths, edges)); } public Pair<Pair<String>> apply() { return Analyzer.cast(findPathsList.apply(xs, des, curPath, visitedNodes, paths1, edges)); } }.apply()); } return null; } }.apply(); } }; final Function.F6<Pair<Pair<String>>, String, String, Pair<String>, Pair<String>, Pair<Pair<String>>, Pair<TypicalTypes.call>> findPaths = new Function.F6<Pair<Pair<String>>, String, String, Pair<String>, Pair<String>, Pair<Pair<String>>, Pair<TypicalTypes.call>>() { public Pair<Pair<String>> apply(final String from, final String des, final Pair<String> curPath, final Pair<String> visitedNodes, final Pair<Pair<String>> paths, final Pair<TypicalTypes.call> edges) { return (null == Primitives.not.apply(Primitives.contains.apply(from, visitedNodes)) ? null : Primitives.not.apply(Primitives.contains.apply(from, visitedNodes)) ? (null == Primitives.not.apply(Primitives.equal.apply(from, des)) ? null : Primitives.not.apply(Primitives.equal.apply(from, des)) ? new Let<Pair<Pair<String>>>() { final Pair<String> newVisited; final Pair<String> newCur; final Pair<String> children; { newVisited = Analyzer.cast(Primitives.wrapCons(from, visitedNodes)); newCur = Analyzer.cast(Primitives.wrapCons(from, curPath)); children = Analyzer.cast(getChildren.apply(from, edges)); } public Pair<Pair<String>> apply() { return Analyzer.cast(findPathsList.apply(children, des, newCur, newVisited, paths, edges)); } }.apply() : new Let<Pair<Pair<String>>>() { final Pair<String> res; { res = Analyzer.cast(Primitives.wrapCons(from, curPath)); } public Pair<Pair<String>> apply() { return Analyzer.cast(Primitives.wrapCons(res, paths)); } }.apply()) : paths); } }; final Function.F2<Pair<String>, String, Pair<TypicalTypes.call>> getChildren = new Function.F2<Pair<String>, String, Pair<TypicalTypes.call>>() { public Pair<String> apply(final String parent, final Pair<TypicalTypes.call> edges) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<TypicalTypes.call> arg$4281 = Analyzer.cast(edges); if ((null == arg$4281)) { return null; } if (TypicalSupport.match$3187(arg$4281)) { return Analyzer.cast(Pair.<String>empty()); } if ((null != arg$4281 && !((Pair)arg$4281).isEmpty())) { final Pair<TypicalTypes.call> list$4283 = Analyzer.cast(arg$4281); final TypicalTypes.call x = Analyzer.cast(Primitives.wrapHead(list$4283)); final Pair<TypicalTypes.call> xs = Analyzer.cast(Primitives.wrapTail(list$4283)); return Analyzer.cast(null == Primitives.equal.apply(null == x ? null : x.caller, parent) ? null : Primitives.equal.apply(null == x ? null : x.caller, parent) ? Primitives.wrapCons(null == x ? null : x.callee, getChildren.apply(parent, xs)) : getChildren.apply(parent, xs)); } return null; } }.apply(); } }; final Function.F1<Pair<Pair<String>>, Pair<TypicalTypes.call>> findCircles = new Function.F1<Pair<Pair<String>>, Pair<TypicalTypes.call>>() { public Pair<Pair<String>> apply(final Pair<TypicalTypes.call> edges) { return new Match<Pair<Pair<String>>>() { public Pair<Pair<String>> apply() { final Pair<TypicalTypes.call> arg$4285 = Analyzer.cast(edges); if ((null == arg$4285)) { return null; } if (TypicalSupport.match$3187(arg$4285)) { return Analyzer.cast(Pair.<Pair<String>>empty()); } if ((null != arg$4285 && !((Pair)arg$4285).isEmpty())) { final Pair<TypicalTypes.call> list$4287 = Analyzer.cast(arg$4285); final TypicalTypes.call x = Analyzer.cast(Primitives.wrapHead(list$4287)); final Pair<TypicalTypes.call> xs = Analyzer.cast(Primitives.wrapTail(list$4287)); return Analyzer.cast(new Let<Pair<Pair<String>>>() { final Pair<Pair<String>> paths1; final Pair<Pair<String>> paths2; { paths1 = Analyzer.cast(findPaths.apply(null == x ? null : x.callee, null == x ? null : x.caller, Pair.<String>empty(), Pair.<String>empty(), Pair.<Pair<String>>empty(), xs)); paths2 = Analyzer.cast(findCircles.apply(xs)); } public Pair<Pair<String>> apply() { return Analyzer.cast(TypicalSupport.union$4288.apply(paths1, paths2)); } }.apply()); } return null; } }.apply(); } }; final Function.F2<Pair<Pair<String>>, Pair<Pair<String>>, Pair<String>> groupCircles = new Function.F2<Pair<Pair<String>>, Pair<Pair<String>>, Pair<String>>() { public Pair<Pair<String>> apply(final Pair<Pair<String>> circles, final Pair<String> vertices) { return new Match<Pair<Pair<String>>>() { public Pair<Pair<String>> apply() { final Pair<String> arg$4290 = Analyzer.cast(vertices); if ((null == arg$4290)) { return null; } if (TypicalSupport.match$3254(arg$4290)) { return Analyzer.cast(circles); } if ((null != arg$4290 && !((Pair)arg$4290).isEmpty())) { final Pair<String> list$4292 = Analyzer.cast(arg$4290); final String x = Analyzer.cast(Primitives.wrapHead(list$4292)); final Pair<String> xs = Analyzer.cast(Primitives.wrapTail(list$4292)); return Analyzer.cast(new Let<Pair<Pair<String>>>() { final TypicalTypes.group g; final Pair<Pair<String>> newCir; { g = Analyzer.cast(groupBy.apply(x, circles, Pair.<String>empty(), Pair.<Pair<String>>empty())); newCir = Analyzer.cast(TypicalSupport.append$4293.apply(new Pair<Pair<String>>(null == g ? null : g.group), null == g ? null : g.circles)); } public Pair<Pair<String>> apply() { return Analyzer.cast(groupCircles.apply(newCir, xs)); } }.apply()); } return null; } }.apply(); } }; final Function.F4<TypicalTypes.group, String, Pair<Pair<String>>, Pair<String>, Pair<Pair<String>>> groupBy = new Function.F4<TypicalTypes.group, String, Pair<Pair<String>>, Pair<String>, Pair<Pair<String>>>() { public TypicalTypes.group apply(final String str, final Pair<Pair<String>> circles, final Pair<String> res, final Pair<Pair<String>> ret) { return new Match<TypicalTypes.group>() { public TypicalTypes.group apply() { final Pair<Pair<String>> arg$4295 = Analyzer.cast(circles); if ((null == arg$4295)) { return null; } if (TypicalSupport.match$4296(arg$4295)) { return Analyzer.cast(new TypicalTypes.group(res, ret)); } if ((null != arg$4295 && !((Pair)arg$4295).isEmpty())) { final Pair<Pair<String>> list$4297 = Analyzer.cast(arg$4295); final Pair<String> x = Analyzer.cast(Primitives.wrapHead(list$4297)); final Pair<Pair<String>> xs = Analyzer.cast(Primitives.wrapTail(list$4297)); return Analyzer.cast(null == Primitives.contains.apply(str, x) ? null : Primitives.contains.apply(str, x) ? new Let<TypicalTypes.group>() { final Pair<String> newRes; { newRes = Analyzer.cast(TypicalSupport.union$326.apply(x, res)); } public TypicalTypes.group apply() { return Analyzer.cast(groupBy.apply(str, xs, newRes, ret)); } }.apply() : new Let<TypicalTypes.group>() { final Pair<Pair<String>> newRet; { newRet = Analyzer.cast(Primitives.wrapCons(x, ret)); } public TypicalTypes.group apply() { return Analyzer.cast(groupBy.apply(str, xs, res, newRet)); } }.apply()); } return null; } }.apply(); } }; final Function.F3<Pair<TypicalTypes.nodeRec>, Pair<String>, Pair<TypicalTypes.call>, Pair<Pair<String>>> getResult = new Function.F3<Pair<TypicalTypes.nodeRec>, Pair<String>, Pair<TypicalTypes.call>, Pair<Pair<String>>>() { public Pair<TypicalTypes.nodeRec> apply(final Pair<String> vertices, final Pair<TypicalTypes.call> edges, final Pair<Pair<String>> groups) { return new Match<Pair<TypicalTypes.nodeRec>>() { public Pair<TypicalTypes.nodeRec> apply() { final Pair<String> arg$4299 = Analyzer.cast(vertices); if ((null == arg$4299)) { return null; } if (TypicalSupport.match$3254(arg$4299)) { return Analyzer.cast(Pair.<TypicalTypes.nodeRec>empty()); } if ((null != arg$4299 && !((Pair)arg$4299).isEmpty())) { final Pair<String> list$4301 = Analyzer.cast(arg$4299); final String x = Analyzer.cast(Primitives.wrapHead(list$4301)); final Pair<String> xs = Analyzer.cast(Primitives.wrapTail(list$4301)); return Analyzer.cast(new Let<Pair<TypicalTypes.nodeRec>>() { final TypicalTypes.nodeRec rec; { rec = Analyzer.cast(getResultNode.apply(x, edges, groups)); } public Pair<TypicalTypes.nodeRec> apply() { return Analyzer.cast(Primitives.wrapCons(rec, getResult.apply(xs, edges, groups))); } }.apply()); } return null; } }.apply(); } }; final Function.F3<TypicalTypes.nodeRec, String, Pair<TypicalTypes.call>, Pair<Pair<String>>> getResultNode = new Function.F3<TypicalTypes.nodeRec, String, Pair<TypicalTypes.call>, Pair<Pair<String>>>() { public TypicalTypes.nodeRec apply(final String str, final Pair<TypicalTypes.call> edges, final Pair<Pair<String>> groups) { return new Let<TypicalTypes.nodeRec>() { final Pair<String> mutual; final Pair<String> depend; { mutual = Analyzer.cast(getMutual.apply(str, groups)); depend = Analyzer.cast(getDepend.apply(str, edges, mutual)); } public TypicalTypes.nodeRec apply() { return Analyzer.cast(new TypicalTypes.nodeRec(str, mutual, depend)); } }.apply(); } }; final Function.F2<Pair<String>, String, Pair<Pair<String>>> getMutual = new Function.F2<Pair<String>, String, Pair<Pair<String>>>() { public Pair<String> apply(final String str, final Pair<Pair<String>> groups) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<Pair<String>> arg$4303 = Analyzer.cast(groups); if ((null == arg$4303)) { return null; } if (TypicalSupport.match$4296(arg$4303)) { return Analyzer.cast(Pair.<String>empty()); } if ((null != arg$4303 && !((Pair)arg$4303).isEmpty())) { final Pair<Pair<String>> list$4305 = Analyzer.cast(arg$4303); final Pair<String> x = Analyzer.cast(Primitives.wrapHead(list$4305)); final Pair<Pair<String>> xs = Analyzer.cast(Primitives.wrapTail(list$4305)); return Analyzer.cast(null == Primitives.contains.apply(str, x) ? null : Primitives.contains.apply(str, x) ? remove.apply(str, x) : getMutual.apply(str, xs)); } return null; } }.apply(); } }; final Function.F3<Pair<String>, String, Pair<TypicalTypes.call>, Pair<String>> getDepend = new Function.F3<Pair<String>, String, Pair<TypicalTypes.call>, Pair<String>>() { public Pair<String> apply(final String str, final Pair<TypicalTypes.call> edges, final Pair<String> mutual) { return new Let<Pair<String>>() { final Pair<String> children; { children = Analyzer.cast(getChildren.apply(str, edges)); } public Pair<String> apply() { return Analyzer.cast(removeMutual.apply(children, mutual)); } }.apply(); } }; final Function.F2<Pair<String>, Pair<String>, Pair<String>> removeMutual = new Function.F2<Pair<String>, Pair<String>, Pair<String>>() { public Pair<String> apply(final Pair<String> children, final Pair<String> mutual) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<String> arg$4307 = Analyzer.cast(children); if ((null == arg$4307)) { return null; } if (TypicalSupport.match$3254(arg$4307)) { return Analyzer.cast(Pair.<String>empty()); } if ((null != arg$4307 && !((Pair)arg$4307).isEmpty())) { final Pair<String> list$4309 = Analyzer.cast(arg$4307); final String x = Analyzer.cast(Primitives.wrapHead(list$4309)); final Pair<String> xs = Analyzer.cast(Primitives.wrapTail(list$4309)); return Analyzer.cast(null == Primitives.contains.apply(x, mutual) ? null : Primitives.contains.apply(x, mutual) ? removeMutual.apply(xs, mutual) : Primitives.wrapCons(x, removeMutual.apply(xs, mutual))); } return null; } }.apply(); } }; final Function.F2<Pair<String>, String, Pair<String>> remove = new Function.F2<Pair<String>, String, Pair<String>>() { public Pair<String> apply(final String s, final Pair<String> li) { return new Match<Pair<String>>() { public Pair<String> apply() { final Pair<String> arg$4311 = Analyzer.cast(li); if ((null == arg$4311)) { return null; } if (TypicalSupport.match$3254(arg$4311)) { return Analyzer.cast(Pair.<String>empty()); } if ((null != arg$4311 && !((Pair)arg$4311).isEmpty())) { final Pair<String> list$4313 = Analyzer.cast(arg$4311); final String x = Analyzer.cast(Primitives.wrapHead(list$4313)); final Pair<String> xs = Analyzer.cast(Primitives.wrapTail(list$4313)); return Analyzer.cast(null == Primitives.equal.apply(s, x) ? null : Primitives.equal.apply(s, x) ? xs : Primitives.wrapCons(x, remove.apply(s, xs))); } return null; } }.apply(); } }; final Function.F1<Pair<TypicalTypes.raw_type<?>>, Node> visitDepend = new Function.F1<Pair<TypicalTypes.raw_type<?>>, Node>() { public Pair<TypicalTypes.raw_type<?>> apply(final Node no) { return new Let<Pair<TypicalTypes.raw_type<?>>>() { final Pair<String> deps; { deps = Analyzer.cast(getAnnotatedStringList.apply(no, "depend")); } public Pair<TypicalTypes.raw_type<?>> apply() { return Analyzer.cast(TypicalSupport.map$4315.apply(visitDependNode, deps)); } }.apply(); } }; final Function.F1<TypicalTypes.raw_type<?>, String> visitDependNode = new Function.F1<TypicalTypes.raw_type<?>, String>() { public TypicalTypes.raw_type<?> apply(final String s) { return new Let<TypicalTypes.raw_type<?>>() { final Node no; { no = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("NameSpaceStructure", s, null, null), getNameSpace))); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(analyze.apply(no)); } }.apply(); } }; final Function.F1<Object, Node> processMutual = new Function.F1<Object, Node>() { public Object apply(final Node no) { return new Let<Object>() { final Pair<String> muts; final Pair<Node> nl; final Pair<TypicalTypes.raw_type<?>> recList; { muts = Analyzer.cast(getAnnotatedStringList.apply(no, "mutual")); nl = Analyzer.cast(getNodes.apply(muts)); Primitives.annotateList.apply(nl, "secondary", wildt); TypicalSupport.map$130.apply(analyze, nl); recList = Analyzer.cast(TypicalSupport.map$130.apply(createFunctionType, nl)); processBodies.apply(nl, recList); } public Object apply() { return Analyzer.cast(null); } }.apply(); } }; final Function.F1<TypicalTypes.raw_type<?>, Node> createFunctionType = new Function.F1<TypicalTypes.raw_type<?>, Node>() { public TypicalTypes.raw_type<?> apply(final Node n) { return new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final Node arg$4316 = GNode.cast(n); if ((null == arg$4316)) { return null; } if (TypicalSupport.match$73(arg$4316)) { final Node p = (arg$4316.size() > 1 ? arg$4316.getGeneric(1) : null); matching_nodes.add(arg$4316); if ((null != arg$4316 && processScopeNodes.contains(arg$4316.getName()))) { processScope(arg$4316, getScope); } checkEnterScope(arg$4316); final Object retValue$4328 = Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { final TypicalTypes.raw_type<?> varT; final TypicalTypes.raw_type<?> tp; { varT = Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.FALSE)); tp = Analyzer.cast(analyze.apply(p)); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(new Match<TypicalTypes.raw_type<?>>() { public TypicalTypes.raw_type<?> apply() { final TypicalTypes.raw_type<?> arg$4322 = Analyzer.cast(tp); if ((null == arg$4322)) { return null; } if ((null != arg$4322)) switch (arg$4322.tag()) { case TupleT: if (TypicalSupport.match$236(arg$4322)) { return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { redefine.apply(n, varT, getNameSpace); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(varT); } }.apply()); } if (TypicalSupport.match$115(arg$4322)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$4322.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.raw_type<?>>() { { redefine.apply(n, new TypicalTypes.FunctionT(tl, varT), getNameSpace); } public TypicalTypes.raw_type<?> apply() { return Analyzer.cast(varT); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); checkExitScope(arg$4316); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4328); } if (true) { matching_nodes.add(arg$4316); if ((null != arg$4316 && processScopeNodes.contains(arg$4316.getName()))) { processScope(arg$4316, getScope); } checkEnterScope(arg$4316); final Object retValue$4331 = Analyzer.cast(null); checkExitScope(arg$4316); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4331); } return null; } }.apply(); } }; final Function.F2<Pair<Object>, Pair<Node>, Pair<TypicalTypes.raw_type<?>>> processBodies = new Function.F2<Pair<Object>, Pair<Node>, Pair<TypicalTypes.raw_type<?>>>() { public Pair<Object> apply(final Pair<Node> nl, final Pair<TypicalTypes.raw_type<?>> recList) { return new Match<Pair<Object>>() { public Pair<Object> apply() { final Pair<Node> arg$4333 = Analyzer.cast(nl); if ((null == arg$4333)) { return null; } if (TypicalSupport.match$336(arg$4333)) { return Analyzer.cast(Pair.empty()); } if ((null != arg$4333 && !((Pair)arg$4333).isEmpty())) { final Pair<Node> list$4335 = Analyzer.cast(arg$4333); final Node x = GNode.cast(Primitives.wrapHead(list$4335)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$4335)); return Analyzer.cast(new Match<Pair<Object>>() { public Pair<Object> apply() { final Node arg$4353 = GNode.cast(x); if ((null == arg$4353)) { return null; } if (TypicalSupport.match$73(arg$4353)) { final Node e = (arg$4353.size() > 2 ? arg$4353.getGeneric(2) : null); matching_nodes.add(arg$4353); if ((null != arg$4353 && processScopeNodes.contains(arg$4353.getName()))) { processScope(arg$4353, getScope); } checkEnterScope(arg$4353); final Object retValue$4365 = Analyzer.cast(new Match<Pair<Object>>() { public Pair<Object> apply() { final Pair<TypicalTypes.raw_type<?>> arg$4359 = Analyzer.cast(recList); if ((null == arg$4359)) { return null; } if (TypicalSupport.match$123(arg$4359)) { return Analyzer.cast(null); } if ((null != arg$4359 && !((Pair)arg$4359).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$4361 = Analyzer.cast(arg$4359); final TypicalTypes.raw_type<?> y = Analyzer.cast(Primitives.wrapHead(list$4361)); final Pair<TypicalTypes.raw_type<?>> ys = Analyzer.cast(Primitives.wrapTail(list$4361)); return Analyzer.cast(new Let<Pair<Object>>() { final TypicalTypes.raw_type<?> te; { te = Analyzer.cast(analyze.apply(e)); unify.apply(y, te); } public Pair<Object> apply() { return Analyzer.cast(processBodies.apply(xs, ys)); } }.apply()); } return null; } }.apply()); checkExitScope(arg$4353); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4365); } if (true) { matching_nodes.add(arg$4353); if ((null != arg$4353 && processScopeNodes.contains(arg$4353.getName()))) { processScope(arg$4353, getScope); } checkEnterScope(arg$4353); final Object retValue$4368 = Analyzer.cast(null); checkExitScope(arg$4353); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4368); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F1<Pair<Node>, Pair<String>> getNodes = new Function.F1<Pair<Node>, Pair<String>>() { public Pair<Node> apply(final Pair<String> names) { return new Match<Pair<Node>>() { public Pair<Node> apply() { final Pair<String> arg$4371 = Analyzer.cast(names); if ((null == arg$4371)) { return null; } if (TypicalSupport.match$3254(arg$4371)) { return Analyzer.cast(Pair.<Node>empty()); } if ((null != arg$4371 && !((Pair)arg$4371).isEmpty())) { final Pair<String> list$4373 = Analyzer.cast(arg$4371); final String x = Analyzer.cast(Primitives.wrapHead(list$4373)); final Pair<String> xs = Analyzer.cast(Primitives.wrapTail(list$4373)); return Analyzer.cast(new Let<Pair<Node>>() { final Node no; { no = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("NameSpaceStructure", x, null, null), getNameSpace))); } public Pair<Node> apply() { return Analyzer.cast(TypicalSupport.union$4374.apply(new Pair<Node>(no), getNodes.apply(xs))); } }.apply()); } return null; } }.apply(); } }; final Function.F1<Pair<Object>, Node> resolveMutual = new Function.F1<Pair<Object>, Node>() { public Pair<Object> apply(final Node no) { return new Match<Pair<Object>>() { public Pair<Object> apply() { final Node arg$4376 = GNode.cast(no); if ((null == arg$4376)) { return null; } if (TypicalSupport.match$73(arg$4376)) { final String s = (arg$4376.size() > 0 ? arg$4376.getString(0) : null); matching_nodes.add(arg$4376); if ((null != arg$4376 && processScopeNodes.contains(arg$4376.getName()))) { processScope(arg$4376, getScope); } checkEnterScope(arg$4376); final Object retValue$4381 = Analyzer.cast(new Let<Pair<Object>>() { final Pair<String> muts; { muts = Analyzer.cast(getAnnotatedStringList.apply(no, "mutual")); } public Pair<Object> apply() { return Analyzer.cast(TypicalSupport.map$4378.apply(resolveMutualName, Primitives.wrapCons(s, muts))); } }.apply()); checkExitScope(arg$4376); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4381); } if (true) { matching_nodes.add(arg$4376); if ((null != arg$4376 && processScopeNodes.contains(arg$4376.getName()))) { processScope(arg$4376, getScope); } checkEnterScope(arg$4376); final Object retValue$4384 = Analyzer.cast(null); checkExitScope(arg$4376); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4384); } return null; } }.apply(); } }; final Function.F1<Object, String> resolveMutualName = new Function.F1<Object, String>() { public Object apply(final String str) { return new Let<Object>() { final Node nod; final TypicalTypes.raw_type<?> tx; final TypicalTypes.raw_type<?> res; { nod = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("NameSpaceStructure", str, null, null), getNameSpace))); tx = Analyzer.cast(Analyzer.cast(lookup2.apply(nod, getNameSpace))); res = Analyzer.cast(resolveType.apply(tx)); redefine.apply(nod, res, getNameSpace); Primitives.annotate.apply(nod, "visited", wildt); } public Object apply() { return Analyzer.cast(null); } }.apply(); } }; final Function.F1<Object, Pair<TypicalTypes.raw_type<?>>> createTypeRecord = new Function.F1<Object, Pair<TypicalTypes.raw_type<?>>>() { public Object apply(final Pair<TypicalTypes.raw_type<?>> tl) { return new Let<Object>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(Analyzer.cast(lookup4.apply(GNode.create("UserDefinedType", "raw_type"), "error", "raw_type must be defined", getNameSpace))); } public Object apply() { return Analyzer.cast(null == Primitives.isNotBottom.apply(ty) || !Primitives.isNotBottom.apply(ty) ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(new TypicalTypes.FieldT("type", "type", new TypicalTypes.TypeName("raw_type"))); redefine.apply(GNode.create("FieldType", "type", null), t, getNameSpace); redefine.apply(GNode.create("UserDefinedType", "type"), new TypicalTypes.RecordT(Primitives.wrapCons(t, tl)), getNameSpace); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply(); } }; final Function.F2<String, Pair<String>, String> joinStringList = new Function.F2<String, Pair<String>, String>() { public String apply(final Pair<String> sl, final String res) { return new Match<String>() { public String apply() { final Pair<String> arg$4386 = Analyzer.cast(sl); if ((null == arg$4386)) { return null; } if (TypicalSupport.match$3254(arg$4386)) { return Analyzer.cast(res); } if (TypicalSupport.match$4388(arg$4386)) { final String x = Analyzer.cast(arg$4386.get(0)); return Analyzer.cast(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(res, "'"), x), "'")); } if ((null != arg$4386 && !((Pair)arg$4386).isEmpty())) { final Pair<String> list$4389 = Analyzer.cast(arg$4386); final String x = Analyzer.cast(Primitives.wrapHead(list$4389)); final Pair<String> xs = Analyzer.cast(Primitives.wrapTail(list$4389)); return Analyzer.cast(joinStringList.apply(xs, Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(res, "'"), x), "'"), ", "))); } return null; } }.apply(); } }; protected class preload { public <T0> Pair<T0> apply(final T0 n) { return new Let<Pair<T0>>() { final TypicalTypes.raw_type<?> strL; final TypicalTypes.raw_type<?> t1; final TypicalTypes.raw_type<?> t2; final TypicalTypes.raw_type<?> t3; final TypicalTypes.raw_type<?> t6; final TypicalTypes.raw_type<?> t7; final TypicalTypes.raw_type<?> t9; final TypicalTypes.raw_type<?> l1; final TypicalTypes.raw_type<?> l2; final TypicalTypes.raw_type<?> l4; final TypicalTypes.raw_type<?> t14; final TypicalTypes.raw_type<?> tup; final TypicalTypes.raw_type<?> t4; final TypicalTypes.raw_type<?> t5; final TypicalTypes.raw_type<?> t11; final TypicalTypes.raw_type<?> l3; final TypicalTypes.raw_type<?> l5; final TypicalTypes.raw_type<?> l6; final TypicalTypes.raw_type<?> l7; final TypicalTypes.raw_type<?> l8; final TypicalTypes.raw_type<?> t8; final TypicalTypes.raw_type<?> t12; final TypicalTypes.raw_type<?> t13; { strL = Analyzer.cast(new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(strt), "list")); t1 = Analyzer.cast(new TypicalTypes.ConstructorT("name", "SimpleName", strt)); t2 = Analyzer.cast(new TypicalTypes.TypeName("name")); t3 = Analyzer.cast(new TypicalTypes.ConstructorT("name", "QualifiedName", new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(strt), "list"))); t6 = Analyzer.cast(new TypicalTypes.ConstructorT("scope_kind", "Anonymous", strt)); t7 = Analyzer.cast(new TypicalTypes.ConstructorT("scope_kind", "Temporary", strt)); t9 = Analyzer.cast(new TypicalTypes.TypeName("scope_kind")); l1 = Analyzer.cast(new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(wildt), "list")); l2 = Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.TRUE)); l4 = Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.TRUE)); t14 = Analyzer.cast(new TypicalTypes.VariableT(freshName.apply("type"), Boolean.TRUE)); tup = Analyzer.cast(new TypicalTypes.TupleT(new Pair<TypicalTypes.raw_type<?>>(new TypicalTypes.TypeName("name")).append(new Pair<TypicalTypes.raw_type<?>>(strt)).append(new Pair<TypicalTypes.raw_type<?>>(strt)))); load.apply("SimpleName", "constructor", t1); load.apply("QualifiedName", "constructor", t3); t4 = Analyzer.cast(new TypicalTypes.VariantT(new Pair<TypicalTypes.raw_type<?>>(t1).append(new Pair<TypicalTypes.raw_type<?>>(t3)))); t5 = Analyzer.cast(new TypicalTypes.ConstructorT("scope_kind", "Named", t2)); t11 = Analyzer.cast(new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(nodet), "list")); l3 = Analyzer.cast(new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(l2), "list")); l5 = Analyzer.cast(new TypicalTypes.ConstructedT(new Pair<TypicalTypes.raw_type<?>>(l4), "list")); l6 = Analyzer.cast(new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l2), l4)); l7 = Analyzer.cast(new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l2), boolt)); l8 = Analyzer.cast(new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l4).append(new Pair<TypicalTypes.raw_type<?>>(l2)), l2)); load.apply("name", "type", t4); load.apply("Named", "constructor", t5); load.apply("Anonymous", "constructor", t6); load.apply("Temporary", "constructor", t7); t8 = Analyzer.cast(new TypicalTypes.VariantT(new Pair<TypicalTypes.raw_type<?>>(t5).append(new Pair<TypicalTypes.raw_type<?>>(t6)).append(new Pair<TypicalTypes.raw_type<?>>(t7)))); t12 = Analyzer.cast(new TypicalTypes.TupleT(new Pair<TypicalTypes.raw_type<?>>(t9).append(new Pair<TypicalTypes.raw_type<?>>(t11)))); load.apply("scope_kind", "type", t8); t13 = Analyzer.cast(new TypicalTypes.ConstructorT("scopeT", "Scope", t12)); load.apply("Scope", "constructor", t13); load.apply("scopeT", "type", new TypicalTypes.VariantT(new Pair<TypicalTypes.raw_type<?>>(t13))); redefine.apply(GNode.create("UserDefinedType", "scopeT"), new TypicalTypes.VariantT(new Pair<TypicalTypes.raw_type<?>>(t13)), getNameSpace); load.apply("node_type", "value", strt); load.apply("String.stoi", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt).append(new Pair<TypicalTypes.raw_type<?>>(intt)), intt)); load.apply("String.stof", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt), floatt)); load.apply("String.itos", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(intt), strt)); load.apply("String.ftos", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(floatt), strt)); load.apply("String.concat", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt).append(new Pair<TypicalTypes.raw_type<?>>(strt)), strt)); load.apply("String.ends_with", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt).append(new Pair<TypicalTypes.raw_type<?>>(strt)), boolt)); load.apply("String.ends_withi", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt).append(new Pair<TypicalTypes.raw_type<?>>(strt)), boolt)); load.apply("String.join_strings", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strL), strt)); load.apply("String.ssize", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt), intt)); load.apply("String.starts_with", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt).append(new Pair<TypicalTypes.raw_type<?>>(strt)), boolt)); load.apply("String.starts_withi", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt).append(new Pair<TypicalTypes.raw_type<?>>(strt)), boolt)); load.apply("String.substring", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt).append(new Pair<TypicalTypes.raw_type<?>>(intt)), strt)); load.apply("String.substring2", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt).append(new Pair<TypicalTypes.raw_type<?>>(intt)).append(new Pair<TypicalTypes.raw_type<?>>(intt)), strt)); load.apply("abs_float", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(floatt), floatt)); load.apply("abs_int", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(intt), intt)); load.apply("ftoi", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(floatt), intt)); load.apply("shift_left", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(intt).append(new Pair<TypicalTypes.raw_type<?>>(intt)), intt)); load.apply("shift_right", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(intt).append(new Pair<TypicalTypes.raw_type<?>>(intt)), intt)); load.apply("and_bits", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(intt).append(new Pair<TypicalTypes.raw_type<?>>(intt)), intt)); load.apply("or_bits", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(intt).append(new Pair<TypicalTypes.raw_type<?>>(intt)), intt)); load.apply("xor_bits", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(intt).append(new Pair<TypicalTypes.raw_type<?>>(intt)), intt)); load.apply("negate_bits", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(intt), intt)); load.apply("negate_float", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(floatt), floatt)); load.apply("negate_int", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(intt), intt)); load.apply("List.is_empty", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l1), boolt)); load.apply("List.length", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l1), intt)); load.apply("List.mem", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l2).append(new Pair<TypicalTypes.raw_type<?>>(l3)), boolt)); load.apply("List.append", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l3).append(new Pair<TypicalTypes.raw_type<?>>(l3)), l3)); load.apply("List.head", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l3), l2)); load.apply("List.tail", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l3), l3)); load.apply("List.nth", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l3).append(new Pair<TypicalTypes.raw_type<?>>(intt)), l2)); load.apply("List.union", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l3).append(new Pair<TypicalTypes.raw_type<?>>(l3)), l3)); load.apply("List.subtraction", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l3).append(new Pair<TypicalTypes.raw_type<?>>(l3)), l3)); load.apply("List.intersection", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l3).append(new Pair<TypicalTypes.raw_type<?>>(l3)), l3)); load.apply("List.map", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l6).append(new Pair<TypicalTypes.raw_type<?>>(l3)), l5)); load.apply("List.iter", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l6).append(new Pair<TypicalTypes.raw_type<?>>(l3)), l4)); load.apply("List.exists", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l7).append(new Pair<TypicalTypes.raw_type<?>>(l5)), boolt)); load.apply("List.foldl", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l8).append(new Pair<TypicalTypes.raw_type<?>>(l5)).append(new Pair<TypicalTypes.raw_type<?>>(l2)), l2)); load.apply("List.cons", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(l2), l3)); load.apply("trace", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(t14), t14)); load.apply("trace2", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt).append(new Pair<TypicalTypes.raw_type<?>>(t14)), t14)); load.apply("show_symbols", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt), boolt)); load.apply("is_defined", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(nodet), boolt)); load.apply("is_defined_locally", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(nodet), boolt)); load.apply("annotate", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(nodet).append(new Pair<TypicalTypes.raw_type<?>>(strt)).append(new Pair<TypicalTypes.raw_type<?>>(l2)), l2)); load.apply("has_annotation", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(nodet).append(new Pair<TypicalTypes.raw_type<?>>(strt)), boolt)); load.apply("get_annotation", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(nodet).append(new Pair<TypicalTypes.raw_type<?>>(strt)), wildt)); load.apply("annotate_list", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(t11).append(new Pair<TypicalTypes.raw_type<?>>(strt)).append(new Pair<TypicalTypes.raw_type<?>>(l2)), l2)); load.apply("Map.get", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt), typet)); load.apply("Map.put", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt).append(new Pair<TypicalTypes.raw_type<?>>(typet)), wildt)); load.apply("fresh_name", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt), strt)); load.apply("not_bottom", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(wildt), boolt)); load.apply("is_bottom", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(wildt), boolt)); load.apply("is_not_bottom", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(wildt), boolt)); load.apply("node_name", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(nodet), strt)); load.apply("load", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(strt).append(new Pair<TypicalTypes.raw_type<?>>(strt)).append(new Pair<TypicalTypes.raw_type<?>>(wildt)), wildt)); load.apply("ancestor", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(wildt), nodet)); load.apply("parent", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(wildt), nodet)); load.apply("getNameSpace", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(nodet), tup)); load.apply("getScope", "value", new TypicalTypes.FunctionT(new Pair<TypicalTypes.raw_type<?>>(nodet), new TypicalTypes.TypeName("scopeT"))); load.apply("Limits.void_size", "value", intt); load.apply("Limits.bool_size", "value", intt); load.apply("Limits.int_size", "value", intt); load.apply("Limits.short_size", "value", intt); load.apply("Limits.long_size", "value", intt); load.apply("Limits.long_long_size", "value", intt); load.apply("Limits.float_size", "value", intt); load.apply("Limits.double_size", "value", intt); load.apply("Limits.pointer_size", "value", intt); load.apply("Limits.long_double_size", "value", intt); load.apply("Limits.function_size", "value", intt); load.apply("Limits.array_max", "value", intt); load.apply("Limits.void_align", "value", intt); load.apply("Limits.bool_align", "value", intt); load.apply("Limits.bool_nat_align", "value", intt); load.apply("Limits.short_align", "value", intt); load.apply("Limits.short_nat_align", "value", intt); load.apply("Limits.int_align", "value", intt); load.apply("Limits.int_nat_align", "value", intt); load.apply("Limits.long_align", "value", intt); load.apply("Limits.long_nat_align", "value", intt); load.apply("Limits.long_long_align", "value", intt); load.apply("Limits.long_long_nat_align", "value", intt); load.apply("Limits.float_align", "value", intt); load.apply("Limits.float_nat_align", "value", intt); load.apply("Limits.double_align", "value", intt); load.apply("Limits.double_nat_align", "value", intt); load.apply("Limits.long_double_align", "value", intt); load.apply("Limits.long_double_nat_align", "value", intt); load.apply("Limits.pointer_align", "value", intt); load.apply("Limits.pointer_nat_align", "value", intt); load.apply("Limits.function_align", "value", intt); load.apply("Limits.char_bits", "value", intt); load.apply("nonce", "value", intt); } public Pair<T0> apply() { return new Pair<T0>(n); } }.apply(); } } final preload preload = new preload(); final Function.F1<Object, Node> resolveNode = new Function.F1<Object, Node>() { public Object apply(final Node no) { return new Match<Object>() { public Object apply() { final Node arg$4391 = GNode.cast(no); if ((null == arg$4391)) { return null; } if (TypicalSupport.match$148(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 1, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4395 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4395); } if (TypicalSupport.match$221(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4399 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4399); } if (TypicalSupport.match$258(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4403 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4403); } if (TypicalSupport.match$290(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4407 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4407); } if (TypicalSupport.match$296(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4411 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4411); } if (TypicalSupport.match$3520(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4415 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4415); } if (TypicalSupport.match$334(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4419 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4419); } if (TypicalSupport.match$352(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4423 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4423); } if (TypicalSupport.match$492(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4427 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4427); } if (TypicalSupport.match$692(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4431 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4431); } if (TypicalSupport.match$3429(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4435 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4435); } if (TypicalSupport.match$3437(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4439 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4439); } if (TypicalSupport.match$2413(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4443 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4443); } if (TypicalSupport.match$9(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 1, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4447 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4447); } if (TypicalSupport.match$2522(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4451 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4451); } if (TypicalSupport.match$2822(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4455 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4455); } if (TypicalSupport.match$2881(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4459 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4459); } if (TypicalSupport.match$3421(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4463 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4463); } if (TypicalSupport.match$193(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4467 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4467); } if (TypicalSupport.match$184(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4471 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4471); } if (TypicalSupport.match$282(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4475 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4475); } if (TypicalSupport.match$3425(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 0, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4479 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4479); } if (TypicalSupport.match$5(arg$4391)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 1, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4483 = Analyzer.cast(new Let<Object>() { { TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4483); } if (TypicalSupport.match$217(arg$4391)) { final Node n = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4487 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4487); } if (TypicalSupport.match$33(arg$4391)) { final Node n = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4491 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4491); } if (TypicalSupport.match$2923(arg$4391)) { final Node n = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4495 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4495); } if (TypicalSupport.match$37(arg$4391)) { final Node n = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4499 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4499); } if (TypicalSupport.match$77(arg$4391)) { final Node n = (arg$4391.size() > 2 ? arg$4391.getGeneric(2) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4503 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4503); } if (TypicalSupport.match$69(arg$4391)) { final Node n = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4507 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4507); } if (TypicalSupport.match$57(arg$4391)) { final Node n = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4511 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4511); } if (TypicalSupport.match$2286(arg$4391)) { final Node n = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4515 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4515); } if (TypicalSupport.match$49(arg$4391)) { final Node n = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4519 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4519); } if (TypicalSupport.match$2392(arg$4391)) { final Node n = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4523 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4523); } if (TypicalSupport.match$2403(arg$4391)) { final Node n = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4527 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4527); } if (TypicalSupport.match$45(arg$4391)) { final Node n = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4531 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4531); } if (TypicalSupport.match$25(arg$4391)) { final Node n = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4535 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4535); } if (TypicalSupport.match$13(arg$4391)) { final Node n = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4539 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4539); } if (TypicalSupport.match$41(arg$4391)) { final Node n = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4543 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4543); } if (TypicalSupport.match$2873(arg$4391)) { final Node n = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4547 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4547); } if (TypicalSupport.match$21(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 2 ? arg$4391.getGeneric(2) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4551 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4551); } if (TypicalSupport.match$73(arg$4391)) { final Node n1 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); final Node n2 = (arg$4391.size() > 2 ? arg$4391.getGeneric(2) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4555 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4555); } if (TypicalSupport.match$85(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4559 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4559); } if (TypicalSupport.match$300(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4563 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4563); } if (TypicalSupport.match$319(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4567 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4567); } if (TypicalSupport.match$325(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4571 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4571); } if (TypicalSupport.match$376(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4575 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4575); } if (TypicalSupport.match$496(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4579 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4579); } if (TypicalSupport.match$84(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4583 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4583); } if (TypicalSupport.match$504(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4587 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4587); } if (TypicalSupport.match$512(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 2 ? arg$4391.getGeneric(2) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4591 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4591); } if (TypicalSupport.match$518(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 2 ? arg$4391.getGeneric(2) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4595 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4595); } if (TypicalSupport.match$566(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 2 ? arg$4391.getGeneric(2) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4599 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4599); } if (TypicalSupport.match$622(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 2 ? arg$4391.getGeneric(2) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4603 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4603); } if (TypicalSupport.match$686(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4607 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4607); } if (TypicalSupport.match$2280(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4611 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4611); } if (TypicalSupport.match$83(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4615 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4615); } if (TypicalSupport.match$3280(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4619 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4619); } if (TypicalSupport.match$268(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4623 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4623); } if (TypicalSupport.match$2897(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4627 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4627); } if (TypicalSupport.match$2901(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4631 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4631); } if (TypicalSupport.match$678(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 2 ? arg$4391.getGeneric(2) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4635 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4635); } if (TypicalSupport.match$2808(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4639 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4639); } if (TypicalSupport.match$2428(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4643 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4643); } if (TypicalSupport.match$2440(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4647 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4647); } if (TypicalSupport.match$154(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4391, 2, arg$4391.size())); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4651 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); TypicalSupport.map$129.apply(resolveNode, nl); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4651); } if (TypicalSupport.match$4652(arg$4391)) { matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4655 = Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4655); } if (TypicalSupport.match$4656(arg$4391)) { matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4659 = Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4659); } if (TypicalSupport.match$4660(arg$4391)) { matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4663 = Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4663); } if (TypicalSupport.match$4664(arg$4391)) { matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4667 = Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4667); } if (TypicalSupport.match$4668(arg$4391)) { matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4671 = Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4671); } if (TypicalSupport.match$4672(arg$4391)) { matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4675 = Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4675); } if (TypicalSupport.match$4676(arg$4391)) { matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4679 = Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4679); } if (TypicalSupport.match$705(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); final Node n3 = (arg$4391.size() > 2 ? arg$4391.getGeneric(2) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4683 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); resolveNode.apply(n3); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4683); } if (TypicalSupport.match$2841(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); final Node n3 = (arg$4391.size() > 2 ? arg$4391.getGeneric(2) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4687 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); resolveNode.apply(n3); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4687); } if (TypicalSupport.match$2814(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); final Node n3 = (arg$4391.size() > 2 ? arg$4391.getGeneric(2) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4691 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); resolveNode.apply(n3); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4691); } if (TypicalSupport.match$2418(arg$4391)) { final Node n1 = (arg$4391.size() > 0 ? arg$4391.getGeneric(0) : null); final Node n2 = (arg$4391.size() > 1 ? arg$4391.getGeneric(1) : null); final Node n3 = (arg$4391.size() > 2 ? arg$4391.getGeneric(2) : null); final Node n4 = (arg$4391.size() > 3 ? arg$4391.getGeneric(3) : null); matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4695 = Analyzer.cast(new Let<Object>() { { resolveNode.apply(n1); resolveNode.apply(n2); resolveNode.apply(n3); resolveNode.apply(n4); } public Object apply() { return Analyzer.cast(null == Primitives.hasAnnotation.apply(no, "__type") || !Primitives.hasAnnotation.apply(no, "__type") ? null : new Let<Object>() { final TypicalTypes.raw_type<?> t; final TypicalTypes.raw_type<?> ty; { t = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); ty = Analyzer.cast(resolveType.apply(t)); Primitives.annotate.apply(no, "__type", ty); } public Object apply() { return Analyzer.cast(null); } }.apply()); } }.apply()); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4695); } if (true) { matching_nodes.add(arg$4391); if ((null != arg$4391 && processScopeNodes.contains(arg$4391.getName()))) { processScope(arg$4391, getScope); } checkEnterScope(arg$4391); final Object retValue$4698 = Analyzer.cast(null); checkExitScope(arg$4391); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4698); } return null; } }.apply(); } }; final Function.F1<Pair<Node>, Pair<Node>> getPatternNodes = new Function.F1<Pair<Node>, Pair<Node>>() { public Pair<Node> apply(final Pair<Node> nl) { return new Match<Pair<Node>>() { public Pair<Node> apply() { final Pair<Node> arg$4700 = Analyzer.cast(nl); if ((null == arg$4700)) { return null; } if (TypicalSupport.match$336(arg$4700)) { return Analyzer.cast(Pair.<Node>empty()); } if ((null != arg$4700 && !((Pair)arg$4700).isEmpty())) { final Pair<Node> list$4702 = Analyzer.cast(arg$4700); final Node x = GNode.cast(Primitives.wrapHead(list$4702)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$4702)); return Analyzer.cast(new Let<Pair<Node>>() { final Pair<Node> pl; { pl = Analyzer.cast(getNodeList.apply(x)); } public Pair<Node> apply() { return Analyzer.cast(TypicalSupport.append$128.apply(pl, getPatternNodes.apply(xs))); } }.apply()); } return null; } }.apply(); } }; final Function.F1<Pair<TypicalTypes.patternRecord>, Pair<Node>> getPatternRecords = new Function.F1<Pair<TypicalTypes.patternRecord>, Pair<Node>>() { public Pair<TypicalTypes.patternRecord> apply(final Pair<Node> nl) { return new Match<Pair<TypicalTypes.patternRecord>>() { public Pair<TypicalTypes.patternRecord> apply() { final Pair<Node> arg$4704 = Analyzer.cast(nl); if ((null == arg$4704)) { return null; } if (TypicalSupport.match$336(arg$4704)) { return Analyzer.cast(Pair.<TypicalTypes.patternRecord>empty()); } if ((null != arg$4704 && !((Pair)arg$4704).isEmpty())) { final Pair<Node> list$4706 = Analyzer.cast(arg$4704); final Node x = GNode.cast(Primitives.wrapHead(list$4706)); final Pair<Node> xs = Analyzer.cast(Primitives.wrapTail(list$4706)); return Analyzer.cast(Primitives.wrapCons(getPatternRecord.apply(x), getPatternRecords.apply(xs))); } return null; } }.apply(); } }; final Function.F1<TypicalTypes.patternRecord, Node> getPatternRecord = new Function.F1<TypicalTypes.patternRecord, Node>() { public TypicalTypes.patternRecord apply(final Node n) { return new Match<TypicalTypes.patternRecord>() { public TypicalTypes.patternRecord apply() { final Node arg$4708 = GNode.cast(n); if ((null == arg$4708)) { return null; } if (TypicalSupport.match$296(arg$4708)) { final Pair<Node> pl = Analyzer.cast(Primitives.getChildren(arg$4708, 0, arg$4708.size())); matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4712 = Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.TupPattern(getPatternRecords.apply(pl)), n, Boolean.FALSE)); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4712); } if (TypicalSupport.match$300(arg$4708)) { final Node p = (arg$4708.size() > 0 ? arg$4708.getGeneric(0) : null); matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4716 = Analyzer.cast(new Let<TypicalTypes.patternRecord>() { final TypicalTypes.patternRecord pa; { pa = Analyzer.cast(getPatternRecord.apply(p)); } public TypicalTypes.patternRecord apply() { return Analyzer.cast(new TypicalTypes.patternRecord(null == pa ? null : pa.pat, n, Boolean.TRUE)); } }.apply()); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4716); } if (TypicalSupport.match$57(arg$4708)) { final Node p = (arg$4708.size() > 0 ? arg$4708.getGeneric(0) : null); matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4720 = Analyzer.cast(getPatternRecord.apply(p)); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4720); } if (TypicalSupport.match$319(arg$4708)) { final Node p = (arg$4708.size() > 0 ? arg$4708.getGeneric(0) : null); matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4724 = Analyzer.cast(getPatternRecord.apply(p)); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4724); } if (TypicalSupport.match$325(arg$4708)) { final Node p1 = (arg$4708.size() > 0 ? arg$4708.getGeneric(0) : null); final Node p2 = (arg$4708.size() > 1 ? arg$4708.getGeneric(1) : null); matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4728 = Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.PairPattern(getPatternRecord.apply(p1), getPatternRecord.apply(p2)), n, Boolean.FALSE)); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4728); } if (TypicalSupport.match$65(arg$4708)) { final String s = (arg$4708.size() > 0 ? arg$4708.getString(0) : null); matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4732 = Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.VariablePattern(s), n, Boolean.FALSE)); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4732); } if (TypicalSupport.match$5(arg$4708)) { final String s = (arg$4708.size() > 0 ? arg$4708.getString(0) : null); final Pair<Node> nodList = Analyzer.cast(Primitives.getChildren(arg$4708, 1, arg$4708.size())); matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4744 = Analyzer.cast(new Match<TypicalTypes.patternRecord>() { public TypicalTypes.patternRecord apply() { final Pair<Node> arg$4738 = Analyzer.cast(nodList); if ((null == arg$4738)) { return null; } if (TypicalSupport.match$400(arg$4738)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4738.get(0), 0, arg$4738.get(0).size())); return Analyzer.cast(new Let<TypicalTypes.patternRecord>() { final Pair<TypicalTypes.patternRecord> pl; { pl = Analyzer.cast(getPatternRecords.apply(nl)); } public TypicalTypes.patternRecord apply() { return Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.ConstructorPattern(s, pl), n, Boolean.FALSE)); } }.apply()); } if (TypicalSupport.match$435(arg$4738)) { return Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.ConstructorPattern(s, null), n, Boolean.FALSE)); } if (true) { return Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.ConstructorPattern(s, Pair.<TypicalTypes.patternRecord>empty()), n, Boolean.FALSE)); } return null; } }.apply()); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4744); } if (TypicalSupport.match$2931(arg$4708)) { matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4748 = Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.BotPattern(), n, Boolean.FALSE)); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4748); } if (TypicalSupport.match$334(arg$4708)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4708, 0, arg$4708.size())); matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4752 = Analyzer.cast(new Let<TypicalTypes.patternRecord>() { final Pair<TypicalTypes.patternRecord> pl; final TypicalTypes.patternRecord res; { pl = Analyzer.cast(getPatternRecords.apply(nl)); res = Analyzer.cast(getPairFromList.apply(pl)); } public TypicalTypes.patternRecord apply() { return Analyzer.cast(new TypicalTypes.patternRecord(null == res ? null : res.pat, n, Boolean.FALSE)); } }.apply()); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4752); } if (TypicalSupport.match$352(arg$4708)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4708, 0, arg$4708.size())); matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4756 = Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.RecPattern(getPatternRecords.apply(nl)), n, Boolean.FALSE)); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4756); } if (TypicalSupport.match$376(arg$4708)) { final Node lowID = (arg$4708.size() > 0 ? arg$4708.getGeneric(0) : null); final Node p = (arg$4708.size() > 1 ? arg$4708.getGeneric(1) : null); matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4760 = Analyzer.cast(new Let<TypicalTypes.patternRecord>() { final String s; { s = Analyzer.cast(getString.apply(lowID)); } public TypicalTypes.patternRecord apply() { return Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.RecFieldPattern(s, getPatternRecord.apply(p)), n, Boolean.FALSE)); } }.apply()); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4760); } if (TypicalSupport.match$4761(arg$4708)) { final String s = (arg$4708.size() > 0 ? arg$4708.getString(0) : null); matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4764 = Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.ConstantPattern(new TypicalTypes.StringValue(s)), n, Boolean.FALSE)); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4764); } if (TypicalSupport.match$4765(arg$4708)) { final String s = (arg$4708.size() > 0 ? arg$4708.getString(0) : null); matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4768 = Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.ConstantPattern(new TypicalTypes.IntValue(Primitives.stoi.apply(s, BigInteger.valueOf(10)))), n, Boolean.FALSE)); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4768); } if (TypicalSupport.match$4769(arg$4708)) { final String s = (arg$4708.size() > 0 ? arg$4708.getString(0) : null); matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4772 = Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.ConstantPattern(new TypicalTypes.FloatValue(Primitives.stof.apply(s))), n, Boolean.FALSE)); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4772); } if (TypicalSupport.match$4773(arg$4708)) { final String s = (arg$4708.size() > 0 ? arg$4708.getString(0) : null); matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4776 = Analyzer.cast(new Let<TypicalTypes.patternRecord>() { final Boolean res; { res = Analyzer.cast(null == Primitives.equal.apply("true", s) ? null : Primitives.equal.apply("true", s) ? Boolean.TRUE : Boolean.FALSE); } public TypicalTypes.patternRecord apply() { return Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.ConstantPattern(new TypicalTypes.BoolValue(res)), n, Boolean.FALSE)); } }.apply()); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4776); } if (TypicalSupport.match$2935(arg$4708)) { matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4780 = Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.WildCardPattern(), n, Boolean.FALSE)); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4780); } if (true) { matching_nodes.add(arg$4708); if ((null != arg$4708 && processScopeNodes.contains(arg$4708.getName()))) { processScope(arg$4708, getScope); } checkEnterScope(arg$4708); final Object retValue$4783 = Analyzer.cast(null); checkExitScope(arg$4708); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4783); } return null; } }.apply(); } }; final Function.F1<TypicalTypes.patternRecord, Pair<TypicalTypes.patternRecord>> getPairFromList = new Function.F1<TypicalTypes.patternRecord, Pair<TypicalTypes.patternRecord>>() { public TypicalTypes.patternRecord apply(final Pair<TypicalTypes.patternRecord> pl) { return new Match<TypicalTypes.patternRecord>() { public TypicalTypes.patternRecord apply() { final Pair<TypicalTypes.patternRecord> arg$4785 = Analyzer.cast(pl); if ((null == arg$4785)) { return null; } if (TypicalSupport.match$4786(arg$4785)) { return Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.EmptyPattern(), GNode.create("ListPattern", Pair.<Node>empty()), Boolean.FALSE)); } if ((null != arg$4785 && !((Pair)arg$4785).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$4787 = Analyzer.cast(arg$4785); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$4787)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$4787)); return Analyzer.cast(new Let<TypicalTypes.patternRecord>() { final TypicalTypes.patternRecord pt; { pt = Analyzer.cast(getPairFromList.apply(xs)); } public TypicalTypes.patternRecord apply() { return Analyzer.cast(new Match<TypicalTypes.patternRecord>() { public TypicalTypes.patternRecord apply() { final Node arg$4797 = GNode.cast(null == pt ? null : pt.nod); if ((null == arg$4797)) { return null; } if (TypicalSupport.match$334(arg$4797)) { final Pair<Node> nl = Analyzer.cast(Primitives.getChildren(arg$4797, 0, arg$4797.size())); matching_nodes.add(arg$4797); if ((null != arg$4797 && processScopeNodes.contains(arg$4797.getName()))) { processScope(arg$4797, getScope); } checkEnterScope(arg$4797); final Object retValue$4801 = Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.PairPattern(x, pt), GNode.create("ListPattern", TypicalSupport.append$128.apply(new Pair<Node>(null == x ? null : x.nod), nl)), Boolean.FALSE)); checkExitScope(arg$4797); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4801); } if (true) { matching_nodes.add(arg$4797); if ((null != arg$4797 && processScopeNodes.contains(arg$4797.getName()))) { processScope(arg$4797, getScope); } checkEnterScope(arg$4797); final Object retValue$4804 = Analyzer.cast(null); checkExitScope(arg$4797); matching_nodes.remove(matching_nodes.size() - 1); return Analyzer.cast(retValue$4804); } return null; } }.apply()); } }.apply()); } return null; } }.apply(); } }; final Function.F2<Object, Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>> checkPatterns = new Function.F2<Object, Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>>() { public Object apply(final Pair<TypicalTypes.patternRecord> preList, final Pair<TypicalTypes.patternRecord> posList) { return new Match<Object>() { public Object apply() { final Pair<TypicalTypes.patternRecord> arg$4807 = Analyzer.cast(posList); if ((null == arg$4807)) { return null; } if (TypicalSupport.match$4786(arg$4807)) { return Analyzer.cast(null); } if ((null != arg$4807 && !((Pair)arg$4807).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$4809 = Analyzer.cast(arg$4807); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$4809)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$4809)); return Analyzer.cast(new Let<Object>() { { checkUnused.apply(preList, x); } public Object apply() { return Analyzer.cast(checkPatterns.apply(TypicalSupport.append$4810.apply(preList, new Pair<TypicalTypes.patternRecord>(x)), xs)); } }.apply()); } return null; } }.apply(); } }; final Function.F2<Boolean, Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord> checkUnused = new Function.F2<Boolean, Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord>() { public Boolean apply(final Pair<TypicalTypes.patternRecord> preList, final TypicalTypes.patternRecord pat) { return new Match<Boolean>() { public Boolean apply() { final Pair<TypicalTypes.patternRecord> arg$4812 = Analyzer.cast(preList); if ((null == arg$4812)) { return null; } if (TypicalSupport.match$4786(arg$4812)) { return Analyzer.cast(Boolean.FALSE); } if ((null != arg$4812 && !((Pair)arg$4812).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$4814 = Analyzer.cast(arg$4812); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$4814)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$4814)); return Analyzer.cast(null == isMoreGeneral.apply(x, pat) ? null : isMoreGeneral.apply(x, pat) ? new Let<Boolean>() { final Node nod; { nod = Analyzer.cast(null == pat ? null : pat.nod); error("unused pattern", nod); } public Boolean apply() { return Analyzer.cast(Boolean.TRUE); } }.apply() : checkUnused.apply(xs, pat)); } return null; } }.apply(); } }; final Function.F2<Boolean, TypicalTypes.patternRecord, TypicalTypes.patternRecord> isMoreGeneral = new Function.F2<Boolean, TypicalTypes.patternRecord, TypicalTypes.patternRecord>() { public Boolean apply(final TypicalTypes.patternRecord p, final TypicalTypes.patternRecord q) { return new Match<Boolean>() { public Boolean apply() { final TypicalTypes.pattern arg$4816 = Analyzer.cast(null == p ? null : p.pat); if ((null == arg$4816)) { return null; } if ((null != arg$4816)) switch (arg$4816.tag()) { case WildCardPattern: if (TypicalSupport.match$4817(arg$4816)) { return Analyzer.cast(Boolean.TRUE); } break; default: break; }; if (true) { return Analyzer.cast(null == (null == p ? null : p.guarded) ? null : (null == p ? null : p.guarded) ? Boolean.FALSE : null == Primitives.and.apply(null == q ? null : q.guarded, equalPattern.apply(p, q)) ? null : Primitives.and.apply(null == q ? null : q.guarded, equalPattern.apply(p, q)) ? Boolean.TRUE : new Match<Boolean>() { public Boolean apply() { final TypicalTypes.pattern arg$4901 = Analyzer.cast(null == p ? null : p.pat); if ((null == arg$4901)) { return null; } if ((null != arg$4901)) switch (arg$4901.tag()) { case PairPattern: if (TypicalSupport.match$4879(arg$4901)) { final TypicalTypes.patternRecord hd1 = Analyzer.cast(arg$4901.getTuple().get1()); final TypicalTypes.patternRecord tl1 = Analyzer.cast(arg$4901.getTuple().get2()); return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.pattern arg$4966 = Analyzer.cast(null == q ? null : q.pat); if ((null == arg$4966)) { return null; } if ((null != arg$4966)) switch (arg$4966.tag()) { case PairPattern: if (TypicalSupport.match$4879(arg$4966)) { final TypicalTypes.patternRecord hd2 = Analyzer.cast(arg$4966.getTuple().get1()); final TypicalTypes.patternRecord tl2 = Analyzer.cast(arg$4966.getTuple().get2()); return Analyzer.cast(Primitives.and.apply(isMoreGeneral.apply(hd1, hd2), isMoreGeneral.apply(tl1, tl2))); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } break; case ConstructorPattern: if (TypicalSupport.match$4865(arg$4901)) { final String s1 = Analyzer.cast(arg$4901.getTuple().get1()); final Pair<TypicalTypes.patternRecord> pl = Analyzer.cast(arg$4901.getTuple().get2()); return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.pattern arg$4952 = Analyzer.cast(null == q ? null : q.pat); if ((null == arg$4952)) { return null; } if ((null != arg$4952)) switch (arg$4952.tag()) { case ConstructorPattern: if (TypicalSupport.match$4865(arg$4952)) { final String s2 = Analyzer.cast(arg$4952.getTuple().get1()); final Pair<TypicalTypes.patternRecord> ql = Analyzer.cast(arg$4952.getTuple().get2()); return Analyzer.cast(null == Primitives.not.apply(Primitives.equal.apply(s1, s2)) ? null : Primitives.not.apply(Primitives.equal.apply(s1, s2)) ? Boolean.FALSE : null == Primitives.isBottom.apply(pl) ? null : Primitives.isBottom.apply(pl) ? Boolean.TRUE : null == Primitives.isBottom.apply(ql) ? null : Primitives.isBottom.apply(ql) ? Boolean.FALSE : lessPatternList.apply(pl, ql)); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } break; case RecFieldPattern: if (TypicalSupport.match$4893(arg$4901)) { final String str1 = Analyzer.cast(arg$4901.getTuple().get1()); final TypicalTypes.patternRecord p1 = Analyzer.cast(arg$4901.getTuple().get2()); return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.pattern arg$4980 = Analyzer.cast(null == q ? null : q.pat); if ((null == arg$4980)) { return null; } if ((null != arg$4980)) switch (arg$4980.tag()) { case RecFieldPattern: if (TypicalSupport.match$4893(arg$4980)) { final String str2 = Analyzer.cast(arg$4980.getTuple().get1()); final TypicalTypes.patternRecord p2 = Analyzer.cast(arg$4980.getTuple().get2()); return Analyzer.cast(Primitives.and.apply(Primitives.equal.apply(str1, str2), isMoreGeneral.apply(p1, p2))); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } break; case VariablePattern: if (TypicalSupport.match$4819(arg$4901)) { return Analyzer.cast(Boolean.TRUE); } break; case TupPattern: if (TypicalSupport.match$4858(arg$4901)) { final Pair<TypicalTypes.patternRecord> pl = Analyzer.cast(arg$4901.getTuple().get1()); return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.pattern arg$4945 = Analyzer.cast(null == q ? null : q.pat); if ((null == arg$4945)) { return null; } if ((null != arg$4945)) switch (arg$4945.tag()) { case TupPattern: if (TypicalSupport.match$4858(arg$4945)) { final Pair<TypicalTypes.patternRecord> ql = Analyzer.cast(arg$4945.getTuple().get1()); return Analyzer.cast(lessPatternList.apply(pl, ql)); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } break; case BotPattern: if (TypicalSupport.match$4820(arg$4901)) { return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.pattern arg$4907 = Analyzer.cast(null == q ? null : q.pat); if ((null == arg$4907)) { return null; } if ((null != arg$4907)) switch (arg$4907.tag()) { case BotPattern: if (TypicalSupport.match$4820(arg$4907)) { return Analyzer.cast(Boolean.TRUE); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } break; case RecPattern: if (TypicalSupport.match$4886(arg$4901)) { final Pair<TypicalTypes.patternRecord> pl = Analyzer.cast(arg$4901.getTuple().get1()); return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.pattern arg$4973 = Analyzer.cast(null == q ? null : q.pat); if ((null == arg$4973)) { return null; } if ((null != arg$4973)) switch (arg$4973.tag()) { case RecPattern: if (TypicalSupport.match$4886(arg$4973)) { final Pair<TypicalTypes.patternRecord> ql = Analyzer.cast(arg$4973.getTuple().get1()); return Analyzer.cast(checkListInList.apply(ql, pl)); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } break; case EmptyPattern: if (TypicalSupport.match$4872(arg$4901)) { return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.pattern arg$4959 = Analyzer.cast(null == q ? null : q.pat); if ((null == arg$4959)) { return null; } if ((null != arg$4959)) switch (arg$4959.tag()) { case EmptyPattern: if (TypicalSupport.match$4872(arg$4959)) { return Analyzer.cast(Boolean.TRUE); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } break; case ConstantPattern: if (TypicalSupport.match$4827(arg$4901)) { final TypicalTypes.value val = Analyzer.cast(arg$4901.getTuple().get1()); return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.pattern arg$4926 = Analyzer.cast(null == q ? null : q.pat); if ((null == arg$4926)) { return null; } if ((null != arg$4926)) switch (arg$4926.tag()) { case ConstantPattern: if (TypicalSupport.match$4827(arg$4926)) { final TypicalTypes.value va = Analyzer.cast(arg$4926.getTuple().get1()); return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final Tuple.T2<TypicalTypes.value, TypicalTypes.value> arg$4934 = Analyzer.cast(new Tuple.T2<TypicalTypes.value, TypicalTypes.value>(val, va)); if ((null == arg$4934)) { return null; } if (TypicalSupport.match$4831(arg$4934)) { final String s1 = Analyzer.cast(arg$4934.get1().getTuple().get1()); final String s2 = Analyzer.cast(arg$4934.get2().getTuple().get1()); return Analyzer.cast(Primitives.equal.apply(s1, s2)); } if (TypicalSupport.match$4832(arg$4934)) { final Double f1 = Analyzer.cast(arg$4934.get1().getTuple().get1()); final Double f2 = Analyzer.cast(arg$4934.get2().getTuple().get1()); return Analyzer.cast(Primitives.equal.apply(f1, f2)); } if (TypicalSupport.match$4833(arg$4934)) { final BigInteger in1 = Analyzer.cast(arg$4934.get1().getTuple().get1()); final BigInteger in2 = Analyzer.cast(arg$4934.get2().getTuple().get1()); return Analyzer.cast(Primitives.equal.apply(in1, in2)); } if (TypicalSupport.match$4834(arg$4934)) { final Boolean b1 = Analyzer.cast(arg$4934.get1().getTuple().get1()); final Boolean b2 = Analyzer.cast(arg$4934.get2().getTuple().get1()); return Analyzer.cast(Primitives.equal.apply(b1, b2)); } if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F2<Boolean, Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>> lessPatternList = new Function.F2<Boolean, Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>>() { public Boolean apply(final Pair<TypicalTypes.patternRecord> pl, final Pair<TypicalTypes.patternRecord> ql) { return new Match<Boolean>() { public Boolean apply() { final Pair<TypicalTypes.patternRecord> arg$4985 = Analyzer.cast(pl); if ((null == arg$4985)) { return null; } if (TypicalSupport.match$4786(arg$4985)) { return Analyzer.cast(Boolean.TRUE); } if ((null != arg$4985 && !((Pair)arg$4985).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$4987 = Analyzer.cast(arg$4985); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$4987)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$4987)); return Analyzer.cast(null == isMoreGeneral.apply(x, TypicalSupport.head$4988.apply(ql)) ? null : isMoreGeneral.apply(x, TypicalSupport.head$4988.apply(ql)) ? lessPatternList.apply(xs, TypicalSupport.tail$4989.apply(ql)) : Boolean.FALSE); } return null; } }.apply(); } }; final Function.F2<Boolean, TypicalTypes.patternRecord, TypicalTypes.patternRecord> equalPattern = new Function.F2<Boolean, TypicalTypes.patternRecord, TypicalTypes.patternRecord>() { public Boolean apply(final TypicalTypes.patternRecord p, final TypicalTypes.patternRecord q) { return new Match<Boolean>() { public Boolean apply() { final Tuple.T2<TypicalTypes.pattern, TypicalTypes.pattern> arg$4991 = Analyzer.cast(new Tuple.T2<TypicalTypes.pattern, TypicalTypes.pattern>(null == p ? null : p.pat, null == q ? null : q.pat)); if ((null == arg$4991)) { return null; } if (TypicalSupport.match$4992(arg$4991)) { return Analyzer.cast(Boolean.TRUE); } if (TypicalSupport.match$4993(arg$4991)) { return Analyzer.cast(Boolean.TRUE); } if (TypicalSupport.match$4994(arg$4991)) { final TypicalTypes.value val1 = Analyzer.cast(arg$4991.get1().getTuple().get1()); final TypicalTypes.value val2 = Analyzer.cast(arg$4991.get2().getTuple().get1()); return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final Tuple.T2<TypicalTypes.value, TypicalTypes.value> arg$5001 = Analyzer.cast(new Tuple.T2<TypicalTypes.value, TypicalTypes.value>(val1, val2)); if ((null == arg$5001)) { return null; } if (TypicalSupport.match$4831(arg$5001)) { final String str1 = Analyzer.cast(arg$5001.get1().getTuple().get1()); final String str2 = Analyzer.cast(arg$5001.get2().getTuple().get1()); return Analyzer.cast(Primitives.equal.apply(str1, str2)); } if (TypicalSupport.match$4832(arg$5001)) { final Double f1 = Analyzer.cast(arg$5001.get1().getTuple().get1()); final Double f2 = Analyzer.cast(arg$5001.get2().getTuple().get1()); return Analyzer.cast(Primitives.equal.apply(f1, f2)); } if (TypicalSupport.match$4833(arg$5001)) { final BigInteger in1 = Analyzer.cast(arg$5001.get1().getTuple().get1()); final BigInteger in2 = Analyzer.cast(arg$5001.get2().getTuple().get1()); return Analyzer.cast(Primitives.equal.apply(in1, in2)); } if (TypicalSupport.match$4834(arg$5001)) { final Boolean b1 = Analyzer.cast(arg$5001.get1().getTuple().get1()); final Boolean b2 = Analyzer.cast(arg$5001.get2().getTuple().get1()); return Analyzer.cast(Primitives.equal.apply(b1, b2)); } if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } if (TypicalSupport.match$5007(arg$4991)) { final Pair<TypicalTypes.patternRecord> pl = Analyzer.cast(arg$4991.get1().getTuple().get1()); final Pair<TypicalTypes.patternRecord> ql = Analyzer.cast(arg$4991.get2().getTuple().get1()); return Analyzer.cast(equalPatternList.apply(pl, ql)); } if (TypicalSupport.match$5008(arg$4991)) { final String s1 = Analyzer.cast(arg$4991.get1().getTuple().get1()); final Pair<TypicalTypes.patternRecord> pl = Analyzer.cast(arg$4991.get1().getTuple().get2()); final String s2 = Analyzer.cast(arg$4991.get2().getTuple().get1()); final Pair<TypicalTypes.patternRecord> ql = Analyzer.cast(arg$4991.get2().getTuple().get2()); return Analyzer.cast(null == Primitives.not.apply(Primitives.equal.apply(s1, s2)) ? null : Primitives.not.apply(Primitives.equal.apply(s1, s2)) ? Boolean.FALSE : null == Primitives.and.apply(Primitives.isBottom.apply(pl), Primitives.isBottom.apply(ql)) ? null : Primitives.and.apply(Primitives.isBottom.apply(pl), Primitives.isBottom.apply(ql)) ? Boolean.TRUE : null == Primitives.or.apply(Primitives.isBottom.apply(pl), Primitives.isBottom.apply(ql)) ? null : Primitives.or.apply(Primitives.isBottom.apply(pl), Primitives.isBottom.apply(ql)) ? Boolean.FALSE : equalPatternList.apply(pl, ql)); } if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply(); } }; final Function.F2<Boolean, Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>> equalPatternList = new Function.F2<Boolean, Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>>() { public Boolean apply(final Pair<TypicalTypes.patternRecord> pl, final Pair<TypicalTypes.patternRecord> ql) { return new Match<Boolean>() { public Boolean apply() { final Pair<TypicalTypes.patternRecord> arg$5010 = Analyzer.cast(pl); if ((null == arg$5010)) { return null; } if (TypicalSupport.match$4786(arg$5010)) { return Analyzer.cast(Boolean.TRUE); } if ((null != arg$5010 && !((Pair)arg$5010).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$5012 = Analyzer.cast(arg$5010); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$5012)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$5012)); return Analyzer.cast(null == equalPattern.apply(x, TypicalSupport.head$4988.apply(ql)) ? null : equalPattern.apply(x, TypicalSupport.head$4988.apply(ql)) ? equalPatternList.apply(xs, TypicalSupport.tail$4989.apply(ql)) : Boolean.FALSE); } return null; } }.apply(); } }; final Function.F2<Boolean, Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>> checkListInList = new Function.F2<Boolean, Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>>() { public Boolean apply(final Pair<TypicalTypes.patternRecord> pl, final Pair<TypicalTypes.patternRecord> ql) { return new Match<Boolean>() { public Boolean apply() { final Pair<TypicalTypes.patternRecord> arg$5014 = Analyzer.cast(ql); if ((null == arg$5014)) { return null; } if (TypicalSupport.match$4786(arg$5014)) { return Analyzer.cast(Boolean.TRUE); } if ((null != arg$5014 && !((Pair)arg$5014).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$5016 = Analyzer.cast(arg$5014); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$5016)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$5016)); return Analyzer.cast(null == checkInList.apply(pl, x) ? null : checkInList.apply(pl, x) ? checkListInList.apply(pl, xs) : Boolean.FALSE); } return null; } }.apply(); } }; final Function.F2<Boolean, Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord> checkInList = new Function.F2<Boolean, Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord>() { public Boolean apply(final Pair<TypicalTypes.patternRecord> pl, final TypicalTypes.patternRecord q) { return new Match<Boolean>() { public Boolean apply() { final Pair<TypicalTypes.patternRecord> arg$5018 = Analyzer.cast(pl); if ((null == arg$5018)) { return null; } if (TypicalSupport.match$4786(arg$5018)) { return Analyzer.cast(Boolean.FALSE); } if ((null != arg$5018 && !((Pair)arg$5018).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$5020 = Analyzer.cast(arg$5018); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$5020)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$5020)); return Analyzer.cast(null == isMoreGeneral.apply(q, x) ? null : isMoreGeneral.apply(q, x) ? Boolean.TRUE : checkInList.apply(xs, q)); } return null; } }.apply(); } }; final Function.F1<Object, Pair<Node>> checkIrredundant = new Function.F1<Object, Pair<Node>>() { public Object apply(final Pair<Node> nl) { return new Let<Object>() { final Pair<Node> pl; { pl = Analyzer.cast(getPatternNodes.apply(nl)); } public Object apply() { return Analyzer.cast(null == Primitives.greaterInt.apply(Primitives.length.apply(pl), BigInteger.valueOf(1)) || !Primitives.greaterInt.apply(Primitives.length.apply(pl), BigInteger.valueOf(1)) ? null : new Let<Object>() { final Pair<TypicalTypes.patternRecord> patList; { patList = Analyzer.cast(getPatternRecords.apply(pl)); } public Object apply() { return Analyzer.cast(checkPatterns.apply(new Pair<TypicalTypes.patternRecord>(TypicalSupport.head$4988.apply(patList)), TypicalSupport.tail$4989.apply(patList))); } }.apply()); } }.apply(); } }; final Function.F1<Object, Pair<Node>> checkReduceMatching = new Function.F1<Object, Pair<Node>>() { public Object apply(final Pair<Node> nl) { return new Let<Object>() { final Pair<Node> pl; { pl = Analyzer.cast(getPatternNodes.apply(nl)); } public Object apply() { return Analyzer.cast(null == Primitives.greaterInt.apply(Primitives.length.apply(pl), BigInteger.valueOf(1)) || !Primitives.greaterInt.apply(Primitives.length.apply(pl), BigInteger.valueOf(1)) ? null : new Let<Object>() { final Pair<TypicalTypes.patternRecord> patList; { patList = Analyzer.cast(getPatternRecords.apply(pl)); } public Object apply() { return Analyzer.cast(checkReducePatterns.apply(new Pair<TypicalTypes.patternRecord>(TypicalSupport.head$4988.apply(patList)), TypicalSupport.tail$4989.apply(patList))); } }.apply()); } }.apply(); } }; final Function.F2<Object, Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>> checkReducePatterns = new Function.F2<Object, Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>>() { public Object apply(final Pair<TypicalTypes.patternRecord> preList, final Pair<TypicalTypes.patternRecord> posList) { return new Match<Object>() { public Object apply() { final Pair<TypicalTypes.patternRecord> arg$5022 = Analyzer.cast(posList); if ((null == arg$5022)) { return null; } if (TypicalSupport.match$4786(arg$5022)) { return Analyzer.cast(null); } if ((null != arg$5022 && !((Pair)arg$5022).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$5024 = Analyzer.cast(arg$5022); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$5024)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$5024)); return Analyzer.cast(new Let<Object>() { { checkReduceUnused.apply(preList, x); } public Object apply() { return Analyzer.cast(checkReducePatterns.apply(TypicalSupport.append$4810.apply(preList, new Pair<TypicalTypes.patternRecord>(x)), xs)); } }.apply()); } return null; } }.apply(); } }; final Function.F2<Object, Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord> checkReduceUnused = new Function.F2<Object, Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord>() { public Object apply(final Pair<TypicalTypes.patternRecord> preList, final TypicalTypes.patternRecord pat) { return new Match<Object>() { public Object apply() { final Pair<TypicalTypes.patternRecord> arg$5026 = Analyzer.cast(preList); if ((null == arg$5026)) { return null; } if (TypicalSupport.match$4786(arg$5026)) { return Analyzer.cast(null); } if ((null != arg$5026 && !((Pair)arg$5026).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$5028 = Analyzer.cast(arg$5026); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$5028)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$5028)); return Analyzer.cast(null == containPattern.apply(x, pat) ? null : containPattern.apply(x, pat) ? new Let<Object>() { final Node nod; { nod = Analyzer.cast(null == pat ? null : pat.nod); } public Object apply() { return Analyzer.cast(error("unused pattern", nod)); } }.apply() : checkReduceUnused.apply(xs, pat)); } return null; } }.apply(); } }; final Function.F2<Boolean, TypicalTypes.patternRecord, TypicalTypes.patternRecord> containPattern = new Function.F2<Boolean, TypicalTypes.patternRecord, TypicalTypes.patternRecord>() { public Boolean apply(final TypicalTypes.patternRecord p, final TypicalTypes.patternRecord q) { return new Match<Boolean>() { public Boolean apply() { final TypicalTypes.pattern arg$5030 = Analyzer.cast(null == p ? null : p.pat); if ((null == arg$5030)) { return null; } if ((null != arg$5030)) switch (arg$5030.tag()) { case PairPattern: if (TypicalSupport.match$4879(arg$5030)) { return Analyzer.cast(new Let<Boolean>() { final Pair<TypicalTypes.patternRecord> pl; { pl = Analyzer.cast(getListFromPair.apply(p)); } public Boolean apply() { return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.pattern arg$5046 = Analyzer.cast(null == q ? null : q.pat); if ((null == arg$5046)) { return null; } if ((null != arg$5046)) switch (arg$5046.tag()) { case PairPattern: if (TypicalSupport.match$4879(arg$5046)) { return Analyzer.cast(new Let<Boolean>() { final Pair<TypicalTypes.patternRecord> ql; { ql = Analyzer.cast(getListFromPair.apply(q)); } public Boolean apply() { return Analyzer.cast(null == Primitives.greaterInt.apply(Primitives.length.apply(pl), Primitives.length.apply(ql)) ? null : Primitives.greaterInt.apply(Primitives.length.apply(pl), Primitives.length.apply(ql)) ? Boolean.FALSE : checkContain.apply(ql, pl)); } }.apply()); } break; case EmptyPattern: if (TypicalSupport.match$4872(arg$5046)) { return Analyzer.cast(new Let<Boolean>() { final Pair<TypicalTypes.patternRecord> ql; { ql = Analyzer.cast(getListFromPair.apply(q)); } public Boolean apply() { return Analyzer.cast(null == Primitives.greaterInt.apply(Primitives.length.apply(pl), Primitives.length.apply(ql)) ? null : Primitives.greaterInt.apply(Primitives.length.apply(pl), Primitives.length.apply(ql)) ? Boolean.FALSE : checkContain.apply(ql, pl)); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } }.apply()); } break; case EmptyPattern: if (TypicalSupport.match$4872(arg$5030)) { return Analyzer.cast(new Let<Boolean>() { final Pair<TypicalTypes.patternRecord> pl; { pl = Analyzer.cast(getListFromPair.apply(p)); } public Boolean apply() { return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.pattern arg$5037 = Analyzer.cast(null == q ? null : q.pat); if ((null == arg$5037)) { return null; } if ((null != arg$5037)) switch (arg$5037.tag()) { case PairPattern: if (TypicalSupport.match$4879(arg$5037)) { return Analyzer.cast(new Let<Boolean>() { final Pair<TypicalTypes.patternRecord> ql; { ql = Analyzer.cast(getListFromPair.apply(q)); } public Boolean apply() { return Analyzer.cast(null == Primitives.greaterInt.apply(Primitives.length.apply(pl), Primitives.length.apply(ql)) ? null : Primitives.greaterInt.apply(Primitives.length.apply(pl), Primitives.length.apply(ql)) ? Boolean.FALSE : checkContain.apply(ql, pl)); } }.apply()); } break; case EmptyPattern: if (TypicalSupport.match$4872(arg$5037)) { return Analyzer.cast(new Let<Boolean>() { final Pair<TypicalTypes.patternRecord> ql; { ql = Analyzer.cast(getListFromPair.apply(q)); } public Boolean apply() { return Analyzer.cast(null == Primitives.greaterInt.apply(Primitives.length.apply(pl), Primitives.length.apply(ql)) ? null : Primitives.greaterInt.apply(Primitives.length.apply(pl), Primitives.length.apply(ql)) ? Boolean.FALSE : checkContain.apply(ql, pl)); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } }.apply()); } break; case WildCardPattern: if (TypicalSupport.match$4817(arg$5030)) { return Analyzer.cast(Boolean.TRUE); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply(); } }; final Function.F1<Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord> getListFromPair = new Function.F1<Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord>() { public Pair<TypicalTypes.patternRecord> apply(final TypicalTypes.patternRecord p) { return new Match<Pair<TypicalTypes.patternRecord>>() { public Pair<TypicalTypes.patternRecord> apply() { final TypicalTypes.pattern arg$5051 = Analyzer.cast(null == p ? null : p.pat); if ((null == arg$5051)) { return null; } if ((null != arg$5051)) switch (arg$5051.tag()) { case PairPattern: if (TypicalSupport.match$4879(arg$5051)) { final TypicalTypes.patternRecord hd = Analyzer.cast(arg$5051.getTuple().get1()); final TypicalTypes.patternRecord tl = Analyzer.cast(arg$5051.getTuple().get2()); return Analyzer.cast(TypicalSupport.append$4810.apply(new Pair<TypicalTypes.patternRecord>(hd), getListFromPair.apply(tl))); } break; case EmptyPattern: if (TypicalSupport.match$4872(arg$5051)) { return Analyzer.cast(Pair.<TypicalTypes.patternRecord>empty()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply(); } }; final Function.F2<Boolean, Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>> checkContain = new Function.F2<Boolean, Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>>() { public Boolean apply(final Pair<TypicalTypes.patternRecord> ql, final Pair<TypicalTypes.patternRecord> pl) { return new Match<Boolean>() { public Boolean apply() { final Pair<TypicalTypes.patternRecord> arg$5055 = Analyzer.cast(pl); if ((null == arg$5055)) { return null; } if (TypicalSupport.match$4786(arg$5055)) { return Analyzer.cast(Boolean.TRUE); } if ((null != arg$5055 && !((Pair)arg$5055).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$5057 = Analyzer.cast(arg$5055); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$5057)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$5057)); return Analyzer.cast(new Let<Boolean>() { final Pair<TypicalTypes.patternRecord> rem; { rem = Analyzer.cast(checkRemovePattern.apply(ql, x, Pair.<TypicalTypes.patternRecord>empty())); } public Boolean apply() { return Analyzer.cast(null == Primitives.isBottom.apply(rem) ? null : Primitives.isBottom.apply(rem) ? Boolean.FALSE : checkContain.apply(rem, xs)); } }.apply()); } return null; } }.apply(); } }; final Function.F3<Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord, Pair<TypicalTypes.patternRecord>> checkRemovePattern = new Function.F3<Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord, Pair<TypicalTypes.patternRecord>>() { public Pair<TypicalTypes.patternRecord> apply(final Pair<TypicalTypes.patternRecord> ql, final TypicalTypes.patternRecord pat, final Pair<TypicalTypes.patternRecord> rem) { return new Match<Pair<TypicalTypes.patternRecord>>() { public Pair<TypicalTypes.patternRecord> apply() { final Pair<TypicalTypes.patternRecord> arg$5059 = Analyzer.cast(ql); if ((null == arg$5059)) { return null; } if (TypicalSupport.match$4786(arg$5059)) { return Analyzer.cast(null); } if ((null != arg$5059 && !((Pair)arg$5059).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$5061 = Analyzer.cast(arg$5059); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$5061)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$5061)); return Analyzer.cast(null == isMoreGeneral.apply(x, pat) ? null : isMoreGeneral.apply(x, pat) ? TypicalSupport.append$4810.apply(rem, xs) : checkRemovePattern.apply(xs, pat, TypicalSupport.append$4810.apply(rem, new Pair<TypicalTypes.patternRecord>(x)))); } return null; } }.apply(); } }; final Function.F2<Boolean, Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord> checkUsed = new Function.F2<Boolean, Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord>() { public Boolean apply(final Pair<TypicalTypes.patternRecord> preList, final TypicalTypes.patternRecord pat) { return new Match<Boolean>() { public Boolean apply() { final Pair<TypicalTypes.patternRecord> arg$5063 = Analyzer.cast(preList); if ((null == arg$5063)) { return null; } if (TypicalSupport.match$4786(arg$5063)) { return Analyzer.cast(Boolean.TRUE); } if ((null != arg$5063 && !((Pair)arg$5063).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$5065 = Analyzer.cast(arg$5063); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$5065)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$5065)); return Analyzer.cast(null == isMoreGeneral.apply(x, pat) ? null : isMoreGeneral.apply(x, pat) ? Boolean.FALSE : checkUsed.apply(xs, pat)); } return null; } }.apply(); } }; final Function.F3<Pair<Pair<TypicalTypes.patternRecord>>, Pair<Pair<TypicalTypes.patternRecord>>, Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>> buildMatrix = new Function.F3<Pair<Pair<TypicalTypes.patternRecord>>, Pair<Pair<TypicalTypes.patternRecord>>, Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.patternRecord>>() { public Pair<Pair<TypicalTypes.patternRecord>> apply(final Pair<Pair<TypicalTypes.patternRecord>> matrix, final Pair<TypicalTypes.patternRecord> preList, final Pair<TypicalTypes.patternRecord> postList) { return new Match<Pair<Pair<TypicalTypes.patternRecord>>>() { public Pair<Pair<TypicalTypes.patternRecord>> apply() { final Pair<TypicalTypes.patternRecord> arg$5067 = Analyzer.cast(postList); if ((null == arg$5067)) { return null; } if (TypicalSupport.match$4786(arg$5067)) { return Analyzer.cast(matrix); } if ((null != arg$5067 && !((Pair)arg$5067).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$5069 = Analyzer.cast(arg$5067); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$5069)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$5069)); return Analyzer.cast(null == (null == x ? null : x.guarded) ? null : (null == x ? null : x.guarded) ? buildMatrix.apply(matrix, TypicalSupport.append$4810.apply(preList, new Pair<TypicalTypes.patternRecord>(x)), xs) : null == Primitives.not.apply(checkUsed.apply(preList, x)) ? null : Primitives.not.apply(checkUsed.apply(preList, x)) ? buildMatrix.apply(matrix, preList, xs) : new Let<Pair<Pair<TypicalTypes.patternRecord>>>() { final Pair<TypicalTypes.patternRecord> row; { row = Analyzer.cast(new Pair<TypicalTypes.patternRecord>(x)); } public Pair<Pair<TypicalTypes.patternRecord>> apply() { return Analyzer.cast(buildMatrix.apply(TypicalSupport.append$5070.apply(matrix, new Pair<Pair<TypicalTypes.patternRecord>>(row)), TypicalSupport.append$4810.apply(preList, new Pair<TypicalTypes.patternRecord>(x)), xs)); } }.apply()); } return null; } }.apply(); } }; final Function.F2<Pair<TypicalTypes.constr>, Pair<TypicalTypes.constr>, Pair<Pair<TypicalTypes.patternRecord>>> getSigma = new Function.F2<Pair<TypicalTypes.constr>, Pair<TypicalTypes.constr>, Pair<Pair<TypicalTypes.patternRecord>>>() { public Pair<TypicalTypes.constr> apply(final Pair<TypicalTypes.constr> sigma, final Pair<Pair<TypicalTypes.patternRecord>> matrix) { return new Match<Pair<TypicalTypes.constr>>() { public Pair<TypicalTypes.constr> apply() { final Pair<Pair<TypicalTypes.patternRecord>> arg$5072 = Analyzer.cast(matrix); if ((null == arg$5072)) { return null; } if (TypicalSupport.match$5073(arg$5072)) { return Analyzer.cast(sigma); } if ((null != arg$5072 && !((Pair)arg$5072).isEmpty())) { final Pair<Pair<TypicalTypes.patternRecord>> list$5074 = Analyzer.cast(arg$5072); final Pair<TypicalTypes.patternRecord> x = Analyzer.cast(Primitives.wrapHead(list$5074)); final Pair<Pair<TypicalTypes.patternRecord>> xs = Analyzer.cast(Primitives.wrapTail(list$5074)); return Analyzer.cast(new Let<Pair<TypicalTypes.constr>>() { final TypicalTypes.patternRecord patRec; final TypicalTypes.constr constructor; { patRec = Analyzer.cast(TypicalSupport.head$4988.apply(x)); constructor = Analyzer.cast(getConstructor.apply(patRec)); } public Pair<TypicalTypes.constr> apply() { return Analyzer.cast(getSigma.apply(TypicalSupport.append$5075.apply(sigma, new Pair<TypicalTypes.constr>(constructor)), xs)); } }.apply()); } return null; } }.apply(); } }; final Function.F1<TypicalTypes.constr, TypicalTypes.patternRecord> getConstructor = new Function.F1<TypicalTypes.constr, TypicalTypes.patternRecord>() { public TypicalTypes.constr apply(final TypicalTypes.patternRecord patRec) { return new Match<TypicalTypes.constr>() { public TypicalTypes.constr apply() { final TypicalTypes.pattern arg$5077 = Analyzer.cast(null == patRec ? null : patRec.pat); if ((null == arg$5077)) { return null; } if ((null != arg$5077)) switch (arg$5077.tag()) { case PairPattern: if (TypicalSupport.match$4879(arg$5077)) { return Analyzer.cast(new TypicalTypes.PairConstr()); } break; case ConstructorPattern: if (TypicalSupport.match$4865(arg$5077)) { final String s = Analyzer.cast(arg$5077.getTuple().get1()); final Pair<TypicalTypes.patternRecord> pl = Analyzer.cast(arg$5077.getTuple().get2()); return Analyzer.cast(null == Primitives.isBottom.apply(pl) ? null : Primitives.isBottom.apply(pl) ? new TypicalTypes.CConstr(s, getConstructorSize.apply(s)) : new TypicalTypes.CConstr(s, Primitives.length.apply(pl))); } break; case RecFieldPattern: if (TypicalSupport.match$4893(arg$5077)) { final TypicalTypes.patternRecord p = Analyzer.cast(arg$5077.getTuple().get2()); return Analyzer.cast(getConstructor.apply(p)); } break; case VariablePattern: if (TypicalSupport.match$4819(arg$5077)) { return Analyzer.cast(new TypicalTypes.WildConstr()); } break; case TupPattern: if (TypicalSupport.match$4858(arg$5077)) { final Pair<TypicalTypes.patternRecord> pl = Analyzer.cast(arg$5077.getTuple().get1()); return Analyzer.cast(new TypicalTypes.TupleConstr(Primitives.length.apply(pl))); } break; case BotPattern: if (TypicalSupport.match$4820(arg$5077)) { return Analyzer.cast(new TypicalTypes.BotConstr()); } break; case RecPattern: if (TypicalSupport.match$4886(arg$5077)) { return Analyzer.cast(new Let<TypicalTypes.constr>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(Primitives.getAnnotation.apply(null == patRec ? null : patRec.nod, "__type")); } public TypicalTypes.constr apply() { return Analyzer.cast(new Match<TypicalTypes.constr>() { public TypicalTypes.constr apply() { final TypicalTypes.raw_type<?> arg$5087 = Analyzer.cast(ty); if ((null == arg$5087)) { return null; } if ((null != arg$5087)) switch (arg$5087.tag()) { case RecordT: if (TypicalSupport.match$108(arg$5087)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$5087.getTuple().get1()); return Analyzer.cast(new TypicalTypes.RecordConstr(Primitives.length.apply(tl))); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } break; case EmptyPattern: if (TypicalSupport.match$4872(arg$5077)) { return Analyzer.cast(new TypicalTypes.EmptyConstr()); } break; case ConstantPattern: if (TypicalSupport.match$4827(arg$5077)) { final TypicalTypes.value val = Analyzer.cast(arg$5077.getTuple().get1()); return Analyzer.cast(new TypicalTypes.Const(val)); } break; case WildCardPattern: if (TypicalSupport.match$4817(arg$5077)) { return Analyzer.cast(new TypicalTypes.WildConstr()); } break; default: break; }; return null; } }.apply(); } }; final Function.F1<Boolean, Pair<Node>> checkExhaustive = new Function.F1<Boolean, Pair<Node>>() { public Boolean apply(final Pair<Node> nl) { return new Let<Boolean>() { final Node nod; final Pair<Node> pl; final Pair<TypicalTypes.patternRecord> patList; final Pair<Pair<TypicalTypes.patternRecord>> matrix; { nod = Analyzer.cast(TypicalSupport.head$292.apply(nl)); pl = Analyzer.cast(getPatternNodes.apply(nl)); patList = Analyzer.cast(getPatternRecords.apply(pl)); matrix = Analyzer.cast(buildMatrix.apply(Pair.<Pair<TypicalTypes.patternRecord>>empty(), Pair.<TypicalTypes.patternRecord>empty(), patList)); } public Boolean apply() { return Analyzer.cast(null == Primitives.equal.apply(Primitives.length.apply(matrix), BigInteger.valueOf(0)) ? null : Primitives.equal.apply(Primitives.length.apply(matrix), BigInteger.valueOf(0)) ? new Let<Boolean>() { { warning("all patterns are guarded", nod); } public Boolean apply() { return Analyzer.cast(Boolean.TRUE); } }.apply() : null == quickPartialCheck.apply(matrix) ? null : quickPartialCheck.apply(matrix) ? Boolean.TRUE : new Let<Boolean>() { final TypicalTypes.result res; { res = Analyzer.cast(checkPartial.apply(matrix, BigInteger.valueOf(1))); } public Boolean apply() { return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.result arg$5095 = Analyzer.cast(res); if ((null == arg$5095)) { return null; } if ((null != arg$5095)) switch (arg$5095.tag()) { case None: if (TypicalSupport.match$5096(arg$5095)) { return Analyzer.cast(Boolean.TRUE); } break; case Some: if (TypicalSupport.match$5097(arg$5095)) { final Pair<TypicalTypes.pattern> p = Analyzer.cast(arg$5095.getTuple().get1()); return Analyzer.cast(new Let<Boolean>() { final String mes; { mes = Analyzer.cast(showPatterns.apply(p)); error(Primitives.concat.apply(Primitives.concat.apply("non-exhaustive match, ", "an example of an unmatched value is: "), mes), nod); } public Boolean apply() { return Analyzer.cast(Boolean.FALSE); } }.apply()); } break; default: break; }; return null; } }.apply()); } }.apply()); } }.apply(); } }; final Function.F2<TypicalTypes.result, Pair<Pair<TypicalTypes.patternRecord>>, BigInteger> checkPartial = new Function.F2<TypicalTypes.result, Pair<Pair<TypicalTypes.patternRecord>>, BigInteger>() { public TypicalTypes.result apply(final Pair<Pair<TypicalTypes.patternRecord>> matrix, final BigInteger n) { return (null == Primitives.equal.apply(BigInteger.valueOf(0), n) ? null : Primitives.equal.apply(BigInteger.valueOf(0), n) ? (null == Primitives.greaterInt.apply(Primitives.length.apply(matrix), BigInteger.valueOf(0)) ? null : Primitives.greaterInt.apply(Primitives.length.apply(matrix), BigInteger.valueOf(0)) ? new TypicalTypes.None() : new TypicalTypes.Some(Pair.<TypicalTypes.pattern>empty())) : new Let<TypicalTypes.result>() { final Pair<TypicalTypes.constr> sigma; { sigma = Analyzer.cast(getSigma.apply(Pair.<TypicalTypes.constr>empty(), matrix)); } public TypicalTypes.result apply() { return Analyzer.cast(null == completeSigma.apply(sigma) ? null : completeSigma.apply(sigma) ? checkSubPartials.apply(matrix, sigma) : new Let<TypicalTypes.result>() { final Pair<Pair<TypicalTypes.patternRecord>> dMatrix; final TypicalTypes.result res; { dMatrix = Analyzer.cast(buildDMatrix.apply(matrix)); res = Analyzer.cast(checkPartial.apply(dMatrix, Primitives.subtractInt.apply(n, BigInteger.valueOf(1)))); } public TypicalTypes.result apply() { return Analyzer.cast(new Match<TypicalTypes.result>() { public TypicalTypes.result apply() { final TypicalTypes.result arg$5099 = Analyzer.cast(res); if ((null == arg$5099)) { return null; } if ((null != arg$5099)) switch (arg$5099.tag()) { case None: if (TypicalSupport.match$5096(arg$5099)) { return Analyzer.cast(new TypicalTypes.None()); } break; case Some: if (TypicalSupport.match$5097(arg$5099)) { final Pair<TypicalTypes.pattern> pl = Analyzer.cast(arg$5099.getTuple().get1()); return Analyzer.cast(null == emptySigma.apply(sigma) ? null : emptySigma.apply(sigma) ? new TypicalTypes.Some(TypicalSupport.append$5102.apply(new Pair<TypicalTypes.pattern>(new TypicalTypes.WildCardPattern()), pl)) : new Let<TypicalTypes.result>() { final TypicalTypes.pattern p; { p = Analyzer.cast(findUnmatchedPattern.apply(sigma)); } public TypicalTypes.result apply() { return Analyzer.cast(new TypicalTypes.Some(TypicalSupport.append$5102.apply(new Pair<TypicalTypes.pattern>(p), pl))); } }.apply()); } break; default: break; }; return null; } }.apply()); } }.apply()); } }.apply()); } }; final Function.F2<TypicalTypes.result, Pair<Pair<TypicalTypes.patternRecord>>, Pair<TypicalTypes.constr>> checkSubPartials = new Function.F2<TypicalTypes.result, Pair<Pair<TypicalTypes.patternRecord>>, Pair<TypicalTypes.constr>>() { public TypicalTypes.result apply(final Pair<Pair<TypicalTypes.patternRecord>> matrix, final Pair<TypicalTypes.constr> sigma) { return new Match<TypicalTypes.result>() { public TypicalTypes.result apply() { final Pair<TypicalTypes.constr> arg$5104 = Analyzer.cast(sigma); if ((null == arg$5104)) { return null; } if (TypicalSupport.match$5105(arg$5104)) { return Analyzer.cast(new TypicalTypes.None()); } if ((null != arg$5104 && !((Pair)arg$5104).isEmpty())) { final Pair<TypicalTypes.constr> list$5106 = Analyzer.cast(arg$5104); final TypicalTypes.constr x = Analyzer.cast(Primitives.wrapHead(list$5106)); final Pair<TypicalTypes.constr> xs = Analyzer.cast(Primitives.wrapTail(list$5106)); return Analyzer.cast(new Match<TypicalTypes.result>() { public TypicalTypes.result apply() { final TypicalTypes.constr arg$5116 = Analyzer.cast(x); if ((null == arg$5116)) { return null; } if ((null != arg$5116)) switch (arg$5116.tag()) { case WildConstr: if (TypicalSupport.match$5108(arg$5116)) { return Analyzer.cast(checkSubPartials.apply(matrix, xs)); } break; default: break; }; if (true) { return Analyzer.cast(new Let<TypicalTypes.result>() { final TypicalTypes.result res; { res = Analyzer.cast(checkSubPartial.apply(matrix, x)); } public TypicalTypes.result apply() { return Analyzer.cast(new Match<TypicalTypes.result>() { public TypicalTypes.result apply() { final TypicalTypes.result arg$5121 = Analyzer.cast(res); if ((null == arg$5121)) { return null; } if ((null != arg$5121)) switch (arg$5121.tag()) { case Some: if (TypicalSupport.match$5097(arg$5121)) { return Analyzer.cast(res); } break; default: break; }; if (true) { return Analyzer.cast(checkSubPartials.apply(matrix, xs)); } return null; } }.apply()); } }.apply()); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F2<TypicalTypes.result, Pair<Pair<TypicalTypes.patternRecord>>, TypicalTypes.constr> checkSubPartial = new Function.F2<TypicalTypes.result, Pair<Pair<TypicalTypes.patternRecord>>, TypicalTypes.constr>() { public TypicalTypes.result apply(final Pair<Pair<TypicalTypes.patternRecord>> matrix, final TypicalTypes.constr ck) { return new Let<TypicalTypes.result>() { final Pair<Pair<TypicalTypes.patternRecord>> sMatrix; final BigInteger len; final TypicalTypes.result res; { sMatrix = Analyzer.cast(buildSMatrix.apply(matrix, ck, Pair.<Pair<TypicalTypes.patternRecord>>empty())); len = Analyzer.cast(Primitives.length.apply(TypicalSupport.head$5130.apply(sMatrix))); res = Analyzer.cast(checkPartial.apply(sMatrix, len)); } public TypicalTypes.result apply() { return Analyzer.cast(new Match<TypicalTypes.result>() { public TypicalTypes.result apply() { final TypicalTypes.result arg$5126 = Analyzer.cast(res); if ((null == arg$5126)) { return null; } if ((null != arg$5126)) switch (arg$5126.tag()) { case None: if (TypicalSupport.match$5096(arg$5126)) { return Analyzer.cast(new TypicalTypes.None()); } break; case Some: if (TypicalSupport.match$5097(arg$5126)) { final Pair<TypicalTypes.pattern> pl = Analyzer.cast(arg$5126.getTuple().get1()); return Analyzer.cast(new TypicalTypes.Some(buildResultPattern.apply(pl, ck))); } break; default: break; }; return null; } }.apply()); } }.apply(); } }; final Function.F3<Pair<Pair<TypicalTypes.patternRecord>>, Pair<Pair<TypicalTypes.patternRecord>>, TypicalTypes.constr, Pair<Pair<TypicalTypes.patternRecord>>> buildSMatrix = new Function.F3<Pair<Pair<TypicalTypes.patternRecord>>, Pair<Pair<TypicalTypes.patternRecord>>, TypicalTypes.constr, Pair<Pair<TypicalTypes.patternRecord>>>() { public Pair<Pair<TypicalTypes.patternRecord>> apply(final Pair<Pair<TypicalTypes.patternRecord>> matrix, final TypicalTypes.constr ck, final Pair<Pair<TypicalTypes.patternRecord>> res) { return new Match<Pair<Pair<TypicalTypes.patternRecord>>>() { public Pair<Pair<TypicalTypes.patternRecord>> apply() { final Pair<Pair<TypicalTypes.patternRecord>> arg$5131 = Analyzer.cast(matrix); if ((null == arg$5131)) { return null; } if (TypicalSupport.match$5073(arg$5131)) { return Analyzer.cast(res); } if ((null != arg$5131 && !((Pair)arg$5131).isEmpty())) { final Pair<Pair<TypicalTypes.patternRecord>> list$5133 = Analyzer.cast(arg$5131); final Pair<TypicalTypes.patternRecord> x = Analyzer.cast(Primitives.wrapHead(list$5133)); final Pair<Pair<TypicalTypes.patternRecord>> xs = Analyzer.cast(Primitives.wrapTail(list$5133)); return Analyzer.cast(new Let<Pair<Pair<TypicalTypes.patternRecord>>>() { final TypicalTypes.constr co; { co = Analyzer.cast(getConstructor.apply(TypicalSupport.head$4988.apply(x))); } public Pair<Pair<TypicalTypes.patternRecord>> apply() { return Analyzer.cast(null == Primitives.equal.apply(co, ck) ? null : Primitives.equal.apply(co, ck) ? new Let<Pair<Pair<TypicalTypes.patternRecord>>>() { final Pair<TypicalTypes.patternRecord> subList; final Pair<TypicalTypes.patternRecord> newRow; { subList = Analyzer.cast(expandPattern.apply(TypicalSupport.head$4988.apply(x), ck)); newRow = Analyzer.cast(TypicalSupport.append$4810.apply(subList, TypicalSupport.tail$4989.apply(x))); } public Pair<Pair<TypicalTypes.patternRecord>> apply() { return Analyzer.cast(buildSMatrix.apply(xs, ck, TypicalSupport.append$5070.apply(res, new Pair<Pair<TypicalTypes.patternRecord>>(newRow)))); } }.apply() : buildSMatrix.apply(xs, ck, res)); } }.apply()); } return null; } }.apply(); } }; final Function.F2<Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord, TypicalTypes.constr> expandPattern = new Function.F2<Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord, TypicalTypes.constr>() { public Pair<TypicalTypes.patternRecord> apply(final TypicalTypes.patternRecord p, final TypicalTypes.constr ck) { return new Match<Pair<TypicalTypes.patternRecord>>() { public Pair<TypicalTypes.patternRecord> apply() { final TypicalTypes.constr arg$5135 = Analyzer.cast(ck); if ((null == arg$5135)) { return null; } if ((null != arg$5135)) switch (arg$5135.tag()) { case RecordConstr: if (TypicalSupport.match$5140(arg$5135)) { return Analyzer.cast(expandRecPattern.apply(p)); } break; case Const: if (TypicalSupport.match$5138(arg$5135)) { return Analyzer.cast(Pair.<TypicalTypes.patternRecord>empty()); } break; case TupleConstr: if (TypicalSupport.match$5141(arg$5135)) { return Analyzer.cast(new Match<Pair<TypicalTypes.patternRecord>>() { public Pair<TypicalTypes.patternRecord> apply() { final TypicalTypes.pattern arg$5145 = Analyzer.cast(null == p ? null : p.pat); if ((null == arg$5145)) { return null; } if ((null != arg$5145)) switch (arg$5145.tag()) { case TupPattern: if (TypicalSupport.match$4858(arg$5145)) { final Pair<TypicalTypes.patternRecord> pl = Analyzer.cast(arg$5145.getTuple().get1()); return Analyzer.cast(pl); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } break; case WildConstr: if (TypicalSupport.match$5108(arg$5135)) { return Analyzer.cast(Pair.<TypicalTypes.patternRecord>empty()); } break; case CConstr: if (TypicalSupport.match$5155(arg$5135)) { return Analyzer.cast(new Match<Pair<TypicalTypes.patternRecord>>() { public Pair<TypicalTypes.patternRecord> apply() { final TypicalTypes.pattern arg$5159 = Analyzer.cast(null == p ? null : p.pat); if ((null == arg$5159)) { return null; } if ((null != arg$5159)) switch (arg$5159.tag()) { case ConstructorPattern: if (TypicalSupport.match$4865(arg$5159)) { final String s = Analyzer.cast(arg$5159.getTuple().get1()); final Pair<TypicalTypes.patternRecord> pl = Analyzer.cast(arg$5159.getTuple().get2()); return Analyzer.cast(null == Primitives.isBottom.apply(pl) ? null : Primitives.isBottom.apply(pl) ? new Let<Pair<TypicalTypes.patternRecord>>() { final BigInteger si; { si = Analyzer.cast(getConstructorSize.apply(s)); } public Pair<TypicalTypes.patternRecord> apply() { return Analyzer.cast(makeWildCards.apply(si)); } }.apply() : pl); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } break; case BotConstr: if (TypicalSupport.match$5136(arg$5135)) { return Analyzer.cast(Pair.<TypicalTypes.patternRecord>empty()); } break; case EmptyConstr: if (TypicalSupport.match$5139(arg$5135)) { return Analyzer.cast(Pair.<TypicalTypes.patternRecord>empty()); } break; case PairConstr: if (TypicalSupport.match$5148(arg$5135)) { return Analyzer.cast(new Match<Pair<TypicalTypes.patternRecord>>() { public Pair<TypicalTypes.patternRecord> apply() { final TypicalTypes.pattern arg$5152 = Analyzer.cast(null == p ? null : p.pat); if ((null == arg$5152)) { return null; } if ((null != arg$5152)) switch (arg$5152.tag()) { case PairPattern: if (TypicalSupport.match$4879(arg$5152)) { final TypicalTypes.patternRecord hd = Analyzer.cast(arg$5152.getTuple().get1()); final TypicalTypes.patternRecord tl = Analyzer.cast(arg$5152.getTuple().get2()); return Analyzer.cast(new Pair<TypicalTypes.patternRecord>(hd).append(new Pair<TypicalTypes.patternRecord>(tl))); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } break; default: break; }; return null; } }.apply(); } }; final Function.F1<BigInteger, String> getConstructorSize = new Function.F1<BigInteger, String>() { public BigInteger apply(final String s) { return new Let<BigInteger>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("TypeConstructor", s, null), getNameSpace))); } public BigInteger apply() { return Analyzer.cast(new Match<BigInteger>() { public BigInteger apply() { final TypicalTypes.raw_type<?> arg$5163 = Analyzer.cast(t); if ((null == arg$5163)) { return null; } if ((null != arg$5163)) switch (arg$5163.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$5163)) { final TypicalTypes.raw_type<?> ty = Analyzer.cast(arg$5163.getTuple().get3()); return Analyzer.cast(null == Primitives.isBottom.apply(ty) ? null : Primitives.isBottom.apply(ty) ? BigInteger.valueOf(0) : new Match<BigInteger>() { public BigInteger apply() { final TypicalTypes.raw_type<?> arg$5168 = Analyzer.cast(ty); if ((null == arg$5168)) { return null; } if ((null != arg$5168)) switch (arg$5168.tag()) { case TupleT: if (TypicalSupport.match$115(arg$5168)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$5168.getTuple().get1()); return Analyzer.cast(Primitives.length.apply(tl)); } break; default: break; }; if (true) { return Analyzer.cast(BigInteger.valueOf(1)); } return null; } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply(); } }; final Function.F1<Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord> expandRecPattern = new Function.F1<Pair<TypicalTypes.patternRecord>, TypicalTypes.patternRecord>() { public Pair<TypicalTypes.patternRecord> apply(final TypicalTypes.patternRecord p) { return new Let<Pair<TypicalTypes.patternRecord>>() { final Node no; final TypicalTypes.raw_type<?> ty; { no = Analyzer.cast(null == p ? null : p.nod); ty = Analyzer.cast(Primitives.getAnnotation.apply(no, "__type")); } public Pair<TypicalTypes.patternRecord> apply() { return Analyzer.cast(new Match<Pair<TypicalTypes.patternRecord>>() { public Pair<TypicalTypes.patternRecord> apply() { final TypicalTypes.raw_type<?> arg$5172 = Analyzer.cast(ty); if ((null == arg$5172)) { return null; } if ((null != arg$5172)) switch (arg$5172.tag()) { case RecordT: if (TypicalSupport.match$108(arg$5172)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$5172.getTuple().get1()); return Analyzer.cast(new Match<Pair<TypicalTypes.patternRecord>>() { public Pair<TypicalTypes.patternRecord> apply() { final TypicalTypes.pattern arg$5177 = Analyzer.cast(null == p ? null : p.pat); if ((null == arg$5177)) { return null; } if ((null != arg$5177)) switch (arg$5177.tag()) { case RecPattern: if (TypicalSupport.match$4886(arg$5177)) { final Pair<TypicalTypes.patternRecord> pl = Analyzer.cast(arg$5177.getTuple().get1()); return Analyzer.cast(makeFieldPatterns.apply(tl, pl)); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply(); } }; final Function.F2<Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.raw_type<?>>, Pair<TypicalTypes.patternRecord>> makeFieldPatterns = new Function.F2<Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.raw_type<?>>, Pair<TypicalTypes.patternRecord>>() { public Pair<TypicalTypes.patternRecord> apply(final Pair<TypicalTypes.raw_type<?>> tl, final Pair<TypicalTypes.patternRecord> pl) { return new Match<Pair<TypicalTypes.patternRecord>>() { public Pair<TypicalTypes.patternRecord> apply() { final Pair<TypicalTypes.raw_type<?>> arg$5181 = Analyzer.cast(tl); if ((null == arg$5181)) { return null; } if (TypicalSupport.match$123(arg$5181)) { return Analyzer.cast(Pair.<TypicalTypes.patternRecord>empty()); } if ((null != arg$5181 && !((Pair)arg$5181).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$5183 = Analyzer.cast(arg$5181); final TypicalTypes.raw_type<?> x = Analyzer.cast(Primitives.wrapHead(list$5183)); final Pair<TypicalTypes.raw_type<?>> xs = Analyzer.cast(Primitives.wrapTail(list$5183)); return Analyzer.cast(new Let<Pair<TypicalTypes.patternRecord>>() { final String s; final TypicalTypes.patternRecord p; { s = Analyzer.cast(new Match<String>() { public String apply() { final TypicalTypes.raw_type<?> arg$5187 = Analyzer.cast(x); if ((null == arg$5187)) { return null; } if ((null != arg$5187)) switch (arg$5187.tag()) { case FieldT: if (TypicalSupport.match$97(arg$5187)) { final String str = Analyzer.cast(arg$5187.getTuple().get2()); return Analyzer.cast(str); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); p = Analyzer.cast(makeFieldPattern.apply(s, pl)); } public Pair<TypicalTypes.patternRecord> apply() { return Analyzer.cast(TypicalSupport.append$4810.apply(new Pair<TypicalTypes.patternRecord>(p), makeFieldPatterns.apply(xs, pl))); } }.apply()); } return null; } }.apply(); } }; final Function.F2<TypicalTypes.patternRecord, String, Pair<TypicalTypes.patternRecord>> makeFieldPattern = new Function.F2<TypicalTypes.patternRecord, String, Pair<TypicalTypes.patternRecord>>() { public TypicalTypes.patternRecord apply(final String s, final Pair<TypicalTypes.patternRecord> pl) { return new Match<TypicalTypes.patternRecord>() { public TypicalTypes.patternRecord apply() { final Pair<TypicalTypes.patternRecord> arg$5191 = Analyzer.cast(pl); if ((null == arg$5191)) { return null; } if (TypicalSupport.match$4786(arg$5191)) { return Analyzer.cast(new Let<TypicalTypes.patternRecord>() { final TypicalTypes.patternRecord wild; { wild = Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.WildCardPattern(), null, Boolean.FALSE)); } public TypicalTypes.patternRecord apply() { return Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.RecFieldPattern(s, wild), null, Boolean.FALSE)); } }.apply()); } if ((null != arg$5191 && !((Pair)arg$5191).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$5193 = Analyzer.cast(arg$5191); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$5193)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$5193)); return Analyzer.cast(new Match<TypicalTypes.patternRecord>() { public TypicalTypes.patternRecord apply() { final TypicalTypes.pattern arg$5197 = Analyzer.cast(null == x ? null : x.pat); if ((null == arg$5197)) { return null; } if ((null != arg$5197)) switch (arg$5197.tag()) { case RecFieldPattern: if (TypicalSupport.match$4893(arg$5197)) { final String str = Analyzer.cast(arg$5197.getTuple().get1()); return Analyzer.cast(null == Primitives.equal.apply(str, s) ? null : Primitives.equal.apply(str, s) ? x : makeFieldPattern.apply(s, xs)); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F1<Pair<TypicalTypes.patternRecord>, BigInteger> makeWildCards = new Function.F1<Pair<TypicalTypes.patternRecord>, BigInteger>() { public Pair<TypicalTypes.patternRecord> apply(final BigInteger n) { return new Match<Pair<TypicalTypes.patternRecord>>() { public Pair<TypicalTypes.patternRecord> apply() { final BigInteger arg$5201 = Analyzer.cast(n); if ((null == arg$5201)) { return null; } if ((null != BigInteger.valueOf(0) && BigInteger.valueOf(0).equals(arg$5201))) { return Analyzer.cast(Pair.<TypicalTypes.patternRecord>empty()); } if (true) { return Analyzer.cast(new Let<Pair<TypicalTypes.patternRecord>>() { final TypicalTypes.patternRecord wild; { wild = Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.WildCardPattern(), null, Boolean.FALSE)); } public Pair<TypicalTypes.patternRecord> apply() { return Analyzer.cast(TypicalSupport.append$4810.apply(new Pair<TypicalTypes.patternRecord>(wild), makeWildCards.apply(Primitives.subtractInt.apply(n, BigInteger.valueOf(1))))); } }.apply()); } return null; } }.apply(); } }; final Function.F2<Pair<TypicalTypes.pattern>, Pair<TypicalTypes.pattern>, TypicalTypes.constr> buildResultPattern = new Function.F2<Pair<TypicalTypes.pattern>, Pair<TypicalTypes.pattern>, TypicalTypes.constr>() { public Pair<TypicalTypes.pattern> apply(final Pair<TypicalTypes.pattern> pl, final TypicalTypes.constr ck) { return new Match<Pair<TypicalTypes.pattern>>() { public Pair<TypicalTypes.pattern> apply() { final TypicalTypes.constr arg$5203 = Analyzer.cast(ck); if ((null == arg$5203)) { return null; } if ((null != arg$5203)) switch (arg$5203.tag()) { case RecordConstr: if (TypicalSupport.match$5140(arg$5203)) { final BigInteger size = Analyzer.cast(arg$5203.getTuple().get1()); return Analyzer.cast(reduceRecordPattern.apply(size, pl, Pair.<TypicalTypes.pattern>empty())); } break; case Const: if (TypicalSupport.match$5138(arg$5203)) { final TypicalTypes.value val = Analyzer.cast(arg$5203.getTuple().get1()); return Analyzer.cast(Primitives.wrapCons(new TypicalTypes.ConstantPattern(val), pl)); } break; case TupleConstr: if (TypicalSupport.match$5141(arg$5203)) { final BigInteger size = Analyzer.cast(arg$5203.getTuple().get1()); return Analyzer.cast(reduceTuplePattern.apply(size, pl, Pair.<TypicalTypes.pattern>empty())); } break; case WildConstr: if (TypicalSupport.match$5108(arg$5203)) { return Analyzer.cast(Primitives.wrapCons(new TypicalTypes.WildCardPattern(), pl)); } break; case CConstr: if (TypicalSupport.match$5155(arg$5203)) { final String s = Analyzer.cast(arg$5203.getTuple().get1()); final BigInteger size = Analyzer.cast(arg$5203.getTuple().get2()); return Analyzer.cast(reduceTypeConstructorPattern.apply(s, size, pl, Pair.<TypicalTypes.pattern>empty())); } break; case BotConstr: if (TypicalSupport.match$5136(arg$5203)) { return Analyzer.cast(Primitives.wrapCons(new TypicalTypes.BotPattern(), pl)); } break; case EmptyConstr: if (TypicalSupport.match$5139(arg$5203)) { return Analyzer.cast(Primitives.wrapCons(new TypicalTypes.EmptyPattern(), pl)); } break; case PairConstr: if (TypicalSupport.match$5148(arg$5203)) { return Analyzer.cast(new Let<Pair<TypicalTypes.pattern>>() { final TypicalTypes.pattern h1; final TypicalTypes.patternRecord p1; final Pair<TypicalTypes.pattern> ta; final TypicalTypes.pattern h2; final TypicalTypes.patternRecord p2; final Pair<TypicalTypes.pattern> tai; { h1 = Analyzer.cast(TypicalSupport.head$5209.apply(pl)); p1 = Analyzer.cast(new TypicalTypes.patternRecord(h1, null, Boolean.FALSE)); ta = Analyzer.cast(TypicalSupport.tail$5210.apply(pl)); h2 = Analyzer.cast(TypicalSupport.head$5209.apply(ta)); p2 = Analyzer.cast(new TypicalTypes.patternRecord(h2, null, Boolean.FALSE)); tai = Analyzer.cast(TypicalSupport.tail$5210.apply(ta)); } public Pair<TypicalTypes.pattern> apply() { return Analyzer.cast(Primitives.wrapCons(new TypicalTypes.PairPattern(p1, p2), tai)); } }.apply()); } break; default: break; }; return null; } }.apply(); } }; final Function.F4<Pair<TypicalTypes.pattern>, String, BigInteger, Pair<TypicalTypes.pattern>, Pair<TypicalTypes.pattern>> reduceTypeConstructorPattern = new Function.F4<Pair<TypicalTypes.pattern>, String, BigInteger, Pair<TypicalTypes.pattern>, Pair<TypicalTypes.pattern>>() { public Pair<TypicalTypes.pattern> apply(final String s, final BigInteger size, final Pair<TypicalTypes.pattern> pl, final Pair<TypicalTypes.pattern> children) { return (null == Primitives.equal.apply(size, BigInteger.valueOf(0)) ? null : Primitives.equal.apply(size, BigInteger.valueOf(0)) ? new Let<Pair<TypicalTypes.pattern>>() { final Pair<TypicalTypes.patternRecord> recList; { recList = Analyzer.cast(makePatternRecords.apply(children)); } public Pair<TypicalTypes.pattern> apply() { return Analyzer.cast(Primitives.wrapCons(new TypicalTypes.ConstructorPattern(s, recList), pl)); } }.apply() : reduceTypeConstructorPattern.apply(s, Primitives.subtractInt.apply(size, BigInteger.valueOf(1)), TypicalSupport.tail$5210.apply(pl), TypicalSupport.append$5102.apply(children, new Pair<TypicalTypes.pattern>(TypicalSupport.head$5209.apply(pl))))); } }; final Function.F3<Pair<TypicalTypes.pattern>, BigInteger, Pair<TypicalTypes.pattern>, Pair<TypicalTypes.pattern>> reduceRecordPattern = new Function.F3<Pair<TypicalTypes.pattern>, BigInteger, Pair<TypicalTypes.pattern>, Pair<TypicalTypes.pattern>>() { public Pair<TypicalTypes.pattern> apply(final BigInteger size, final Pair<TypicalTypes.pattern> pl, final Pair<TypicalTypes.pattern> children) { return (null == Primitives.equal.apply(size, BigInteger.valueOf(0)) ? null : Primitives.equal.apply(size, BigInteger.valueOf(0)) ? new Let<Pair<TypicalTypes.pattern>>() { final Pair<TypicalTypes.patternRecord> recList; { recList = Analyzer.cast(makePatternRecords.apply(children)); } public Pair<TypicalTypes.pattern> apply() { return Analyzer.cast(Primitives.wrapCons(new TypicalTypes.RecPattern(recList), pl)); } }.apply() : reduceRecordPattern.apply(Primitives.subtractInt.apply(size, BigInteger.valueOf(1)), TypicalSupport.tail$5210.apply(pl), TypicalSupport.append$5102.apply(children, new Pair<TypicalTypes.pattern>(TypicalSupport.head$5209.apply(pl))))); } }; final Function.F3<Pair<TypicalTypes.pattern>, BigInteger, Pair<TypicalTypes.pattern>, Pair<TypicalTypes.pattern>> reduceTuplePattern = new Function.F3<Pair<TypicalTypes.pattern>, BigInteger, Pair<TypicalTypes.pattern>, Pair<TypicalTypes.pattern>>() { public Pair<TypicalTypes.pattern> apply(final BigInteger size, final Pair<TypicalTypes.pattern> pl, final Pair<TypicalTypes.pattern> children) { return (null == Primitives.equal.apply(size, BigInteger.valueOf(0)) ? null : Primitives.equal.apply(size, BigInteger.valueOf(0)) ? new Let<Pair<TypicalTypes.pattern>>() { final Pair<TypicalTypes.patternRecord> recList; { recList = Analyzer.cast(makePatternRecords.apply(children)); } public Pair<TypicalTypes.pattern> apply() { return Analyzer.cast(Primitives.wrapCons(new TypicalTypes.TupPattern(recList), pl)); } }.apply() : reduceTuplePattern.apply(Primitives.subtractInt.apply(size, BigInteger.valueOf(1)), TypicalSupport.tail$5210.apply(pl), TypicalSupport.append$5102.apply(children, new Pair<TypicalTypes.pattern>(TypicalSupport.head$5209.apply(pl))))); } }; final Function.F1<Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.pattern>> makePatternRecords = new Function.F1<Pair<TypicalTypes.patternRecord>, Pair<TypicalTypes.pattern>>() { public Pair<TypicalTypes.patternRecord> apply(final Pair<TypicalTypes.pattern> pl) { return new Match<Pair<TypicalTypes.patternRecord>>() { public Pair<TypicalTypes.patternRecord> apply() { final Pair<TypicalTypes.pattern> arg$5215 = Analyzer.cast(pl); if ((null == arg$5215)) { return null; } if (TypicalSupport.match$5216(arg$5215)) { return Analyzer.cast(Pair.<TypicalTypes.patternRecord>empty()); } if ((null != arg$5215 && !((Pair)arg$5215).isEmpty())) { final Pair<TypicalTypes.pattern> list$5217 = Analyzer.cast(arg$5215); final TypicalTypes.pattern x = Analyzer.cast(Primitives.wrapHead(list$5217)); final Pair<TypicalTypes.pattern> xs = Analyzer.cast(Primitives.wrapTail(list$5217)); return Analyzer.cast(new Let<Pair<TypicalTypes.patternRecord>>() { final TypicalTypes.patternRecord pr; { pr = Analyzer.cast(new TypicalTypes.patternRecord(x, null, Boolean.FALSE)); } public Pair<TypicalTypes.patternRecord> apply() { return Analyzer.cast(Primitives.wrapCons(pr, makePatternRecords.apply(xs))); } }.apply()); } return null; } }.apply(); } }; final Function.F1<Pair<Pair<TypicalTypes.patternRecord>>, Pair<Pair<TypicalTypes.patternRecord>>> buildDMatrix = new Function.F1<Pair<Pair<TypicalTypes.patternRecord>>, Pair<Pair<TypicalTypes.patternRecord>>>() { public Pair<Pair<TypicalTypes.patternRecord>> apply(final Pair<Pair<TypicalTypes.patternRecord>> matrix) { return new Match<Pair<Pair<TypicalTypes.patternRecord>>>() { public Pair<Pair<TypicalTypes.patternRecord>> apply() { final Pair<Pair<TypicalTypes.patternRecord>> arg$5219 = Analyzer.cast(matrix); if ((null == arg$5219)) { return null; } if (TypicalSupport.match$5073(arg$5219)) { return Analyzer.cast(Pair.<Pair<TypicalTypes.patternRecord>>empty()); } if ((null != arg$5219 && !((Pair)arg$5219).isEmpty())) { final Pair<Pair<TypicalTypes.patternRecord>> list$5221 = Analyzer.cast(arg$5219); final Pair<TypicalTypes.patternRecord> x = Analyzer.cast(Primitives.wrapHead(list$5221)); final Pair<Pair<TypicalTypes.patternRecord>> xs = Analyzer.cast(Primitives.wrapTail(list$5221)); return Analyzer.cast(new Let<Pair<Pair<TypicalTypes.patternRecord>>>() { final TypicalTypes.patternRecord p; { p = Analyzer.cast(TypicalSupport.head$4988.apply(x)); } public Pair<Pair<TypicalTypes.patternRecord>> apply() { return Analyzer.cast(new Match<Pair<Pair<TypicalTypes.patternRecord>>>() { public Pair<Pair<TypicalTypes.patternRecord>> apply() { final TypicalTypes.pattern arg$5227 = Analyzer.cast(null == p ? null : p.pat); if ((null == arg$5227)) { return null; } if ((null != arg$5227)) switch (arg$5227.tag()) { case RecFieldPattern: if (TypicalSupport.match$4893(arg$5227)) { final TypicalTypes.patternRecord pt = Analyzer.cast(arg$5227.getTuple().get2()); return Analyzer.cast(new Let<Pair<Pair<TypicalTypes.patternRecord>>>() { final TypicalTypes.constr co; { co = Analyzer.cast(getConstructor.apply(pt)); } public Pair<Pair<TypicalTypes.patternRecord>> apply() { return Analyzer.cast(null == Primitives.equal.apply(co, new TypicalTypes.WildConstr()) ? null : Primitives.equal.apply(co, new TypicalTypes.WildConstr()) ? Primitives.wrapCons(TypicalSupport.tail$4989.apply(x), buildDMatrix.apply(xs)) : buildDMatrix.apply(xs)); } }.apply()); } break; case VariablePattern: if (TypicalSupport.match$4819(arg$5227)) { return Analyzer.cast(Primitives.wrapCons(TypicalSupport.tail$4989.apply(x), buildDMatrix.apply(xs))); } break; case WildCardPattern: if (TypicalSupport.match$4817(arg$5227)) { return Analyzer.cast(Primitives.wrapCons(TypicalSupport.tail$4989.apply(x), buildDMatrix.apply(xs))); } break; default: break; }; if (true) { return Analyzer.cast(buildDMatrix.apply(xs)); } return null; } }.apply()); } }.apply()); } return null; } }.apply(); } }; final Function.F1<Boolean, Pair<TypicalTypes.constr>> emptySigma = new Function.F1<Boolean, Pair<TypicalTypes.constr>>() { public Boolean apply(final Pair<TypicalTypes.constr> sigma) { return new Match<Boolean>() { public Boolean apply() { final Pair<TypicalTypes.constr> arg$5233 = Analyzer.cast(sigma); if ((null == arg$5233)) { return null; } if (TypicalSupport.match$5105(arg$5233)) { return Analyzer.cast(Boolean.TRUE); } if ((null != arg$5233 && !((Pair)arg$5233).isEmpty())) { final Pair<TypicalTypes.constr> list$5235 = Analyzer.cast(arg$5233); final TypicalTypes.constr x = Analyzer.cast(Primitives.wrapHead(list$5235)); final Pair<TypicalTypes.constr> xs = Analyzer.cast(Primitives.wrapTail(list$5235)); return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.constr arg$5239 = Analyzer.cast(x); if ((null == arg$5239)) { return null; } if ((null != arg$5239)) switch (arg$5239.tag()) { case WildConstr: if (TypicalSupport.match$5108(arg$5239)) { return Analyzer.cast(emptySigma.apply(xs)); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F1<Boolean, Pair<TypicalTypes.constr>> completeSigma = new Function.F1<Boolean, Pair<TypicalTypes.constr>>() { public Boolean apply(final Pair<TypicalTypes.constr> sigma) { return new Let<Boolean>() { final Pair<TypicalTypes.constr> si; { si = Analyzer.cast(removeWildConstr.apply(sigma)); } public Boolean apply() { return Analyzer.cast(null == Primitives.equal.apply(Primitives.length.apply(si), BigInteger.valueOf(0)) ? null : Primitives.equal.apply(Primitives.length.apply(si), BigInteger.valueOf(0)) ? Boolean.FALSE : new Let<Boolean>() { final TypicalTypes.constr h; { h = Analyzer.cast(TypicalSupport.head$5275.apply(si)); } public Boolean apply() { return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.constr arg$5243 = Analyzer.cast(h); if ((null == arg$5243)) { return null; } if ((null != arg$5243)) switch (arg$5243.tag()) { case RecordConstr: if (TypicalSupport.match$5140(arg$5243)) { return Analyzer.cast(Boolean.TRUE); } break; case Const: if (TypicalSupport.match$5138(arg$5243)) { final TypicalTypes.value val = Analyzer.cast(arg$5243.getTuple().get1()); return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.value arg$5248 = Analyzer.cast(val); if ((null == arg$5248)) { return null; } if ((null != arg$5248)) switch (arg$5248.tag()) { case BoolValue: if (TypicalSupport.match$5246(arg$5248)) { return Analyzer.cast(Primitives.and.apply(Primitives.contains.apply(new TypicalTypes.Const(new TypicalTypes.BoolValue(Boolean.TRUE)), sigma), Primitives.contains.apply(new TypicalTypes.Const(new TypicalTypes.BoolValue(Boolean.FALSE)), sigma))); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } break; case TupleConstr: if (TypicalSupport.match$5141(arg$5243)) { return Analyzer.cast(Boolean.TRUE); } break; case CConstr: if (TypicalSupport.match$5155(arg$5243)) { final String s = Analyzer.cast(arg$5243.getTuple().get1()); return Analyzer.cast(new Let<Boolean>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("TypeConstructor", s, null), getNameSpace))); } public Boolean apply() { return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.raw_type<?> arg$5265 = Analyzer.cast(ty); if ((null == arg$5265)) { return null; } if ((null != arg$5265)) switch (arg$5265.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$5265)) { final String str = Analyzer.cast(arg$5265.getTuple().get1()); return Analyzer.cast(new Let<Boolean>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", str), getNameSpace))); } public Boolean apply() { return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.raw_type<?> arg$5270 = Analyzer.cast(t); if ((null == arg$5270)) { return null; } if ((null != arg$5270)) switch (arg$5270.tag()) { case VariantT: if (TypicalSupport.match$101(arg$5270)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$5270.getTuple().get1()); return Analyzer.cast(checkComplete.apply(tl, si)); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } break; case EmptyConstr: if (TypicalSupport.match$5139(arg$5243)) { return Analyzer.cast(Primitives.and.apply(Primitives.contains.apply(new TypicalTypes.EmptyConstr(), si), Primitives.contains.apply(new TypicalTypes.PairConstr(), si))); } break; case PairConstr: if (TypicalSupport.match$5148(arg$5243)) { return Analyzer.cast(Primitives.and.apply(Primitives.contains.apply(new TypicalTypes.EmptyConstr(), si), Primitives.contains.apply(new TypicalTypes.PairConstr(), si))); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } }.apply(); } }; final Function.F2<Boolean, Pair<TypicalTypes.raw_type<?>>, Pair<TypicalTypes.constr>> checkComplete = new Function.F2<Boolean, Pair<TypicalTypes.raw_type<?>>, Pair<TypicalTypes.constr>>() { public Boolean apply(final Pair<TypicalTypes.raw_type<?>> tl, final Pair<TypicalTypes.constr> sigma) { return new Match<Boolean>() { public Boolean apply() { final Pair<TypicalTypes.raw_type<?>> arg$5276 = Analyzer.cast(tl); if ((null == arg$5276)) { return null; } if (TypicalSupport.match$123(arg$5276)) { return Analyzer.cast(Boolean.TRUE); } if ((null != arg$5276 && !((Pair)arg$5276).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$5278 = Analyzer.cast(arg$5276); final TypicalTypes.raw_type<?> x = Analyzer.cast(Primitives.wrapHead(list$5278)); final Pair<TypicalTypes.raw_type<?>> xs = Analyzer.cast(Primitives.wrapTail(list$5278)); return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.raw_type<?> arg$5282 = Analyzer.cast(x); if ((null == arg$5282)) { return null; } if ((null != arg$5282)) switch (arg$5282.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$5282)) { final String str = Analyzer.cast(arg$5282.getTuple().get2()); return Analyzer.cast(null == sigmaContains.apply(sigma, str) ? null : sigmaContains.apply(sigma, str) ? checkComplete.apply(xs, sigma) : Boolean.FALSE); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F2<Boolean, Pair<TypicalTypes.constr>, String> sigmaContains = new Function.F2<Boolean, Pair<TypicalTypes.constr>, String>() { public Boolean apply(final Pair<TypicalTypes.constr> sigma, final String s) { return new Match<Boolean>() { public Boolean apply() { final Pair<TypicalTypes.constr> arg$5286 = Analyzer.cast(sigma); if ((null == arg$5286)) { return null; } if (TypicalSupport.match$5105(arg$5286)) { return Analyzer.cast(Boolean.FALSE); } if ((null != arg$5286 && !((Pair)arg$5286).isEmpty())) { final Pair<TypicalTypes.constr> list$5288 = Analyzer.cast(arg$5286); final TypicalTypes.constr x = Analyzer.cast(Primitives.wrapHead(list$5288)); final Pair<TypicalTypes.constr> xs = Analyzer.cast(Primitives.wrapTail(list$5288)); return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.constr arg$5292 = Analyzer.cast(x); if ((null == arg$5292)) { return null; } if ((null != arg$5292)) switch (arg$5292.tag()) { case CConstr: if (TypicalSupport.match$5155(arg$5292)) { final String str = Analyzer.cast(arg$5292.getTuple().get1()); return Analyzer.cast(null == Primitives.equal.apply(s, str) ? null : Primitives.equal.apply(s, str) ? Boolean.TRUE : sigmaContains.apply(xs, s)); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F1<TypicalTypes.pattern, Pair<TypicalTypes.constr>> findUnmatchedPattern = new Function.F1<TypicalTypes.pattern, Pair<TypicalTypes.constr>>() { public TypicalTypes.pattern apply(final Pair<TypicalTypes.constr> sigma) { return new Let<TypicalTypes.pattern>() { final Pair<TypicalTypes.constr> si; final TypicalTypes.constr h; { si = Analyzer.cast(removeWildConstr.apply(sigma)); h = Analyzer.cast(TypicalSupport.head$5275.apply(si)); } public TypicalTypes.pattern apply() { return Analyzer.cast(new Match<TypicalTypes.pattern>() { public TypicalTypes.pattern apply() { final TypicalTypes.constr arg$5296 = Analyzer.cast(h); if ((null == arg$5296)) { return null; } if ((null != arg$5296)) switch (arg$5296.tag()) { case Const: if (TypicalSupport.match$5138(arg$5296)) { final TypicalTypes.value val = Analyzer.cast(arg$5296.getTuple().get1()); return Analyzer.cast(new Match<TypicalTypes.pattern>() { public TypicalTypes.pattern apply() { final TypicalTypes.value arg$5304 = Analyzer.cast(val); if ((null == arg$5304)) { return null; } if ((null != arg$5304)) switch (arg$5304.tag()) { case BoolValue: if (TypicalSupport.match$5246(arg$5304)) { return Analyzer.cast(null == Primitives.not.apply(Primitives.contains.apply(new TypicalTypes.Const(new TypicalTypes.BoolValue(Boolean.TRUE)), sigma)) ? null : Primitives.not.apply(Primitives.contains.apply(new TypicalTypes.Const(new TypicalTypes.BoolValue(Boolean.TRUE)), sigma)) ? new TypicalTypes.ConstantPattern(new TypicalTypes.BoolValue(Boolean.TRUE)) : new TypicalTypes.ConstantPattern(new TypicalTypes.BoolValue(Boolean.FALSE))); } break; case IntValue: if (TypicalSupport.match$5300(arg$5304)) { final BigInteger i = Analyzer.cast(arg$5304.getTuple().get1()); return Analyzer.cast(findIntPattern.apply(i, sigma)); } break; case FloatValue: if (TypicalSupport.match$5301(arg$5304)) { final Double f = Analyzer.cast(arg$5304.getTuple().get1()); return Analyzer.cast(findFloatPattern.apply(f, sigma)); } break; case StringValue: if (TypicalSupport.match$5302(arg$5304)) { final String s = Analyzer.cast(arg$5304.getTuple().get1()); return Analyzer.cast(findStringPattern.apply(s, sigma)); } break; default: break; }; return null; } }.apply()); } break; case CConstr: if (TypicalSupport.match$5155(arg$5296)) { final String s = Analyzer.cast(arg$5296.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.pattern>() { final TypicalTypes.raw_type<?> ty; { ty = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("TypeConstructor", s, null), getNameSpace))); } public TypicalTypes.pattern apply() { return Analyzer.cast(new Match<TypicalTypes.pattern>() { public TypicalTypes.pattern apply() { final TypicalTypes.raw_type<?> arg$5322 = Analyzer.cast(ty); if ((null == arg$5322)) { return null; } if ((null != arg$5322)) switch (arg$5322.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$5322)) { final String str = Analyzer.cast(arg$5322.getTuple().get1()); return Analyzer.cast(new Let<TypicalTypes.pattern>() { final TypicalTypes.raw_type<?> t; { t = Analyzer.cast(Analyzer.cast(lookup2.apply(GNode.create("UserDefinedType", str), getNameSpace))); } public TypicalTypes.pattern apply() { return Analyzer.cast(new Match<TypicalTypes.pattern>() { public TypicalTypes.pattern apply() { final TypicalTypes.raw_type<?> arg$5327 = Analyzer.cast(t); if ((null == arg$5327)) { return null; } if ((null != arg$5327)) switch (arg$5327.tag()) { case VariantT: if (TypicalSupport.match$101(arg$5327)) { final Pair<TypicalTypes.raw_type<?>> tl = Analyzer.cast(arg$5327.getTuple().get1()); return Analyzer.cast(findUnmatchedConstructor.apply(tl, si)); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply()); } break; case EmptyConstr: if (TypicalSupport.match$5139(arg$5296)) { return Analyzer.cast(null == Primitives.contains.apply(new TypicalTypes.EmptyConstr(), sigma) ? null : Primitives.contains.apply(new TypicalTypes.EmptyConstr(), sigma) ? new Let<TypicalTypes.pattern>() { final TypicalTypes.patternRecord wild; { wild = Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.WildCardPattern(), null, Boolean.FALSE)); } public TypicalTypes.pattern apply() { return Analyzer.cast(new TypicalTypes.PairPattern(wild, wild)); } }.apply() : new TypicalTypes.EmptyPattern()); } break; case PairConstr: if (TypicalSupport.match$5148(arg$5296)) { return Analyzer.cast(null == Primitives.contains.apply(new TypicalTypes.EmptyConstr(), sigma) ? null : Primitives.contains.apply(new TypicalTypes.EmptyConstr(), sigma) ? new Let<TypicalTypes.pattern>() { final TypicalTypes.patternRecord wild; { wild = Analyzer.cast(new TypicalTypes.patternRecord(new TypicalTypes.WildCardPattern(), null, Boolean.FALSE)); } public TypicalTypes.pattern apply() { return Analyzer.cast(new TypicalTypes.PairPattern(wild, wild)); } }.apply() : new TypicalTypes.EmptyPattern()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } }.apply(); } }; final Function.F2<TypicalTypes.pattern, BigInteger, Pair<TypicalTypes.constr>> findIntPattern = new Function.F2<TypicalTypes.pattern, BigInteger, Pair<TypicalTypes.constr>>() { public TypicalTypes.pattern apply(final BigInteger i, final Pair<TypicalTypes.constr> sigma) { return (null == Primitives.not.apply(Primitives.contains.apply(new TypicalTypes.Const(new TypicalTypes.IntValue(Primitives.addInt.apply(i, BigInteger.valueOf(1)))), sigma)) ? null : Primitives.not.apply(Primitives.contains.apply(new TypicalTypes.Const(new TypicalTypes.IntValue(Primitives.addInt.apply(i, BigInteger.valueOf(1)))), sigma)) ? new TypicalTypes.ConstantPattern(new TypicalTypes.IntValue(Primitives.addInt.apply(i, BigInteger.valueOf(1)))) : findIntPattern.apply(Primitives.addInt.apply(i, BigInteger.valueOf(1)), sigma)); } }; final Function.F2<TypicalTypes.pattern, Double, Pair<TypicalTypes.constr>> findFloatPattern = new Function.F2<TypicalTypes.pattern, Double, Pair<TypicalTypes.constr>>() { public TypicalTypes.pattern apply(final Double f, final Pair<TypicalTypes.constr> sigma) { return (null == Primitives.not.apply(Primitives.contains.apply(new TypicalTypes.Const(new TypicalTypes.FloatValue(Primitives.addFloat64.apply(f, new Double(1.0)))), sigma)) ? null : Primitives.not.apply(Primitives.contains.apply(new TypicalTypes.Const(new TypicalTypes.FloatValue(Primitives.addFloat64.apply(f, new Double(1.0)))), sigma)) ? new TypicalTypes.ConstantPattern(new TypicalTypes.FloatValue(Primitives.addFloat64.apply(f, new Double(1.0)))) : findFloatPattern.apply(Primitives.addFloat64.apply(f, new Double(1.0)), sigma)); } }; final Function.F2<TypicalTypes.pattern, String, Pair<TypicalTypes.constr>> findStringPattern = new Function.F2<TypicalTypes.pattern, String, Pair<TypicalTypes.constr>>() { public TypicalTypes.pattern apply(final String s, final Pair<TypicalTypes.constr> sigma) { return (null == Primitives.not.apply(Primitives.contains.apply(new TypicalTypes.Const(new TypicalTypes.StringValue(Primitives.concat.apply("z", s))), sigma)) ? null : Primitives.not.apply(Primitives.contains.apply(new TypicalTypes.Const(new TypicalTypes.StringValue(Primitives.concat.apply("z", s))), sigma)) ? new TypicalTypes.ConstantPattern(new TypicalTypes.StringValue(Primitives.concat.apply("z", s))) : findStringPattern.apply(Primitives.concat.apply("z", s), sigma)); } }; final Function.F2<TypicalTypes.pattern, Pair<TypicalTypes.raw_type<?>>, Pair<TypicalTypes.constr>> findUnmatchedConstructor = new Function.F2<TypicalTypes.pattern, Pair<TypicalTypes.raw_type<?>>, Pair<TypicalTypes.constr>>() { public TypicalTypes.pattern apply(final Pair<TypicalTypes.raw_type<?>> tl, final Pair<TypicalTypes.constr> sigma) { return new Match<TypicalTypes.pattern>() { public TypicalTypes.pattern apply() { final Pair<TypicalTypes.raw_type<?>> arg$5332 = Analyzer.cast(tl); if ((null == arg$5332)) { return null; } if (TypicalSupport.match$123(arg$5332)) { return Analyzer.cast(null); } if ((null != arg$5332 && !((Pair)arg$5332).isEmpty())) { final Pair<TypicalTypes.raw_type<?>> list$5334 = Analyzer.cast(arg$5332); final TypicalTypes.raw_type<?> x = Analyzer.cast(Primitives.wrapHead(list$5334)); final Pair<TypicalTypes.raw_type<?>> xs = Analyzer.cast(Primitives.wrapTail(list$5334)); return Analyzer.cast(new Match<TypicalTypes.pattern>() { public TypicalTypes.pattern apply() { final TypicalTypes.raw_type<?> arg$5338 = Analyzer.cast(x); if ((null == arg$5338)) { return null; } if ((null != arg$5338)) switch (arg$5338.tag()) { case ConstructorT: if (TypicalSupport.match$95(arg$5338)) { final String str = Analyzer.cast(arg$5338.getTuple().get2()); return Analyzer.cast(null == sigmaContains.apply(sigma, str) ? null : sigmaContains.apply(sigma, str) ? findUnmatchedConstructor.apply(xs, sigma) : new Let<TypicalTypes.pattern>() { final BigInteger size; final Pair<TypicalTypes.patternRecord> li; { size = Analyzer.cast(getConstructorSize.apply(str)); li = Analyzer.cast(makeWildCards.apply(size)); } public TypicalTypes.pattern apply() { return Analyzer.cast(new TypicalTypes.ConstructorPattern(str, li)); } }.apply()); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F1<Pair<TypicalTypes.constr>, Pair<TypicalTypes.constr>> removeWildConstr = new Function.F1<Pair<TypicalTypes.constr>, Pair<TypicalTypes.constr>>() { public Pair<TypicalTypes.constr> apply(final Pair<TypicalTypes.constr> sigma) { return new Match<Pair<TypicalTypes.constr>>() { public Pair<TypicalTypes.constr> apply() { final Pair<TypicalTypes.constr> arg$5342 = Analyzer.cast(sigma); if ((null == arg$5342)) { return null; } if (TypicalSupport.match$5105(arg$5342)) { return Analyzer.cast(Pair.<TypicalTypes.constr>empty()); } if ((null != arg$5342 && !((Pair)arg$5342).isEmpty())) { final Pair<TypicalTypes.constr> list$5344 = Analyzer.cast(arg$5342); final TypicalTypes.constr x = Analyzer.cast(Primitives.wrapHead(list$5344)); final Pair<TypicalTypes.constr> xs = Analyzer.cast(Primitives.wrapTail(list$5344)); return Analyzer.cast(null == Primitives.equal.apply(x, new TypicalTypes.WildConstr()) ? null : Primitives.equal.apply(x, new TypicalTypes.WildConstr()) ? removeWildConstr.apply(xs) : Primitives.wrapCons(x, removeWildConstr.apply(xs))); } return null; } }.apply(); } }; final Function.F1<Boolean, Pair<Pair<TypicalTypes.patternRecord>>> quickPartialCheck = new Function.F1<Boolean, Pair<Pair<TypicalTypes.patternRecord>>>() { public Boolean apply(final Pair<Pair<TypicalTypes.patternRecord>> matrix) { return new Match<Boolean>() { public Boolean apply() { final Pair<Pair<TypicalTypes.patternRecord>> arg$5346 = Analyzer.cast(matrix); if ((null == arg$5346)) { return null; } if (TypicalSupport.match$5073(arg$5346)) { return Analyzer.cast(Boolean.FALSE); } if ((null != arg$5346 && !((Pair)arg$5346).isEmpty())) { final Pair<Pair<TypicalTypes.patternRecord>> list$5348 = Analyzer.cast(arg$5346); final Pair<TypicalTypes.patternRecord> x = Analyzer.cast(Primitives.wrapHead(list$5348)); final Pair<Pair<TypicalTypes.patternRecord>> xs = Analyzer.cast(Primitives.wrapTail(list$5348)); return Analyzer.cast(null == allWildCard.apply(x) ? null : allWildCard.apply(x) ? Boolean.TRUE : quickPartialCheck.apply(xs)); } return null; } }.apply(); } }; final Function.F1<Boolean, Pair<TypicalTypes.patternRecord>> allWildCard = new Function.F1<Boolean, Pair<TypicalTypes.patternRecord>>() { public Boolean apply(final Pair<TypicalTypes.patternRecord> row) { return new Match<Boolean>() { public Boolean apply() { final Pair<TypicalTypes.patternRecord> arg$5350 = Analyzer.cast(row); if ((null == arg$5350)) { return null; } if (TypicalSupport.match$4786(arg$5350)) { return Analyzer.cast(Boolean.TRUE); } if ((null != arg$5350 && !((Pair)arg$5350).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$5352 = Analyzer.cast(arg$5350); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$5352)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$5352)); return Analyzer.cast(new Match<Boolean>() { public Boolean apply() { final TypicalTypes.pattern arg$5358 = Analyzer.cast(null == x ? null : x.pat); if ((null == arg$5358)) { return null; } if ((null != arg$5358)) switch (arg$5358.tag()) { case VariablePattern: if (TypicalSupport.match$4819(arg$5358)) { return Analyzer.cast(allWildCard.apply(xs)); } break; case TupPattern: if (TypicalSupport.match$4858(arg$5358)) { final Pair<TypicalTypes.patternRecord> pl = Analyzer.cast(arg$5358.getTuple().get1()); return Analyzer.cast(Primitives.and.apply(allWildCard.apply(pl), allWildCard.apply(xs))); } break; case WildCardPattern: if (TypicalSupport.match$4817(arg$5358)) { return Analyzer.cast(allWildCard.apply(xs)); } break; default: break; }; if (true) { return Analyzer.cast(Boolean.FALSE); } return null; } }.apply()); } return null; } }.apply(); } }; final Function.F1<String, TypicalTypes.pattern> showPattern = new Function.F1<String, TypicalTypes.pattern>() { public String apply(final TypicalTypes.pattern p) { return new Match<String>() { public String apply() { final TypicalTypes.pattern arg$5364 = Analyzer.cast(p); if ((null == arg$5364)) { return null; } if ((null != arg$5364)) switch (arg$5364.tag()) { case PairPattern: if (TypicalSupport.match$4879(arg$5364)) { final TypicalTypes.patternRecord hd = Analyzer.cast(arg$5364.getTuple().get1()); final TypicalTypes.patternRecord tl = Analyzer.cast(arg$5364.getTuple().get2()); return Analyzer.cast(new Let<String>() { final String mes1; final String mes2; { mes1 = Analyzer.cast(showPattern.apply(null == hd ? null : hd.pat)); mes2 = Analyzer.cast(showPattern.apply(null == tl ? null : tl.pat)); } public String apply() { return Analyzer.cast(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(mes1, "::("), mes2), ")")); } }.apply()); } break; case ConstructorPattern: if (TypicalSupport.match$4865(arg$5364)) { final String s = Analyzer.cast(arg$5364.getTuple().get1()); final Pair<TypicalTypes.patternRecord> pl = Analyzer.cast(arg$5364.getTuple().get2()); return Analyzer.cast(new Let<String>() { final String mes; { mes = Analyzer.cast(showPatternRecords.apply(pl)); } public String apply() { return Analyzer.cast(Primitives.concat.apply(Primitives.concat.apply(Primitives.concat.apply(s, "("), mes), ")")); } }.apply()); } break; case RecFieldPattern: if (TypicalSupport.match$4893(arg$5364)) { final String s = Analyzer.cast(arg$5364.getTuple().get1()); final TypicalTypes.patternRecord pt = Analyzer.cast(arg$5364.getTuple().get2()); return Analyzer.cast(new Let<String>() { final String mes; { mes = Analyzer.cast(showPattern.apply(null == pt ? null : pt.pat)); } public String apply() { return Analyzer.cast(Primitives.concat.apply(Primitives.concat.apply(s, "="), mes)); } }.apply()); } break; case VariablePattern: if (TypicalSupport.match$4819(arg$5364)) { return Analyzer.cast("_"); } break; case TupPattern: if (TypicalSupport.match$4858(arg$5364)) { final Pair<TypicalTypes.patternRecord> pl = Analyzer.cast(arg$5364.getTuple().get1()); return Analyzer.cast(new Let<String>() { final String mes; { mes = Analyzer.cast(showPatternRecords.apply(pl)); } public String apply() { return Analyzer.cast(Primitives.concat.apply(Primitives.concat.apply("(", mes), ")")); } }.apply()); } break; case BotPattern: if (TypicalSupport.match$4820(arg$5364)) { return Analyzer.cast("_|_"); } break; case RecPattern: if (TypicalSupport.match$4886(arg$5364)) { final Pair<TypicalTypes.patternRecord> pl = Analyzer.cast(arg$5364.getTuple().get1()); return Analyzer.cast(new Let<String>() { final String mes; { mes = Analyzer.cast(showPatternRecords.apply(pl)); } public String apply() { return Analyzer.cast(Primitives.concat.apply(Primitives.concat.apply("{", mes), "}")); } }.apply()); } break; case EmptyPattern: if (TypicalSupport.match$4872(arg$5364)) { return Analyzer.cast("[]"); } break; case ConstantPattern: if (TypicalSupport.match$4827(arg$5364)) { final TypicalTypes.value val = Analyzer.cast(arg$5364.getTuple().get1()); return Analyzer.cast(new Match<String>() { public String apply() { final TypicalTypes.value arg$5375 = Analyzer.cast(val); if ((null == arg$5375)) { return null; } if ((null != arg$5375)) switch (arg$5375.tag()) { case BoolValue: if (TypicalSupport.match$5246(arg$5375)) { final Boolean b = Analyzer.cast(arg$5375.getTuple().get1()); return Analyzer.cast(null == b ? null : b ? "true" : "false"); } break; case IntValue: if (TypicalSupport.match$5300(arg$5375)) { final BigInteger i = Analyzer.cast(arg$5375.getTuple().get1()); return Analyzer.cast(Primitives.itos.apply(i)); } break; case FloatValue: if (TypicalSupport.match$5301(arg$5375)) { final Double f = Analyzer.cast(arg$5375.getTuple().get1()); return Analyzer.cast(Primitives.ftos.apply(f)); } break; case StringValue: if (TypicalSupport.match$5302(arg$5375)) { final String s = Analyzer.cast(arg$5375.getTuple().get1()); return Analyzer.cast(s); } break; default: break; }; return null; } }.apply()); } break; case WildCardPattern: if (TypicalSupport.match$4817(arg$5364)) { return Analyzer.cast("_"); } break; default: break; }; if (true) { return Analyzer.cast(null); } return null; } }.apply(); } }; final Function.F1<String, Pair<TypicalTypes.pattern>> showPatterns = new Function.F1<String, Pair<TypicalTypes.pattern>>() { public String apply(final Pair<TypicalTypes.pattern> pl) { return new Match<String>() { public String apply() { final Pair<TypicalTypes.pattern> arg$5388 = Analyzer.cast(pl); if ((null == arg$5388)) { return null; } if (TypicalSupport.match$5216(arg$5388)) { return Analyzer.cast(""); } if (TypicalSupport.match$5390(arg$5388)) { final TypicalTypes.pattern x = Analyzer.cast(arg$5388.get(0)); return Analyzer.cast(showPattern.apply(x)); } if ((null != arg$5388 && !((Pair)arg$5388).isEmpty())) { final Pair<TypicalTypes.pattern> list$5391 = Analyzer.cast(arg$5388); final TypicalTypes.pattern x = Analyzer.cast(Primitives.wrapHead(list$5391)); final Pair<TypicalTypes.pattern> xs = Analyzer.cast(Primitives.wrapTail(list$5391)); return Analyzer.cast(new Let<String>() { final String me; final String mes; { me = Analyzer.cast(showPattern.apply(x)); mes = Analyzer.cast(showPatterns.apply(xs)); } public String apply() { return Analyzer.cast(Primitives.concat.apply(me, mes)); } }.apply()); } return null; } }.apply(); } }; final Function.F1<String, Pair<TypicalTypes.patternRecord>> showPatternRecords = new Function.F1<String, Pair<TypicalTypes.patternRecord>>() { public String apply(final Pair<TypicalTypes.patternRecord> pl) { return new Match<String>() { public String apply() { final Pair<TypicalTypes.patternRecord> arg$5393 = Analyzer.cast(pl); if ((null == arg$5393)) { return null; } if (TypicalSupport.match$4786(arg$5393)) { return Analyzer.cast(""); } if (TypicalSupport.match$5395(arg$5393)) { final TypicalTypes.patternRecord x = Analyzer.cast(arg$5393.get(0)); return Analyzer.cast(showPattern.apply(null == x ? null : x.pat)); } if ((null != arg$5393 && !((Pair)arg$5393).isEmpty())) { final Pair<TypicalTypes.patternRecord> list$5396 = Analyzer.cast(arg$5393); final TypicalTypes.patternRecord x = Analyzer.cast(Primitives.wrapHead(list$5396)); final Pair<TypicalTypes.patternRecord> xs = Analyzer.cast(Primitives.wrapTail(list$5396)); return Analyzer.cast(new Let<String>() { final String me; final String mes; { me = Analyzer.cast(showPattern.apply(null == x ? null : x.pat)); mes = Analyzer.cast(showPatternRecords.apply(xs)); } public String apply() { return Analyzer.cast(Primitives.concat.apply(Primitives.concat.apply(me, ","), mes)); } }.apply()); } return null; } }.apply(); } }; }