diff --git a/include/v8-version.h b/include/v8-version.h index 5d01d237d71a..6ae420f8ecdf 100644 --- a/include/v8-version.h +++ b/include/v8-version.h @@ -11,7 +11,7 @@ #define V8_MAJOR_VERSION 5 #define V8_MINOR_VERSION 1 #define V8_BUILD_NUMBER 281 -#define V8_PATCH_LEVEL 63 +#define V8_PATCH_LEVEL 64 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) diff --git a/src/debug/debug-evaluate.cc b/src/debug/debug-evaluate.cc index 1729408e5ce0..dae134832228 100644 --- a/src/debug/debug-evaluate.cc +++ b/src/debug/debug-evaluate.cc @@ -247,7 +247,8 @@ void DebugEvaluate::ContextBuilder::MaterializeReceiver( // 'this' is allocated in an outer context and is is already being // referenced by the current function, so it can be correctly resolved. return; - } else if (local_function->shared()->scope_info()->HasReceiver()) { + } else if (local_function->shared()->scope_info()->HasReceiver() && + !frame_->receiver()->IsTheHole()) { recv = handle(frame_->receiver(), isolate_); } JSObject::SetOwnPropertyIgnoreAttributes(target, name, recv, NONE).Check(); diff --git a/test/mjsunit/es6/debug-evaluate-receiver-before-super.js b/test/mjsunit/es6/debug-evaluate-receiver-before-super.js new file mode 100644 index 000000000000..dc8ce2cacd5f --- /dev/null +++ b/test/mjsunit/es6/debug-evaluate-receiver-before-super.js @@ -0,0 +1,39 @@ +// 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: --expose-debug-as debug + +// Test that debug-evaluate doesn't crash when this is used before super() call +// in constructor. + +Debug = debug.Debug + +var result; + +function listener(event, exec_state, event_data, data) +{ + try { + if (event == Debug.DebugEvent.Break) { + result = exec_state.frame(0).evaluate("this.a").value(); + } + } catch (e) { + result = e.message; + } +} + +Debug.setListener(listener); + +class A { constructor () { this.a = 239; } } +class B extends A { + constructor () { + debugger; + assertEquals("Cannot read property 'a' of undefined", result); + super(); + debugger; + assertEquals(239, result); + } +} +new B(); + +Debug.setListener(null);