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

Side by Side Diff: runtime/vm/object.cc

Issue 51123003: VM: Fix checked mode crash (issue 13831). (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 1 month 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 | Annotate | Revision Log
OLDNEW
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/cpu.h" 10 #include "vm/cpu.h"
(...skipping 4206 matching lines...) Expand 10 before | Expand all | Expand 10 after
4217 const Object& obj = Object::Handle(raw_ptr()->data_); 4217 const Object& obj = Object::Handle(raw_ptr()->data_);
4218 ASSERT(!obj.IsNull()); 4218 ASSERT(!obj.IsNull());
4219 ClosureData::Cast(obj).set_parent_function(value); 4219 ClosureData::Cast(obj).set_parent_function(value);
4220 return; 4220 return;
4221 } 4221 }
4222 UNREACHABLE(); 4222 UNREACHABLE();
4223 } 4223 }
4224 4224
4225 4225
4226 RawFunction* Function::implicit_closure_function() const { 4226 RawFunction* Function::implicit_closure_function() const {
4227 if (IsClosureFunction() || IsSignatureFunction()) { 4227 if (IsClosureFunction() ||
4228 IsSignatureFunction() ||
4229 IsStaticInitializerFunction()) {
4228 return Function::null(); 4230 return Function::null();
4229 } 4231 }
4230 const Object& obj = Object::Handle(raw_ptr()->data_); 4232 const Object& obj = Object::Handle(raw_ptr()->data_);
4231 ASSERT(obj.IsNull() || obj.IsFunction()); 4233 ASSERT(obj.IsNull() || obj.IsFunction());
4232 return (obj.IsNull()) ? Function::null() : Function::Cast(obj).raw(); 4234 return (obj.IsNull()) ? Function::null() : Function::Cast(obj).raw();
4233 } 4235 }
4234 4236
4235 4237
4236 void Function::set_implicit_closure_function(const Function& value) const { 4238 void Function::set_implicit_closure_function(const Function& value) const {
4237 ASSERT(!IsClosureFunction() && !IsSignatureFunction()); 4239 ASSERT(!IsClosureFunction() && !IsSignatureFunction());
(...skipping 1182 matching lines...) Expand 10 before | Expand all | Expand 10 after
5420 ToFullyQualifiedCString(), 5422 ToFullyQualifiedCString(),
5421 fp, 5423 fp,
5422 SourceFingerprint()); 5424 SourceFingerprint());
5423 return false; 5425 return false;
5424 } 5426 }
5425 } 5427 }
5426 return true; 5428 return true;
5427 } 5429 }
5428 5430
5429 5431
5432 RawFunction* Function::NewStaticInitializer(const String& field_name,
5433 const AbstractType& result_type,
5434 const Class& cls,
5435 intptr_t initializer_pos) {
5436 const String& init_name =
5437 String::Handle(Symbols::New(String::Handle(
5438 String::Concat(Symbols::InitPrefix(), field_name))));
5439 const Function& init_function = Function::ZoneHandle(
5440 Function::New(init_name,
5441 RawFunction::kStaticInitializer,
5442 true, // static
5443 false, // !const
5444 false, // !abstract
5445 false, // !external
5446 cls,
5447 initializer_pos));
5448 init_function.set_result_type(result_type);
5449 // Static initializer functions are generated by the VM and are therfore
5450 // hidden from the user. Since they are only executed once, we avoid
5451 // optimizing and inlining them. After the field is initialized, the
5452 // optimizing compiler can eliminate the call to the static initializer
5453 // via constant folding.
5454 init_function.set_is_visible(false);
5455 init_function.set_is_optimizable(false);
5456 init_function.set_is_inlinable(false);
5457 return init_function.raw();
5458 }
5459
5460
5430 const char* Function::ToCString() const { 5461 const char* Function::ToCString() const {
5431 const char* static_str = is_static() ? " static" : ""; 5462 const char* static_str = is_static() ? " static" : "";
5432 const char* abstract_str = is_abstract() ? " abstract" : ""; 5463 const char* abstract_str = is_abstract() ? " abstract" : "";
5433 const char* kind_str = NULL; 5464 const char* kind_str = NULL;
5434 const char* const_str = is_const() ? " const" : ""; 5465 const char* const_str = is_const() ? " const" : "";
5435 switch (kind()) { 5466 switch (kind()) {
5436 case RawFunction::kRegularFunction: 5467 case RawFunction::kRegularFunction:
5437 case RawFunction::kClosureFunction: 5468 case RawFunction::kClosureFunction:
5438 case RawFunction::kGetterFunction: 5469 case RawFunction::kGetterFunction:
5439 case RawFunction::kSetterFunction: 5470 case RawFunction::kSetterFunction:
5440 kind_str = ""; 5471 kind_str = "";
5441 break; 5472 break;
5442 case RawFunction::kSignatureFunction: 5473 case RawFunction::kSignatureFunction:
5443 kind_str = " signature"; 5474 kind_str = " signature";
5444 break; 5475 break;
5445 case RawFunction::kConstructor: 5476 case RawFunction::kConstructor:
5446 kind_str = is_static() ? " factory" : " constructor"; 5477 kind_str = is_static() ? " factory" : " constructor";
5447 break; 5478 break;
5448 case RawFunction::kImplicitGetter: 5479 case RawFunction::kImplicitGetter:
5449 kind_str = " getter"; 5480 kind_str = " getter";
5450 break; 5481 break;
5451 case RawFunction::kImplicitSetter: 5482 case RawFunction::kImplicitSetter:
5452 kind_str = " setter"; 5483 kind_str = " setter";
5453 break; 5484 break;
5485 case RawFunction::kStaticInitializer:
5486 kind_str = " static-initializer";
5487 break;
5454 case RawFunction::kImplicitStaticFinalGetter: 5488 case RawFunction::kImplicitStaticFinalGetter:
5455 kind_str = " static-final-getter"; 5489 kind_str = " static-final-getter";
5456 break; 5490 break;
5457 case RawFunction::kMethodExtractor: 5491 case RawFunction::kMethodExtractor:
5458 kind_str = " method-extractor"; 5492 kind_str = " method-extractor";
5459 break; 5493 break;
5460 case RawFunction::kNoSuchMethodDispatcher: 5494 case RawFunction::kNoSuchMethodDispatcher:
5461 kind_str = " no-such-method-dispatcher"; 5495 kind_str = " no-such-method-dispatcher";
5462 break; 5496 break;
5463 case RawFunction::kInvokeFieldDispatcher: 5497 case RawFunction::kInvokeFieldDispatcher:
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
5515 break; 5549 break;
5516 case RawFunction::kNoSuchMethodDispatcher: 5550 case RawFunction::kNoSuchMethodDispatcher:
5517 kind_string = "no such method"; 5551 kind_string = "no such method";
5518 break; 5552 break;
5519 case RawFunction::kClosureFunction: 5553 case RawFunction::kClosureFunction:
5520 kind_string = "closure"; 5554 kind_string = "closure";
5521 break; 5555 break;
5522 case RawFunction::kConstructor: 5556 case RawFunction::kConstructor:
5523 kind_string = "constructor"; 5557 kind_string = "constructor";
5524 break; 5558 break;
5559 case RawFunction::kStaticInitializer:
5560 kind_string = "static initializer";
5561 break;
5525 case RawFunction::kImplicitStaticFinalGetter: 5562 case RawFunction::kImplicitStaticFinalGetter:
5526 kind_string = "static final getter"; 5563 kind_string = "static final getter";
5527 break; 5564 break;
5528 default: 5565 default:
5529 UNREACHABLE(); 5566 UNREACHABLE();
5530 } 5567 }
5531 jsobj.AddProperty("kind", kind_string); 5568 jsobj.AddProperty("kind", kind_string);
5532 jsobj.AddProperty("unoptimized_code", Object::Handle(unoptimized_code())); 5569 jsobj.AddProperty("unoptimized_code", Object::Handle(unoptimized_code()));
5533 jsobj.AddProperty("usage_counter", usage_counter()); 5570 jsobj.AddProperty("usage_counter", usage_counter());
5534 jsobj.AddProperty("optimized_call_site_count", optimized_call_site_count()); 5571 jsobj.AddProperty("optimized_call_site_count", optimized_call_site_count());
(...skipping 10062 matching lines...) Expand 10 before | Expand all | Expand 10 after
15597 return "_MirrorReference"; 15634 return "_MirrorReference";
15598 } 15635 }
15599 15636
15600 15637
15601 void MirrorReference::PrintToJSONStream(JSONStream* stream, bool ref) const { 15638 void MirrorReference::PrintToJSONStream(JSONStream* stream, bool ref) const {
15602 JSONObject jsobj(stream); 15639 JSONObject jsobj(stream);
15603 } 15640 }
15604 15641
15605 15642
15606 } // namespace dart 15643 } // namespace dart
OLDNEW
« runtime/vm/class_finalizer.cc ('K') | « runtime/vm/object.h ('k') | runtime/vm/parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698