loop.js   [plain text]


load("./driver/driver.js");

function testForIn(x) {
    for (var arg1 in x)
        x;

    for (arg2 in x)
        x; 

    for ({x: arg3} in x)
        x;

    for (var {x: arg4} in x)
        x;
}

function testForOf(x) {
    for (var arg1 of x)
        x;

    for (arg2 of x)
        x; 

    for ({x: arg3} of x) 
        x;
    for (var {x: arg4} of x) 
        x;
}

testForIn([1])
var types = findTypeForExpression(testForIn, "arg1"); 
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.String) !== -1, "Primitive type names should contain 'String'");
types = findTypeForExpression(testForIn, "arg2"); 
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.String) !== -1, "Primitive type names should contain 'String'");
types = findTypeForExpression(testForIn, "arg3");
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.Undefined) !== -1, "Primitive type names should contain 'Undefined'"); 
types = findTypeForExpression(testForIn, "arg4");
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.Undefined) !== -1, "Primitive type names should contain 'Undefined'"); 

testForOf([1])
types = findTypeForExpression(testForOf, "arg1"); 
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.Integer) !== -1, "Primitive type names should contain 'Integer'");
types = findTypeForExpression(testForOf, "arg2"); 
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.Integer) !== -1, "Primitive type names should contain 'Integer'");
types = findTypeForExpression(testForOf, "arg3");
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.Undefined) !== -1, "Primitive type names should contain 'Undefined'"); 
types = findTypeForExpression(testForOf, "arg4");
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.Undefined) !== -1, "Primitive type names should contain 'Undefined'"); 
testForOf([{x:29}])
types = findTypeForExpression(testForOf, "arg1"); 
assert(types.instructionTypeSet.structures[0].fields.indexOf("x") !== -1, "variable 'arg1' should have field 'x'");
types = findTypeForExpression(testForOf, "arg2");
assert(types.instructionTypeSet.structures[0].fields.indexOf("x") !== -1, "variable 'arg2' should have field 'x'");
types = findTypeForExpression(testForOf, "arg3");
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.Integer) !== -1, "Primitive type names should contain 'Integer'"); 
types = findTypeForExpression(testForOf, "arg4");
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.Integer) !== -1, "Primitive type names should contain 'Integer'");