aed96e7b04
ThrowIfHole bytecodes were handled by introducing deopt points to check for a hole. To avoid deopt loops a hole check protector was used to generate control flow if there was a deopt due to a hole. However, the normal control flow version should be as fast as the deopt version in general. The deopt version could potentially consume less compile time but it may not be worth the complexity added. Hence simplifying it to only construct the control flow. Bug: v8:6383 Change-Id: Icace11f7a6e21e64e1cebd104496e3f559bc85f7 Reviewed-on: https://chromium-review.googlesource.com/525573 Reviewed-by: Michael Starzinger <mstarzinger@chromium.org> Reviewed-by: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Mythri Alle <mythria@chromium.org> Cr-Commit-Position: refs/heads/master@{#45783}
27 lines
621 B
JavaScript
27 lines
621 B
JavaScript
// Copyright 2016 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: --opt --allow-natives-syntax --turbo --no-always-opt
|
|
|
|
class A {
|
|
constructor() { }
|
|
}
|
|
class B extends A {
|
|
constructor(call_super) {
|
|
super();
|
|
if (call_super) {
|
|
super();
|
|
}
|
|
}
|
|
}
|
|
|
|
test = new B(0);
|
|
test = new B(0);
|
|
%OptimizeFunctionOnNextCall(B);
|
|
test = new B(0);
|
|
assertOptimized(B);
|
|
// Check that hole checks are handled correctly in optimized code.
|
|
assertThrowsEquals(() => {new B(1)}, ReferenceError());
|
|
assertOptimized(B);
|