Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SymTab/Indexer.h

    r4670c79 r0ac366b  
    1919#include <list>               // for list
    2020#include <string>             // for string
     21#include <functional>         // for function
    2122
    2223#include "SynTree/Visitor.h"  // for Visitor
     
    4041
    4142                struct IdData {
    42                         DeclarationWithType * id;
    43                         Expression * baseExpr; // WithExpr
     43                        DeclarationWithType * id = nullptr;
     44                        Expression * baseExpr = nullptr; // WithExpr
     45
     46                        /// non-null if this declaration is deleted
     47                        BaseSyntaxNode * deleteStmt = nullptr;
    4448
    4549                        Expression * combine() const;
     
    6266
    6367                /// looks up a specific mangled ID at the given scope
    64                 DeclarationWithType *lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const;
     68                IdData * lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope );
     69                const IdData * lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const;
    6570                /// returns true if there exists a declaration with C linkage and the given name with a different mangled name
    6671                bool hasIncompatibleCDecl( const std::string &id, const std::string &mangleName, unsigned long scope ) const;
     
    7479                TraitDecl *lookupTraitAtScope( const std::string &id, unsigned long scope ) const;
    7580
    76                 void addId( DeclarationWithType *decl, Expression * baseExpr = nullptr );
     81                typedef std::function<bool(IdData &, const std::string &)> ConflictFunction;
     82
     83                void addId( DeclarationWithType * decl, Expression * baseExpr = nullptr );
     84                void addDeletedId( DeclarationWithType * decl, BaseSyntaxNode * deleteStmt );
     85
    7786                void addType( NamedTypeDecl *decl );
    7887                void addStruct( const std::string &id );
     
    8493
    8594                /// adds all of the IDs from WithStmt exprs
    86                 void addWith( std::list< Expression * > & withExprs );
     95                void addWith( std::list< Expression * > & withExprs, BaseSyntaxNode * withStmt );
    8796
    8897                /// adds all of the members of the Aggregate (addWith helper)
    89                 void addMembers( AggregateDecl * aggr, Expression * expr );
     98                void addMembers( AggregateDecl * aggr, Expression * expr, ConflictFunction );
    9099
    91100                /// convenience function for adding a list of Ids to the indexer
     
    117126                /// Ensures that tables variable is writable (i.e. allocated, uniquely owned by this Indexer, and at the current scope)
    118127                void makeWritable();
     128
     129                /// common code for addId, addDeletedId, etc.
     130                void addId( DeclarationWithType * decl, ConflictFunction, Expression * baseExpr = nullptr, BaseSyntaxNode * deleteStmt = nullptr );
    119131        };
    120132} // namespace SymTab
Note: See TracChangeset for help on using the changeset viewer.