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

Side by Side Diff: src/builtins/builtins-object.cc

Issue 2395453002: [stubs] Add String and JSReceiver instance type predicates (Closed)
Patch Set: Created 4 years, 2 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
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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/builtins/builtins.h" 5 #include "src/builtins/builtins.h"
6 #include "src/builtins/builtins-utils.h" 6 #include "src/builtins/builtins-utils.h"
7 7
8 #include "src/code-factory.h" 8 #include "src/code-factory.h"
9 #include "src/property-descriptor.h" 9 #include "src/property-descriptor.h"
10 10
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 typedef compiler::Node Node; 223 typedef compiler::Node Node;
224 typedef CodeStubAssembler::Label Label; 224 typedef CodeStubAssembler::Label Label;
225 225
226 Label if_notsmi(assembler); 226 Label if_notsmi(assembler);
227 assembler->Branch(assembler->WordIsSmi(object), if_notstring, &if_notsmi); 227 assembler->Branch(assembler->WordIsSmi(object), if_notstring, &if_notsmi);
228 228
229 assembler->Bind(&if_notsmi); 229 assembler->Bind(&if_notsmi);
230 { 230 {
231 Node* instance_type = assembler->LoadInstanceType(object); 231 Node* instance_type = assembler->LoadInstanceType(object);
232 232
233 assembler->Branch( 233 assembler->Branch(assembler->IsStringInstanceType(instance_type), if_string,
234 assembler->Int32LessThan( 234 if_notstring);
235 instance_type, assembler->Int32Constant(FIRST_NONSTRING_TYPE)),
236 if_string, if_notstring);
237 } 235 }
238 } 236 }
239 237
240 void ReturnToStringFormat(CodeStubAssembler* assembler, compiler::Node* context, 238 void ReturnToStringFormat(CodeStubAssembler* assembler, compiler::Node* context,
241 compiler::Node* string) { 239 compiler::Node* string) {
242 typedef compiler::Node Node; 240 typedef compiler::Node Node;
243 241
244 Node* lhs = assembler->HeapConstant( 242 Node* lhs = assembler->HeapConstant(
245 assembler->factory()->NewStringFromStaticChars("[object ")); 243 assembler->factory()->NewStringFromStaticChars("[object "));
246 Node* rhs = assembler->HeapConstant( 244 Node* rhs = assembler->HeapConstant(
247 assembler->factory()->NewStringFromStaticChars("]")); 245 assembler->factory()->NewStringFromStaticChars("]"));
248 246
249 Callable callable = CodeFactory::StringAdd( 247 Callable callable = CodeFactory::StringAdd(
250 assembler->isolate(), STRING_ADD_CHECK_NONE, NOT_TENURED); 248 assembler->isolate(), STRING_ADD_CHECK_NONE, NOT_TENURED);
251 249
252 assembler->Return(assembler->CallStub( 250 assembler->Return(assembler->CallStub(
253 callable, context, assembler->CallStub(callable, context, lhs, string), 251 callable, context, assembler->CallStub(callable, context, lhs, string),
254 rhs)); 252 rhs));
255 } 253 }
256 254
257 void ReturnIfPrimitive(CodeStubAssembler* assembler, 255 void ReturnIfPrimitive(CodeStubAssembler* assembler,
258 compiler::Node* instance_type, 256 compiler::Node* instance_type,
259 CodeStubAssembler::Label* return_string, 257 CodeStubAssembler::Label* return_string,
260 CodeStubAssembler::Label* return_boolean, 258 CodeStubAssembler::Label* return_boolean,
261 CodeStubAssembler::Label* return_number) { 259 CodeStubAssembler::Label* return_number) {
262 assembler->GotoIf( 260 assembler->GotoIf(assembler->IsStringInstanceType(instance_type),
263 assembler->Int32LessThan(instance_type, 261 return_string);
264 assembler->Int32Constant(FIRST_NONSTRING_TYPE)),
265 return_string);
266 262
267 assembler->GotoIf(assembler->Word32Equal( 263 assembler->GotoIf(assembler->Word32Equal(
268 instance_type, assembler->Int32Constant(ODDBALL_TYPE)), 264 instance_type, assembler->Int32Constant(ODDBALL_TYPE)),
269 return_boolean); 265 return_boolean);
270 266
271 assembler->GotoIf( 267 assembler->GotoIf(
272 assembler->Word32Equal(instance_type, 268 assembler->Word32Equal(instance_type,
273 assembler->Int32Constant(HEAP_NUMBER_TYPE)), 269 assembler->Int32Constant(HEAP_NUMBER_TYPE)),
274 return_number); 270 return_number);
275 } 271 }
(...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 if (object->IsJSReceiver()) { 901 if (object->IsJSReceiver()) {
906 MAYBE_RETURN(JSReceiver::SetIntegrityLevel(Handle<JSReceiver>::cast(object), 902 MAYBE_RETURN(JSReceiver::SetIntegrityLevel(Handle<JSReceiver>::cast(object),
907 SEALED, Object::THROW_ON_ERROR), 903 SEALED, Object::THROW_ON_ERROR),
908 isolate->heap()->exception()); 904 isolate->heap()->exception());
909 } 905 }
910 return *object; 906 return *object;
911 } 907 }
912 908
913 } // namespace internal 909 } // namespace internal
914 } // namespace v8 910 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698