is-optimizable
Version:
A tool that checks for V8 optimization killers
228 lines (206 loc) • 3.64 kB
JavaScript
debugger;
function a() {
debugger;
}
function* test() {
}
(function* () {
}());
for (let i of [3, 5, 7]) {
}
try {} finally {}
try {} catch (err) {}
try {} catch (err) {} finally {}
var x = {
get prop() {
return 3;
},
set prop(val) {
this.val = val;
},
__proto__: 3,
"test": 4,
}
eval('1 + 1');
window.eval('2 + 2');
with ({a: 1}) {
console.log(a);
}
switch(c) {
case 1: break;
case 2: break;
case 3: break;
case 4: break;
case 5: break;
case 6: break;
case 7: break;
case 8: break;
case 9: break;
case 10: break;
case 11: break;
case 12: break;
case 13: break;
case 14: break;
case 15: break;
case 16: break;
case 17: break;
case 18: break;
case 19: break;
case 20: break;
case 21: break;
case 22: break;
case 23: break;
case 24: break;
case 25: break;
case 26: break;
case 27: break;
case 28: break;
case 29: break;
case 30: break;
case 31: break;
case 32: break;
case 33: break;
case 34: break;
case 35: break;
case 36: break;
case 37: break;
case 38: break;
case 39: break;
case 40: break;
case 41: break;
case 42: break;
case 43: break;
case 44: break;
case 45: break;
case 46: break;
case 47: break;
case 48: break;
case 49: break;
case 50: break;
case 51: break;
case 52: break;
case 53: break;
case 54: break;
case 55: break;
case 56: break;
case 57: break;
case 58: break;
case 59: break;
case 60: break;
case 61: break;
case 62: break;
case 63: break;
case 64: break;
case 65: break;
case 66: break;
case 67: break;
case 68: break;
case 69: break;
case 70: break;
case 71: break;
case 72: break;
case 73: break;
case 74: break;
case 75: break;
case 76: break;
case 77: break;
case 78: break;
case 79: break;
case 80: break;
case 81: break;
case 82: break;
case 83: break;
case 84: break;
case 85: break;
case 86: break;
case 87: break;
case 88: break;
case 89: break;
case 90: break;
case 91: break;
case 92: break;
case 93: break;
case 94: break;
case 95: break;
case 96: break;
case 97: break;
case 98: break;
case 99: break;
case 100: break;
case 101: break;
case 102: break;
case 103: break;
case 104: break;
case 105: break;
case 106: break;
case 107: break;
case 108: break;
case 109: break;
case 110: break;
case 111: break;
case 112: break;
case 113: break;
case 114: break;
case 115: break;
case 116: break;
case 117: break;
case 118: break;
case 119: break;
case 120: break;
case 121: break;
case 122: break;
case 123: break;
case 124: break;
case 125: break;
case 126: break;
case 127: break;
case 128: break;
case 129: break;
}
/* is-optimizable ignore next */
try {} finally {}
function c() {
// this is bad
return arguments;
}
function d() {
// this is ok
return arguments.length;
}
function e() {
// this is ok too
return b.apply(null, arguments);
}
function f() {
// this is bad
var args = [].slice.call(arguments);
}
function f(a, b) {
// bad
a = 2;
arguments[0];
}
function f() {
// ok
var args = new Array(arguments.length);
for(var i = 0; i < args.length; ++i) {
args[i] = arguments[i];
}
return args;
}
function g(a, b, c) {
// bad - only at runtime it becomes clear if a, b & c are not
// undefined
return arguments[0];
}
function h() {
// ok
arguments;
}
function i() {
// bad
arguments = 3;
}
// add new tests at the end, to prevent line numbers from changing
// this file isn't jshinted since some bad performance things also make
// jshint scream.