| Index: src/ast.h
 | 
| diff --git a/src/ast.h b/src/ast.h
 | 
| index 68cbb38e8b6902b9ed908c812113a4d6d0019205..2f2de55e67647bd976858e81200b3f715998cae6 100644
 | 
| --- a/src/ast.h
 | 
| +++ b/src/ast.h
 | 
| @@ -48,7 +48,6 @@ namespace internal {
 | 
|  
 | 
|  #define MODULE_NODE_LIST(V)                     \
 | 
|    V(ModuleLiteral)                              \
 | 
| -  V(ModuleVariable)                             \
 | 
|    V(ModulePath)                                 \
 | 
|    V(ModuleUrl)
 | 
|  
 | 
| @@ -598,14 +597,9 @@ class ModuleDeclaration FINAL : public Declaration {
 | 
|    }
 | 
|  
 | 
|   protected:
 | 
| -  ModuleDeclaration(Zone* zone,
 | 
| -                    VariableProxy* proxy,
 | 
| -                    Module* module,
 | 
| -                    Scope* scope,
 | 
| -                    int pos)
 | 
| -      : Declaration(zone, proxy, MODULE, scope, pos),
 | 
| -        module_(module) {
 | 
| -  }
 | 
| +  ModuleDeclaration(Zone* zone, VariableProxy* proxy, Module* module,
 | 
| +                    Scope* scope, int pos)
 | 
| +      : Declaration(zone, proxy, CONST, scope, pos), module_(module) {}
 | 
|  
 | 
|   private:
 | 
|    Module* module_;
 | 
| @@ -658,7 +652,7 @@ class Module : public AstNode {
 | 
|   protected:
 | 
|    Module(Zone* zone, int pos)
 | 
|        : AstNode(pos),
 | 
| -        interface_(Interface::NewModule(zone)),
 | 
| +        interface_(Interface::New(zone)),
 | 
|          body_(NULL) {}
 | 
|    Module(Zone* zone, Interface* interface, int pos, Block* body = NULL)
 | 
|        : AstNode(pos),
 | 
| @@ -681,20 +675,6 @@ class ModuleLiteral FINAL : public Module {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class ModuleVariable FINAL : public Module {
 | 
| - public:
 | 
| -  DECLARE_NODE_TYPE(ModuleVariable)
 | 
| -
 | 
| -  VariableProxy* proxy() const { return proxy_; }
 | 
| -
 | 
| - protected:
 | 
| -  inline ModuleVariable(Zone* zone, VariableProxy* proxy, int pos);
 | 
| -
 | 
| - private:
 | 
| -  VariableProxy* proxy_;
 | 
| -};
 | 
| -
 | 
| -
 | 
|  class ModulePath FINAL : public Module {
 | 
|   public:
 | 
|    DECLARE_NODE_TYPE(ModulePath)
 | 
| @@ -732,18 +712,13 @@ class ModuleStatement FINAL : public Statement {
 | 
|   public:
 | 
|    DECLARE_NODE_TYPE(ModuleStatement)
 | 
|  
 | 
| -  VariableProxy* proxy() const { return proxy_; }
 | 
|    Block* body() const { return body_; }
 | 
|  
 | 
|   protected:
 | 
| -  ModuleStatement(Zone* zone, VariableProxy* proxy, Block* body, int pos)
 | 
| -      : Statement(zone, pos),
 | 
| -        proxy_(proxy),
 | 
| -        body_(body) {
 | 
| -  }
 | 
| +  ModuleStatement(Zone* zone, Block* body, int pos)
 | 
| +      : Statement(zone, pos), body_(body) {}
 | 
|  
 | 
|   private:
 | 
| -  VariableProxy* proxy_;
 | 
|    Block* body_;
 | 
|  };
 | 
|  
 | 
| @@ -1661,9 +1636,7 @@ class VariableProxy FINAL : public Expression {
 | 
|      bit_field_ = IsResolvedField::update(bit_field_, true);
 | 
|    }
 | 
|  
 | 
| -  Interface* interface() const { return interface_; }
 | 
| -
 | 
| -  // Bind this proxy to the variable var. Interfaces must match.
 | 
| +  // Bind this proxy to the variable var.
 | 
|    void BindTo(Variable* var);
 | 
|  
 | 
|    bool UsesVariableFeedbackSlot() const {
 | 
| @@ -1688,7 +1661,7 @@ class VariableProxy FINAL : public Expression {
 | 
|    VariableProxy(Zone* zone, Variable* var, int position);
 | 
|  
 | 
|    VariableProxy(Zone* zone, const AstRawString* name, bool is_this,
 | 
| -                Interface* interface, int position);
 | 
| +                int position);
 | 
|  
 | 
|    class IsThisField : public BitField8<bool, 0, 1> {};
 | 
|    class IsAssignedField : public BitField8<bool, 1, 1> {};
 | 
| @@ -1702,7 +1675,6 @@ class VariableProxy FINAL : public Expression {
 | 
|      const AstRawString* raw_name_;  // if !is_resolved_
 | 
|      Variable* var_;                 // if is_resolved_
 | 
|    };
 | 
| -  Interface* interface_;
 | 
|  };
 | 
|  
 | 
|  
 | 
| @@ -3100,15 +3072,6 @@ class RegExpEmpty FINAL : public RegExpTree {
 | 
|  
 | 
|  
 | 
|  // ----------------------------------------------------------------------------
 | 
| -// Out-of-line inline constructors (to side-step cyclic dependencies).
 | 
| -
 | 
| -inline ModuleVariable::ModuleVariable(Zone* zone, VariableProxy* proxy, int pos)
 | 
| -    : Module(zone, proxy->interface(), pos),
 | 
| -      proxy_(proxy) {
 | 
| -}
 | 
| -
 | 
| -
 | 
| -// ----------------------------------------------------------------------------
 | 
|  // Basic visitor
 | 
|  // - leaf node visitors are abstract.
 | 
|  
 | 
| @@ -3213,10 +3176,6 @@ class AstNodeFactory FINAL BASE_EMBEDDED {
 | 
|      return new (zone_) ModuleLiteral(zone_, body, interface, pos);
 | 
|    }
 | 
|  
 | 
| -  ModuleVariable* NewModuleVariable(VariableProxy* proxy, int pos) {
 | 
| -    return new (zone_) ModuleVariable(zone_, proxy, pos);
 | 
| -  }
 | 
| -
 | 
|    ModulePath* NewModulePath(Module* origin, const AstRawString* name, int pos) {
 | 
|      return new (zone_) ModulePath(zone_, origin, name, pos);
 | 
|    }
 | 
| @@ -3258,9 +3217,8 @@ class AstNodeFactory FINAL BASE_EMBEDDED {
 | 
|      return NULL;
 | 
|    }
 | 
|  
 | 
| -  ModuleStatement* NewModuleStatement(
 | 
| -      VariableProxy* proxy, Block* body, int pos) {
 | 
| -    return new (zone_) ModuleStatement(zone_, proxy, body, pos);
 | 
| +  ModuleStatement* NewModuleStatement(Block* body, int pos) {
 | 
| +    return new (zone_) ModuleStatement(zone_, body, pos);
 | 
|    }
 | 
|  
 | 
|    ExpressionStatement* NewExpressionStatement(Expression* expression, int pos) {
 | 
| @@ -3405,9 +3363,8 @@ class AstNodeFactory FINAL BASE_EMBEDDED {
 | 
|  
 | 
|    VariableProxy* NewVariableProxy(const AstRawString* name,
 | 
|                                    bool is_this,
 | 
| -                                  Interface* interface = Interface::NewValue(),
 | 
|                                    int position = RelocInfo::kNoPosition) {
 | 
| -    return new (zone_) VariableProxy(zone_, name, is_this, interface, position);
 | 
| +    return new (zone_) VariableProxy(zone_, name, is_this, position);
 | 
|    }
 | 
|  
 | 
|    Property* NewProperty(Expression* obj, Expression* key, int pos) {
 | 
| 
 |