use of org.eclipse.xsemantics.runtime.Result in project n4js by eclipse.
the class InternalTypeSystem method applyRuleExpectedTypeOfRightSideInN4FieldDeclaration.
protected Result<TypeRef> applyRuleExpectedTypeOfRightSideInN4FieldDeclaration(final RuleEnvironment G, final RuleApplicationTrace _trace_, final N4FieldDeclaration fdecl, final Expression rhs) throws RuleFailedException {
// output parameter
TypeRef T = null;
TypeRef _declaredTypeRef = fdecl.getDeclaredTypeRef();
boolean _tripleNotEquals = (_declaredTypeRef != null);
if (_tripleNotEquals) {
T = fdecl.getDeclaredTypeRef();
} else {
T = RuleEnvironmentExtensions.topTypeRef(G);
}
return new Result<TypeRef>(T);
}
use of org.eclipse.xsemantics.runtime.Result in project n4js by eclipse.
the class InternalTypeSystem method applyRuleSubstTypeVariablesThisTypeRef.
protected Result<TypeArgument> applyRuleSubstTypeVariablesThisTypeRef(final RuleEnvironment G, final RuleApplicationTrace _trace_, final ThisTypeRef thisTypeRef) throws RuleFailedException {
// output parameter
ThisTypeRef T = null;
/* { val BoundThisTypeRef boundRefFromEnv = G.getThisType() as BoundThisTypeRef; if (boundRefFromEnv !== null) { val boundRef = TypeUtils.createBoundThisTypeRef(boundRefFromEnv.actualThisTypeRef); boundRef.setTypingStrategy(thisTypeRef.typingStrategy); TypeUtils.copyTypeModifiers(boundRef, thisTypeRef); T = boundRef; } else { T = thisTypeRef } } or { T = thisTypeRef } */
{
RuleFailedException previousFailure = null;
try {
TypeRef _thisType = RuleEnvironmentExtensions.getThisType(G);
final BoundThisTypeRef boundRefFromEnv = ((BoundThisTypeRef) _thisType);
if ((boundRefFromEnv != null)) {
final BoundThisTypeRef boundRef = TypeUtils.createBoundThisTypeRef(boundRefFromEnv.getActualThisTypeRef());
boundRef.setTypingStrategy(thisTypeRef.getTypingStrategy());
TypeUtils.copyTypeModifiers(boundRef, thisTypeRef);
T = boundRef;
} else {
T = thisTypeRef;
}
} catch (Exception e) {
previousFailure = extractRuleFailedException(e);
T = thisTypeRef;
}
}
return new Result<TypeArgument>(T);
}
use of org.eclipse.xsemantics.runtime.Result in project n4js by eclipse.
the class InternalTypeSystem method applyRuleSubstTypeVariablesInComposedTypeRef.
protected Result<TypeArgument> applyRuleSubstTypeVariablesInComposedTypeRef(final RuleEnvironment G, final RuleApplicationTrace _trace_, final ComposedTypeRef typeRef) throws RuleFailedException {
// output parameter
ComposedTypeRef result = null;
boolean haveReplacement = false;
final ArrayList<TypeRef> substTypeRefs = CollectionLiterals.<TypeRef>newArrayList();
EList<TypeRef> _typeRefs = typeRef.getTypeRefs();
for (final TypeRef currTypeRef : _typeRefs) {
/* G |- currTypeRef ~> var TypeRef substTypeRef */
TypeRef substTypeRef = null;
Result<TypeArgument> result_1 = substTypeVariablesInternal(G, _trace_, currTypeRef);
checkAssignableTo(result_1.getFirst(), TypeRef.class);
substTypeRef = (TypeRef) result_1.getFirst();
boolean _add = substTypeRefs.add(substTypeRef);
/* substTypeRefs.add(substTypeRef) */
if (!_add) {
sneakyThrowRuleFailedException("substTypeRefs.add(substTypeRef)");
}
haveReplacement = (haveReplacement || (substTypeRef != currTypeRef));
}
if (haveReplacement) {
result = TypeUtils.<ComposedTypeRef>copy(typeRef);
result.getTypeRefs().clear();
/* result.typeRefs.addAll(TypeUtils.copyAll(substTypeRefs)) */
if (!result.getTypeRefs().addAll(TypeUtils.<TypeRef>copyAll(substTypeRefs))) {
sneakyThrowRuleFailedException("result.typeRefs.addAll(TypeUtils.copyAll(substTypeRefs))");
}
} else {
result = typeRef;
}
return new Result<TypeArgument>(result);
}
use of org.eclipse.xsemantics.runtime.Result in project n4js by eclipse.
the class InternalTypeSystem method applyRuleSubstTypeVariablesInParameterizedTypeRef.
protected Result<TypeArgument> applyRuleSubstTypeVariablesInParameterizedTypeRef(final RuleEnvironment G, final RuleApplicationTrace _trace_, final ParameterizedTypeRef typeRef) throws RuleFailedException {
// output parameter
TypeRef result = null;
result = typeRef;
Type _declaredType = typeRef.getDeclaredType();
if ((_declaredType instanceof TypeVariable)) {
Type _declaredType_1 = typeRef.getDeclaredType();
final TypeVariable typeVar = ((TypeVariable) _declaredType_1);
/* { var temp = env(G, typeVar, TypeRef) if (typeRef instanceof ParameterizedTypeRefStructural) { if (temp instanceof ParameterizedTypeRef) { var ptrs = TypeUtils.copyToParameterizedTypeRefStructural(temp); ptrs.setTypingStrategy(typeRef.getTypingStrategy()); temp = ptrs; } } val tempDeclaredType = temp.declaredType if (typeVar !== tempDeclaredType && (TypeUtils.isOrContainsRefToTypeVar(temp) || (tempDeclaredType !== null && tempDeclaredType.generic)) && G.get(GUARD_SUBST_TYPE_VARS -> temp) === null) { val G2 = G.wrap; G2.add(GUARD_SUBST_TYPE_VARS -> temp, Boolean.TRUE) G2 |- temp ~> result result = TypeUtils.copy(result); } else { result = TypeUtils.copy(temp); } TypeUtils.copyTypeModifiers(result, typeRef) } or { val List<TypeRef> l_raw = env(G, typeVar, List) val l = newArrayList; for(var i=0;i<l_raw.size;i++) { val temp = l_raw.get(i); val tempDeclaredType = temp.declaredType; if(typeVar !== tempDeclaredType && (TypeUtils.isOrContainsRefToTypeVar(temp) || (tempDeclaredType !== null && tempDeclaredType.generic)) && G.get(GUARD_SUBST_TYPE_VARS -> temp) === null) { val G2 = G.wrap; G2.add(GUARD_SUBST_TYPE_VARS -> temp, Boolean.TRUE) G2 |- temp ~> var TypeRef tempResult tempResult = TypeUtils.copy(tempResult); l += tempResult; } else { l += TypeUtils.copy(temp); } } result = if(typeVar.declaredCovariant) { typeSystemHelper.createIntersectionType(G,l) } else if(typeVar.declaredContravariant) { typeSystemHelper.createUnionType(G,l) } else { G.addInconsistentSubstitutions(typeVar, l); TypeRefsFactory.eINSTANCE.createUnknownTypeRef }; TypeUtils.copyTypeModifiers(result, typeRef) } or { } */
{
RuleFailedException previousFailure = null;
try {
TypeRef temp = this.<TypeRef>env(G, typeVar, TypeRef.class);
if ((typeRef instanceof ParameterizedTypeRefStructural)) {
if ((temp instanceof ParameterizedTypeRef)) {
ParameterizedTypeRefStructural ptrs = TypeUtils.copyToParameterizedTypeRefStructural(((ParameterizedTypeRef) temp));
ptrs.setTypingStrategy(((ParameterizedTypeRefStructural) typeRef).getTypingStrategy());
temp = ptrs;
}
}
final Type tempDeclaredType = temp.getDeclaredType();
if ((((typeVar != tempDeclaredType) && (TypeUtils.isOrContainsRefToTypeVar(temp) || ((tempDeclaredType != null) && tempDeclaredType.isGeneric()))) && (G.get(Pair.<String, TypeRef>of(RuleEnvironmentExtensions.GUARD_SUBST_TYPE_VARS, temp)) == null))) {
final RuleEnvironment G2 = RuleEnvironmentExtensions.wrap(G);
Pair<String, TypeRef> _mappedTo = Pair.<String, TypeRef>of(RuleEnvironmentExtensions.GUARD_SUBST_TYPE_VARS, temp);
boolean _add = G2.add(_mappedTo, Boolean.TRUE);
/* G2.add(GUARD_SUBST_TYPE_VARS -> temp, Boolean.TRUE) */
if (!_add) {
sneakyThrowRuleFailedException("G2.add(GUARD_SUBST_TYPE_VARS -> temp, Boolean.TRUE)");
}
/* G2 |- temp ~> result */
Result<TypeArgument> result_1 = substTypeVariablesInternal(G2, _trace_, temp);
checkAssignableTo(result_1.getFirst(), TypeRef.class);
result = (TypeRef) result_1.getFirst();
result = TypeUtils.<TypeRef>copy(result);
} else {
result = TypeUtils.<TypeRef>copy(temp);
}
TypeUtils.copyTypeModifiers(result, typeRef);
} catch (Exception e) {
previousFailure = extractRuleFailedException(e);
/* { val List<TypeRef> l_raw = env(G, typeVar, List) val l = newArrayList; for(var i=0;i<l_raw.size;i++) { val temp = l_raw.get(i); val tempDeclaredType = temp.declaredType; if(typeVar !== tempDeclaredType && (TypeUtils.isOrContainsRefToTypeVar(temp) || (tempDeclaredType !== null && tempDeclaredType.generic)) && G.get(GUARD_SUBST_TYPE_VARS -> temp) === null) { val G2 = G.wrap; G2.add(GUARD_SUBST_TYPE_VARS -> temp, Boolean.TRUE) G2 |- temp ~> var TypeRef tempResult tempResult = TypeUtils.copy(tempResult); l += tempResult; } else { l += TypeUtils.copy(temp); } } result = if(typeVar.declaredCovariant) { typeSystemHelper.createIntersectionType(G,l) } else if(typeVar.declaredContravariant) { typeSystemHelper.createUnionType(G,l) } else { G.addInconsistentSubstitutions(typeVar, l); TypeRefsFactory.eINSTANCE.createUnknownTypeRef }; TypeUtils.copyTypeModifiers(result, typeRef) } or { } */
{
try {
final List<TypeRef> l_raw = this.<List>env(G, typeVar, List.class);
final ArrayList<TypeRef> l = CollectionLiterals.<TypeRef>newArrayList();
for (int i = 0; (i < l_raw.size()); i++) {
final TypeRef temp_1 = l_raw.get(i);
final Type tempDeclaredType_1 = temp_1.getDeclaredType();
if ((((typeVar != tempDeclaredType_1) && (TypeUtils.isOrContainsRefToTypeVar(temp_1) || ((tempDeclaredType_1 != null) && tempDeclaredType_1.isGeneric()))) && (G.get(Pair.<String, TypeRef>of(RuleEnvironmentExtensions.GUARD_SUBST_TYPE_VARS, temp_1)) == null))) {
final RuleEnvironment G2_1 = RuleEnvironmentExtensions.wrap(G);
Pair<String, TypeRef> _mappedTo_1 = Pair.<String, TypeRef>of(RuleEnvironmentExtensions.GUARD_SUBST_TYPE_VARS, temp_1);
boolean _add_1 = G2_1.add(_mappedTo_1, Boolean.TRUE);
/* G2.add(GUARD_SUBST_TYPE_VARS -> temp, Boolean.TRUE) */
if (!_add_1) {
sneakyThrowRuleFailedException("G2.add(GUARD_SUBST_TYPE_VARS -> temp, Boolean.TRUE)");
}
/* G2 |- temp ~> var TypeRef tempResult */
TypeRef tempResult = null;
Result<TypeArgument> result_2 = substTypeVariablesInternal(G2_1, _trace_, temp_1);
checkAssignableTo(result_2.getFirst(), TypeRef.class);
tempResult = (TypeRef) result_2.getFirst();
tempResult = TypeUtils.<TypeRef>copy(tempResult);
/* l += tempResult */
if (!l.add(tempResult)) {
sneakyThrowRuleFailedException("l += tempResult");
}
} else {
TypeRef _copy = TypeUtils.<TypeRef>copy(temp_1);
/* l += TypeUtils.copy(temp) */
if (!l.add(_copy)) {
sneakyThrowRuleFailedException("l += TypeUtils.copy(temp)");
}
}
}
TypeRef _xifexpression = null;
boolean _isDeclaredCovariant = typeVar.isDeclaredCovariant();
if (_isDeclaredCovariant) {
_xifexpression = this.typeSystemHelper.createIntersectionType(G, ((TypeRef[]) Conversions.unwrapArray(l, TypeRef.class)));
} else {
TypeRef _xifexpression_1 = null;
boolean _isDeclaredContravariant = typeVar.isDeclaredContravariant();
if (_isDeclaredContravariant) {
_xifexpression_1 = this.typeSystemHelper.createUnionType(G, ((TypeRef[]) Conversions.unwrapArray(l, TypeRef.class)));
} else {
UnknownTypeRef _xblockexpression = null;
{
RuleEnvironmentExtensions.addInconsistentSubstitutions(G, typeVar, l);
_xblockexpression = (TypeRefsFactory.eINSTANCE.createUnknownTypeRef());
}
_xifexpression_1 = _xblockexpression;
}
_xifexpression = _xifexpression_1;
}
result = _xifexpression;
TypeUtils.copyTypeModifiers(result, typeRef);
} catch (Exception e_1) {
previousFailure = extractRuleFailedException(e_1);
}
}
}
}
}
boolean _and = false;
Type _declaredType_2 = null;
if (typeRef != null) {
_declaredType_2 = typeRef.getDeclaredType();
}
boolean _tripleNotEquals = (_declaredType_2 != null);
if (!_tripleNotEquals) {
_and = false;
} else {
boolean _isGeneric = typeRef.getDeclaredType().isGeneric();
_and = _isGeneric;
}
if (_and) {
final int len = typeRef.getTypeArgs().size();
boolean haveSubstitution = false;
final TypeArgument[] argsChanged = new TypeArgument[len];
for (int i = 0; (i < len); i++) {
final TypeArgument arg = typeRef.getTypeArgs().get(i);
/* G |- arg ~> var TypeArgument argSubst */
TypeArgument argSubst = null;
Result<TypeArgument> result_2 = substTypeVariablesInternal(G, _trace_, arg);
checkAssignableTo(result_2.getFirst(), TypeArgument.class);
argSubst = (TypeArgument) result_2.getFirst();
if ((argSubst != arg)) {
argsChanged[i] = argSubst;
haveSubstitution = true;
}
}
if (haveSubstitution) {
if ((result == typeRef)) {
result = TypeUtils.<ParameterizedTypeRef>copy(typeRef);
}
for (int i = 0; (i < len); i++) {
final TypeArgument argCh = argsChanged[i];
if ((argCh != null)) {
result.getTypeArgs().set(i, argCh);
}
}
}
}
if ((result instanceof StructuralTypeRef)) {
result = this.typeSystemHelper.substTypeVariablesInStructuralMembers(G, ((StructuralTypeRef) result));
}
return new Result<TypeArgument>(result);
}
use of org.eclipse.xsemantics.runtime.Result in project n4js by eclipse.
the class InternalTypeSystem method applyRuleThisTypeRefEObject.
protected Result<TypeRef> applyRuleThisTypeRefEObject(final RuleEnvironment G, final RuleApplicationTrace _trace_, final EObject location) throws RuleFailedException {
// output parameter
TypeRef T = null;
final FunctionOrFieldAccessor containingFunctionOrAccessor = N4JSASTUtils.getContainingFunctionOrAccessor(location);
boolean _matched = false;
if (containingFunctionOrAccessor instanceof ArrowFunction) {
_matched = true;
/* G |~ containingFunctionOrAccessor ~> T */
Result<TypeRef> result = thisTypeRefInternal(G, _trace_, ((ArrowFunction) containingFunctionOrAccessor));
checkAssignableTo(result.getFirst(), TypeRef.class);
T = (TypeRef) result.getFirst();
}
if (!_matched) {
IdentifiableElement _definedFunctionOrAccessor = null;
if (containingFunctionOrAccessor != null) {
_definedFunctionOrAccessor = containingFunctionOrAccessor.getDefinedFunctionOrAccessor();
}
final IdentifiableElement containingTFunctionOrAccessor = _definedFunctionOrAccessor;
final TypeRef declaredThisType = TypeSystemHelper.declaredThisType(containingTFunctionOrAccessor);
if ((declaredThisType != null)) {
if ((declaredThisType instanceof ParameterizedTypeRef)) {
/* G |~ declaredThisType ~> T */
Result<TypeRef> result = thisTypeRefInternal(G, _trace_, ((ParameterizedTypeRef) declaredThisType));
checkAssignableTo(result.getFirst(), TypeRef.class);
T = (TypeRef) result.getFirst();
} else {
T = declaredThisType;
}
} else {
final ThisTarget thisTarget = N4JSASTUtils.getProbableThisTarget(location);
boolean _matched_1 = false;
if (thisTarget instanceof ObjectLiteral) {
_matched_1 = true;
/* G |- thisTarget: T */
Result<TypeRef> result_1 = typeInternal(G, _trace_, ((ObjectLiteral) thisTarget));
checkAssignableTo(result_1.getFirst(), TypeRef.class);
T = (TypeRef) result_1.getFirst();
}
if (!_matched_1) {
if (thisTarget instanceof N4ClassifierDefinition) {
_matched_1 = true;
Type thisTargetDEFTYPE = ((N4ClassifierDefinition) thisTarget).getDefinedType();
if ((thisTarget instanceof N4ClassDeclaration)) {
final TClass clazz = ((N4ClassDeclaration) thisTarget).getDefinedTypeAsClass();
if (((clazz != null) && clazz.isStaticPolyfill())) {
final Type actualClazz = clazz.getSuperClassRef().getDeclaredType();
if ((actualClazz != null)) {
thisTargetDEFTYPE = actualClazz;
}
}
}
if ((thisTargetDEFTYPE != null)) {
final FunctionDefinition containingFunction = N4JSASTUtils.getContainingFunction(location);
if (((containingFunction instanceof N4MethodDeclaration) && ((N4MemberDeclaration) containingFunction).isStatic())) {
boolean _isInReturnDeclaration_Of_StaticMethod = RuleEnvironmentExtensions.isInReturnDeclaration_Of_StaticMethod(location, ((N4MethodDeclaration) containingFunction));
if (_isInReturnDeclaration_Of_StaticMethod) {
/* G |~ thisTargetDEFTYPE.ref ~> T */
TypeRef _ref = TypeExtensions.ref(thisTargetDEFTYPE);
Result<TypeRef> result_1 = thisTypeRefInternal(G, _trace_, _ref);
checkAssignableTo(result_1.getFirst(), TypeRef.class);
T = (TypeRef) result_1.getFirst();
} else {
boolean _isInBody_Of_StaticMethod = RuleEnvironmentExtensions.isInBody_Of_StaticMethod(location, ((N4MethodDeclaration) containingFunction));
if (_isInBody_Of_StaticMethod) {
T = TypeUtils.createClassifierBoundThisTypeRef(TypeUtils.createTypeTypeRef(TypeExtensions.ref(thisTargetDEFTYPE), false));
} else {
T = TypeUtils.createConstructorTypeRef(thisTargetDEFTYPE);
}
}
} else {
final N4FieldDeclaration n4Field = EcoreUtil2.<N4FieldDeclaration>getContainerOfType(location, N4FieldDeclaration.class);
if (((n4Field != null) && n4Field.isStatic())) {
T = TypeRefsFactory.eINSTANCE.createUnknownTypeRef();
} else {
final N4GetterDeclaration n4Getter = EcoreUtil2.<N4GetterDeclaration>getContainerOfType(location, N4GetterDeclaration.class);
if (((n4Getter != null) && n4Getter.isStatic())) {
T = TypeUtils.createConstructorTypeRef(thisTargetDEFTYPE);
} else {
final N4SetterDeclaration n4Setter = EcoreUtil2.<N4SetterDeclaration>getContainerOfType(location, N4SetterDeclaration.class);
if (((n4Setter != null) && n4Setter.isStatic())) {
T = TypeUtils.createConstructorTypeRef(thisTargetDEFTYPE);
} else {
/* G |~ thisTargetDEFTYPE.ref ~> T */
TypeRef _ref_1 = TypeExtensions.ref(thisTargetDEFTYPE);
Result<TypeRef> result_2 = thisTypeRefInternal(G, _trace_, _ref_1);
checkAssignableTo(result_2.getFirst(), TypeRef.class);
T = (TypeRef) result_2.getFirst();
}
}
}
}
} else {
T = RuleEnvironmentExtensions.anyTypeRefDynamic(G);
}
}
}
if (!_matched_1) {
boolean _hasGlobalObject = this.jsVariantHelper.hasGlobalObject(location);
if (_hasGlobalObject) {
T = RuleEnvironmentExtensions.globalObjectTypeRef(G);
} else {
T = RuleEnvironmentExtensions.undefinedTypeRef(G);
}
}
}
}
return new Result<TypeRef>(T);
}
Aggregations