Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/InitTweak/InitTweak.h

    rf9cebb5 r64071c2  
    2626// helper functions for initialization
    2727namespace InitTweak {
    28         /// transform Initializer into an argument list that can be passed to a call expression
    29         std::list< Expression * > makeInitList( Initializer * init );
     28  /// transform Initializer into an argument list that can be passed to a call expression
     29  std::list< Expression * > makeInitList( Initializer * init );
    3030
    31         /// True if the resolver should try to construct objDecl
    32         bool tryConstruct( ObjectDecl * objDecl );
     31  /// True if the resolver should try to construct objDecl
     32  bool tryConstruct( ObjectDecl * objDecl );
    3333
    34         /// True if the Initializer contains designations
    35         bool isDesignated( Initializer * init );
     34  /// True if the Initializer contains designations
     35  bool isDesignated( Initializer * init );
    3636
    37   /// Non-Null if expr is a call expression whose target function is intrinsic
    38   ApplicationExpr * isIntrinsicCallExpr( Expression * expr );
     37  /// True if stmt is a call statement where the function called is intrinsic and takes one parameter.
     38  /// Intended to be used for default ctor/dtor calls, but might have use elsewhere.
     39  /// Currently has assertions that make it less than fully general.
     40  bool isInstrinsicSingleArgCallStmt( Statement * expr );
    3941
    40         /// True if stmt is a call statement where the function called is intrinsic and takes one parameter.
    41         /// Intended to be used for default ctor/dtor calls, but might have use elsewhere.
    42         /// Currently has assertions that make it less than fully general.
    43         bool isIntrinsicSingleArgCallStmt( Statement * expr );
     42  /// get the Ctor/Dtor call expression from a Statement that looks like a generated ctor/dtor call
     43  Expression * getCtorDtorCall( Statement * stmt );
    4444
    45         /// get all Ctor/Dtor call expressions from a Statement
    46         void collectCtorDtorCalls( Statement * stmt, std::list< Expression * > & matches );
     45  /// returns the name of the function being called
     46  std::string getFunctionName( Expression * expr );
    4747
    48         /// get the Ctor/Dtor call expression from a Statement that looks like a generated ctor/dtor call
    49         Expression * getCtorDtorCall( Statement * stmt );
     48  /// returns the argument to a call expression in position N indexed from 0
     49  Expression *& getCallArg( Expression * callExpr, unsigned int pos );
    5050
    51         /// returns the name of the function being called
    52         std::string getFunctionName( Expression * expr );
     51  /// returns the base type of a PointerType or ArrayType, else returns NULL
     52  Type * getPointerBase( Type * );
    5353
    54         /// returns the argument to a call expression in position N indexed from 0
    55         Expression *& getCallArg( Expression * callExpr, unsigned int pos );
    56 
    57         /// returns the base type of a PointerType or ArrayType, else returns NULL
    58         Type * getPointerBase( Type * );
    59 
    60         /// returns the argument if it is a PointerType or ArrayType, else returns NULL
    61         Type * isPointerType( Type * );
    62 
    63         /// returns true if expr is trivially a compile-time constant
    64         bool isConstExpr( Expression * expr );
    65         bool isConstExpr( Initializer * init );
    66 
    67         class InitExpander {
    68         public:
    69                 // expand by stepping through init to get each list of arguments
    70                 InitExpander( Initializer * init );
    71 
    72                 // always expand to expr
    73                 InitExpander( Expression * expr );
    74 
    75                 // iterator-like interface
    76                 std::list< Expression * > operator*();
    77                 InitExpander & operator++();
    78 
    79                 // builds statement which has the same semantics as a C-style list initializer
    80                 // (for array initializers) using callExpr as the base expression to perform initialization
    81                 Statement * buildListInit( UntypedExpr * callExpr );
    82                 void addArrayIndex( Expression * index, Expression * dimension );
    83                 void clearArrayIndices();
    84 
    85                 class ExpanderImpl;
    86         private:
    87                 std::shared_ptr< ExpanderImpl > expander;
    88                 std::list< Expression * > cur;
    89 
    90                 // invariant: list of size 2N (elements come in pairs [index, dimension])
    91                 typedef std::list< Expression * > IndexList;
    92                 IndexList indices;
    93         };
     54  /// returns the argument if it is a PointerType or ArrayType, else returns NULL
     55  Type * isPointerType( Type * );
    9456} // namespace
    9557
Note: See TracChangeset for help on using the changeset viewer.