Index: test/mjsunit/strong/implicit-conversions.js |
diff --git a/test/mjsunit/strong/implicit-conversions.js b/test/mjsunit/strong/implicit-conversions.js |
deleted file mode 100644 |
index cd8acf70857bf31050a07ff5d5fd24615c449d57..0000000000000000000000000000000000000000 |
--- a/test/mjsunit/strong/implicit-conversions.js |
+++ /dev/null |
@@ -1,412 +0,0 @@ |
-// Copyright 2015 the V8 project authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// Flags: --strong-mode --allow-natives-syntax |
- |
-"use strict"; |
- |
-// Boolean indicates whether an operator can be part of a compound assignment. |
-let strongNumberBinops = [ |
- ["-", true], |
- ["*", true], |
- ["/", true], |
- ["%", true], |
- ["|", true], |
- ["&", true], |
- ["^", true], |
- ["<<", true], |
- [">>", true], |
- [">>>", true] |
-]; |
- |
-let strongStringOrNumberBinops = [ |
- ["+", true], |
- ["<", false], |
- [">", false], |
- ["<=", false], |
- [">=", false] |
-]; |
- |
-let strongBinops = strongNumberBinops.concat(strongStringOrNumberBinops); |
- |
-let strongUnops = [ |
- "~", |
- "+", |
- "-" |
-]; |
- |
-let nonStringOrNumberValues = [ |
- "null", |
- "undefined", |
- "{}", |
- "false", |
- "(function(){})", |
- "[]", |
- "(class Foo {})" |
-]; |
- |
-let stringValues = [ |
- "''", |
- "' '", |
- "'foo'", |
- "'f\\u006F\\u006F'", |
- "'0'", |
- "'NaN'" |
-]; |
- |
-let nonNumberValues = nonStringOrNumberValues.concat(stringValues); |
- |
-let numberValues = [ |
- "0", |
- "(-0)", |
- "1", |
- "(-4294967295)", |
- "(-4294967296)", |
- "9999999999999", |
- "(-9999999999999)", |
- "NaN", |
- "Infinity", |
- "(-Infinity)" |
-]; |
- |
-//****************************************************************************** |
-// Relational comparison function declarations |
-function add_strong(x, y) { |
- "use strong"; |
- return x + y; |
-} |
- |
-function add_num_strong(x, y) { |
- "use strong"; |
- return x + y; |
-} |
- |
-function sub_strong(x, y) { |
- "use strong"; |
- return x - y; |
-} |
- |
-function mul_strong(x, y) { |
- "use strong"; |
- return x * y; |
-} |
- |
-function div_strong(x, y) { |
- "use strong"; |
- return x / y; |
-} |
- |
-function mod_strong(x, y) { |
- "use strong"; |
- return x % y; |
-} |
- |
-function or_strong(x, y) { |
- "use strong"; |
- return x | y; |
-} |
- |
-function and_strong(x, y) { |
- "use strong"; |
- return x & y; |
-} |
- |
-function xor_strong(x, y) { |
- "use strong"; |
- return x ^ y; |
-} |
- |
-function shl_strong(x, y) { |
- "use strong"; |
- return x << y; |
-} |
- |
-function shr_strong(x, y) { |
- "use strong"; |
- return x >> y; |
-} |
- |
-function sar_strong(x, y) { |
- "use strong"; |
- return x >>> y; |
-} |
- |
-function less_strong(x, y) { |
- "use strong"; |
- return x < y; |
-} |
- |
-function less_num_strong(x, y) { |
- "use strong"; |
- return x < y; |
-} |
- |
-function greater_strong(x, y) { |
- "use strong"; |
- return x > y; |
-} |
- |
-function greater_num_strong(x, y) { |
- "use strong"; |
- return x > y; |
-} |
- |
-function less_equal_strong(x, y) { |
- "use strong"; |
- return x <= y; |
-} |
- |
-function less_equal_num_strong(x, y) { |
- "use strong"; |
- return x <= y; |
-} |
- |
-function greater_equal_strong(x, y) { |
- "use strong"; |
- return x >= y; |
-} |
- |
-function greater_equal_num_strong(x, y) { |
- "use strong"; |
- return x >= y; |
-} |
- |
-function typed_add_strong(x, y) { |
- "use strong"; |
- return (+x) + (+y); |
-} |
- |
-function typed_sub_strong(x, y) { |
- "use strong"; |
- return (+x) - (+y); |
-} |
- |
-function typed_mul_strong(x, y) { |
- "use strong"; |
- return (+x) * (+y); |
-} |
- |
-function typed_div_strong(x, y) { |
- "use strong"; |
- return (+x) / (+y); |
-} |
- |
-function typed_mod_strong(x, y) { |
- "use strong"; |
- return (+x) % (+y); |
-} |
- |
-function typed_or_strong(x, y) { |
- "use strong"; |
- return (+x) | (+y); |
-} |
- |
-function typed_and_strong(x, y) { |
- "use strong"; |
- return (+x) & (+y); |
-} |
- |
-function typed_xor_strong(x, y) { |
- "use strong"; |
- return (+x) ^ (+y); |
-} |
- |
-function typed_shl_strong(x, y) { |
- "use strong"; |
- return (+x) << (+y); |
-} |
- |
-function typed_shr_strong(x, y) { |
- "use strong"; |
- return (+x) >> (+y); |
-} |
- |
-function typed_sar_strong(x, y) { |
- "use strong"; |
- return (+x) >>> (+y); |
-} |
- |
-function typed_less_strong(x, y) { |
- "use strong"; |
- return (+x) < (+y); |
-} |
- |
-function typed_greater_strong(x, y) { |
- "use strong"; |
- return (+x) > (+y); |
-} |
- |
-function typed_less_equal_strong(x, y) { |
- "use strong"; |
- return (+x) <= (+y); |
-} |
- |
-function typed_greater_equal_strong(x, y) { |
- "use strong"; |
- return (+x) >= (+y); |
-} |
- |
-//****************************************************************************** |
-// (in)equality function declarations |
-function str_equal_strong(x, y) { |
- "use strong"; |
- return x === y; |
-} |
- |
-function str_ineq_strong(x, y) { |
- "use strong"; |
- return x !== y; |
-} |
- |
-let strongNumberFuncs = [add_num_strong, sub_strong, mul_strong, div_strong, |
- mod_strong, or_strong, and_strong, xor_strong, |
- shl_strong, shr_strong, sar_strong, less_num_strong, |
- greater_num_strong, less_equal_num_strong, |
- greater_equal_num_strong, typed_add_strong, |
- typed_sub_strong, typed_mul_strong, typed_div_strong, |
- typed_mod_strong, typed_or_strong, typed_and_strong, |
- typed_xor_strong, typed_shl_strong, typed_shr_strong, |
- typed_sar_strong, typed_less_strong, |
- typed_greater_strong, typed_less_equal_strong, |
- typed_greater_equal_strong]; |
- |
-let strongStringOrNumberFuncs = [add_strong, less_strong, greater_strong, |
- less_equal_strong, greater_equal_strong]; |
- |
-let strongFuncs = strongNumberFuncs.concat(strongStringOrNumberFuncs); |
- |
-function assertStrongNonThrowBehaviour(expr) { |
- assertEquals(eval(expr), eval("'use strong';" + expr)); |
- assertDoesNotThrow("'use strong'; " + expr + ";"); |
- assertDoesNotThrow("'use strong'; let v = " + expr + ";"); |
-} |
- |
-function assertStrongThrowBehaviour(expr) { |
- assertDoesNotThrow("'use strict'; " + expr + ";"); |
- assertDoesNotThrow("'use strict'; let v = " + expr + ";"); |
- assertThrows("'use strong'; " + expr + ";", TypeError); |
- assertThrows("'use strong'; let v = " + expr + ";", TypeError); |
-} |
- |
-function checkArgumentCombinations(op, leftList, rightList, willThrow) { |
- for (let v1 of leftList) { |
- let assignExpr = "foo " + op[0] + "= " + v1 + ";"; |
- for (let v2 of rightList) { |
- let compoundAssignment = "'use strong'; let foo = " + v2 + "; " + |
- assignExpr; |
- if (willThrow) { |
- if (op[1]) { |
- assertThrows(compoundAssignment, TypeError); |
- } |
- assertStrongThrowBehaviour("(" + v1 + op[0] + v2 + ")"); |
- } else { |
- if (op[1]) { |
- assertDoesNotThrow(compoundAssignment); |
- } |
- assertStrongNonThrowBehaviour("(" + v1 + op[0] + v2 + ")"); |
- } |
- } |
- } |
-} |
- |
-for (let op of strongBinops) { |
- checkArgumentCombinations(op, numberValues, numberValues, false); |
- checkArgumentCombinations(op, numberValues, nonNumberValues, true); |
-} |
- |
-for (let op of strongNumberBinops) { |
- checkArgumentCombinations(op, nonNumberValues, |
- numberValues.concat(nonNumberValues), true); |
-} |
- |
-for (let op of strongStringOrNumberBinops) { |
- checkArgumentCombinations(op, nonNumberValues, |
- numberValues.concat(nonStringOrNumberValues), true); |
- checkArgumentCombinations(op, nonStringOrNumberValues, stringValues, true); |
- checkArgumentCombinations(op, stringValues, stringValues, false); |
-} |
- |
-for (let op of strongUnops) { |
- for (let value of numberValues) { |
- assertStrongNonThrowBehaviour("(" + op + value + ")"); |
- } |
- for (let value of nonNumberValues) { |
- assertStrongThrowBehaviour("(" + op + value + ")"); |
- } |
-} |
- |
-for (let func of strongNumberFuncs) { |
- // Check IC None*None->None throws |
- for (let v of nonNumberValues) { |
- let value = eval(v); |
- assertThrows(function(){func(2, value);}, TypeError); |
- %OptimizeFunctionOnNextCall(func); |
- assertThrows(function(){func(2, value);}, TypeError); |
- %DeoptimizeFunction(func); |
- } |
- func(4, 5); |
- func(4, 5); |
- // Check IC Smi*Smi->Smi throws |
- for (let v of nonNumberValues) { |
- let value = eval(v); |
- assertThrows(function(){func(2, value);}, TypeError); |
- %OptimizeFunctionOnNextCall(func); |
- assertThrows(function(){func(2, value);}, TypeError); |
- %DeoptimizeFunction(func); |
- } |
- func(NaN, NaN); |
- func(NaN, NaN); |
- // Check IC Number*Number->Number throws |
- for (let v of nonNumberValues) { |
- let value = eval(v); |
- assertThrows(function(){func(2, value);}, TypeError); |
- %OptimizeFunctionOnNextCall(func); |
- assertThrows(function(){func(2, value);}, TypeError); |
- %DeoptimizeFunction(func); |
- } |
-} |
- |
-for (let func of strongStringOrNumberFuncs) { |
- // Check IC None*None->None throws |
- for (let v of nonNumberValues) { |
- let value = eval(v); |
- assertThrows(function(){func(2, value);}, TypeError); |
- %OptimizeFunctionOnNextCall(func); |
- assertThrows(function(){func(2, value);}, TypeError); |
- %DeoptimizeFunction(func); |
- } |
- func("foo", "bar"); |
- func("foo", "bar"); |
- // Check IC String*String->String throws |
- for (let v of nonNumberValues) { |
- let value = eval(v); |
- assertThrows(function(){func(2, value);}, TypeError); |
- %OptimizeFunctionOnNextCall(func); |
- assertThrows(function(){func(2, value);}, TypeError); |
- %DeoptimizeFunction(func); |
- } |
- func(NaN, NaN); |
- func(NaN, NaN); |
- // Check IC Generic*Generic->Generic throws |
- for (let v of nonNumberValues) { |
- let value = eval(v); |
- assertThrows(function(){func(2, value);}, TypeError); |
- %OptimizeFunctionOnNextCall(func); |
- assertThrows(function(){func(2, value);}, TypeError); |
- %DeoptimizeFunction(func); |
- } |
-} |
- |
-for (let func of [str_equal_strong, str_ineq_strong]) { |
- assertDoesNotThrow(function(){func(2, undefined)}); |
- assertDoesNotThrow(function(){func(2, undefined)}); |
- %OptimizeFunctionOnNextCall(func); |
- assertDoesNotThrow(function(){func(2, undefined)}); |
- %DeoptimizeFunction(func); |
- assertDoesNotThrow(function(){func(true, {})}); |
- assertDoesNotThrow(function(){func(true, {})}); |
- %OptimizeFunctionOnNextCall(func); |
- assertDoesNotThrow(function(){func(true, {})}); |
- %DeoptimizeFunction(func); |
-} |