v8: upgrade to 3.11.10.22
This commit is contained in:
parent
6174ea6b4c
commit
4899116d4b
11
deps/v8/build/common.gypi
vendored
11
deps/v8/build/common.gypi
vendored
@ -239,6 +239,7 @@
|
|||||||
'WIN32',
|
'WIN32',
|
||||||
],
|
],
|
||||||
'msvs_configuration_attributes': {
|
'msvs_configuration_attributes': {
|
||||||
|
'OutputDirectory': '<(DEPTH)\\build\\$(ConfigurationName)',
|
||||||
'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)',
|
'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)',
|
||||||
'CharacterSet': '1',
|
'CharacterSet': '1',
|
||||||
},
|
},
|
||||||
@ -270,7 +271,7 @@
|
|||||||
'target_conditions': [
|
'target_conditions': [
|
||||||
['_toolset=="host"', {
|
['_toolset=="host"', {
|
||||||
'variables': {
|
'variables': {
|
||||||
'm32flag': '<!((echo | $(echo ${CXX_host:-$(which g++)}) -m32 -E - > /dev/null 2>&1) && echo "-m32" || true)',
|
'm32flag': '<!((echo | $(echo ${CXX_host:-$(which g++)}) -m32 -E - > /dev/null 2>&1) && echo -n "-m32" || true)',
|
||||||
},
|
},
|
||||||
'cflags': [ '<(m32flag)' ],
|
'cflags': [ '<(m32flag)' ],
|
||||||
'ldflags': [ '<(m32flag)' ],
|
'ldflags': [ '<(m32flag)' ],
|
||||||
@ -280,7 +281,7 @@
|
|||||||
}],
|
}],
|
||||||
['_toolset=="target"', {
|
['_toolset=="target"', {
|
||||||
'variables': {
|
'variables': {
|
||||||
'm32flag': '<!((echo | $(echo ${CXX_target:-${CXX:-$(which g++)}}) -m32 -E - > /dev/null 2>&1) && echo "-m32" || true)',
|
'm32flag': '<!((echo | $(echo ${CXX_target:-${CXX:-$(which g++)}}) -m32 -E - > /dev/null 2>&1) && echo -n "-m32" || true)',
|
||||||
},
|
},
|
||||||
'cflags': [ '<(m32flag)' ],
|
'cflags': [ '<(m32flag)' ],
|
||||||
'ldflags': [ '<(m32flag)' ],
|
'ldflags': [ '<(m32flag)' ],
|
||||||
@ -323,7 +324,7 @@
|
|||||||
},
|
},
|
||||||
'conditions': [
|
'conditions': [
|
||||||
['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd"', {
|
['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd"', {
|
||||||
'cflags': [ '-Wno-unused-parameter',
|
'cflags': [ '-Wall', '<(werror)', '-W', '-Wno-unused-parameter',
|
||||||
'-Wnon-virtual-dtor', '-Woverloaded-virtual' ],
|
'-Wnon-virtual-dtor', '-Woverloaded-virtual' ],
|
||||||
}],
|
}],
|
||||||
],
|
],
|
||||||
@ -332,6 +333,10 @@
|
|||||||
'conditions': [
|
'conditions': [
|
||||||
['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" \
|
['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" \
|
||||||
or OS=="android"', {
|
or OS=="android"', {
|
||||||
|
'cflags!': [
|
||||||
|
'-O2',
|
||||||
|
'-Os',
|
||||||
|
],
|
||||||
'cflags': [
|
'cflags': [
|
||||||
'-fdata-sections',
|
'-fdata-sections',
|
||||||
'-ffunction-sections',
|
'-ffunction-sections',
|
||||||
|
3
deps/v8/src/accessors.cc
vendored
3
deps/v8/src/accessors.cc
vendored
@ -755,6 +755,9 @@ MaybeObject* Accessors::FunctionGetCaller(Object* object, void*) {
|
|||||||
caller = potential_caller;
|
caller = potential_caller;
|
||||||
potential_caller = it.next();
|
potential_caller = it.next();
|
||||||
}
|
}
|
||||||
|
if (!caller->shared()->native() && potential_caller != NULL) {
|
||||||
|
caller = potential_caller;
|
||||||
|
}
|
||||||
// If caller is bound, return null. This is compatible with JSC, and
|
// If caller is bound, return null. This is compatible with JSC, and
|
||||||
// allows us to make bound functions use the strict function map
|
// allows us to make bound functions use the strict function map
|
||||||
// and its associated throwing caller and arguments.
|
// and its associated throwing caller and arguments.
|
||||||
|
11
deps/v8/src/ic.cc
vendored
11
deps/v8/src/ic.cc
vendored
@ -992,7 +992,7 @@ void LoadIC::UpdateCaches(LookupResult* lookup,
|
|||||||
if (callback->IsAccessorInfo()) {
|
if (callback->IsAccessorInfo()) {
|
||||||
Handle<AccessorInfo> info = Handle<AccessorInfo>::cast(callback);
|
Handle<AccessorInfo> info = Handle<AccessorInfo>::cast(callback);
|
||||||
if (v8::ToCData<Address>(info->getter()) == 0) return;
|
if (v8::ToCData<Address>(info->getter()) == 0) return;
|
||||||
if (!receiver->HasFastProperties()) return;
|
if (!holder->HasFastProperties()) return;
|
||||||
if (!info->IsCompatibleReceiver(*receiver)) return;
|
if (!info->IsCompatibleReceiver(*receiver)) return;
|
||||||
code = isolate()->stub_cache()->ComputeLoadCallback(
|
code = isolate()->stub_cache()->ComputeLoadCallback(
|
||||||
name, receiver, holder, info);
|
name, receiver, holder, info);
|
||||||
@ -1000,7 +1000,7 @@ void LoadIC::UpdateCaches(LookupResult* lookup,
|
|||||||
Handle<Object> getter(Handle<AccessorPair>::cast(callback)->getter());
|
Handle<Object> getter(Handle<AccessorPair>::cast(callback)->getter());
|
||||||
if (!getter->IsJSFunction()) return;
|
if (!getter->IsJSFunction()) return;
|
||||||
if (holder->IsGlobalObject()) return;
|
if (holder->IsGlobalObject()) return;
|
||||||
if (!receiver->HasFastProperties()) return;
|
if (!holder->HasFastProperties()) return;
|
||||||
code = isolate()->stub_cache()->ComputeLoadViaGetter(
|
code = isolate()->stub_cache()->ComputeLoadViaGetter(
|
||||||
name, receiver, holder, Handle<JSFunction>::cast(getter));
|
name, receiver, holder, Handle<JSFunction>::cast(getter));
|
||||||
} else {
|
} else {
|
||||||
@ -1269,7 +1269,7 @@ void KeyedLoadIC::UpdateCaches(LookupResult* lookup,
|
|||||||
Handle<AccessorInfo> callback =
|
Handle<AccessorInfo> callback =
|
||||||
Handle<AccessorInfo>::cast(callback_object);
|
Handle<AccessorInfo>::cast(callback_object);
|
||||||
if (v8::ToCData<Address>(callback->getter()) == 0) return;
|
if (v8::ToCData<Address>(callback->getter()) == 0) return;
|
||||||
if (!receiver->HasFastProperties()) return;
|
if (!holder->HasFastProperties()) return;
|
||||||
if (!callback->IsCompatibleReceiver(*receiver)) return;
|
if (!callback->IsCompatibleReceiver(*receiver)) return;
|
||||||
code = isolate()->stub_cache()->ComputeKeyedLoadCallback(
|
code = isolate()->stub_cache()->ComputeKeyedLoadCallback(
|
||||||
name, receiver, holder, callback);
|
name, receiver, holder, callback);
|
||||||
@ -1487,9 +1487,10 @@ void StoreIC::UpdateCaches(LookupResult* lookup,
|
|||||||
case CALLBACKS: {
|
case CALLBACKS: {
|
||||||
Handle<Object> callback(lookup->GetCallbackObject());
|
Handle<Object> callback(lookup->GetCallbackObject());
|
||||||
if (callback->IsAccessorInfo()) {
|
if (callback->IsAccessorInfo()) {
|
||||||
|
ASSERT(*holder == *receiver); // LookupForWrite checks this.
|
||||||
Handle<AccessorInfo> info = Handle<AccessorInfo>::cast(callback);
|
Handle<AccessorInfo> info = Handle<AccessorInfo>::cast(callback);
|
||||||
if (v8::ToCData<Address>(info->setter()) == 0) return;
|
if (v8::ToCData<Address>(info->setter()) == 0) return;
|
||||||
if (!receiver->HasFastProperties()) return;
|
if (!holder->HasFastProperties()) return;
|
||||||
ASSERT(info->IsCompatibleReceiver(*receiver));
|
ASSERT(info->IsCompatibleReceiver(*receiver));
|
||||||
code = isolate()->stub_cache()->ComputeStoreCallback(
|
code = isolate()->stub_cache()->ComputeStoreCallback(
|
||||||
name, receiver, info, strict_mode);
|
name, receiver, info, strict_mode);
|
||||||
@ -1497,7 +1498,7 @@ void StoreIC::UpdateCaches(LookupResult* lookup,
|
|||||||
Handle<Object> setter(Handle<AccessorPair>::cast(callback)->setter());
|
Handle<Object> setter(Handle<AccessorPair>::cast(callback)->setter());
|
||||||
if (!setter->IsJSFunction()) return;
|
if (!setter->IsJSFunction()) return;
|
||||||
if (holder->IsGlobalObject()) return;
|
if (holder->IsGlobalObject()) return;
|
||||||
if (!receiver->HasFastProperties()) return;
|
if (!holder->HasFastProperties()) return;
|
||||||
code = isolate()->stub_cache()->ComputeStoreViaSetter(
|
code = isolate()->stub_cache()->ComputeStoreViaSetter(
|
||||||
name, receiver, Handle<JSFunction>::cast(setter), strict_mode);
|
name, receiver, Handle<JSFunction>::cast(setter), strict_mode);
|
||||||
} else {
|
} else {
|
||||||
|
4
deps/v8/src/v8natives.js
vendored
4
deps/v8/src/v8natives.js
vendored
@ -1654,7 +1654,9 @@ function NewFunction(arg1) { // length == 1
|
|||||||
|
|
||||||
// The call to SetNewFunctionAttributes will ensure the prototype
|
// The call to SetNewFunctionAttributes will ensure the prototype
|
||||||
// property of the resulting function is enumerable (ECMA262, 15.3.5.2).
|
// property of the resulting function is enumerable (ECMA262, 15.3.5.2).
|
||||||
var f = %CompileString(source)();
|
var global_receiver = %GlobalReceiver(global);
|
||||||
|
var f = %_CallFunction(global_receiver, %CompileString(source));
|
||||||
|
|
||||||
%FunctionMarkNameShouldPrintAsAnonymous(f);
|
%FunctionMarkNameShouldPrintAsAnonymous(f);
|
||||||
return %SetNewFunctionAttributes(f);
|
return %SetNewFunctionAttributes(f);
|
||||||
}
|
}
|
||||||
|
2
deps/v8/src/version.cc
vendored
2
deps/v8/src/version.cc
vendored
@ -35,7 +35,7 @@
|
|||||||
#define MAJOR_VERSION 3
|
#define MAJOR_VERSION 3
|
||||||
#define MINOR_VERSION 11
|
#define MINOR_VERSION 11
|
||||||
#define BUILD_NUMBER 10
|
#define BUILD_NUMBER 10
|
||||||
#define PATCH_LEVEL 19
|
#define PATCH_LEVEL 22
|
||||||
// Use 1 for candidates and 0 otherwise.
|
// Use 1 for candidates and 0 otherwise.
|
||||||
// (Boolean macro values are not supported by all preprocessors.)
|
// (Boolean macro values are not supported by all preprocessors.)
|
||||||
#define IS_CANDIDATE_VERSION 0
|
#define IS_CANDIDATE_VERSION 0
|
||||||
|
12
deps/v8/src/x64/code-stubs-x64.cc
vendored
12
deps/v8/src/x64/code-stubs-x64.cc
vendored
@ -999,8 +999,8 @@ void BinaryOpStub::GenerateSmiCode(
|
|||||||
SmiCodeGenerateHeapNumberResults allow_heapnumber_results) {
|
SmiCodeGenerateHeapNumberResults allow_heapnumber_results) {
|
||||||
|
|
||||||
// Arguments to BinaryOpStub are in rdx and rax.
|
// Arguments to BinaryOpStub are in rdx and rax.
|
||||||
Register left = rdx;
|
const Register left = rdx;
|
||||||
Register right = rax;
|
const Register right = rax;
|
||||||
|
|
||||||
// We only generate heapnumber answers for overflowing calculations
|
// We only generate heapnumber answers for overflowing calculations
|
||||||
// for the four basic arithmetic operations and logical right shift by 0.
|
// for the four basic arithmetic operations and logical right shift by 0.
|
||||||
@ -1042,20 +1042,16 @@ void BinaryOpStub::GenerateSmiCode(
|
|||||||
|
|
||||||
case Token::DIV:
|
case Token::DIV:
|
||||||
// SmiDiv will not accept left in rdx or right in rax.
|
// SmiDiv will not accept left in rdx or right in rax.
|
||||||
left = rcx;
|
|
||||||
right = rbx;
|
|
||||||
__ movq(rbx, rax);
|
__ movq(rbx, rax);
|
||||||
__ movq(rcx, rdx);
|
__ movq(rcx, rdx);
|
||||||
__ SmiDiv(rax, left, right, &use_fp_on_smis);
|
__ SmiDiv(rax, rcx, rbx, &use_fp_on_smis);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Token::MOD:
|
case Token::MOD:
|
||||||
// SmiMod will not accept left in rdx or right in rax.
|
// SmiMod will not accept left in rdx or right in rax.
|
||||||
left = rcx;
|
|
||||||
right = rbx;
|
|
||||||
__ movq(rbx, rax);
|
__ movq(rbx, rax);
|
||||||
__ movq(rcx, rdx);
|
__ movq(rcx, rdx);
|
||||||
__ SmiMod(rax, left, right, &use_fp_on_smis);
|
__ SmiMod(rax, rcx, rbx, &use_fp_on_smis);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Token::BIT_OR: {
|
case Token::BIT_OR: {
|
||||||
|
193
deps/v8/test/cctest/test-api.cc
vendored
193
deps/v8/test/cctest/test-api.cc
vendored
@ -14567,6 +14567,8 @@ THREADED_TEST(FunctionGetScriptId) {
|
|||||||
|
|
||||||
static v8::Handle<Value> GetterWhichReturns42(Local<String> name,
|
static v8::Handle<Value> GetterWhichReturns42(Local<String> name,
|
||||||
const AccessorInfo& info) {
|
const AccessorInfo& info) {
|
||||||
|
CHECK(v8::Utils::OpenHandle(*info.This())->IsJSObject());
|
||||||
|
CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject());
|
||||||
return v8_num(42);
|
return v8_num(42);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -14574,10 +14576,32 @@ static v8::Handle<Value> GetterWhichReturns42(Local<String> name,
|
|||||||
static void SetterWhichSetsYOnThisTo23(Local<String> name,
|
static void SetterWhichSetsYOnThisTo23(Local<String> name,
|
||||||
Local<Value> value,
|
Local<Value> value,
|
||||||
const AccessorInfo& info) {
|
const AccessorInfo& info) {
|
||||||
|
CHECK(v8::Utils::OpenHandle(*info.This())->IsJSObject());
|
||||||
|
CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject());
|
||||||
info.This()->Set(v8_str("y"), v8_num(23));
|
info.This()->Set(v8_str("y"), v8_num(23));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Handle<Value> FooGetInterceptor(Local<String> name,
|
||||||
|
const AccessorInfo& info) {
|
||||||
|
CHECK(v8::Utils::OpenHandle(*info.This())->IsJSObject());
|
||||||
|
CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject());
|
||||||
|
if (!name->Equals(v8_str("foo"))) return Handle<Value>();
|
||||||
|
return v8_num(42);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Handle<Value> FooSetInterceptor(Local<String> name,
|
||||||
|
Local<Value> value,
|
||||||
|
const AccessorInfo& info) {
|
||||||
|
CHECK(v8::Utils::OpenHandle(*info.This())->IsJSObject());
|
||||||
|
CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject());
|
||||||
|
if (!name->Equals(v8_str("foo"))) return Handle<Value>();
|
||||||
|
info.This()->Set(v8_str("y"), v8_num(23));
|
||||||
|
return v8_num(23);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
TEST(SetterOnConstructorPrototype) {
|
TEST(SetterOnConstructorPrototype) {
|
||||||
v8::HandleScope scope;
|
v8::HandleScope scope;
|
||||||
Local<ObjectTemplate> templ = ObjectTemplate::New();
|
Local<ObjectTemplate> templ = ObjectTemplate::New();
|
||||||
@ -16813,25 +16837,60 @@ TEST(TryFinallyMessage) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
THREADED_TEST(Regress137002a) {
|
static void Helper137002(bool do_store,
|
||||||
i::FLAG_allow_natives_syntax = true;
|
bool polymorphic,
|
||||||
v8::HandleScope scope;
|
bool remove_accessor,
|
||||||
|
bool interceptor) {
|
||||||
LocalContext context;
|
LocalContext context;
|
||||||
Local<ObjectTemplate> templ = ObjectTemplate::New();
|
Local<ObjectTemplate> templ = ObjectTemplate::New();
|
||||||
|
if (interceptor) {
|
||||||
|
templ->SetNamedPropertyHandler(FooGetInterceptor, FooSetInterceptor);
|
||||||
|
} else {
|
||||||
templ->SetAccessor(v8_str("foo"),
|
templ->SetAccessor(v8_str("foo"),
|
||||||
GetterWhichReturns42,
|
GetterWhichReturns42,
|
||||||
SetterWhichSetsYOnThisTo23);
|
SetterWhichSetsYOnThisTo23);
|
||||||
|
}
|
||||||
context->Global()->Set(v8_str("obj"), templ->NewInstance());
|
context->Global()->Set(v8_str("obj"), templ->NewInstance());
|
||||||
|
|
||||||
// Turn monomorphic on slow object with native accessor, then turn
|
// Turn monomorphic on slow object with native accessor, then turn
|
||||||
// polymorphic, finally optimize to create negative lookup and fail.
|
// polymorphic, finally optimize to create negative lookup and fail.
|
||||||
CompileRun("function f(x) { return x.foo; }"
|
CompileRun(do_store ?
|
||||||
"%OptimizeObjectForAddingMultipleProperties(obj, 1);"
|
"function f(x) { x.foo = void 0; }" :
|
||||||
"obj.__proto__ = null;"
|
"function f(x) { return x.foo; }");
|
||||||
"f(obj); f(obj); f({});"
|
CompileRun("obj.y = void 0;");
|
||||||
"%OptimizeFunctionOnNextCall(f);"
|
if (!interceptor) {
|
||||||
"var result = f(obj);");
|
CompileRun("%OptimizeObjectForAddingMultipleProperties(obj, 1);");
|
||||||
CHECK_EQ(42, context->Global()->Get(v8_str("result"))->Int32Value());
|
}
|
||||||
|
CompileRun("obj.__proto__ = null;"
|
||||||
|
"f(obj); f(obj); f(obj);");
|
||||||
|
if (polymorphic) {
|
||||||
|
CompileRun("f({});");
|
||||||
|
}
|
||||||
|
CompileRun("obj.y = void 0;"
|
||||||
|
"%OptimizeFunctionOnNextCall(f);");
|
||||||
|
if (remove_accessor) {
|
||||||
|
CompileRun("delete obj.foo;");
|
||||||
|
}
|
||||||
|
CompileRun("var result = f(obj);");
|
||||||
|
if (do_store) {
|
||||||
|
CompileRun("result = obj.y;");
|
||||||
|
}
|
||||||
|
if (remove_accessor && !interceptor) {
|
||||||
|
CHECK(context->Global()->Get(v8_str("result"))->IsUndefined());
|
||||||
|
} else {
|
||||||
|
CHECK_EQ(do_store ? 23 : 42,
|
||||||
|
context->Global()->Get(v8_str("result"))->Int32Value());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
THREADED_TEST(Regress137002a) {
|
||||||
|
i::FLAG_allow_natives_syntax = true;
|
||||||
|
i::FLAG_compilation_cache = false;
|
||||||
|
v8::HandleScope scope;
|
||||||
|
for (int i = 0; i < 16; i++) {
|
||||||
|
Helper137002(i & 8, i & 4, i & 2, i & 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -16847,10 +16906,114 @@ THREADED_TEST(Regress137002b) {
|
|||||||
|
|
||||||
// Turn monomorphic on slow object with native accessor, then just
|
// Turn monomorphic on slow object with native accessor, then just
|
||||||
// delete the property and fail.
|
// delete the property and fail.
|
||||||
CompileRun("function f(x) { return x.foo; }"
|
CompileRun("function load(x) { return x.foo; }"
|
||||||
"%OptimizeObjectForAddingMultipleProperties(obj, 1);"
|
"function store(x) { x.foo = void 0; }"
|
||||||
|
"function keyed_load(x, key) { return x[key]; }"
|
||||||
|
// Second version of function has a different source (add void 0)
|
||||||
|
// so that it does not share code with the first version. This
|
||||||
|
// ensures that the ICs are monomorphic.
|
||||||
|
"function load2(x) { void 0; return x.foo; }"
|
||||||
|
"function store2(x) { void 0; x.foo = void 0; }"
|
||||||
|
"function keyed_load2(x, key) { void 0; return x[key]; }"
|
||||||
|
|
||||||
|
"obj.y = void 0;"
|
||||||
"obj.__proto__ = null;"
|
"obj.__proto__ = null;"
|
||||||
"f(obj); f(obj); delete obj.foo;"
|
"var subobj = {};"
|
||||||
"var result = f(obj);");
|
"subobj.y = void 0;"
|
||||||
CHECK(context->Global()->Get(v8_str("result"))->IsUndefined());
|
"subobj.__proto__ = obj;"
|
||||||
|
"%OptimizeObjectForAddingMultipleProperties(obj, 1);"
|
||||||
|
|
||||||
|
// Make the ICs monomorphic.
|
||||||
|
"load(obj); load(obj);"
|
||||||
|
"load2(subobj); load2(subobj);"
|
||||||
|
"store(obj); store(obj);"
|
||||||
|
"store2(subobj); store2(subobj);"
|
||||||
|
"keyed_load(obj, 'foo'); keyed_load(obj, 'foo');"
|
||||||
|
"keyed_load2(subobj, 'foo'); keyed_load2(subobj, 'foo');"
|
||||||
|
|
||||||
|
// Actually test the shiny new ICs and better not crash. This
|
||||||
|
// serves as a regression test for issue 142088 as well.
|
||||||
|
"load(obj);"
|
||||||
|
"load2(subobj);"
|
||||||
|
"store(obj);"
|
||||||
|
"store2(subobj);"
|
||||||
|
"keyed_load(obj, 'foo');"
|
||||||
|
"keyed_load2(subobj, 'foo');"
|
||||||
|
|
||||||
|
// Delete the accessor. It better not be called any more now.
|
||||||
|
"delete obj.foo;"
|
||||||
|
"obj.y = void 0;"
|
||||||
|
"subobj.y = void 0;"
|
||||||
|
|
||||||
|
"var load_result = load(obj);"
|
||||||
|
"var load_result2 = load2(subobj);"
|
||||||
|
"var keyed_load_result = keyed_load(obj, 'foo');"
|
||||||
|
"var keyed_load_result2 = keyed_load2(subobj, 'foo');"
|
||||||
|
"store(obj);"
|
||||||
|
"store2(subobj);"
|
||||||
|
"var y_from_obj = obj.y;"
|
||||||
|
"var y_from_subobj = subobj.y;");
|
||||||
|
CHECK(context->Global()->Get(v8_str("load_result"))->IsUndefined());
|
||||||
|
CHECK(context->Global()->Get(v8_str("load_result2"))->IsUndefined());
|
||||||
|
CHECK(context->Global()->Get(v8_str("keyed_load_result"))->IsUndefined());
|
||||||
|
CHECK(context->Global()->Get(v8_str("keyed_load_result2"))->IsUndefined());
|
||||||
|
CHECK(context->Global()->Get(v8_str("y_from_obj"))->IsUndefined());
|
||||||
|
CHECK(context->Global()->Get(v8_str("y_from_subobj"))->IsUndefined());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
THREADED_TEST(Regress142088) {
|
||||||
|
i::FLAG_allow_natives_syntax = true;
|
||||||
|
v8::HandleScope scope;
|
||||||
|
LocalContext context;
|
||||||
|
Local<ObjectTemplate> templ = ObjectTemplate::New();
|
||||||
|
templ->SetAccessor(v8_str("foo"),
|
||||||
|
GetterWhichReturns42,
|
||||||
|
SetterWhichSetsYOnThisTo23);
|
||||||
|
context->Global()->Set(v8_str("obj"), templ->NewInstance());
|
||||||
|
|
||||||
|
// Turn monomorphic on slow object with native accessor, then just
|
||||||
|
// delete the property and fail.
|
||||||
|
CompileRun("function load(x) { return x.foo; }"
|
||||||
|
"function store(x) { x.foo = void 0; }"
|
||||||
|
"function keyed_load(x, key) { return x[key]; }"
|
||||||
|
// Second version of function has a different source (add void 0)
|
||||||
|
// so that it does not share code with the first version. This
|
||||||
|
// ensures that the ICs are monomorphic.
|
||||||
|
"function load2(x) { void 0; return x.foo; }"
|
||||||
|
"function store2(x) { void 0; x.foo = void 0; }"
|
||||||
|
"function keyed_load2(x, key) { void 0; return x[key]; }"
|
||||||
|
|
||||||
|
"obj.__proto__ = null;"
|
||||||
|
"var subobj = {};"
|
||||||
|
"subobj.__proto__ = obj;"
|
||||||
|
"%OptimizeObjectForAddingMultipleProperties(obj, 1);"
|
||||||
|
|
||||||
|
// Make the ICs monomorphic.
|
||||||
|
"load(obj); load(obj);"
|
||||||
|
"load2(subobj); load2(subobj);"
|
||||||
|
"store(obj);"
|
||||||
|
"store2(subobj);"
|
||||||
|
"keyed_load(obj, 'foo'); keyed_load(obj, 'foo');"
|
||||||
|
"keyed_load2(subobj, 'foo'); keyed_load2(subobj, 'foo');"
|
||||||
|
|
||||||
|
// Delete the accessor. It better not be called any more now.
|
||||||
|
"delete obj.foo;"
|
||||||
|
"obj.y = void 0;"
|
||||||
|
"subobj.y = void 0;"
|
||||||
|
|
||||||
|
"var load_result = load(obj);"
|
||||||
|
"var load_result2 = load2(subobj);"
|
||||||
|
"var keyed_load_result = keyed_load(obj, 'foo');"
|
||||||
|
"var keyed_load_result2 = keyed_load2(subobj, 'foo');"
|
||||||
|
"store(obj);"
|
||||||
|
"store2(subobj);"
|
||||||
|
"var y_from_obj = obj.y;"
|
||||||
|
"var y_from_subobj = subobj.y;");
|
||||||
|
CHECK(context->Global()->Get(v8_str("load_result"))->IsUndefined());
|
||||||
|
CHECK(context->Global()->Get(v8_str("load_result2"))->IsUndefined());
|
||||||
|
CHECK(context->Global()->Get(v8_str("keyed_load_result"))->IsUndefined());
|
||||||
|
CHECK(context->Global()->Get(v8_str("keyed_load_result2"))->IsUndefined());
|
||||||
|
CHECK(context->Global()->Get(v8_str("y_from_obj"))->IsUndefined());
|
||||||
|
CHECK(context->Global()->Get(v8_str("y_from_subobj"))->IsUndefined());
|
||||||
}
|
}
|
||||||
|
34
deps/v8/test/mjsunit/new-function.js
vendored
Normal file
34
deps/v8/test/mjsunit/new-function.js
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
// Copyright 2012 the V8 project authors. All rights reserved.
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following
|
||||||
|
// disclaimer in the documentation and/or other materials provided
|
||||||
|
// with the distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived
|
||||||
|
// from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
var x;
|
||||||
|
try {
|
||||||
|
Function("}), x = this, (function() {");
|
||||||
|
} catch(e) {
|
||||||
|
print("Caught " + e);
|
||||||
|
}
|
||||||
|
assertTrue(x == "[object global]");
|
107
deps/v8/test/mjsunit/regress/regress-145201.js
vendored
Normal file
107
deps/v8/test/mjsunit/regress/regress-145201.js
vendored
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
// Copyright 2012 the V8 project authors. All rights reserved.
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following
|
||||||
|
// disclaimer in the documentation and/or other materials provided
|
||||||
|
// with the distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived
|
||||||
|
// from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// Fix some corner cases in skipping native methods using caller.
|
||||||
|
var net = [];
|
||||||
|
|
||||||
|
|
||||||
|
var x = 0;
|
||||||
|
|
||||||
|
function collect () {
|
||||||
|
function item(operator) {
|
||||||
|
binary(operator, 1, false);
|
||||||
|
binary(operator, 1, true);
|
||||||
|
binary(operator, '{}', false);
|
||||||
|
binary(operator, '{}', true);
|
||||||
|
binary(operator, '"x"', false);
|
||||||
|
binary(operator, '"x"', true);
|
||||||
|
unary(operator, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
function unary(op, after) {
|
||||||
|
// Capture:
|
||||||
|
try {
|
||||||
|
eval(op + " custom " + after);
|
||||||
|
} catch(e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function binary(op, other_side, inverted) {
|
||||||
|
// Capture:
|
||||||
|
try {
|
||||||
|
if (inverted) {
|
||||||
|
eval("custom " + op + " " + other_side);
|
||||||
|
} else {
|
||||||
|
eval(other_side + " " + op + " custom");
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function catcher() {
|
||||||
|
var caller = catcher.caller;
|
||||||
|
if (/native/i.test(caller) || /ADD/.test(caller)) {
|
||||||
|
net[caller] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var custom = Object.create(null, {
|
||||||
|
toString: { value: catcher },
|
||||||
|
length: { get: catcher }
|
||||||
|
});
|
||||||
|
|
||||||
|
item('^');
|
||||||
|
item('~');
|
||||||
|
item('<<');
|
||||||
|
item('<');
|
||||||
|
item('==');
|
||||||
|
item('>>>');
|
||||||
|
item('>>');
|
||||||
|
item('|');
|
||||||
|
item('-');
|
||||||
|
item('*');
|
||||||
|
item('&');
|
||||||
|
item('%');
|
||||||
|
item('+');
|
||||||
|
item('in');
|
||||||
|
item('instanceof');
|
||||||
|
unary('{}[', ']');
|
||||||
|
unary('delete {}[', ']');
|
||||||
|
unary('(function() {}).apply(null, ', ')');
|
||||||
|
}
|
||||||
|
|
||||||
|
collect();
|
||||||
|
collect();
|
||||||
|
collect();
|
||||||
|
|
||||||
|
var keys = 0;
|
||||||
|
for (var key in net) {
|
||||||
|
print(key);
|
||||||
|
keys++;
|
||||||
|
}
|
||||||
|
|
||||||
|
assertTrue(keys == 0);
|
3
deps/v8/tools/gyp/v8.gyp
vendored
3
deps/v8/tools/gyp/v8.gyp
vendored
@ -721,9 +721,6 @@
|
|||||||
'../../src/win32-math.h',
|
'../../src/win32-math.h',
|
||||||
],
|
],
|
||||||
'msvs_disabled_warnings': [4351, 4355, 4800],
|
'msvs_disabled_warnings': [4351, 4355, 4800],
|
||||||
'direct_dependent_settings': {
|
|
||||||
'msvs_disabled_warnings': [4351, 4355, 4800],
|
|
||||||
},
|
|
||||||
'link_settings': {
|
'link_settings': {
|
||||||
'libraries': [ '-lwinmm.lib', '-lws2_32.lib' ],
|
'libraries': [ '-lwinmm.lib', '-lws2_32.lib' ],
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user