| Index: runtime/vm/parser.h
 | 
| diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
 | 
| index 539435b11e45d372a97365d8fb769dd0a7fa8927..a696a2814e9e19fba2629635a918b847b2aa7cfa 100644
 | 
| --- a/runtime/vm/parser.h
 | 
| +++ b/runtime/vm/parser.h
 | 
| @@ -96,6 +96,7 @@ class ParsedFunction : public ZoneAllocated {
 | 
|          node_sequence_(NULL),
 | 
|          regexp_compile_data_(NULL),
 | 
|          instantiator_(NULL),
 | 
| +        function_instantiator_(NULL),
 | 
|          current_context_var_(NULL),
 | 
|          expression_temp_var_(NULL),
 | 
|          finally_return_temp_var_(NULL),
 | 
| @@ -130,9 +131,16 @@ class ParsedFunction : public ZoneAllocated {
 | 
|  
 | 
|    LocalVariable* instantiator() const { return instantiator_; }
 | 
|    void set_instantiator(LocalVariable* instantiator) {
 | 
| -    // May be NULL.
 | 
| +    ASSERT(instantiator != NULL);
 | 
|      instantiator_ = instantiator;
 | 
|    }
 | 
| +  LocalVariable* function_instantiator() const {
 | 
| +    return function_instantiator_;
 | 
| +  }
 | 
| +  void set_function_instantiator(LocalVariable* function_instantiator) {
 | 
| +    ASSERT(function_instantiator != NULL);
 | 
| +    function_instantiator_ = function_instantiator;
 | 
| +  }
 | 
|  
 | 
|    void set_default_parameter_values(ZoneGrowableArray<const Instance*>* list) {
 | 
|      default_parameter_values_ = list;
 | 
| @@ -224,6 +232,7 @@ class ParsedFunction : public ZoneAllocated {
 | 
|    SequenceNode* node_sequence_;
 | 
|    RegExpCompileData* regexp_compile_data_;
 | 
|    LocalVariable* instantiator_;
 | 
| +  LocalVariable* function_instantiator_;
 | 
|    LocalVariable* current_context_var_;
 | 
|    LocalVariable* expression_temp_var_;
 | 
|    LocalVariable* finally_return_temp_var_;
 | 
| @@ -670,7 +679,8 @@ class Parser : public ValueObject {
 | 
|    LocalVariable* LookupTypeArgumentsParameter(LocalScope* from_scope,
 | 
|                                                bool test_only);
 | 
|    void CaptureInstantiator();
 | 
| -  void CaptureFunctionInstantiator();
 | 
| +  void CaptureFunctionInstantiators();
 | 
| +  void CaptureAllInstantiators();
 | 
|    AstNode* LoadReceiver(TokenPosition token_pos);
 | 
|    AstNode* LoadFieldIfUnresolved(AstNode* node);
 | 
|    AstNode* LoadClosure(PrimaryNode* primary);
 | 
| @@ -834,6 +844,8 @@ class Parser : public ValueObject {
 | 
|    bool ParsingStaticMember() const;
 | 
|    const AbstractType* ReceiverType(const Class& cls);
 | 
|    bool IsInstantiatorRequired() const;
 | 
| +  bool AreFunctionInstantiatorsRequired() const;
 | 
| +  bool InGenericFunctionScope() const;
 | 
|    bool ResolveIdentInLocalScope(TokenPosition ident_pos,
 | 
|                                  const String& ident,
 | 
|                                  AstNode** node,
 | 
| 
 |