| Index: runtime/lib/mirrors.cc | 
| diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc | 
| index a72d6fc448eeae4d515496413e1eeb2b21bba871..84773b5d0031a06e8646f9492282008262f4016c 100644 | 
| --- a/runtime/lib/mirrors.cc | 
| +++ b/runtime/lib/mirrors.cc | 
| @@ -20,9 +20,6 @@ DEFINE_FLAG(bool, use_mirrored_compilation_error, false, | 
| "Wrap compilation errors that occur during reflective access in a " | 
| "MirroredCompilationError, rather than suspending the isolate."); | 
|  | 
| -DEFINE_FLAG(bool, support_find_in_context, false, | 
| -    "Experimental support for ClosureMirror.findInContext."); | 
| - | 
| static RawInstance* CreateMirror(const String& mirror_class_name, | 
| const Array& constructor_arguments) { | 
| const Library& mirrors_lib = Library::Handle(Library::MirrorsLibrary()); | 
| @@ -672,67 +669,6 @@ static RawInstance* InvokeLibraryGetter(const Library& library, | 
| } | 
|  | 
|  | 
| -// TODO(13656): Remove AllowPrivate. | 
| -static RawInstance* InvokeLibraryGetterAllowImports( | 
| -    const Library& library, | 
| -    const String& getter_name, | 
| -    const bool throw_nsm_if_absent) { | 
| -  // To access a top-level we may need to use the Field or the getter Function. | 
| -  // The getter function may either be in the library or in the field's owner | 
| -  // class, depending on whether it was an actual getter, or an uninitialized | 
| -  // field. | 
| -  const Field& field = Field::Handle( | 
| -      library.LookupFieldAllowPrivate(getter_name)); | 
| -  Function& getter = Function::Handle(); | 
| -  if (field.IsNull()) { | 
| -    // No field found. Check for a getter in the lib. | 
| -    const String& internal_getter_name = | 
| -        String::Handle(Field::GetterName(getter_name)); | 
| -    getter = library.LookupFunctionAllowPrivate(internal_getter_name); | 
| -    if (getter.IsNull()) { | 
| -      getter = library.LookupFunctionAllowPrivate(getter_name); | 
| -      if (!getter.IsNull()) { | 
| -        // Looking for a getter but found a regular method: closurize it. | 
| -        const Function& closure_function = | 
| -            Function::Handle(getter.ImplicitClosureFunction()); | 
| -        return closure_function.ImplicitStaticClosure(); | 
| -      } | 
| -    } | 
| -  } else { | 
| -    if (!field.IsUninitialized()) { | 
| -      return field.value(); | 
| -    } | 
| -    // An uninitialized field was found.  Check for a getter in the field's | 
| -    // owner classs. | 
| -    const Class& klass = Class::Handle(field.owner()); | 
| -    const String& internal_getter_name = | 
| -        String::Handle(Field::GetterName(getter_name)); | 
| -    getter = klass.LookupStaticFunction(internal_getter_name); | 
| -  } | 
| - | 
| -  if (!getter.IsNull() && getter.is_visible()) { | 
| -    // Invoke the getter and return the result. | 
| -    const Object& result = Object::Handle( | 
| -        DartEntry::InvokeFunction(getter, Object::empty_array())); | 
| -    return ReturnResult(result); | 
| -  } | 
| - | 
| -  if (throw_nsm_if_absent) { | 
| -    ThrowNoSuchMethod(Instance::null_instance(), | 
| -                      getter_name, | 
| -                      getter, | 
| -                      InvocationMirror::kTopLevel, | 
| -                      InvocationMirror::kGetter); | 
| -    UNREACHABLE(); | 
| -  } | 
| - | 
| -  // Fall through case: Indicate that we didn't find any function or field using | 
| -  // a special null instance. This is different from a field being null. Callers | 
| -  // make sure that this null does not leak into Dartland. | 
| -  return Object::sentinel().raw(); | 
| -} | 
| - | 
| - | 
| static RawInstance* InvokeClassGetter(const Class& klass, | 
| const String& getter_name, | 
| const bool throw_nsm_if_absent) { | 
| @@ -777,8 +713,6 @@ static RawInstance* InvokeClassGetter(const Class& klass, | 
| } | 
|  | 
|  | 
| - | 
| - | 
| static RawInstance* InvokeInstanceGetter(const Class& klass, | 
| const Instance& reflectee, | 
| const String& getter_name, | 
| @@ -810,158 +744,6 @@ static RawInstance* InvokeInstanceGetter(const Class& klass, | 
| } | 
|  | 
|  | 
| -static RawInstance* LookupFunctionOrFieldInLibraryPrefix( | 
| -    const LibraryPrefix& prefix, | 
| -    const String& lookup_name) { | 
| -  const Object& entry = Object::Handle(prefix.LookupObject(lookup_name)); | 
| -  if (!entry.IsNull()) { | 
| -    if (entry.IsField()) { | 
| -      const Field& field = Field::Cast(entry); | 
| -      const Class& field_owner = Class::Handle(field.owner()); | 
| -      const Library& field_library = Library::Handle(field_owner.library()); | 
| -      const Instance& result = Instance::Handle( | 
| -          InvokeLibraryGetterAllowImports(field_library, lookup_name, false)); | 
| -      if (result.raw() != Object::sentinel().raw()) { | 
| -        return result.raw(); | 
| -      } | 
| -    } else if (entry.IsFunction()) { | 
| -      const Function& func = Function::Cast(entry); | 
| -      const Function& closure_function = Function::Handle( | 
| -          func.ImplicitClosureFunction()); | 
| -      return closure_function.ImplicitStaticClosure(); | 
| -    } | 
| -  } | 
| - | 
| -  // Fall through case: Indicate that we didn't find any function or field using | 
| -  // a special null instance. This is different from a field being null. Callers | 
| -  // make sure that this null does not leak into Dartland. | 
| -  return Object::sentinel().raw(); | 
| -} | 
| - | 
| - | 
| -static RawInstance* LookupStaticFunctionOrFieldInClass( | 
| -    const Class& klass, | 
| -    const String& lookup_name) { | 
| -  Instance& result = Instance::Handle( | 
| -      InvokeClassGetter(klass, lookup_name, false)); | 
| -  if (result.raw() != Object::sentinel().raw()) { | 
| -    return result.raw(); | 
| -  } | 
| - | 
| -  const Function& func = | 
| -      Function::Handle(klass.LookupStaticFunction(lookup_name)); | 
| -  if (!func.IsNull()) { | 
| -    const Function& closure_function = Function::Handle( | 
| -        func.ImplicitClosureFunction()); | 
| -    ASSERT(!closure_function.IsNull()); | 
| -    return closure_function.ImplicitStaticClosure(); | 
| -  } | 
| - | 
| -  // Fall through case: Indicate that we didn't find any function or field using | 
| -  // a special null instance. This is different from a field being null. Callers | 
| -  // make sure that this null does not leak into Dartland. | 
| -  return Object::sentinel().raw(); | 
| -} | 
| - | 
| - | 
| -static RawInstance* LookupFunctionOrFieldInFunctionContext( | 
| -    const Function& func, | 
| -    const Context& ctx, | 
| -    const String& lookup_name) { | 
| -  const ContextScope& ctx_scope = ContextScope::Handle(func.context_scope()); | 
| -  intptr_t this_index = -1; | 
| - | 
| -  // Search local context. | 
| -  String& name = String::Handle(); | 
| -  for (intptr_t i = 0; i < ctx_scope.num_variables(); i++) { | 
| -    name ^= ctx_scope.NameAt(i); | 
| -    if (name.Equals(lookup_name)) { | 
| -      return ctx.At(i); | 
| -    } else if (name.Equals(Symbols::This())) { | 
| -      // Record instance index to search for the field in the instance | 
| -      // afterwards. | 
| -      this_index = i; | 
| -    } | 
| -  } | 
| - | 
| -  // Search the instance this function is attached to. | 
| -  if (this_index >= 0) { | 
| -    // Since we want the closurized version of a function, we can access, both, | 
| -    // functions and fields through their implicit getter name. If the implicit | 
| -    // getter does not exist for the function, a method extractor will be | 
| -    // created. | 
| -    const Class& owner = Class::Handle(func.Owner()); | 
| -    const Instance& receiver = Instance::Handle(ctx.At(this_index)); | 
| -    return InvokeInstanceGetter(owner, receiver, lookup_name, false); | 
| -  } | 
| - | 
| -  // Fall through case: Indicate that we didn't find any function or field using | 
| -  // a special null instance. This is different from a field being null. Callers | 
| -  // make sure that this null does not leak into Dartland. | 
| -  return Object::sentinel().raw(); | 
| -} | 
| - | 
| - | 
| -static RawInstance* LookupFunctionOrFieldInLibraryHelper( | 
| -    const Library& library, | 
| -    const String& class_name, | 
| -    const String& lookup_name) { | 
| -  if (class_name.IsNull()) { | 
| -    const Instance& result = Instance::Handle( | 
| -        InvokeLibraryGetterAllowImports(library, lookup_name, false)); | 
| -    if (result.raw() != Object::sentinel().raw()) { | 
| -      return result.raw(); | 
| -    } | 
| -    const Function& func = Function::Handle( | 
| -        library.LookupLocalFunction(lookup_name)); | 
| -    if (!func.IsNull()) { | 
| -      const Function& closure_function = Function::Handle( | 
| -          func.ImplicitClosureFunction()); | 
| -      return closure_function.ImplicitStaticClosure(); | 
| -    } | 
| -  } else { | 
| -    const Class& cls = Class::Handle( | 
| -        library.LookupClass(class_name)); | 
| -    if (!cls.IsNull()) { | 
| -      return LookupStaticFunctionOrFieldInClass(cls, lookup_name); | 
| -    } | 
| -  } | 
| - | 
| -  // Fall through case: Indicate that we didn't find any function or field using | 
| -  // a special null instance. This is different from a field being null. Callers | 
| -  // make sure that this null does not leak into Dartland. | 
| -  return Object::sentinel().raw(); | 
| -} | 
| - | 
| - | 
| -static RawInstance* LookupFunctionOrFieldInLibrary(const Library& library, | 
| -                                                   const String& class_name, | 
| -                                                   const String& lookup_name) { | 
| -  Instance& result = Instance::Handle(); | 
| -  // Check current library. | 
| -  result ^= LookupFunctionOrFieldInLibraryHelper( | 
| -      library, class_name, lookup_name); | 
| -  if (result.raw() != Object::sentinel().raw()) { | 
| -    return result.raw(); | 
| -  } | 
| -  // Check all imports. | 
| -  Library& lib_it = Library::Handle(); | 
| -  for (intptr_t i = 0; i < library.num_imports(); i++) { | 
| -    lib_it ^= library.ImportLibraryAt(i); | 
| -    result ^= LookupFunctionOrFieldInLibraryHelper( | 
| -        lib_it, class_name, lookup_name); | 
| -    if (result.raw() != Object::sentinel().raw()) { | 
| -      return result.raw(); | 
| -    } | 
| -  } | 
| - | 
| -  // Fall through case: Indicate that we didn't find any function or field using | 
| -  // a special null instance. This is different from a field being null. Callers | 
| -  // make sure that this null does not leak into Dartland. | 
| -  return Object::sentinel().raw(); | 
| -} | 
| - | 
| - | 
| static RawAbstractType* InstantiateType(const AbstractType& type, | 
| const AbstractType& instantiator) { | 
| ASSERT(type.IsFinalized()); | 
| @@ -1568,90 +1350,6 @@ DEFINE_NATIVE_ENTRY(InstanceMirror_computeType, 1) { | 
| } | 
|  | 
|  | 
| -DEFINE_NATIVE_ENTRY(ClosureMirror_find_in_context, 2) { | 
| -  if (!FLAG_support_find_in_context) { | 
| -    return Object::empty_array().raw(); | 
| -  } | 
| - | 
| -  GET_NON_NULL_NATIVE_ARGUMENT(Instance, closure, arguments->NativeArgAt(0)); | 
| -  GET_NON_NULL_NATIVE_ARGUMENT(Array, lookup_parts, arguments->NativeArgAt(1)); | 
| -  ASSERT(lookup_parts.Length() >= 1 && lookup_parts.Length() <= 3); | 
| - | 
| -  if (!closure.IsClosure()) { | 
| -    const Array& result_tuple = Array::Handle(Array::New(2)); | 
| -    result_tuple.SetAt(0, Bool::False()); | 
| -    return result_tuple.raw(); | 
| -  } | 
| - | 
| -  Function& function = Function::Handle(); | 
| -  const bool callable = closure.IsCallable(&function, NULL); | 
| -  ASSERT(callable); | 
| - | 
| -  const intptr_t parts_len = lookup_parts.Length(); | 
| -  // Lookup name is always the last part. | 
| -  const String& lookup_name = String::Handle(String::RawCast( | 
| -      lookup_parts.At(parts_len - 1))); | 
| - | 
| -  String& part_name = String::Handle(); | 
| -  Class& owner = Class::Handle(function.Owner()); | 
| -  LibraryPrefix& prefix = LibraryPrefix::Handle(); | 
| -  Library& this_library = Library::Handle(owner.library()); | 
| -  Instance& result = Instance::Handle(Object::sentinel().raw()); | 
| -  if (parts_len == 1) { | 
| -    // Could be either a field in context, an instance or static field of the | 
| -    // enclosing class, or a field in the current library or any imported | 
| -    // library. | 
| -    result ^= LookupFunctionOrFieldInFunctionContext( | 
| -        function, Context::Handle(Closure::context(closure)), lookup_name); | 
| -    if (result.raw() == Object::sentinel().raw()) { | 
| -      result ^= LookupStaticFunctionOrFieldInClass(owner, lookup_name); | 
| -    } | 
| -    if (result.raw() == Object::sentinel().raw()) { | 
| -      result ^= LookupFunctionOrFieldInLibrary(this_library, | 
| -                                               part_name, | 
| -                                               lookup_name); | 
| -    } | 
| -  } else if (parts_len == 2) { | 
| -    // Could be either library.field or class.staticfield. | 
| -    part_name ^= lookup_parts.At(0); | 
| -    prefix ^= this_library.LookupLocalLibraryPrefix(part_name); | 
| -    if (prefix.IsNull()) { | 
| -      result ^= LookupFunctionOrFieldInLibrary(this_library, | 
| -                                               part_name, | 
| -                                               lookup_name); | 
| -    } else { | 
| -      result ^= LookupFunctionOrFieldInLibraryPrefix(prefix, lookup_name); | 
| -    } | 
| -  } else { | 
| -    ASSERT(parts_len == 3); | 
| -    // Can only be library.class.staticfield. | 
| -    part_name ^= lookup_parts.At(0); | 
| -    prefix ^= this_library.LookupLocalLibraryPrefix(part_name); | 
| -    if (!prefix.IsNull()) { | 
| -      part_name ^= lookup_parts.At(1); | 
| -      owner ^= prefix.LookupClass(part_name); | 
| -      if (!owner.IsNull()) { | 
| -        result ^= LookupStaticFunctionOrFieldInClass(owner, lookup_name); | 
| -      } | 
| -    } | 
| -  } | 
| - | 
| -  // We return a tuple (list) where the first slot is a boolean indicates | 
| -  // whether we found a field or function and the second slot contains the | 
| -  // result. This is needed to distinguish between not finding a field and a | 
| -  // field containing null as value. | 
| -  const Array& result_tuple = Array::Handle(Array::New(2)); | 
| -  if (result.raw() == Object::sentinel().raw()) { | 
| -    result_tuple.SetAt(0, Bool::False()); | 
| -    // No need to set the value. | 
| -  } else { | 
| -    result_tuple.SetAt(0, Bool::True()); | 
| -    result_tuple.SetAt(1, result); | 
| -  } | 
| -  return result_tuple.raw(); | 
| -} | 
| - | 
| - | 
| DEFINE_NATIVE_ENTRY(ClosureMirror_function, 1) { | 
| GET_NON_NULL_NATIVE_ARGUMENT(Instance, closure, arguments->NativeArgAt(0)); | 
| ASSERT(!closure.IsNull()); | 
|  |