package it.xsemantics.example.fj.typesystem.fj.rules; import it.xtypes.runtime.*; public class SubTypeSequencesTypeRule extends FJTypeSystemRule { protected Variable<Integer> var_i = new Variable<Integer>( createBasicType("Integer")); protected Variable<it.xsemantics.example.fj.fj.Type> var_argType = new Variable<it.xsemantics.example.fj.fj.Type>( createEClassifierType(basicPackage.getType())); protected Variable<java.util.List<it.xsemantics.example.fj.fj.Expression>> var_args = new Variable<java.util.List<it.xsemantics.example.fj.fj.Expression>>( createCollectionType(createEClassifierType(basicPackage .getExpression()))); protected Variable<java.util.List<it.xsemantics.example.fj.fj.Parameter>> var_params = new Variable<java.util.List<it.xsemantics.example.fj.fj.Parameter>>( createCollectionType(createEClassifierType(basicPackage .getParameter()))); protected TypingJudgmentEnvironment env_G = new TypingJudgmentEnvironment(); public SubTypeSequencesTypeRule() { this("SubTypeSequences", "|-", "<:"); } public SubTypeSequencesTypeRule(String ruleName, String typeJudgmentSymbol, String typeStatementRelation) { super(ruleName, typeJudgmentSymbol, typeStatementRelation); } @Override public Variable<java.util.List<it.xsemantics.example.fj.fj.Expression>> getLeft() { return var_args; } @Override public Variable<java.util.List<it.xsemantics.example.fj.fj.Parameter>> getRight() { return var_params; } @Override public TypingJudgmentEnvironment getEnvironment() { return env_G; } @Override public void setEnvironment(TypingJudgmentEnvironment environment) { if (environment != null) env_G = environment; } @Override public RuntimeRule newInstance() { return new SubTypeSequencesTypeRule("SubTypeSequences", "|-", "<:"); } @Override public void applyImpl() throws RuleFailedException { equals(length(var_args), length(var_params)); register("forall " + stringRep(length(var_args))); try { for (var_i.setValue(0); var_i.getValue() < length(var_args); var_i .setValue(var_i.getValue() + 1)) { var_argType = new Variable<it.xsemantics.example.fj.fj.Type>( createEClassifierType(basicPackage.getType()), null); applyTypeRule(env_G, var_args.getValue().get(var_i.getValue()), var_argType); applySubtypeRule(env_G, var_argType, var_params.getValue().get(var_i.getValue()).getType()); } } catch (Throwable e) { registerAndThrowFailure(e); } register("end " + "forall " + stringRep(length(var_args))); // final check for variable initialization } }