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

Side by Side Diff: runtime/lib/mirrors.cc

Issue 1952023002: Minor cleanup based on profiler output of CompileParseFunction. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 7 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
« no previous file with comments | « no previous file | runtime/vm/compiler_stats.cc » ('j') | runtime/vm/raw_object.h » ('J')
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 "lib/mirrors.h" 5 #include "lib/mirrors.h"
6 6
7 #include "lib/invocation_mirror.h" 7 #include "lib/invocation_mirror.h"
8 #include "vm/bootstrap_natives.h" 8 #include "vm/bootstrap_natives.h"
9 #include "vm/class_finalizer.h" 9 #include "vm/class_finalizer.h"
10 #include "vm/compiler.h" 10 #include "vm/compiler.h"
(...skipping 1962 matching lines...) Expand 10 before | Expand all | Expand 10 after
1973 const Array& args = Array::Handle(Array::New(3)); 1973 const Array& args = Array::Handle(Array::New(3));
1974 args.SetAt(0, uri); 1974 args.SetAt(0, uri);
1975 args.SetAt(1, Smi::Handle(Smi::New(line))); 1975 args.SetAt(1, Smi::Handle(Smi::New(line)));
1976 args.SetAt(2, Smi::Handle(Smi::New(column))); 1976 args.SetAt(2, Smi::Handle(Smi::New(column)));
1977 return CreateMirror(Symbols::_SourceLocation(), args); 1977 return CreateMirror(Symbols::_SourceLocation(), args);
1978 } 1978 }
1979 1979
1980 1980
1981 DEFINE_NATIVE_ENTRY(DeclarationMirror_location, 1) { 1981 DEFINE_NATIVE_ENTRY(DeclarationMirror_location, 1) {
1982 GET_NON_NULL_NATIVE_ARGUMENT(Instance, reflectee, arguments->NativeArgAt(0)); 1982 GET_NON_NULL_NATIVE_ARGUMENT(Instance, reflectee, arguments->NativeArgAt(0));
1983 Object& decl = Object::Handle(); 1983 Object& decl = Object::Handle(zone);
1984 if (reflectee.IsMirrorReference()) { 1984 if (reflectee.IsMirrorReference()) {
1985 const MirrorReference& decl_ref = MirrorReference::Cast(reflectee); 1985 const MirrorReference& decl_ref = MirrorReference::Cast(reflectee);
1986 decl = decl_ref.referent(); 1986 decl = decl_ref.referent();
1987 } else if (reflectee.IsTypeParameter()) { 1987 } else if (reflectee.IsTypeParameter()) {
1988 decl = reflectee.raw(); 1988 decl = reflectee.raw();
1989 } else { 1989 } else {
1990 UNREACHABLE(); 1990 UNREACHABLE();
1991 } 1991 }
1992 1992
1993 Script& script = Script::Handle(); 1993 Script& script = Script::Handle(zone);
1994 TokenPosition token_pos = TokenPosition::kNoSource; 1994 TokenPosition token_pos = TokenPosition::kNoSource;
1995 1995
1996 if (decl.IsFunction()) { 1996 if (decl.IsFunction()) {
1997 const Function& func = Function::Cast(decl); 1997 const Function& func = Function::Cast(decl);
1998 if (func.IsImplicitConstructor() || func.IsSignatureFunction()) { 1998 if (func.IsImplicitConstructor() || func.IsSignatureFunction()) {
1999 // These are synthetic methods; they have no source. 1999 // These are synthetic methods; they have no source.
2000 return Instance::null(); 2000 return Instance::null();
2001 } 2001 }
2002 script = func.script(); 2002 script = func.script();
2003 token_pos = func.token_pos(); 2003 token_pos = func.token_pos();
2004 } else if (decl.IsClass()) { 2004 } else if (decl.IsClass()) {
2005 const Class& cls = Class::Cast(decl); 2005 const Class& cls = Class::Cast(decl);
2006 const bool is_typedef = cls.IsTypedefClass(); 2006 const bool is_typedef = cls.IsTypedefClass();
2007 if (cls.is_synthesized_class() && 2007 if (cls.is_synthesized_class() &&
2008 !is_typedef && 2008 !is_typedef &&
2009 !cls.is_mixin_app_alias() && 2009 !cls.is_mixin_app_alias() &&
2010 !cls.is_enum_class()) { 2010 !cls.is_enum_class()) {
2011 return Instance::null(); // Synthetic. 2011 return Instance::null(); // Synthetic.
2012 } 2012 }
2013 script = cls.script(); 2013 script = cls.script();
2014 token_pos = cls.token_pos(); 2014 token_pos = cls.token_pos();
2015 } else if (decl.IsField()) { 2015 } else if (decl.IsField()) {
2016 const Field& field = Field::Cast(decl); 2016 const Field& field = Field::Cast(decl);
2017 script = field.Script(); 2017 script = field.Script();
2018 token_pos = field.token_pos(); 2018 token_pos = field.token_pos();
2019 } else if (decl.IsTypeParameter()) { 2019 } else if (decl.IsTypeParameter()) {
2020 const TypeParameter& type_var = TypeParameter::Cast(decl); 2020 const TypeParameter& type_var = TypeParameter::Cast(decl);
2021 const Class& owner = Class::Handle(type_var.parameterized_class()); 2021 const Class& owner = Class::Handle(zone, type_var.parameterized_class());
2022 script = owner.script(); 2022 script = owner.script();
2023 token_pos = type_var.token_pos(); 2023 token_pos = type_var.token_pos();
2024 } else if (decl.IsLibrary()) { 2024 } else if (decl.IsLibrary()) {
2025 const Library& lib = Library::Cast(decl); 2025 const Library& lib = Library::Cast(decl);
2026 if (lib.raw() == Library::NativeWrappersLibrary()) { 2026 if (lib.raw() == Library::NativeWrappersLibrary()) {
2027 return Instance::null(); // No source. 2027 return Instance::null(); // No source.
2028 } 2028 }
2029 const Array& scripts = Array::Handle(lib.LoadedScripts()); 2029 const Array& scripts = Array::Handle(zone, lib.LoadedScripts());
2030 for (intptr_t i = 0; i < scripts.Length(); i++) { 2030 for (intptr_t i = 0; i < scripts.Length(); i++) {
2031 script ^= scripts.At(i); 2031 script ^= scripts.At(i);
2032 if (script.kind() == RawScript::kLibraryTag) break; 2032 if (script.kind() == RawScript::kLibraryTag) break;
2033 } 2033 }
2034 ASSERT(!script.IsNull()); 2034 ASSERT(!script.IsNull());
2035 const String& libname = String::Handle(lib.name()); 2035 const String& libname = String::Handle(zone, lib.name());
2036 if (libname.Length() == 0) { 2036 if (libname.Length() == 0) {
2037 // No library declaration. 2037 // No library declaration.
2038 const String& uri = String::Handle(script.url()); 2038 const String& uri = String::Handle(zone, script.url());
2039 return CreateSourceLocation(uri, 1, 1); 2039 return CreateSourceLocation(uri, 1, 1);
2040 } 2040 }
2041 const TokenStream& stream = TokenStream::Handle(script.tokens()); 2041 const TokenStream& stream = TokenStream::Handle(zone, script.tokens());
2042 TokenStream::Iterator tkit(stream, TokenPosition::kMinSource); 2042 TokenStream::Iterator tkit(zone, stream, TokenPosition::kMinSource);
2043 if (tkit.CurrentTokenKind() == Token::kSCRIPTTAG) tkit.Advance(); 2043 if (tkit.CurrentTokenKind() == Token::kSCRIPTTAG) tkit.Advance();
2044 token_pos = tkit.CurrentPosition(); 2044 token_pos = tkit.CurrentPosition();
2045 } 2045 }
2046 2046
2047 ASSERT(!script.IsNull()); 2047 ASSERT(!script.IsNull());
2048 ASSERT(token_pos != TokenPosition::kNoSource); 2048 ASSERT(token_pos != TokenPosition::kNoSource);
2049 2049
2050 const String& uri = String::Handle(script.url()); 2050 const String& uri = String::Handle(zone, script.url());
2051 intptr_t from_line = 0; 2051 intptr_t from_line = 0;
2052 intptr_t from_col = 0; 2052 intptr_t from_col = 0;
2053 if (script.HasSource()) { 2053 if (script.HasSource()) {
2054 script.GetTokenLocation(token_pos, &from_line, &from_col); 2054 script.GetTokenLocation(token_pos, &from_line, &from_col);
2055 } else { 2055 } else {
2056 // Avoid the slow path of printing the token stream when precise source 2056 // Avoid the slow path of printing the token stream when precise source
2057 // information is not available. 2057 // information is not available.
2058 script.GetTokenLocation(token_pos, &from_line, NULL); 2058 script.GetTokenLocation(token_pos, &from_line, NULL);
2059 } 2059 }
2060 // We should always have at least the line number. 2060 // We should always have at least the line number.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2097 2097
2098 DEFINE_NATIVE_ENTRY(TypeMirror_subtypeTest, 2) { 2098 DEFINE_NATIVE_ENTRY(TypeMirror_subtypeTest, 2) {
2099 GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, a, arguments->NativeArgAt(0)); 2099 GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, a, arguments->NativeArgAt(0));
2100 GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, b, arguments->NativeArgAt(1)); 2100 GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, b, arguments->NativeArgAt(1));
2101 return Bool::Get(a.IsSubtypeOf(b, NULL, NULL, Heap::kNew)).raw(); 2101 return Bool::Get(a.IsSubtypeOf(b, NULL, NULL, Heap::kNew)).raw();
2102 } 2102 }
2103 2103
2104 #endif // !PRODUCT 2104 #endif // !PRODUCT
2105 2105
2106 } // namespace dart 2106 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/compiler_stats.cc » ('j') | runtime/vm/raw_object.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698