// ===========================================================================
// 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();
}
};
}