summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/basic/bug791465.js
blob: 13460a11f0e2dcc64c6973b0b87c9f4a904cc8e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
load(libdir + "asserts.js");

var valid_strict_funs = [
  // directive ends on next line
  function () {
    "use strict"
    ;
  },
  function () {
    "use strict"
  },
  // directive ends on same line
  function () { "use strict"; },
  function () { "use strict" },
];

for (var f of valid_strict_funs) {
  assertThrowsInstanceOf(function() { f.caller }, TypeError);
}


var binary_ops = [
  "||", "&&",
  "|", "^", "&",
  "==", "!=", "===", "!==",
  "<", "<=", ">", ">=", "in", "instanceof",
  "<<", ">>", ">>>",
  "+", "-",
  "*", "/", "%",
];

var invalid_strict_funs = [
  function () {
    "use strict"
    , "not";
  },
  function () {
    "use strict"
    ? 1 : 0;
  },
  function () {
    "use strict"
    .length;
  },
  function () {
    "use strict"
    [0];
  },
  function () {
    "use strict"
    ();
  },
  ...([]),
  ...(binary_ops.map(op => Function("'use strict'\n " + op + " 'not'"))),
];

for (var f of invalid_strict_funs) {
  f.caller;
}


var assignment_ops = [
   "=", "+=", "-=",
  "|=", "^=", "&=",
  "<<=", ">>=", ">>>=",
  "*=", "/=", "%=",
];

var invalid_strict_funs_syntax_error = assignment_ops.map(op => ("'use strict'\n " + op + " 'not'"));

// assignment with string literal as LHS is an early error, therefore we
// can only test for SyntaxError
for (var f of invalid_strict_funs_syntax_error) {
  assertThrowsInstanceOf(function() { Function(f) }, SyntaxError);
}