use of org.eclipse.titan.designer.AST.TTCN3.values.Bitstring_Value in project titan.EclipsePlug-ins by eclipse.
the class ShiftLeftExpression method checkExpressionOperands.
/**
* Checks the parameters of the expression and if they are valid in
* their position in the expression or not.
*
* @param timestamp
* the timestamp of the actual semantic check cycle.
* @param expectedValue
* the kind of value expected.
* @param referenceChain
* a reference chain to detect cyclic references.
*/
private void checkExpressionOperands(final CompilationTimeStamp timestamp, final Expected_Value_type expectedValue, final IReferenceChain referenceChain) {
Type_type tempType1 = null;
Type_type tempType2 = null;
long stringSize = 0;
long shiftSize = 0;
IValue tempValue;
if (value1 != null) {
value1.setLoweridToReference(timestamp);
tempType1 = value1.getExpressionReturntype(timestamp, expectedValue);
switch(tempType1) {
case TYPE_BITSTRING:
tempValue = value1.getValueRefdLast(timestamp, expectedValue, referenceChain);
if (Value_type.BITSTRING_VALUE.equals(tempValue.getValuetype())) {
stringSize = ((Bitstring_Value) tempValue).getValueLength();
}
break;
case TYPE_HEXSTRING:
tempValue = value1.getValueRefdLast(timestamp, expectedValue, referenceChain);
if (Value_type.HEXSTRING_VALUE.equals(tempValue.getValuetype())) {
stringSize = ((Hexstring_Value) tempValue).getValueLength();
}
break;
case TYPE_OCTETSTRING:
tempValue = value1.getValueRefdLast(timestamp, expectedValue, referenceChain);
if (Value_type.OCTETSTRING_VALUE.equals(tempValue.getValuetype())) {
stringSize = ((Octetstring_Value) tempValue).getValueLength();
}
break;
case TYPE_UNDEFINED:
setIsErroneous(true);
break;
default:
location.reportSemanticError(FIRSTOPERANDERROR);
setIsErroneous(true);
break;
}
}
if (value2 != null) {
value2.setLoweridToReference(timestamp);
tempType2 = value2.getExpressionReturntype(timestamp, expectedValue);
switch(tempType2) {
case TYPE_INTEGER:
tempValue = value2.getValueRefdLast(timestamp, expectedValue, referenceChain);
if (Value_type.INTEGER_VALUE.equals(tempValue.getValuetype()) && !getIsErroneous(timestamp)) {
if (!((Integer_Value) tempValue).isNative()) {
value2.getLocation().reportSemanticError(MessageFormat.format(LARGEINTEGERSECONDOPERANDERROR, ((Integer_Value) tempValue).getValueValue()));
setIsErroneous(true);
break;
}
shiftSize = ((Integer_Value) tempValue).getValue();
if (value1 != null && !value1.isUnfoldable(timestamp)) {
final String severity = Platform.getPreferencesService().getString(ProductConstants.PRODUCT_ID_DESIGNER, PreferenceConstants.REPORTINCORRECTSHIFTROTATESIZE, GeneralConstants.WARNING, null);
if (shiftSize < 0) {
location.reportConfigurableSemanticProblem(severity, NEGATIVESHIFTPROBLEM);
} else if (shiftSize == 0) {
location.reportConfigurableSemanticProblem(severity, ZEROSHIFTPROBLEM);
} else if (shiftSize > stringSize) {
location.reportConfigurableSemanticProblem(severity, MessageFormat.format(TOOBIGSHIFTPROBLEM, stringSize, shiftSize));
}
}
}
break;
case TYPE_UNDEFINED:
setIsErroneous(true);
break;
default:
location.reportSemanticError(SECONDOPERANDERROR);
setIsErroneous(true);
break;
}
}
}
use of org.eclipse.titan.designer.AST.TTCN3.values.Bitstring_Value in project titan.EclipsePlug-ins by eclipse.
the class ShiftRightExpression 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 (value1 == null || value2 == null) {
return lastValue;
}
checkExpressionOperands(timestamp, expectedValue, referenceChain);
if (getIsErroneous(timestamp) || isUnfoldable(timestamp, referenceChain)) {
return lastValue;
}
final IValue last1 = value1.getValueRefdLast(timestamp, referenceChain);
final IValue last2 = value2.getValueRefdLast(timestamp, referenceChain);
String string;
long shiftSize;
switch(last1.getValuetype()) {
case BITSTRING_VALUE:
string = ((Bitstring_Value) last1).getValue();
shiftSize = ((Integer_Value) last2).getValue();
lastValue = new Bitstring_Value(shiftRight(string, shiftSize));
lastValue.copyGeneralProperties(this);
break;
case HEXSTRING_VALUE:
string = ((Hexstring_Value) last1).getValue();
shiftSize = ((Integer_Value) last2).getValue();
lastValue = new Hexstring_Value(shiftRight(string, shiftSize));
lastValue.copyGeneralProperties(this);
break;
case OCTETSTRING_VALUE:
string = ((Octetstring_Value) last1).getValue();
shiftSize = ((Integer_Value) last2).getValue() * 2;
lastValue = new Octetstring_Value(shiftRight(string, shiftSize));
lastValue.copyGeneralProperties(this);
break;
default:
setIsErroneous(true);
break;
}
return lastValue;
}
use of org.eclipse.titan.designer.AST.TTCN3.values.Bitstring_Value in project titan.EclipsePlug-ins by eclipse.
the class ShiftRightExpression method checkExpressionOperands.
/**
* Checks the parameters of the expression and if they are valid in
* their position in the expression or not.
*
* @param timestamp
* the timestamp of the actual semantic check cycle.
* @param expectedValue
* the kind of value expected.
* @param referenceChain
* a reference chain to detect cyclic references.
*/
private void checkExpressionOperands(final CompilationTimeStamp timestamp, final Expected_Value_type expectedValue, final IReferenceChain referenceChain) {
Type_type tempType1 = null;
Type_type tempType2 = null;
long stringSize = 0;
long shiftSize = 0;
IValue tempValue;
if (value1 != null) {
value1.setLoweridToReference(timestamp);
tempType1 = value1.getExpressionReturntype(timestamp, expectedValue);
switch(tempType1) {
case TYPE_BITSTRING:
tempValue = value1.getValueRefdLast(timestamp, expectedValue, referenceChain);
if (Value_type.BITSTRING_VALUE.equals(tempValue.getValuetype())) {
stringSize = ((Bitstring_Value) tempValue).getValueLength();
}
break;
case TYPE_HEXSTRING:
tempValue = value1.getValueRefdLast(timestamp, expectedValue, referenceChain);
if (Value_type.HEXSTRING_VALUE.equals(tempValue.getValuetype())) {
stringSize = ((Hexstring_Value) tempValue).getValueLength();
}
break;
case TYPE_OCTETSTRING:
tempValue = value1.getValueRefdLast(timestamp, expectedValue, referenceChain);
if (Value_type.OCTETSTRING_VALUE.equals(tempValue.getValuetype())) {
stringSize = ((Octetstring_Value) tempValue).getValueLength();
}
break;
case TYPE_UNDEFINED:
setIsErroneous(true);
break;
default:
location.reportSemanticError(FIRSTOPERANDERROR);
setIsErroneous(true);
break;
}
}
if (value2 != null) {
value2.setLoweridToReference(timestamp);
tempType2 = value2.getExpressionReturntype(timestamp, expectedValue);
switch(tempType2) {
case TYPE_INTEGER:
tempValue = value2.getValueRefdLast(timestamp, expectedValue, referenceChain);
if (Value_type.INTEGER_VALUE.equals(tempValue.getValuetype()) && !getIsErroneous(timestamp)) {
if (!((Integer_Value) tempValue).isNative()) {
value2.getLocation().reportSemanticError(MessageFormat.format(LARGEINTEGERSECONDOPERANDERROR, ((Integer_Value) tempValue).getValueValue()));
setIsErroneous(true);
break;
}
shiftSize = ((Integer_Value) tempValue).getValue();
if (value1 != null && !value1.isUnfoldable(timestamp)) {
final String severity = Platform.getPreferencesService().getString(ProductConstants.PRODUCT_ID_DESIGNER, PreferenceConstants.REPORTINCORRECTSHIFTROTATESIZE, GeneralConstants.WARNING, null);
if (shiftSize < 0) {
location.reportConfigurableSemanticProblem(severity, NEGATIVESHIFTPROBLEM);
} else if (shiftSize == 0) {
location.reportConfigurableSemanticProblem(severity, ZEROSHIFTPROBLEM);
} else if (shiftSize > stringSize) {
location.reportConfigurableSemanticProblem(severity, MessageFormat.format(TOOBIGSHIFTPROBLEM, stringSize, shiftSize));
}
}
}
break;
case TYPE_UNDEFINED:
setIsErroneous(true);
break;
default:
location.reportSemanticError(SECONDOPERANDERROR);
setIsErroneous(true);
break;
}
}
}
use of org.eclipse.titan.designer.AST.TTCN3.values.Bitstring_Value in project titan.EclipsePlug-ins by eclipse.
the class StringConcatenationExpression 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 (value1 == null || value2 == null) {
return lastValue;
}
checkExpressionOperands(timestamp, expectedValue, referenceChain);
if (getIsErroneous(timestamp) || isUnfoldable(timestamp, referenceChain)) {
return lastValue;
}
final IValue last1 = value1.getValueRefdLast(timestamp, referenceChain);
final IValue last2 = value2.getValueRefdLast(timestamp, referenceChain);
if (last1.getIsErroneous(timestamp) || last2.getIsErroneous(timestamp)) {
return lastValue;
}
switch(last1.getValuetype()) {
case BITSTRING_VALUE:
{
final String string1 = ((Bitstring_Value) last1).getValue();
final String string2 = ((Bitstring_Value) last2).getValue();
lastValue = new Bitstring_Value(string1 + string2);
lastValue.copyGeneralProperties(this);
break;
}
case HEXSTRING_VALUE:
{
final String string1 = ((Hexstring_Value) last1).getValue();
final String string2 = ((Hexstring_Value) last2).getValue();
lastValue = new Hexstring_Value(string1 + string2);
lastValue.copyGeneralProperties(this);
break;
}
case OCTETSTRING_VALUE:
{
final String string1 = ((Octetstring_Value) last1).getValue();
final String string2 = ((Octetstring_Value) last2).getValue();
lastValue = new Octetstring_Value(string1 + string2);
lastValue.copyGeneralProperties(this);
break;
}
case CHARSTRING_VALUE:
{
final String string1 = ((Charstring_Value) last1).getValue();
if (Value_type.UNIVERSALCHARSTRING_VALUE.equals(last2.getValuetype())) {
final UniversalCharstring string2 = ((UniversalCharstring_Value) last2).getValue();
lastValue = new UniversalCharstring_Value(new UniversalCharstring(string1).append(string2));
} else {
final String string2 = ((Charstring_Value) last2).getValue();
lastValue = new Charstring_Value(string1 + string2);
}
lastValue.copyGeneralProperties(this);
break;
}
case UNIVERSALCHARSTRING_VALUE:
{
final UniversalCharstring string1 = ((UniversalCharstring_Value) last1).getValue();
if (Value_type.UNIVERSALCHARSTRING_VALUE.equals(last2.getValuetype())) {
final UniversalCharstring string2 = ((UniversalCharstring_Value) last2).getValue();
lastValue = new UniversalCharstring_Value(new UniversalCharstring(string1).append(string2));
} else {
final String string2 = ((Charstring_Value) last2).getValue();
lastValue = new UniversalCharstring_Value(new UniversalCharstring(string1).append(string2));
}
lastValue.copyGeneralProperties(this);
break;
}
default:
setIsErroneous(true);
break;
}
return lastValue;
}
use of org.eclipse.titan.designer.AST.TTCN3.values.Bitstring_Value in project titan.EclipsePlug-ins by eclipse.
the class SubstrExpression 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 (templateInstance1 == null || value2 == null || value3 == null) {
return lastValue;
}
checkExpressionOperands(timestamp, expectedValue, referenceChain);
if (getIsErroneous(timestamp) || isUnfoldable(timestamp, referenceChain)) {
return lastValue;
}
final ITTCN3Template temp = templateInstance1.getTemplateBody();
final IValue value1 = ((SpecificValue_Template) temp).getSpecificValue();
final IValue v1 = value1.getValueRefdLast(timestamp, referenceChain);
final IValue v2 = value2.getValueRefdLast(timestamp, referenceChain);
final IValue v3 = value3.getValueRefdLast(timestamp, referenceChain);
final int index = (int) ((Integer_Value) v2).getValue();
final int len = (int) ((Integer_Value) v3).getValue();
switch(v1.getValuetype()) {
case BITSTRING_VALUE:
lastValue = new Bitstring_Value(((Bitstring_Value) v1).getValue().substring(index, index + len));
lastValue.copyGeneralProperties(this);
break;
case HEXSTRING_VALUE:
lastValue = new Hexstring_Value(((Hexstring_Value) v1).getValue().substring(index, index + len));
lastValue.copyGeneralProperties(this);
break;
case OCTETSTRING_VALUE:
lastValue = new Octetstring_Value(((Octetstring_Value) v1).getValue().substring(index * 2, (index + len) * 2));
lastValue.copyGeneralProperties(this);
break;
case CHARSTRING_VALUE:
lastValue = new Charstring_Value(((Charstring_Value) v1).getValue().substring(index, index + len));
lastValue.copyGeneralProperties(this);
break;
case UNIVERSALCHARSTRING_VALUE:
lastValue = new UniversalCharstring_Value(((UniversalCharstring_Value) v1).getValue().substring(index, index + len));
lastValue.copyGeneralProperties(this);
break;
default:
setIsErroneous(true);
break;
}
return lastValue;
}
Aggregations