In V8, executing the following code:

```js

Object.defineProperty(Array.prototype, Symbol.iterator, { writable: false })

```

does not actually change the value or behavior of 
`Array.prototype[Symbol.iterator]` (assuming the value remains the same). 
However, V8 still triggers `UpdateProtector` and internally calls 
`InvalidateArrayIteratorLookupChain`. I am not quite sure if this 
invalidation is necessary. This causes subsequent JIT optimizations related 
to array iteration to be invalidated, resulting in degraded performance.


demo:

```js

Object.defineProperty(Array.prototype, Symbol.iterator, { writable: false })

function test(...args) {
if (arguments.length > 10) return 0;
return 1 + test(1, ...args);
}

var t;

for (let k = 0; k < 10000; k += 1) {
  t = test();
}

```

-- 
-- 
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/v8-dev/aab85f06-5aee-4be7-9e80-588d27a8b5acn%40googlegroups.com.

Reply via email to