Index: runtime/lib/mirrors.cc |
diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc |
index 9f5c7634be0c0632f0e48c6c48bd960eb6d520c7..c2795a34a121c086ea3c521def925d2276aa2631 100644 |
--- a/runtime/lib/mirrors.cc |
+++ b/runtime/lib/mirrors.cc |
@@ -2037,6 +2037,9 @@ DEFINE_NATIVE_ENTRY(MethodMirror_return_type, 2) { |
DEFINE_NATIVE_ENTRY(MethodMirror_source, 1) { |
GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(0)); |
const Function& func = Function::Handle(ref.GetFunctionReferent()); |
+ if (func.IsImplicitConstructor() || func.IsSignatureFunction()) { |
hausner
2014/02/07 21:07:58
There may be other cases of functions that have no
rmacnak
2014/02/07 21:28:46
Now it is considered an implicit constructor. Leav
|
+ return Instance::null(); |
+ } |
const Script& script = Script::Handle(func.script()); |
const TokenStream& stream = TokenStream::Handle(script.tokens()); |
const TokenStream::Iterator tkit(stream, func.end_token_pos()); |
@@ -2059,7 +2062,10 @@ DEFINE_NATIVE_ENTRY(MethodMirror_source, 1) { |
String::Handle(func.name()).Equals("<anonymous closure>"))) { // Case 3. |
last_tok_len = 0; |
} |
- return script.GetSnippet(from_line, from_col, to_line, to_col + last_tok_len); |
+ const Instance& result = Instance::Handle( |
+ script.GetSnippet(from_line, from_col, to_line, to_col + last_tok_len)); |
+ ASSERT(!result.IsNull()); |
+ return result.raw(); |
} |