| Index: src/ic.cc
|
| diff --git a/src/ic.cc b/src/ic.cc
|
| index b90436ae42c5f38feed72cf4d44be0d6f6b8b04f..17d2bb45ee5ce661cd516532ce18c8cbf273f8eb 100644
|
| --- a/src/ic.cc
|
| +++ b/src/ic.cc
|
| @@ -542,7 +542,7 @@ MaybeObject* CallICBase::LoadFunction(State state,
|
| if (!lookup.IsFound()) {
|
| // If the object does not have the requested property, check which
|
| // exception we need to throw.
|
| - return IsContextual(object)
|
| + return IsUndeclaredGlobal(object)
|
| ? ReferenceError("not_defined", name)
|
| : TypeError("undefined_method", object, name);
|
| }
|
| @@ -561,7 +561,7 @@ MaybeObject* CallICBase::LoadFunction(State state,
|
| if (lookup.IsInterceptor() && attr == ABSENT) {
|
| // If the object does not have the requested property, check which
|
| // exception we need to throw.
|
| - return IsContextual(object)
|
| + return IsUndeclaredGlobal(object)
|
| ? ReferenceError("not_defined", name)
|
| : TypeError("undefined_method", object, name);
|
| }
|
| @@ -933,7 +933,7 @@ MaybeObject* IC::Load(State state,
|
|
|
| // If we did not find a property, check if we need to throw an exception.
|
| if (!lookup.IsFound()) {
|
| - if (IsContextual(object)) {
|
| + if (IsUndeclaredGlobal(object)) {
|
| return ReferenceError("not_defined", name);
|
| }
|
| LOG(isolate(), SuspectReadEvent(*name, *object));
|
| @@ -952,7 +952,7 @@ MaybeObject* IC::Load(State state,
|
| RETURN_IF_EMPTY_HANDLE(isolate(), result);
|
| // If the property is not present, check if we need to throw an
|
| // exception.
|
| - if (attr == ABSENT && IsContextual(object)) {
|
| + if (attr == ABSENT && IsUndeclaredGlobal(object)) {
|
| return ReferenceError("not_defined", name);
|
| }
|
| return *result;
|
| @@ -1390,11 +1390,8 @@ MaybeObject* IC::Store(State state,
|
| if (FLAG_use_ic) {
|
| UpdateStoreCaches(&lookup, state, strict_mode, receiver, name, value);
|
| }
|
| - } else if (strict_mode == kStrictMode &&
|
| - !lookup.IsFound() &&
|
| - IsContextual(object)) {
|
| - // Strict mode doesn't allow setting non-existent global property
|
| - // or an assignment to a read only property.
|
| + } else if (strict_mode == kStrictMode && IsUndeclaredGlobal(object)) {
|
| + // Strict mode doesn't allow setting non-existent global property.
|
| return ReferenceError("not_defined", name);
|
| }
|
|
|
|
|