Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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/code-stubs.h" | 5 #include "src/code-stubs.h" |
| 6 | 6 |
| 7 #include <sstream> | 7 #include <sstream> |
| 8 | 8 |
| 9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
| 10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
| (...skipping 4280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4291 descriptor->Initialize( | 4291 descriptor->Initialize( |
| 4292 Runtime::FunctionForId(Runtime::kGrowArrayElements)->entry); | 4292 Runtime::FunctionForId(Runtime::kGrowArrayElements)->entry); |
| 4293 } | 4293 } |
| 4294 | 4294 |
| 4295 | 4295 |
| 4296 void TypeofStub::GenerateAheadOfTime(Isolate* isolate) { | 4296 void TypeofStub::GenerateAheadOfTime(Isolate* isolate) { |
| 4297 TypeofStub stub(isolate); | 4297 TypeofStub stub(isolate); |
| 4298 stub.GetCode(); | 4298 stub.GetCode(); |
| 4299 } | 4299 } |
| 4300 | 4300 |
| 4301 namespace { | |
| 4302 | |
| 4301 // static | 4303 // static |
|
Michael Starzinger
2016/07/19 15:06:01
nit: The "static" comment no longer applies.
| |
| 4302 compiler::Node* HasPropertyStub::Generate(CodeStubAssembler* assembler, | 4304 compiler::Node* GenerateHasProperty( |
| 4303 compiler::Node* key, | 4305 CodeStubAssembler* assembler, compiler::Node* object, compiler::Node* key, |
| 4304 compiler::Node* object, | 4306 compiler::Node* context, Runtime::FunctionId fallback_runtime_function_id) { |
| 4305 compiler::Node* context) { | |
| 4306 typedef compiler::Node Node; | 4307 typedef compiler::Node Node; |
| 4307 typedef CodeStubAssembler::Label Label; | 4308 typedef CodeStubAssembler::Label Label; |
| 4308 typedef CodeStubAssembler::Variable Variable; | 4309 typedef CodeStubAssembler::Variable Variable; |
| 4309 | 4310 |
| 4310 Label call_runtime(assembler, Label::kDeferred), return_true(assembler), | 4311 Label call_runtime(assembler, Label::kDeferred), return_true(assembler), |
| 4311 return_false(assembler), end(assembler); | 4312 return_false(assembler), end(assembler); |
| 4312 | 4313 |
| 4313 CodeStubAssembler::LookupInHolder lookup_property_in_holder = | 4314 CodeStubAssembler::LookupInHolder lookup_property_in_holder = |
| 4314 [assembler, &return_true](Node* receiver, Node* holder, Node* holder_map, | 4315 [assembler, &return_true](Node* receiver, Node* holder, Node* holder_map, |
| 4315 Node* holder_instance_type, Node* unique_name, | 4316 Node* holder_instance_type, Node* unique_name, |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 4340 } | 4341 } |
| 4341 | 4342 |
| 4342 assembler->Bind(&return_false); | 4343 assembler->Bind(&return_false); |
| 4343 { | 4344 { |
| 4344 result.Bind(assembler->BooleanConstant(false)); | 4345 result.Bind(assembler->BooleanConstant(false)); |
| 4345 assembler->Goto(&end); | 4346 assembler->Goto(&end); |
| 4346 } | 4347 } |
| 4347 | 4348 |
| 4348 assembler->Bind(&call_runtime); | 4349 assembler->Bind(&call_runtime); |
| 4349 { | 4350 { |
| 4350 result.Bind( | 4351 result.Bind(assembler->CallRuntime(fallback_runtime_function_id, context, |
| 4351 assembler->CallRuntime(Runtime::kHasProperty, context, key, object)); | 4352 object, key)); |
| 4352 assembler->Goto(&end); | 4353 assembler->Goto(&end); |
| 4353 } | 4354 } |
| 4354 | 4355 |
| 4355 assembler->Bind(&end); | 4356 assembler->Bind(&end); |
| 4356 return result.value(); | 4357 return result.value(); |
| 4357 } | 4358 } |
| 4358 | 4359 |
| 4360 } // namespace | |
| 4361 | |
| 4362 // static | |
| 4363 compiler::Node* HasPropertyStub::Generate(CodeStubAssembler* assembler, | |
| 4364 compiler::Node* key, | |
| 4365 compiler::Node* object, | |
| 4366 compiler::Node* context) { | |
| 4367 return GenerateHasProperty(assembler, object, key, context, | |
| 4368 Runtime::kHasProperty); | |
| 4369 } | |
| 4370 | |
| 4371 // stati c | |
|
Michael Starzinger
2016/07/19 15:06:02
nit: s/stati c/static/
| |
| 4372 compiler::Node* ForInFilterStub::Generate(CodeStubAssembler* assembler, | |
| 4373 compiler::Node* key, | |
| 4374 compiler::Node* object, | |
| 4375 compiler::Node* context) { | |
| 4376 typedef compiler::Node Node; | |
| 4377 typedef CodeStubAssembler::Label Label; | |
| 4378 typedef CodeStubAssembler::Variable Variable; | |
| 4379 | |
| 4380 Label return_undefined(assembler, Label::kDeferred), | |
| 4381 return_to_name(assembler), end(assembler); | |
| 4382 | |
| 4383 Variable var_result(assembler, MachineRepresentation::kTagged); | |
| 4384 | |
| 4385 Node* has_property = GenerateHasProperty(assembler, object, key, context, | |
| 4386 Runtime::kForInHasProperty); | |
| 4387 | |
| 4388 assembler->Branch( | |
| 4389 assembler->WordEqual(has_property, assembler->BooleanConstant(true)), | |
| 4390 &return_to_name, &return_undefined); | |
| 4391 | |
| 4392 assembler->Bind(&return_to_name); | |
| 4393 { | |
| 4394 // TODO(cbruni): inline ToName here. | |
| 4395 Callable callable = CodeFactory::ToName(assembler->isolate()); | |
| 4396 var_result.Bind(assembler->CallStub(callable, context, key)); | |
| 4397 assembler->Goto(&end); | |
| 4398 } | |
| 4399 | |
| 4400 assembler->Bind(&return_undefined); | |
| 4401 { | |
| 4402 var_result.Bind(assembler->UndefinedConstant()); | |
| 4403 assembler->Goto(&end); | |
| 4404 } | |
| 4405 | |
| 4406 assembler->Bind(&end); | |
| 4407 return var_result.value(); | |
| 4408 } | |
| 4409 | |
| 4359 void GetPropertyStub::GenerateAssembly(CodeStubAssembler* assembler) const { | 4410 void GetPropertyStub::GenerateAssembly(CodeStubAssembler* assembler) const { |
| 4360 typedef compiler::Node Node; | 4411 typedef compiler::Node Node; |
| 4361 typedef CodeStubAssembler::Label Label; | 4412 typedef CodeStubAssembler::Label Label; |
| 4362 typedef CodeStubAssembler::Variable Variable; | 4413 typedef CodeStubAssembler::Variable Variable; |
| 4363 | 4414 |
| 4364 Label call_runtime(assembler, Label::kDeferred), return_undefined(assembler), | 4415 Label call_runtime(assembler, Label::kDeferred), return_undefined(assembler), |
| 4365 end(assembler); | 4416 end(assembler); |
| 4366 | 4417 |
| 4367 Node* object = assembler->Parameter(0); | 4418 Node* object = assembler->Parameter(0); |
| 4368 Node* key = assembler->Parameter(1); | 4419 Node* key = assembler->Parameter(1); |
| (...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4936 if (type->Is(Type::UntaggedPointer())) { | 4987 if (type->Is(Type::UntaggedPointer())) { |
| 4937 return Representation::External(); | 4988 return Representation::External(); |
| 4938 } | 4989 } |
| 4939 | 4990 |
| 4940 DCHECK(!type->Is(Type::Untagged())); | 4991 DCHECK(!type->Is(Type::Untagged())); |
| 4941 return Representation::Tagged(); | 4992 return Representation::Tagged(); |
| 4942 } | 4993 } |
| 4943 | 4994 |
| 4944 } // namespace internal | 4995 } // namespace internal |
| 4945 } // namespace v8 | 4996 } // namespace v8 |
| OLD | NEW |