Search in sources :

Example 11 with SetOf_Value

use of org.eclipse.titan.designer.AST.TTCN3.values.SetOf_Value in project titan.EclipsePlug-ins by eclipse.

the class LengthofExpression method evaluateValue.

@Override
public /**
 * {@inheritDoc}
 */
IValue evaluateValue(final CompilationTimeStamp timestamp, final Expected_Value_type expectedValue, final IReferenceChain referenceChain) {
    if (lastTimeChecked != null && !lastTimeChecked.isLess(timestamp)) {
        return lastValue;
    }
    isErroneous = false;
    lastTimeChecked = timestamp;
    lastValue = this;
    if (templateInstance == null) {
        return lastValue;
    }
    checkExpressionOperands(timestamp, expectedValue, referenceChain);
    if (getIsErroneous(timestamp)) {
        return lastValue;
    }
    if (isUnfoldable(timestamp, referenceChain)) {
        return lastValue;
    }
    final ITTCN3Template template = templateInstance.getTemplateBody();
    final IValue value = ((SpecificValue_Template) template).getSpecificValue().getValueRefdLast(timestamp, referenceChain);
    int length;
    switch(value.getValuetype()) {
        case CHARSTRING_VALUE:
            length = ((Charstring_Value) value).getValueLength();
            break;
        case UNIVERSALCHARSTRING_VALUE:
            length = ((UniversalCharstring_Value) value).getValueLength();
            break;
        case BITSTRING_VALUE:
            length = ((Bitstring_Value) value).getValueLength();
            break;
        case HEXSTRING_VALUE:
            length = ((Hexstring_Value) value).getValueLength();
            break;
        case OCTETSTRING_VALUE:
            length = ((Octetstring_Value) value).getValueLength();
            break;
        case SEQUENCEOF_VALUE:
            length = ((SequenceOf_Value) value).getNofComponents();
            break;
        case SETOF_VALUE:
            length = ((SetOf_Value) value).getNofComponents();
            break;
        case ARRAY_VALUE:
            length = ((Array_Value) value).getNofComponents();
            break;
        default:
            setIsErroneous(true);
            return lastValue;
    }
    lastValue = new Integer_Value(length);
    lastValue.copyGeneralProperties(this);
    return lastValue;
}
Also used : ITTCN3Template(org.eclipse.titan.designer.AST.TTCN3.templates.ITTCN3Template) IValue(org.eclipse.titan.designer.AST.IValue) Integer_Value(org.eclipse.titan.designer.AST.TTCN3.values.Integer_Value)

Example 12 with SetOf_Value

use of org.eclipse.titan.designer.AST.TTCN3.values.SetOf_Value in project titan.EclipsePlug-ins by eclipse.

the class SubstrExpression method checkExpressionOperandsHelper.

private void checkExpressionOperandsHelper(final CompilationTimeStamp timestamp, final IValue value1, final Expected_Value_type expectedValue, final IReferenceChain referenceChain) {
    if (value1 == null || value2 == null || value3 == null || getIsErroneous(timestamp)) {
        return;
    }
    long valueSize = -1;
    if (!value1.isUnfoldable(timestamp)) {
        IValue temp = value1.setLoweridToReference(timestamp);
        temp = temp.getValueRefdLast(timestamp, referenceChain);
        switch(temp.getValuetype()) {
            case BITSTRING_VALUE:
                valueSize = ((Bitstring_Value) temp).getValueLength();
                break;
            case HEXSTRING_VALUE:
                valueSize = ((Hexstring_Value) temp).getValueLength();
                break;
            case OCTETSTRING_VALUE:
                valueSize = ((Octetstring_Value) temp).getValueLength();
                break;
            case CHARSTRING_VALUE:
                valueSize = ((Charstring_Value) temp).getValueLength();
                break;
            case UNIVERSALCHARSTRING_VALUE:
                valueSize = ((UniversalCharstring_Value) temp).getValueLength();
                break;
            case SEQUENCEOF_VALUE:
                valueSize = ((SequenceOf_Value) temp).getNofComponents();
                if (valueSize == 0) {
                    templateInstance1.getLocation().reportSemanticError(OPERANDERROR11);
                }
                break;
            case SETOF_VALUE:
                valueSize = ((SetOf_Value) temp).getNofComponents();
                if (valueSize == 0) {
                    templateInstance1.getLocation().reportSemanticError(OPERANDERROR11);
                }
                break;
            default:
                break;
        }
    }
    if (valueSize < 0) {
        return;
    }
    if (value2.isUnfoldable(timestamp)) {
        if (!value3.isUnfoldable(timestamp)) {
            final IValue last3 = value3.getValueRefdLast(timestamp, expectedValue, referenceChain);
            final long last3Value = ((Integer_Value) last3).getValue();
            if (last3Value > valueSize) {
                location.reportSemanticError(MessageFormat.format(OPERANDERROR6, last3Value, valueSize));
                setIsErroneous(true);
            }
        }
    } else {
        final IValue last2 = value2.getValueRefdLast(timestamp, expectedValue, referenceChain);
        final long last2Value = ((Integer_Value) last2).getValue();
        if (value3.isUnfoldable(timestamp)) {
            if (last2Value > valueSize) {
                location.reportSemanticError(MessageFormat.format(OPERANDERROR7, last2Value, valueSize));
                setIsErroneous(true);
            }
        } else {
            final IValue last3 = value3.getValueRefdLast(timestamp, expectedValue, referenceChain);
            final long last3Value = ((Integer_Value) last3).getValue();
            if (last2Value + last3Value > valueSize) {
                location.reportSemanticError(MessageFormat.format(OPERANDERROR8, last2Value, last3Value, valueSize));
                setIsErroneous(true);
            }
        }
    }
}
Also used : IValue(org.eclipse.titan.designer.AST.IValue) Integer_Value(org.eclipse.titan.designer.AST.TTCN3.values.Integer_Value)

Example 13 with SetOf_Value

use of org.eclipse.titan.designer.AST.TTCN3.values.SetOf_Value in project titan.EclipsePlug-ins by eclipse.

the class IncorrectRotate method getFirstRotateOperandLength.

/**
 * @param ct the compilation timestamp to be used
 * @param value the first operand of the rotate operation
 * @return the length of the first operand if it can be determined
 */
private static long getFirstRotateOperandLength(final CompilationTimeStamp ct, final Value value) {
    if (value == null) {
        return 0;
    }
    final Type_type tempType = value.getExpressionReturntype(ct, null);
    final IValue refd = value.getValueRefdLast(ct, null);
    long valueSize = 0;
    switch(tempType) {
        case TYPE_BITSTRING:
            if (Value_type.BITSTRING_VALUE.equals(refd.getValuetype())) {
                valueSize = ((Bitstring_Value) refd).getValueLength();
            }
            break;
        case TYPE_HEXSTRING:
            if (Value_type.HEXSTRING_VALUE.equals(refd.getValuetype())) {
                valueSize = ((Hexstring_Value) refd).getValueLength();
            }
            break;
        case TYPE_OCTETSTRING:
            if (Value_type.OCTETSTRING_VALUE.equals(refd.getValuetype())) {
                valueSize = ((Octetstring_Value) refd).getValueLength();
            }
            break;
        case TYPE_CHARSTRING:
            if (Value_type.CHARSTRING_VALUE.equals(refd.getValuetype())) {
                valueSize = ((Charstring_Value) refd).getValueLength();
            }
            break;
        case TYPE_UCHARSTRING:
            if (Value_type.UNIVERSALCHARSTRING_VALUE.equals(refd.getValuetype())) {
                valueSize = ((UniversalCharstring_Value) refd).getValueLength();
            }
            break;
        case TYPE_SET_OF:
            if (Value_type.SEQUENCEOF_VALUE.equals(value.getValuetype())) {
                valueSize = ((SequenceOf_Value) value).getNofComponents();
            } else if (Value_type.SETOF_VALUE.equals(value.getValuetype())) {
                valueSize = ((SetOf_Value) value).getNofComponents();
            }
            break;
        case TYPE_SEQUENCE_OF:
            if (Value_type.SEQUENCEOF_VALUE.equals(value.getValuetype())) {
                valueSize = ((SequenceOf_Value) value).getNofComponents();
            } else if (Value_type.SETOF_VALUE.equals(value.getValuetype())) {
                valueSize = ((SetOf_Value) value).getNofComponents();
            }
            break;
        case TYPE_ARRAY:
            if (Value_type.SEQUENCEOF_VALUE.equals(value.getValuetype())) {
                valueSize = ((SequenceOf_Value) value).getNofComponents();
            }
            if (Value_type.ARRAY_VALUE.equals(value.getValuetype())) {
                valueSize = ((Array_Value) value).getNofComponents();
            }
            break;
        default:
            break;
    }
    return valueSize;
}
Also used : IValue(org.eclipse.titan.designer.AST.IValue) Type_type(org.eclipse.titan.designer.AST.IType.Type_type) SetOf_Value(org.eclipse.titan.designer.AST.TTCN3.values.SetOf_Value)

Example 14 with SetOf_Value

use of org.eclipse.titan.designer.AST.TTCN3.values.SetOf_Value in project titan.EclipsePlug-ins by eclipse.

the class SpecificValue_Template method checkTemplateSpecificLengthRestriction.

@Override
protected /**
 * {@inheritDoc}
 */
void checkTemplateSpecificLengthRestriction(final CompilationTimeStamp timestamp, final Type_type typeType) {
    IValue value = getValue();
    final IReferenceChain referenceChain = ReferenceChain.getInstance(IReferenceChain.CIRCULARREFERENCE, true);
    value = value.getValueRefdLast(timestamp, referenceChain);
    referenceChain.release();
    switch(value.getValuetype()) {
        case BITSTRING_VALUE:
            if (Type_type.TYPE_BITSTRING.equals(typeType)) {
                lengthRestriction.checkNofElements(timestamp, ((Bitstring_Value) value).getValueLength(), false, false, false, this);
            }
            break;
        case HEXSTRING_VALUE:
            if (Type_type.TYPE_HEXSTRING.equals(typeType)) {
                lengthRestriction.checkNofElements(timestamp, ((Hexstring_Value) value).getValueLength(), false, false, false, this);
            }
            break;
        case OCTETSTRING_VALUE:
            if (Type_type.TYPE_OCTETSTRING.equals(typeType)) {
                lengthRestriction.checkNofElements(timestamp, ((Octetstring_Value) value).getValueLength(), false, false, false, this);
            }
            break;
        case CHARSTRING_VALUE:
            if (Type_type.TYPE_CHARSTRING.equals(typeType)) {
                lengthRestriction.checkNofElements(timestamp, ((Charstring_Value) value).getValueLength(), false, false, false, this);
            } else if (Type_type.TYPE_UCHARSTRING.equals(typeType)) {
                value = value.setValuetype(timestamp, Value_type.UNIVERSALCHARSTRING_VALUE);
                lengthRestriction.checkNofElements(timestamp, ((UniversalCharstring_Value) value).getValueLength(), false, false, false, this);
            }
            break;
        case UNIVERSALCHARSTRING_VALUE:
            if (Type_type.TYPE_UCHARSTRING.equals(typeType)) {
                lengthRestriction.checkNofElements(timestamp, ((UniversalCharstring_Value) value).getValueLength(), false, false, false, this);
            }
            break;
        case SEQUENCEOF_VALUE:
            if (Type_type.TYPE_SEQUENCE_OF.equals(typeType)) {
                lengthRestriction.checkNofElements(timestamp, ((SequenceOf_Value) value).getNofComponents(), false, false, false, this);
            }
            break;
        case SETOF_VALUE:
            if (Type_type.TYPE_SET_OF.equals(typeType)) {
                lengthRestriction.checkNofElements(timestamp, ((SetOf_Value) value).getNofComponents(), false, false, false, this);
            }
            break;
        case OMIT_VALUE:
            lengthRestriction.getLocation().reportSemanticError("Length restriction cannot be used with omit value");
            break;
        default:
            // they are either correct or not applicable to the type
            break;
    }
}
Also used : UniversalCharstring_Value(org.eclipse.titan.designer.AST.TTCN3.values.UniversalCharstring_Value) IValue(org.eclipse.titan.designer.AST.IValue) IReferenceChain(org.eclipse.titan.designer.AST.IReferenceChain)

Aggregations

IValue (org.eclipse.titan.designer.AST.IValue)13 SetOf_Value (org.eclipse.titan.designer.AST.TTCN3.values.SetOf_Value)9 Integer_Value (org.eclipse.titan.designer.AST.TTCN3.values.Integer_Value)6 IReferenceChain (org.eclipse.titan.designer.AST.IReferenceChain)3 Type_type (org.eclipse.titan.designer.AST.IType.Type_type)3 SequenceOf_Value (org.eclipse.titan.designer.AST.TTCN3.values.SequenceOf_Value)3 ITTCN3Template (org.eclipse.titan.designer.AST.TTCN3.templates.ITTCN3Template)2 Array_Value (org.eclipse.titan.designer.AST.TTCN3.values.Array_Value)2 UniversalCharstring_Value (org.eclipse.titan.designer.AST.TTCN3.values.UniversalCharstring_Value)2 BigInteger (java.math.BigInteger)1 HashMap (java.util.HashMap)1 SyntacticErrorStorage (org.eclipse.titan.common.parsers.SyntacticErrorStorage)1 Assignment (org.eclipse.titan.designer.AST.Assignment)1 Assignment_type (org.eclipse.titan.designer.AST.Assignment.Assignment_type)1 ISubReference (org.eclipse.titan.designer.AST.ISubReference)1 IType (org.eclipse.titan.designer.AST.IType)1 Reference (org.eclipse.titan.designer.AST.Reference)1 Expected_Value_type (org.eclipse.titan.designer.AST.TTCN3.Expected_Value_type)1 Def_Timer (org.eclipse.titan.designer.AST.TTCN3.definitions.Def_Timer)1 SpecificValue_Template (org.eclipse.titan.designer.AST.TTCN3.templates.SpecificValue_Template)1