Search in sources :

Example 1 with RelationalOperator

use of org.eclipse.n4js.n4JS.RelationalOperator in project n4js by eclipse.

the class InternalTypeSystem method applyRuleExpectedTypeInRelationalExpression.

protected Result<TypeRef> applyRuleExpectedTypeInRelationalExpression(final RuleEnvironment G, final RuleApplicationTrace _trace_, final RelationalExpression e, final Expression expression) throws RuleFailedException {
    // output parameter
    TypeRef T = null;
    RelationalOperator _op = e.getOp();
    if (_op != null) {
        switch(_op) {
            case INSTANCEOF:
                Expression _rhs = e.getRhs();
                boolean _tripleEquals = (expression == _rhs);
                if (_tripleEquals) {
                    T = TypeUtils.createNonSimplifiedUnionType(RuleEnvironmentExtensions.functionTypeRef(G), TypeUtils.createTypeTypeRef(RuleEnvironmentExtensions.objectTypeRef(G), false), TypeUtils.createTypeTypeRef(RuleEnvironmentExtensions.n4EnumTypeRef(G), false));
                } else {
                    T = RuleEnvironmentExtensions.anyTypeRef(G);
                }
                break;
            case IN:
                Expression _rhs_1 = e.getRhs();
                boolean _tripleEquals_1 = (expression == _rhs_1);
                if (_tripleEquals_1) {
                    T = RuleEnvironmentExtensions.objectTypeRef(G);
                } else {
                    boolean _isTypeAware = this.jsVariantHelper.isTypeAware(e);
                    if (_isTypeAware) {
                        T = TypeUtils.createNonSimplifiedUnionType(RuleEnvironmentExtensions.numberTypeRef(G), RuleEnvironmentExtensions.stringTypeRef(G));
                    } else {
                        T = RuleEnvironmentExtensions.anyTypeRef(G);
                    }
                }
                break;
            default:
                boolean _isTypeAware_1 = this.jsVariantHelper.isTypeAware(e);
                if (_isTypeAware_1) {
                    final UnionTypeExpression primsTR = TypeUtils.createNonSimplifiedUnionType(RuleEnvironmentExtensions.numberTypeRef(G), RuleEnvironmentExtensions.stringTypeRef(G), RuleEnvironmentExtensions.booleanTypeRef(G));
                    Expression _xifexpression = null;
                    Expression _lhs = e.getLhs();
                    boolean _tripleEquals_2 = (expression == _lhs);
                    if (_tripleEquals_2) {
                        _xifexpression = e.getRhs();
                    } else {
                        _xifexpression = e.getLhs();
                    }
                    final Expression otherSide = _xifexpression;
                    /* G |- otherSide : var TypeRef otherSideTR */
                    TypeRef otherSideTR = null;
                    Result<TypeRef> result = typeInternal(G, _trace_, otherSide);
                    checkAssignableTo(result.getFirst(), TypeRef.class);
                    otherSideTR = (TypeRef) result.getFirst();
                    boolean _and = false;
                    /* G |- otherSideTR <: primsTR */
                    boolean _ruleinvocation = subtypeSucceeded(G, _trace_, otherSideTR, primsTR);
                    if (!_ruleinvocation) {
                        _and = false;
                    } else {
                        /* G |- otherSideTR <: G.nullTypeRef */
                        ParameterizedTypeRef _nullTypeRef = RuleEnvironmentExtensions.nullTypeRef(G);
                        boolean _ruleinvocation_1 = subtypeSucceeded(G, _trace_, otherSideTR, _nullTypeRef);
                        boolean _not = (!_ruleinvocation_1);
                        _and = _not;
                    }
                    if (_and) {
                        T = otherSideTR;
                    } else {
                        T = primsTR;
                    }
                } else {
                    T = RuleEnvironmentExtensions.anyTypeRef(G);
                }
                break;
        }
    } else {
        boolean _isTypeAware_1 = this.jsVariantHelper.isTypeAware(e);
        if (_isTypeAware_1) {
            final UnionTypeExpression primsTR = TypeUtils.createNonSimplifiedUnionType(RuleEnvironmentExtensions.numberTypeRef(G), RuleEnvironmentExtensions.stringTypeRef(G), RuleEnvironmentExtensions.booleanTypeRef(G));
            Expression _xifexpression = null;
            Expression _lhs = e.getLhs();
            boolean _tripleEquals_2 = (expression == _lhs);
            if (_tripleEquals_2) {
                _xifexpression = e.getRhs();
            } else {
                _xifexpression = e.getLhs();
            }
            final Expression otherSide = _xifexpression;
            /* G |- otherSide : var TypeRef otherSideTR */
            TypeRef otherSideTR = null;
            Result<TypeRef> result = typeInternal(G, _trace_, otherSide);
            checkAssignableTo(result.getFirst(), TypeRef.class);
            otherSideTR = (TypeRef) result.getFirst();
            boolean _and = false;
            /* G |- otherSideTR <: primsTR */
            boolean _ruleinvocation = subtypeSucceeded(G, _trace_, otherSideTR, primsTR);
            if (!_ruleinvocation) {
                _and = false;
            } else {
                /* G |- otherSideTR <: G.nullTypeRef */
                ParameterizedTypeRef _nullTypeRef = RuleEnvironmentExtensions.nullTypeRef(G);
                boolean _ruleinvocation_1 = subtypeSucceeded(G, _trace_, otherSideTR, _nullTypeRef);
                boolean _not = (!_ruleinvocation_1);
                _and = _not;
            }
            if (_and) {
                T = otherSideTR;
            } else {
                T = primsTR;
            }
        } else {
            T = RuleEnvironmentExtensions.anyTypeRef(G);
        }
    }
    return new Result<TypeRef>(T);
}
Also used : RelationalOperator(org.eclipse.n4js.n4JS.RelationalOperator) ParameterizedTypeRef(org.eclipse.n4js.ts.typeRefs.ParameterizedTypeRef) BinaryBitwiseExpression(org.eclipse.n4js.n4JS.BinaryBitwiseExpression) AssignmentExpression(org.eclipse.n4js.n4JS.AssignmentExpression) IndexedAccessExpression(org.eclipse.n4js.n4JS.IndexedAccessExpression) UnionTypeExpression(org.eclipse.n4js.ts.typeRefs.UnionTypeExpression) FunctionExpression(org.eclipse.n4js.n4JS.FunctionExpression) PromisifyExpression(org.eclipse.n4js.n4JS.PromisifyExpression) UnaryExpression(org.eclipse.n4js.n4JS.UnaryExpression) ParenExpression(org.eclipse.n4js.n4JS.ParenExpression) ParameterizedCallExpression(org.eclipse.n4js.n4JS.ParameterizedCallExpression) AdditiveExpression(org.eclipse.n4js.n4JS.AdditiveExpression) PostfixExpression(org.eclipse.n4js.n4JS.PostfixExpression) YieldExpression(org.eclipse.n4js.n4JS.YieldExpression) ConditionalExpression(org.eclipse.n4js.n4JS.ConditionalExpression) FunctionTypeExpression(org.eclipse.n4js.ts.typeRefs.FunctionTypeExpression) RelationalExpression(org.eclipse.n4js.n4JS.RelationalExpression) NewExpression(org.eclipse.n4js.n4JS.NewExpression) IntersectionTypeExpression(org.eclipse.n4js.ts.typeRefs.IntersectionTypeExpression) AwaitExpression(org.eclipse.n4js.n4JS.AwaitExpression) CommaExpression(org.eclipse.n4js.n4JS.CommaExpression) Expression(org.eclipse.n4js.n4JS.Expression) CastExpression(org.eclipse.n4js.n4JS.CastExpression) BinaryLogicalExpression(org.eclipse.n4js.n4JS.BinaryLogicalExpression) EqualityExpression(org.eclipse.n4js.n4JS.EqualityExpression) ShiftExpression(org.eclipse.n4js.n4JS.ShiftExpression) ParameterizedPropertyAccessExpression(org.eclipse.n4js.n4JS.ParameterizedPropertyAccessExpression) MultiplicativeExpression(org.eclipse.n4js.n4JS.MultiplicativeExpression) N4ClassExpression(org.eclipse.n4js.n4JS.N4ClassExpression) ThisTypeRef(org.eclipse.n4js.ts.typeRefs.ThisTypeRef) ParameterizedTypeRef(org.eclipse.n4js.ts.typeRefs.ParameterizedTypeRef) BaseTypeRef(org.eclipse.n4js.ts.typeRefs.BaseTypeRef) FunctionTypeRef(org.eclipse.n4js.ts.typeRefs.FunctionTypeRef) ExistentialTypeRef(org.eclipse.n4js.ts.typeRefs.ExistentialTypeRef) BoundThisTypeRef(org.eclipse.n4js.ts.typeRefs.BoundThisTypeRef) StructuralTypeRef(org.eclipse.n4js.ts.typeRefs.StructuralTypeRef) TypeRef(org.eclipse.n4js.ts.typeRefs.TypeRef) TypeTypeRef(org.eclipse.n4js.ts.typeRefs.TypeTypeRef) StaticBaseTypeRef(org.eclipse.n4js.ts.typeRefs.StaticBaseTypeRef) ComposedTypeRef(org.eclipse.n4js.ts.typeRefs.ComposedTypeRef) UnknownTypeRef(org.eclipse.n4js.ts.typeRefs.UnknownTypeRef) UnionTypeExpression(org.eclipse.n4js.ts.typeRefs.UnionTypeExpression) Result(org.eclipse.xsemantics.runtime.Result) StructuralTypingResult(org.eclipse.n4js.typesystem.StructuralTypingResult)

Example 2 with RelationalOperator

use of org.eclipse.n4js.n4JS.RelationalOperator in project n4js by eclipse.

the class RelationalExpressionImpl method setOp.

/**
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public void setOp(RelationalOperator newOp) {
    RelationalOperator oldOp = op;
    op = newOp == null ? OP_EDEFAULT : newOp;
    if (eNotificationRequired())
        eNotify(new ENotificationImpl(this, Notification.SET, N4JSPackage.RELATIONAL_EXPRESSION__OP, oldOp, op));
}
Also used : RelationalOperator(org.eclipse.n4js.n4JS.RelationalOperator) ENotificationImpl(org.eclipse.emf.ecore.impl.ENotificationImpl)

Aggregations

RelationalOperator (org.eclipse.n4js.n4JS.RelationalOperator)2 ENotificationImpl (org.eclipse.emf.ecore.impl.ENotificationImpl)1 AdditiveExpression (org.eclipse.n4js.n4JS.AdditiveExpression)1 AssignmentExpression (org.eclipse.n4js.n4JS.AssignmentExpression)1 AwaitExpression (org.eclipse.n4js.n4JS.AwaitExpression)1 BinaryBitwiseExpression (org.eclipse.n4js.n4JS.BinaryBitwiseExpression)1 BinaryLogicalExpression (org.eclipse.n4js.n4JS.BinaryLogicalExpression)1 CastExpression (org.eclipse.n4js.n4JS.CastExpression)1 CommaExpression (org.eclipse.n4js.n4JS.CommaExpression)1 ConditionalExpression (org.eclipse.n4js.n4JS.ConditionalExpression)1 EqualityExpression (org.eclipse.n4js.n4JS.EqualityExpression)1 Expression (org.eclipse.n4js.n4JS.Expression)1 FunctionExpression (org.eclipse.n4js.n4JS.FunctionExpression)1 IndexedAccessExpression (org.eclipse.n4js.n4JS.IndexedAccessExpression)1 MultiplicativeExpression (org.eclipse.n4js.n4JS.MultiplicativeExpression)1 N4ClassExpression (org.eclipse.n4js.n4JS.N4ClassExpression)1 NewExpression (org.eclipse.n4js.n4JS.NewExpression)1 ParameterizedCallExpression (org.eclipse.n4js.n4JS.ParameterizedCallExpression)1 ParameterizedPropertyAccessExpression (org.eclipse.n4js.n4JS.ParameterizedPropertyAccessExpression)1 ParenExpression (org.eclipse.n4js.n4JS.ParenExpression)1