Placate exception check validation in constructJSWebAssemblyLinkError().
[WebKit-https.git] / JSTests / typeProfiler / optional-fields.js
1 var findTypeForExpression =  $vm.findTypeForExpression;
2
3 load("./driver/driver.js");
4
5 var func;
6 function wrapper() {
7
8 func = function(arg){};
9
10 }
11 wrapper();
12
13 // ====== End test cases ======
14
15 var obj = {x:20, y:50};
16
17 func(obj);
18 var types = findTypeForExpression(wrapper, "arg"); 
19 assert(types.instructionTypeSet.structures.length === 1, "arg should have one structure");
20 assert(types.instructionTypeSet.structures[0].fields.length === 2, "arg should have two fields");
21 assert(types.instructionTypeSet.structures[0].fields.indexOf("x") !== -1, "arg should have field: 'x'");
22 assert(types.instructionTypeSet.structures[0].fields.indexOf("y") !== -1, "arg should have field: 'y'");
23 assert(types.instructionTypeSet.structures[0].optionalFields.length === 0, "arg should have zero optional fields");
24
25 obj.z = 40;
26 func(obj);
27 types = findTypeForExpression(wrapper, "arg"); 
28 assert(types.instructionTypeSet.structures[0].fields.length === 2, "arg should still have two fields");
29 assert(types.instructionTypeSet.structures[0].fields.indexOf("x") !== -1, "arg should have field: 'x'");
30 assert(types.instructionTypeSet.structures[0].fields.indexOf("y") !== -1, "arg should have field: 'y'");
31 assert(types.instructionTypeSet.structures[0].optionalFields.length === 1, "arg should have one optional field");
32 assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("z") !== -1, "arg should have optional field: 'z'");
33
34 obj["foo"] = "type";
35 obj["baz"] = "profiler";
36 func(obj);
37 types = findTypeForExpression(wrapper, "arg"); 
38 assert(types.instructionTypeSet.structures[0].fields.length === 2, "arg should still have two fields");
39 assert(types.instructionTypeSet.structures[0].fields.indexOf("x") !== -1, "arg should have field: 'x'");
40 assert(types.instructionTypeSet.structures[0].fields.indexOf("y") !== -1, "arg should have field: 'y'");
41 assert(types.instructionTypeSet.structures[0].optionalFields.length === 3, "arg should have three optional field");
42 assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("z") !== -1, "arg should have optional field: 'z'");
43 assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("foo") !== -1, "arg should have optional field: 'foo'");
44 assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("baz") !== -1, "arg should have optional field: 'baz'");
45
46 func({});
47 types = findTypeForExpression(wrapper, "arg"); 
48 assert(types.instructionTypeSet.structures[0].fields.length === 0, "arg should have no common fields");
49 assert(types.instructionTypeSet.structures[0].optionalFields.length === 5, "arg should have five optional field");
50 assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("x") !== -1, "arg should have optional field: 'x'");
51 assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("y") !== -1, "arg should have optional field: 'y'");
52 assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("z") !== -1, "arg should have optional field: 'z'");
53 assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("foo") !== -1, "arg should have optional field: 'foo'");
54 assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("baz") !== -1, "arg should have optional field: 'baz'");