| Index: runtime/lib/mirrors.cc
 | 
| diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc
 | 
| index c4605cf2e031c2a80bbda8d1c550c8849210cb50..2b063e1e736587d44237e29ce8d2c06b34491c82 100644
 | 
| --- a/runtime/lib/mirrors.cc
 | 
| +++ b/runtime/lib/mirrors.cc
 | 
| @@ -1868,45 +1868,7 @@ 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()) {
 | 
| -    // We may need to handle more cases when the restrictions on mixins are
 | 
| -    // relaxed. In particular we might start associating some source with the
 | 
| -    // forwarding constructors when it becomes possible to specify a particular
 | 
| -    // constructor from the mixin to use.
 | 
| -    return Instance::null();
 | 
| -  }
 | 
| -  const Script& script = Script::Handle(func.script());
 | 
| -  const TokenStream& stream = TokenStream::Handle(script.tokens());
 | 
| -  if (!script.HasSource()) {
 | 
| -    // When source is not available, avoid printing the whole token stream and
 | 
| -    // doing expensive position calculations.
 | 
| -    return stream.GenerateSource(func.token_pos(), func.end_token_pos() + 1);
 | 
| -  }
 | 
| -
 | 
| -  const TokenStream::Iterator tkit(stream, func.end_token_pos());
 | 
| -  intptr_t from_line;
 | 
| -  intptr_t from_col;
 | 
| -  intptr_t to_line;
 | 
| -  intptr_t to_col;
 | 
| -  script.GetTokenLocation(func.token_pos(), &from_line, &from_col);
 | 
| -  script.GetTokenLocation(func.end_token_pos(), &to_line, &to_col);
 | 
| -  intptr_t last_tok_len = String::Handle(tkit.CurrentLiteral()).Length();
 | 
| -  // Handle special cases for end tokens of closures (where we exclude the last
 | 
| -  // token):
 | 
| -  // (1) "foo(() => null, bar);": End token is `,', but we don't print it.
 | 
| -  // (2) "foo(() => null);": End token is ')`, but we don't print it.
 | 
| -  // (3) "var foo = () => null;": End token is `;', but in this case the token
 | 
| -  // semicolon belongs to the assignment so we skip it.
 | 
| -  if ((tkit.CurrentTokenKind() == Token::kCOMMA) ||                   // Case 1.
 | 
| -      (tkit.CurrentTokenKind() == Token::kRPAREN) ||                  // Case 2.
 | 
| -      (tkit.CurrentTokenKind() == Token::kSEMICOLON &&
 | 
| -       String::Handle(func.name()).Equals("<anonymous closure>"))) {  // Case 3.
 | 
| -    last_tok_len = 0;
 | 
| -  }
 | 
| -  const Instance& result = Instance::Handle(
 | 
| -      script.GetSnippet(from_line, from_col, to_line, to_col + last_tok_len));
 | 
| -  ASSERT(!result.IsNull());
 | 
| -  return result.raw();
 | 
| +  return func.GetSource();
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |