|
|
@@ -788,6 +788,59 @@ public class TypeInferrerTest extends AbstractTypeInferrerTest {
|
|
|
// expectNoErrors("opSubBool(true)", scope);
|
|
|
// expectNoErrors("opSubString(\"hello\")", scope);
|
|
|
}
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testOperationCallVarArgs() {
|
|
|
+ String scope = "internal "
|
|
|
+ + "operation opInt(p...:integer) : void "
|
|
|
+ + "operation opReal(p...:real) : void "
|
|
|
+ + "operation opString(p...:string) : void "
|
|
|
+ + "operation opBoolean(p...:boolean) : void "
|
|
|
+ + "operation opSubInt(p...:SubInt) : void "
|
|
|
+ + "operation opSubReal(p...:SubReal) : void "
|
|
|
+ + "operation opSubString(p...:SubString) : void "
|
|
|
+ + "operation opSubBool(p...:SubBool) : void "
|
|
|
+ + "var vi : integer "
|
|
|
+ + "var vr : real "
|
|
|
+ + "var vb : boolean "
|
|
|
+ + "var vs : string "
|
|
|
+ + "var vsi : SubInt "
|
|
|
+ + "var vsr : SubReal "
|
|
|
+ + "var vsb : SubBool "
|
|
|
+ + "var vss : SubString ";
|
|
|
+
|
|
|
+ expectNoErrors("opInt(1)", scope);
|
|
|
+ expectNoErrors("opInt(vi)", scope);
|
|
|
+ expectNoErrors("opInt(vsi)", scope);
|
|
|
+ expectNoErrors("opInt(1, vi, vsi)", scope);
|
|
|
+
|
|
|
+ expectNoErrors("opReal(1.1)", scope);
|
|
|
+ expectNoErrors("opReal(1)", scope);
|
|
|
+ expectNoErrors("opReal(vr)", scope);
|
|
|
+ expectNoErrors("opReal(vsr)", scope);
|
|
|
+ expectNoErrors("opReal(1.1, 1, vr, vsr)", scope);
|
|
|
+
|
|
|
+ expectNoErrors("opString(\"hello\")", scope);
|
|
|
+ expectNoErrors("opString(vs)", scope);
|
|
|
+ expectNoErrors("opString(vss)", scope);
|
|
|
+ expectNoErrors("opString(\"hello\", vs, vss)", scope);
|
|
|
+
|
|
|
+ expectNoErrors("opBoolean(true)", scope);
|
|
|
+ expectNoErrors("opBoolean(vb)", scope);
|
|
|
+ expectNoErrors("opBoolean(vsb)", scope);
|
|
|
+ expectNoErrors("opBoolean(true, vb, vsb)", scope);
|
|
|
+
|
|
|
+ expectErrors("opInt(1.1)", scope, ITypeSystemInferrer.NOT_COMPATIBLE_CODE, 1);
|
|
|
+ expectErrors("opInt(vr)", scope, ITypeSystemInferrer.NOT_COMPATIBLE_CODE, 1);
|
|
|
+ expectErrors("opInt(vsr)", scope, ITypeSystemInferrer.NOT_COMPATIBLE_CODE, 1);
|
|
|
+ expectErrors("opInt(1.1, vr, vsr)", scope, ITypeSystemInferrer.NOT_COMPATIBLE_CODE, 3);
|
|
|
+
|
|
|
+ expectErrors("opSubInt(vi, vi)", scope, ITypeSystemInferrer.NOT_COMPATIBLE_CODE, 2);
|
|
|
+ expectErrors("opSubReal(vr, vr)", scope, ITypeSystemInferrer.NOT_COMPATIBLE_CODE, 2);
|
|
|
+ expectErrors("opSubBool(vb, vb)", scope, ITypeSystemInferrer.NOT_COMPATIBLE_CODE, 2);
|
|
|
+ expectErrors("opSubString(vs, vs)", scope, ITypeSystemInferrer.NOT_COMPATIBLE_CODE, 2);
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
@Test
|
|
|
public void testParenthesizedExpression() {
|