diff --git a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/statements/Call_Statement.java b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/statements/Call_Statement.java index 224ea35d72afdfe094442ecedccbc5bf8c973c0b..75fa37818f46916fd85c77ce39892e5bbd38da30 100644 --- a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/statements/Call_Statement.java +++ b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/statements/Call_Statement.java @@ -242,6 +242,7 @@ public final class Call_Statement extends Statement { switch (signatureType.getTypetype()) { case TYPE_SIGNATURE: + ((Signature_Type) signatureType).checkThisTemplate(timestamp, parameter.getTemplateBody(), false, false); isNonblocking = ((Signature_Type) signatureType).isNonblocking(); break; default: diff --git a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/statements/Getcall_Statement.java b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/statements/Getcall_Statement.java index 3dc2cd9c2d457748bc4378e9768d719807251316..252b3f0024cdf70e6a78b8a6748a721ec2e11945 100644 --- a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/statements/Getcall_Statement.java +++ b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/statements/Getcall_Statement.java @@ -176,7 +176,7 @@ public final class Getcall_Statement extends Statement { MessageFormat.format(MESSAGEBASEDPORT, statementName, portType.getTypename())); } else if (inSignatures != null) { if (inSignatures.getNofTypes() == 1) { - signature = inSignatures.getTypeByIndex(0); + signature = inSignatures.getTypeByIndex(0); //??? } else { signature = Port_Utility.getOutgoingType(timestamp, parameter); @@ -214,6 +214,7 @@ public final class Getcall_Statement extends Statement { signature = signature.getTypeRefdLast(timestamp); switch (signature.getTypetype()) { case TYPE_SIGNATURE: + ((Signature_Type) signature).checkThisTemplate(timestamp, parameter.getTemplateBody(), false, false); if (redirect != null) { redirect.check(timestamp, (Signature_Type) signature, false); } diff --git a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/statements/Parameter_Redirect.java b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/statements/Parameter_Redirect.java index 09b998e533f1d9bd9e36f7e75eea51aace27e6c5..793e5f96cedf7a5bfa536f56099bbb03580f5fa5 100644 --- a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/statements/Parameter_Redirect.java +++ b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/statements/Parameter_Redirect.java @@ -76,7 +76,7 @@ public abstract class Parameter_Redirect extends ASTNode implements ILocateableN final IType variableType = reference.checkVariableReference(timestamp); if (type != null && variableType != null && !type.isIdentical(timestamp, variableType)) { final String message = MessageFormat.format( - "Type missmatch in parameter redirect: A variable of type `{0}'' was expected instead of `{1}''", + "Type mismatch in parameter redirect: A variable of type `{0}'' was expected instead of `{1}''", type.getTypename(), variableType.getTypename()); reference.getLocation().reportSemanticError(message); return; diff --git a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/Signature_Type.java b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/Signature_Type.java index ba83172cddad66777a0f0c267325bc896d87f610..53f89054be06284584e58b43cd6f24f9a8687aa7 100644 --- a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/Signature_Type.java +++ b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/Signature_Type.java @@ -15,6 +15,8 @@ import java.util.Set; import org.eclipse.titan.designer.AST.ASTVisitor; import org.eclipse.titan.designer.AST.ArraySubReference; +import org.eclipse.titan.designer.AST.Assignment; +import org.eclipse.titan.designer.AST.Assignment.Assignment_type; import org.eclipse.titan.designer.AST.FieldSubReference; import org.eclipse.titan.designer.AST.INamedNode; import org.eclipse.titan.designer.AST.IReferenceChain; @@ -35,6 +37,7 @@ import org.eclipse.titan.designer.AST.TTCN3.Expected_Value_type; import org.eclipse.titan.designer.AST.TTCN3.templates.ITTCN3Template; import org.eclipse.titan.designer.AST.TTCN3.templates.NamedTemplate; import org.eclipse.titan.designer.AST.TTCN3.templates.Named_Template_List; +import org.eclipse.titan.designer.AST.TTCN3.templates.SpecificValue_Template; import org.eclipse.titan.designer.AST.TTCN3.templates.ITTCN3Template.Template_type; import org.eclipse.titan.designer.AST.TTCN3.values.NamedValue; import org.eclipse.titan.designer.AST.TTCN3.values.Sequence_Value; @@ -455,14 +458,16 @@ public final class Signature_Type extends Type { template.setMyGovernor(this); switch (template.getTemplatetype()) { - case TEMPLATE_LIST: { + case TEMPLATE_LIST: ITTCN3Template transformed = template.setTemplatetype(timestamp, Template_type.NAMED_TEMPLATE_LIST); checkThisNamedTemplateList(timestamp, (Named_Template_List) transformed, isModified); break; - } case NAMED_TEMPLATE_LIST: checkThisNamedTemplateList(timestamp, (Named_Template_List) template, isModified); break; + case SPECIFIC_VALUE: + ((SpecificValue_Template) template).checkSpecificValue(timestamp,false); + break; default: template.getLocation().reportSemanticError(MessageFormat.format(TEMPLATENOTALLOWED, template.getTemplateTypeName(), getTypename())); break; @@ -476,9 +481,21 @@ public final class Signature_Type extends Type { private void checkThisNamedTemplateList(final CompilationTimeStamp timestamp, final Named_Template_List template, final boolean isModified) { Map componentMap = new HashMap(); boolean inSynch = true; - int nofTypeParameters = getNofParameters(); + int nofTypeParameters = getNofParameters(); //TODO: alternatives:formalParList.getNofInParameters(); formalParList.getNofOutParameters() int nofTemplateComponents = template.getNofTemplates(); int tI = 0; + if(nofTemplateComponents < nofTypeParameters) { + template.getLocation().reportSemanticError( + MessageFormat.format("Too few elements in value list notation for type `{0}'': {1} was expected instead of {2}", + this.getFullName(), nofTypeParameters, nofTemplateComponents)); + } + +// The compiler does not do this check: +// if(nofTemplateComponents > nofTypeParameters) { +// template.getLocation().reportSemanticError( +// MessageFormat.format("Too many elements in value list notation for type `{0}'': {1} was expected instead of {2}", +// this.getFullName(), nofTypeParameters, nofTemplateComponents)); +// } for (int vI = 0; vI < nofTemplateComponents; vI++) { NamedTemplate namedTemplate = template.getTemplateByIndex(vI); Identifier identifier = namedTemplate.getName(); @@ -503,6 +520,7 @@ public final class Signature_Type extends Type { parameter2 = formalParList.getParameterByIndex(tI); if (parameter == parameter2) { found = true; + break; } } if (!found) { diff --git a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/TTCN3_Enumerated_Type.java b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/TTCN3_Enumerated_Type.java index 9c8ed17f7d88fa78f5e1a5a702182b5a070f4183..0029cc1a0601dd523a18977e45e0416e0134d95b 100644 --- a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/TTCN3_Enumerated_Type.java +++ b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/TTCN3_Enumerated_Type.java @@ -314,7 +314,7 @@ public final class TTCN3_Enumerated_Type extends Type implements ITypeWithCompon registerUsage(template); template.setMyGovernor(this); - if (!Template_type.SPECIFIC_VALUE.equals(template.getTemplatetype()) && !Template_type.SPECIFIC_VALUE.equals(template.getTemplatetype())) { + if (!Template_type.SPECIFIC_VALUE.equals(template.getTemplatetype()) ) { template.getLocation().reportSemanticError(MessageFormat.format(TEMPLATENOTALLOWED, template.getTemplateTypeName())); template.setIsErroneous(true); }