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

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

Issue 22912022: Fix fingerprint checking and report functions that have disappeared. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 7672 matching lines...) Expand 10 before | Expand all | Expand 10 after
7683 } 7683 }
7684 7684
7685 7685
7686 struct FpDiff { 7686 struct FpDiff {
7687 FpDiff(int32_t old_, int32_t new_): old_fp(old_), new_fp(new_) {} 7687 FpDiff(int32_t old_, int32_t new_): old_fp(old_), new_fp(new_) {}
7688 int32_t old_fp; 7688 int32_t old_fp;
7689 int32_t new_fp; 7689 int32_t new_fp;
7690 }; 7690 };
7691 7691
7692 7692
7693
7694 // Return Function::null() if function does not exist in lib.
7695 static RawFunction* GetFunction(const GrowableArray<Library*>& libs,
7696 const char* class_name,
7697 const char* function_name) {
7698 Function& func = Function::Handle();
7699 String& class_str = String::Handle();
7700 String& func_str = String::Handle();
7701 Class& cls = Class::Handle();
7702 for (intptr_t l = 0; l < libs.length(); l++) {
7703 const Library& lib = *libs[l];
7704 if (strcmp(class_name, "::") == 0) {
7705 func_str = Symbols::New(function_name);
7706 func = lib.LookupFunctionAllowPrivate(func_str, NULL);
7707 } else {
7708 class_str = String::New(class_name);
7709 cls = lib.LookupClassAllowPrivate(class_str, NULL);
7710 if (!cls.IsNull()) {
7711 func_str = String::New(function_name);
7712 if (function_name[0] == '.') {
7713 func_str = String::Concat(class_str, func_str);
7714 }
7715 func = cls.LookupFunctionAllowPrivate(func_str);
7716 }
7717 }
7718 if (!func.IsNull()) {
7719 return func.raw();
7720 }
7721 }
7722 return Function::null();
7723 }
7724
7725
7693 void Library::CheckFunctionFingerprints() { 7726 void Library::CheckFunctionFingerprints() {
7694 GrowableArray<FpDiff> collected_fp_diffs; 7727 GrowableArray<FpDiff> collected_fp_diffs;
7695 Library& lib = Library::Handle(); 7728 GrowableArray<Library*> all_libs;
7696 Class& cls = Class::Handle();
7697 Function& func = Function::Handle(); 7729 Function& func = Function::Handle();
7698 String& str = String::Handle();
7699 bool has_errors = false; 7730 bool has_errors = false;
7700 7731
7701 #define CHECK_FINGERPRINTS(class_name, function_name, dest, fp) \ 7732 #define CHECK_FINGERPRINTS(class_name, function_name, dest, fp) \
7702 func = Function::null(); \ 7733 func = GetFunction(all_libs, #class_name, #function_name); \
7703 if (strcmp(#class_name, "::") == 0) { \ 7734 if (func.IsNull()) { \
7704 str = Symbols::New(#function_name); \ 7735 has_errors = true; \
7705 func = lib.LookupFunctionAllowPrivate(str, NULL); \ 7736 OS::Print("Function not found %s.%s\n", #class_name, #function_name); \
7706 } else { \ 7737 } else if (func.SourceFingerprint() != fp) { \
7707 str = String::New(#class_name); \
7708 cls = lib.LookupClassAllowPrivate(str, NULL); \
7709 if (!cls.IsNull()) { \
7710 if (#function_name[0] == '.') { \
7711 str = String::New(#class_name#function_name); \
7712 } else { \
7713 str = String::New(#function_name); \
7714 } \
7715 func = cls.LookupFunctionAllowPrivate(str); \
7716 } \
7717 } \
7718 if (!func.IsNull() && (func.SourceFingerprint() != fp)) { \
7719 has_errors = true; \ 7738 has_errors = true; \
7720 OS::Print("Wrong fingerprint for '%s': expecting %d found %d\n", \ 7739 OS::Print("Wrong fingerprint for '%s': expecting %d found %d\n", \
7721 func.ToFullyQualifiedCString(), fp, func.SourceFingerprint()); \ 7740 func.ToFullyQualifiedCString(), fp, func.SourceFingerprint()); \
7722 collected_fp_diffs.Add(FpDiff(fp, func.SourceFingerprint())); \ 7741 collected_fp_diffs.Add(FpDiff(fp, func.SourceFingerprint())); \
7723 } \ 7742 } \
7724 7743
7725 lib = Library::CoreLibrary(); 7744 all_libs.Add(&Library::ZoneHandle(Library::CoreLibrary()));
7726 CORE_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS); 7745 CORE_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS);
7727 CORE_INTEGER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS); 7746 CORE_INTEGER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS);
7728 7747
7748 all_libs.Add(&Library::ZoneHandle(Library::MathLibrary()));
7749 all_libs.Add(&Library::ZoneHandle(Library::TypedDataLibrary()));
7729 RECOGNIZED_LIST(CHECK_FINGERPRINTS); 7750 RECOGNIZED_LIST(CHECK_FINGERPRINTS);
7730 7751
7731 lib = Library::MathLibrary(); 7752 all_libs.Clear();
7753 all_libs.Add(&Library::ZoneHandle(Library::MathLibrary()));
7732 MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS); 7754 MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS);
7733 7755
7734 lib = Library::TypedDataLibrary(); 7756 all_libs.Clear();
7757 all_libs.Add(&Library::ZoneHandle(Library::TypedDataLibrary()));
7735 TYPED_DATA_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS); 7758 TYPED_DATA_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS);
7736 7759
7737 #undef CHECK_FINGERPRINTS 7760 #undef CHECK_FINGERPRINTS
7738 7761
7762 Class& cls = Class::Handle();
7763
7739 #define CHECK_FACTORY_FINGERPRINTS(factory_symbol, cid, fp) \ 7764 #define CHECK_FACTORY_FINGERPRINTS(factory_symbol, cid, fp) \
7740 cls = Isolate::Current()->class_table()->At(cid); \ 7765 cls = Isolate::Current()->class_table()->At(cid); \
7741 func = cls.LookupFunctionAllowPrivate(Symbols::factory_symbol()); \ 7766 func = cls.LookupFunctionAllowPrivate(Symbols::factory_symbol()); \
7742 ASSERT(!func.IsNull()); \ 7767 if (func.IsNull()) { \
7743 if (func.SourceFingerprint() != fp) { \ 7768 has_errors = true; \
7769 OS::Print("Function not found %s.%s\n", cls.ToCString(), \
7770 Symbols::factory_symbol().ToCString()); \
7771 } else if (func.SourceFingerprint() != fp) { \
7744 has_errors = true; \ 7772 has_errors = true; \
7745 OS::Print("Wrong fingerprint for '%s': expecting %d found %d\n", \ 7773 OS::Print("Wrong fingerprint for '%s': expecting %d found %d\n", \
7746 func.ToFullyQualifiedCString(), fp, func.SourceFingerprint()); \ 7774 func.ToFullyQualifiedCString(), fp, func.SourceFingerprint()); \
7747 collected_fp_diffs.Add(FpDiff(fp, func.SourceFingerprint())); \ 7775 collected_fp_diffs.Add(FpDiff(fp, func.SourceFingerprint())); \
7748 } \ 7776 } \
7749 7777
7750 RECOGNIZED_LIST_FACTORY_LIST(CHECK_FACTORY_FINGERPRINTS); 7778 RECOGNIZED_LIST_FACTORY_LIST(CHECK_FACTORY_FINGERPRINTS);
7751 7779
7752 #undef CHECK_FACTORY_FINGERPRINTS 7780 #undef CHECK_FACTORY_FINGERPRINTS
7781
7753 if (has_errors) { 7782 if (has_errors) {
7754 for (intptr_t i = 0; i < collected_fp_diffs.length(); i++) { 7783 for (intptr_t i = 0; i < collected_fp_diffs.length(); i++) {
7755 OS::Print("s/%d/%d/\n", 7784 OS::Print("s/%d/%d/\n",
7756 collected_fp_diffs[i].old_fp, collected_fp_diffs[i].new_fp); 7785 collected_fp_diffs[i].old_fp, collected_fp_diffs[i].new_fp);
7757 } 7786 }
7758 OS::Print("\n"); 7787 OS::Print("\n");
7759 FATAL("Fingerprint mismatch."); 7788 FATAL("Fingerprint mismatch.");
7760 } 7789 }
7761 } 7790 }
7762 7791
(...skipping 6946 matching lines...) Expand 10 before | Expand all | Expand 10 after
14709 } 14738 }
14710 14739
14711 14740
14712 void MirrorReference::PrintToJSONStream(JSONStream* stream, bool ref) const { 14741 void MirrorReference::PrintToJSONStream(JSONStream* stream, bool ref) const {
14713 stream->OpenObject(); 14742 stream->OpenObject();
14714 stream->CloseObject(); 14743 stream->CloseObject();
14715 } 14744 }
14716 14745
14717 14746
14718 } // namespace dart 14747 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698