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...) 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...) 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...) 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 |