Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(683)

Side by Side Diff: src/objects.cc

Issue 2601503002: Add Object::IsNullOrUndefined(Isolate*) helper method (Closed)
Patch Set: fixing merge conflicts Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/objects.h" 5 #include "src/objects.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <iomanip> 8 #include <iomanip>
9 #include <memory> 9 #include <memory>
10 #include <sstream> 10 #include <sstream>
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 THROW_NEW_ERROR(isolate, NewRangeError(error_index, js_len), Object); 437 THROW_NEW_ERROR(isolate, NewRangeError(error_index, js_len), Object);
438 } 438 }
439 return js_len; 439 return js_len;
440 } 440 }
441 441
442 bool Object::BooleanValue() { 442 bool Object::BooleanValue() {
443 if (IsSmi()) return Smi::cast(this)->value() != 0; 443 if (IsSmi()) return Smi::cast(this)->value() != 0;
444 DCHECK(IsHeapObject()); 444 DCHECK(IsHeapObject());
445 Isolate* isolate = HeapObject::cast(this)->GetIsolate(); 445 Isolate* isolate = HeapObject::cast(this)->GetIsolate();
446 if (IsBoolean()) return IsTrue(isolate); 446 if (IsBoolean()) return IsTrue(isolate);
447 if (IsUndefined(isolate) || IsNull(isolate)) return false; 447 if (IsNullOrUndefined(isolate)) return false;
448 if (IsUndetectable()) return false; // Undetectable object is false. 448 if (IsUndetectable()) return false; // Undetectable object is false.
449 if (IsString()) return String::cast(this)->length() != 0; 449 if (IsString()) return String::cast(this)->length() != 0;
450 if (IsHeapNumber()) return HeapNumber::cast(this)->HeapNumberBooleanValue(); 450 if (IsHeapNumber()) return HeapNumber::cast(this)->HeapNumberBooleanValue();
451 return true; 451 return true;
452 } 452 }
453 453
454 454
455 namespace { 455 namespace {
456 456
457 // TODO(bmeurer): Maybe we should introduce a marker interface Number, 457 // TODO(bmeurer): Maybe we should introduce a marker interface Number,
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 } 880 }
881 881
882 882
883 // static 883 // static
884 MaybeHandle<Object> Object::GetMethod(Handle<JSReceiver> receiver, 884 MaybeHandle<Object> Object::GetMethod(Handle<JSReceiver> receiver,
885 Handle<Name> name) { 885 Handle<Name> name) {
886 Handle<Object> func; 886 Handle<Object> func;
887 Isolate* isolate = receiver->GetIsolate(); 887 Isolate* isolate = receiver->GetIsolate();
888 ASSIGN_RETURN_ON_EXCEPTION(isolate, func, 888 ASSIGN_RETURN_ON_EXCEPTION(isolate, func,
889 JSReceiver::GetProperty(receiver, name), Object); 889 JSReceiver::GetProperty(receiver, name), Object);
890 if (func->IsNull(isolate) || func->IsUndefined(isolate)) { 890 if (func->IsNullOrUndefined(isolate)) {
891 return isolate->factory()->undefined_value(); 891 return isolate->factory()->undefined_value();
892 } 892 }
893 if (!func->IsCallable()) { 893 if (!func->IsCallable()) {
894 THROW_NEW_ERROR(isolate, NewTypeError(MessageTemplate::kPropertyNotFunction, 894 THROW_NEW_ERROR(isolate, NewTypeError(MessageTemplate::kPropertyNotFunction,
895 func, name, receiver), 895 func, name, receiver),
896 Object); 896 Object);
897 } 897 }
898 return func; 898 return func;
899 } 899 }
900 900
(...skipping 10982 matching lines...) Expand 10 before | Expand all | Expand 10 after
11883 if (r < 0) { 11883 if (r < 0) {
11884 result = ComparisonResult::kLessThan; 11884 result = ComparisonResult::kLessThan;
11885 } else if (r > 0) { 11885 } else if (r > 0) {
11886 result = ComparisonResult::kGreaterThan; 11886 result = ComparisonResult::kGreaterThan;
11887 } 11887 }
11888 return result; 11888 return result;
11889 } 11889 }
11890 11890
11891 Object* String::IndexOf(Isolate* isolate, Handle<Object> receiver, 11891 Object* String::IndexOf(Isolate* isolate, Handle<Object> receiver,
11892 Handle<Object> search, Handle<Object> position) { 11892 Handle<Object> search, Handle<Object> position) {
11893 if (receiver->IsNull(isolate) || receiver->IsUndefined(isolate)) { 11893 if (receiver->IsNullOrUndefined(isolate)) {
11894 THROW_NEW_ERROR_RETURN_FAILURE( 11894 THROW_NEW_ERROR_RETURN_FAILURE(
11895 isolate, NewTypeError(MessageTemplate::kCalledOnNullOrUndefined, 11895 isolate, NewTypeError(MessageTemplate::kCalledOnNullOrUndefined,
11896 isolate->factory()->NewStringFromAsciiChecked( 11896 isolate->factory()->NewStringFromAsciiChecked(
11897 "String.prototype.indexOf"))); 11897 "String.prototype.indexOf")));
11898 } 11898 }
11899 Handle<String> receiver_string; 11899 Handle<String> receiver_string;
11900 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, receiver_string, 11900 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, receiver_string,
11901 Object::ToString(isolate, receiver)); 11901 Object::ToString(isolate, receiver));
11902 11902
11903 Handle<String> search_string; 11903 Handle<String> search_string;
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
12084 return i; 12084 return i;
12085 } 12085 }
12086 } 12086 }
12087 return -1; 12087 return -1;
12088 } 12088 }
12089 12089
12090 } // namespace 12090 } // namespace
12091 12091
12092 Object* String::LastIndexOf(Isolate* isolate, Handle<Object> receiver, 12092 Object* String::LastIndexOf(Isolate* isolate, Handle<Object> receiver,
12093 Handle<Object> search, Handle<Object> position) { 12093 Handle<Object> search, Handle<Object> position) {
12094 if (receiver->IsNull(isolate) || receiver->IsUndefined(isolate)) { 12094 if (receiver->IsNullOrUndefined(isolate)) {
12095 THROW_NEW_ERROR_RETURN_FAILURE( 12095 THROW_NEW_ERROR_RETURN_FAILURE(
12096 isolate, NewTypeError(MessageTemplate::kCalledOnNullOrUndefined, 12096 isolate, NewTypeError(MessageTemplate::kCalledOnNullOrUndefined,
12097 isolate->factory()->NewStringFromAsciiChecked( 12097 isolate->factory()->NewStringFromAsciiChecked(
12098 "String.prototype.lastIndexOf"))); 12098 "String.prototype.lastIndexOf")));
12099 } 12099 }
12100 Handle<String> receiver_string; 12100 Handle<String> receiver_string;
12101 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, receiver_string, 12101 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, receiver_string,
12102 Object::ToString(isolate, receiver)); 12102 Object::ToString(isolate, receiver));
12103 12103
12104 Handle<String> search_string; 12104 Handle<String> search_string;
(...skipping 8386 matching lines...) Expand 10 before | Expand all | Expand 10 after
20491 // depend on this. 20491 // depend on this.
20492 return DICTIONARY_ELEMENTS; 20492 return DICTIONARY_ELEMENTS;
20493 } 20493 }
20494 DCHECK_LE(kind, LAST_ELEMENTS_KIND); 20494 DCHECK_LE(kind, LAST_ELEMENTS_KIND);
20495 return kind; 20495 return kind;
20496 } 20496 }
20497 } 20497 }
20498 20498
20499 } // namespace internal 20499 } // namespace internal
20500 } // namespace v8 20500 } // namespace v8
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698