OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/object.h" | 5 #include "vm/object.h" |
6 | 6 |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
10 #include "vm/bigint_operations.h" | 10 #include "vm/bigint_operations.h" |
(...skipping 3202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3213 if (IsClosureFunction()) { | 3213 if (IsClosureFunction()) { |
3214 const Object& obj = Object::Handle(raw_ptr()->data_); | 3214 const Object& obj = Object::Handle(raw_ptr()->data_); |
3215 ASSERT(!obj.IsNull()); | 3215 ASSERT(!obj.IsNull()); |
3216 ClosureData::Cast(obj).set_closure_allocation_stub(value); | 3216 ClosureData::Cast(obj).set_closure_allocation_stub(value); |
3217 return; | 3217 return; |
3218 } | 3218 } |
3219 UNREACHABLE(); | 3219 UNREACHABLE(); |
3220 } | 3220 } |
3221 | 3221 |
3222 | 3222 |
| 3223 RawFunction* Function::method_extractor() const { |
| 3224 ASSERT(IsImplicitClosureFunction()); |
| 3225 const Object& obj = Object::Handle(raw_ptr()->data_); |
| 3226 ASSERT(!obj.IsNull()); |
| 3227 return ClosureData::Cast(obj).method_extractor(); |
| 3228 } |
| 3229 |
| 3230 |
| 3231 void Function::set_method_extractor(const Function& value) const { |
| 3232 ASSERT(IsImplicitClosureFunction()); |
| 3233 const Object& obj = Object::Handle(raw_ptr()->data_); |
| 3234 ASSERT(!obj.IsNull()); |
| 3235 ClosureData::Cast(obj).set_method_extractor(value); |
| 3236 } |
| 3237 |
| 3238 |
| 3239 RawFunction* Function::extracted_method_closure() const { |
| 3240 ASSERT(kind() == RawFunction::kMethodExtractor); |
| 3241 const Object& obj = Object::Handle(raw_ptr()->data_); |
| 3242 ASSERT(obj.IsFunction()); |
| 3243 return Function::Cast(obj).raw(); |
| 3244 } |
| 3245 |
| 3246 |
| 3247 void Function::set_extracted_method_closure(const Function& value) const { |
| 3248 ASSERT(kind() == RawFunction::kMethodExtractor); |
| 3249 ASSERT(raw_ptr()->data_ == Object::null()); |
| 3250 set_data(value); |
| 3251 } |
| 3252 |
| 3253 |
3223 RawFunction* Function::parent_function() const { | 3254 RawFunction* Function::parent_function() const { |
3224 if (IsClosureFunction()) { | 3255 if (IsClosureFunction()) { |
3225 const Object& obj = Object::Handle(raw_ptr()->data_); | 3256 const Object& obj = Object::Handle(raw_ptr()->data_); |
3226 ASSERT(!obj.IsNull()); | 3257 ASSERT(!obj.IsNull()); |
3227 return ClosureData::Cast(obj).parent_function(); | 3258 return ClosureData::Cast(obj).parent_function(); |
3228 } | 3259 } |
3229 return Function::null(); | 3260 return Function::null(); |
3230 } | 3261 } |
3231 | 3262 |
3232 | 3263 |
(...skipping 1069 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4302 break; | 4333 break; |
4303 case RawFunction::kImplicitGetter: | 4334 case RawFunction::kImplicitGetter: |
4304 kind_str = " getter"; | 4335 kind_str = " getter"; |
4305 break; | 4336 break; |
4306 case RawFunction::kImplicitSetter: | 4337 case RawFunction::kImplicitSetter: |
4307 kind_str = " setter"; | 4338 kind_str = " setter"; |
4308 break; | 4339 break; |
4309 case RawFunction::kConstImplicitGetter: | 4340 case RawFunction::kConstImplicitGetter: |
4310 kind_str = " const-getter"; | 4341 kind_str = " const-getter"; |
4311 break; | 4342 break; |
| 4343 case RawFunction::kMethodExtractor: |
| 4344 kind_str = " method-extractor"; |
| 4345 break; |
4312 default: | 4346 default: |
4313 UNREACHABLE(); | 4347 UNREACHABLE(); |
4314 } | 4348 } |
4315 const char* kFormat = "Function '%s':%s%s%s%s."; | 4349 const char* kFormat = "Function '%s':%s%s%s%s."; |
4316 const char* function_name = String::Handle(name()).ToCString(); | 4350 const char* function_name = String::Handle(name()).ToCString(); |
4317 intptr_t len = OS::SNPrint(NULL, 0, kFormat, function_name, | 4351 intptr_t len = OS::SNPrint(NULL, 0, kFormat, function_name, |
4318 static_str, abstract_str, kind_str, const_str) + 1; | 4352 static_str, abstract_str, kind_str, const_str) + 1; |
4319 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); | 4353 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
4320 OS::SNPrint(chars, len, kFormat, function_name, | 4354 OS::SNPrint(chars, len, kFormat, function_name, |
4321 static_str, abstract_str, kind_str, const_str); | 4355 static_str, abstract_str, kind_str, const_str); |
(...skipping 13 matching lines...) Expand all Loading... |
4335 } | 4369 } |
4336 | 4370 |
4337 | 4371 |
4338 void ClosureData::set_closure_allocation_stub(const Code& value) const { | 4372 void ClosureData::set_closure_allocation_stub(const Code& value) const { |
4339 ASSERT(!value.IsNull()); | 4373 ASSERT(!value.IsNull()); |
4340 ASSERT(raw_ptr()->closure_allocation_stub_ == Code::null()); | 4374 ASSERT(raw_ptr()->closure_allocation_stub_ == Code::null()); |
4341 StorePointer(&raw_ptr()->closure_allocation_stub_, value.raw()); | 4375 StorePointer(&raw_ptr()->closure_allocation_stub_, value.raw()); |
4342 } | 4376 } |
4343 | 4377 |
4344 | 4378 |
| 4379 void ClosureData::set_method_extractor(const Function& value) const { |
| 4380 ASSERT(!value.IsNull()); |
| 4381 ASSERT(raw_ptr()->method_extractor_ == Function::null()); |
| 4382 StorePointer(&raw_ptr()->method_extractor_, value.raw()); |
| 4383 } |
| 4384 |
| 4385 |
4345 void ClosureData::set_parent_function(const Function& value) const { | 4386 void ClosureData::set_parent_function(const Function& value) const { |
4346 StorePointer(&raw_ptr()->parent_function_, value.raw()); | 4387 StorePointer(&raw_ptr()->parent_function_, value.raw()); |
4347 } | 4388 } |
4348 | 4389 |
4349 | 4390 |
4350 void ClosureData::set_signature_class(const Class& value) const { | 4391 void ClosureData::set_signature_class(const Class& value) const { |
4351 StorePointer(&raw_ptr()->signature_class_, value.raw()); | 4392 StorePointer(&raw_ptr()->signature_class_, value.raw()); |
4352 } | 4393 } |
4353 | 4394 |
4354 | 4395 |
(...skipping 8141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12496 } | 12537 } |
12497 return result.raw(); | 12538 return result.raw(); |
12498 } | 12539 } |
12499 | 12540 |
12500 | 12541 |
12501 const char* WeakProperty::ToCString() const { | 12542 const char* WeakProperty::ToCString() const { |
12502 return "_WeakProperty"; | 12543 return "_WeakProperty"; |
12503 } | 12544 } |
12504 | 12545 |
12505 } // namespace dart | 12546 } // namespace dart |
OLD | NEW |