Changes in / [fd782b2:f006f01]


Ignore:
Location:
src
Files:
1 deleted
24 edited

Legend:

Unmodified
Added
Removed
  • src/InitTweak/InitTweak.cc

    rfd782b2 rf006f01  
    387387                        } else if ( MemberExpr * memberExpr = dynamic_cast< MemberExpr * >( func ) ) {
    388388                                return memberExpr->get_member()->get_name();
    389                         } else if ( UntypedMemberExpr * memberExpr = dynamic_cast< UntypedMemberExpr * > ( func ) ) {
    390                                 return funcName( memberExpr->get_member() );
    391389                        } else {
    392390                                assertf( false, "Unexpected expression type being called as a function in call expression" );
  • src/Parser/DeclarationNode.cc

    rfd782b2 rf006f01  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Sep 11 09:24:11 2016
    13 // Update Count     : 438
     12// Last Modified On : Fri Sep  9 23:21:47 2016
     13// Update Count     : 402
    1414//
    1515
     
    3131
    3232// These must remain in the same order as the corresponding DeclarationNode enumerations.
    33 const char *DeclarationNode::storageName[] = { "extern", "static", "auto", "register", "inline", "fortran", "_Noreturn", "_Thread_local", "NoStorageClass" };
     33const char *DeclarationNode::storageName[] = { "extern", "static", "auto", "register", "inline", "fortran", "_Noreturn", "_Thread_local", "" };
    3434const char *DeclarationNode::qualifierName[] = { "const", "restrict", "volatile", "lvalue", "_Atomic" };
    3535const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary",  };
     
    389389
    390390void DeclarationNode::checkQualifiers( const TypeData *src, const TypeData *dst ) {
    391         TypeData::Qualifiers qsrc = src->qualifiers, qdst = dst->qualifiers; // optimization
    392 
    393         if ( (qsrc & qdst).any() ) {                                            // common qualifier ?
     391        TypeData::Qualifiers qsrc = src->qualifiers, qdst = dst->qualifiers;
     392
     393        if ( (qsrc & qdst).any() ) {                                            // common bits between qualifier masks ?
    394394                for ( int i = 0; i < NoOfQualifier; i += 1 ) {  // find common qualifiers
    395395                        if ( qsrc[i] & qdst[i] ) {
    396                                 if ( ! error.empty() ) error += ", ";   // separator
    397                                 error += string( "duplicate " ) + DeclarationNode::qualifierName[i];
     396                                error += string(error.empty() ? "" : ", ") + "duplicate " + DeclarationNode::qualifierName[i];
    398397                        } // if
    399398                } // for
    400399        } // if
    401400} // DeclarationNode::checkQualifiers
    402 
    403 void DeclarationNode::checkStorageClasses( DeclarationNode *q ) {
    404         if ( storageClass != NoStorageClass && q->storageClass != NoStorageClass ) {
    405                 if ( ! error.empty() ) error += ", ";                   // separator
    406                 if ( storageClass == q->storageClass ) {                // duplicate qualifier
    407                         error += string( "duplicate " ) + storageName[ storageClass ];
    408                 } else {                                                                                // only one storage class
    409                         error += string( "conflicting " ) + storageName[ storageClass ] + " & " + storageName[ q->storageClass ];
    410                         q->storageClass = storageClass;                         // FIX ERROR
    411                 } // if
    412                 if ( ! q->error.empty() ) error += ", " + q->error;     // separator
    413         } else {
    414                 if ( ! error.empty() ) {
    415                         if ( ! q->error.empty() ) error += ", " + q->error; // separator
    416                 } else if ( ! q->error.empty() ) error += q->error;
    417         } // if
    418 } // DeclarationNode::copyStorageClasses
    419 
    420 DeclarationNode *DeclarationNode::copyStorageClasses( DeclarationNode *q ) {
    421         isInline = isInline | q->isInline;
    422         isNoreturn = isNoreturn | q->isNoreturn;
    423         // do not overwrite an existing value with NoStorageClass
    424         if ( q->storageClass != NoStorageClass ) {
    425                 assert( storageClass == NoStorageClass || storageClass == q->storageClass );
    426                 storageClass = q->storageClass;
    427         } // if
    428         return this;
    429 } // DeclarationNode::copyStorageClasses
    430401
    431402DeclarationNode *DeclarationNode::addQualifiers( DeclarationNode *q ) {
    432403        if ( q ) {
    433                 checkStorageClasses( q );
    434                 copyStorageClasses( q );
     404                copyStorageClasses(q);
    435405                if ( q->type ) {
    436406                        if ( ! type ) {
     
    459429        return this;
    460430}
     431
     432DeclarationNode *DeclarationNode::copyStorageClasses( DeclarationNode *q ) {
     433        isInline = isInline || q->isInline;
     434        isNoreturn = isNoreturn || q->isNoreturn;
     435        if ( storageClass == NoStorageClass ) {
     436                storageClass = q->storageClass;
     437        } else if ( q->storageClass != NoStorageClass ) {
     438                if ( storageClass == q->storageClass ) {
     439                        q->error += string( "duplicate " ) + storageName[ storageClass ];
     440                } else {                                                                                // can only have one storage class
     441                        q->error += string( "multiple " ) + storageName[ storageClass ] + " & " + storageName[ q->storageClass ];
     442                } // if
     443        } // if
     444        if ( ! q->error.empty() ) {
     445                error += (! error.empty() ? ", " : "") + q->error;
     446        } // if
     447        return this;
     448} // DeclarationNode::copyStorageClasses
    461449
    462450static void addTypeToType( TypeData *&src, TypeData *&dst ) {
     
    516504DeclarationNode *DeclarationNode::addType( DeclarationNode *o ) {
    517505        if ( o ) {
    518                 checkStorageClasses( o );
    519506                copyStorageClasses( o );
    520507                if ( o->type ) {
     
    764751        } // if
    765752        newnode->type->forall = maybeClone( type->forall );
    766         assert( storageClass == NoStorageClass );
    767753        newnode->copyStorageClasses( this );
    768754        newnode->name = assign_strptr( newName );
     
    805791        DeclarationNode *newnode = new DeclarationNode;
    806792        newnode->type = maybeClone( type );
    807         assert( storageClass == NoStorageClass );
    808793        newnode->copyStorageClasses( this );
    809794        newnode->name = assign_strptr( newName );
     
    813798DeclarationNode *DeclarationNode::cloneType( DeclarationNode *o ) {
    814799        if ( o ) {
    815                 assert( storageClass == NoStorageClass );
    816800                o->copyStorageClasses( this );
    817801                if ( type ) {
  • src/Parser/ParseNode.h

    rfd782b2 rf006f01  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Sep 10 17:14:37 2016
    13 // Update Count     : 589
     12// Last Modified On : Thu Sep  8 21:58:06 2016
     13// Update Count     : 587
    1414//
    1515
     
    4141  public:
    4242        ParseNode() {};
    43         ParseNode( const std::string * name ) : name( * name ) { assert( false ); delete name; }
     43        ParseNode( const std::string *name ) : name( *name ) { assert( false ); delete name; }
    4444        ParseNode( const std::string &name ) : name( name ) { assert( false ); }
    4545        virtual ~ParseNode() { delete next; };
    46         virtual ParseNode * clone() const = 0;
    47 
    48         ParseNode * get_next() const { return next; }
    49         ParseNode * set_next( ParseNode * newlink ) { next = newlink; return this; }
    50         ParseNode * get_last() {
    51                 ParseNode * current;
     46        virtual ParseNode *clone() const = 0;
     47
     48        ParseNode *get_next() const { return next; }
     49        ParseNode *set_next( ParseNode *newlink ) { next = newlink; return this; }
     50        ParseNode *get_last() {
     51                ParseNode *current;
    5252                for ( current = this; current->get_next() != 0; current = current->get_next() );
    5353                return current;
    5454        }
    55         ParseNode * set_last( ParseNode * newlast ) {
     55        ParseNode *set_last( ParseNode *newlast ) {
    5656                if ( newlast != 0 ) get_last()->set_next( newlast );
    5757                return this;
     
    6666        static int indent_by;
    6767
    68         ParseNode * next = nullptr;
     68        ParseNode *next = nullptr;
    6969        std::string name;
    7070}; // ParseNode
     
    7474class InitializerNode : public ParseNode {
    7575  public:
    76         InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode * des = 0 );
    77         InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode * des = 0 );
     76        InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
     77        InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
    7878        ~InitializerNode();
    79         virtual InitializerNode * clone() const { assert( false ); return nullptr; }
    80 
    81         ExpressionNode * get_expression() const { return expr; }
    82 
    83         InitializerNode * set_designators( ExpressionNode * des ) { designator = des; return this; }
    84         ExpressionNode * get_designators() const { return designator; }
    85 
    86         InitializerNode * set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
     79        virtual InitializerNode *clone() const { assert( false ); return nullptr; }
     80
     81        ExpressionNode *get_expression() const { return expr; }
     82
     83        InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
     84        ExpressionNode *get_designators() const { return designator; }
     85
     86        InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
    8787        bool get_maybeConstructed() const { return maybeConstructed; }
    8888
    89         InitializerNode * next_init() const { return kids; }
     89        InitializerNode *next_init() const { return kids; }
    9090
    9191        void print( std::ostream &os, int indent = 0 ) const;
    9292        void printOneLine( std::ostream & ) const;
    9393
    94         virtual Initializer * build() const;
     94        virtual Initializer *build() const;
    9595  private:
    96         ExpressionNode * expr;
     96        ExpressionNode *expr;
    9797        bool aggregate;
    98         ExpressionNode * designator;                                            // may be list
    99         InitializerNode * kids;
     98        ExpressionNode *designator;                                                     // may be list
     99        InitializerNode *kids;
    100100        bool maybeConstructed;
    101101}; // InitializerNode
     
    106106  public:
    107107        ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {}
    108         ExpressionNode( Expression * expr, const std::string * name ) : ParseNode( name ), expr( expr ) {}
     108        ExpressionNode( Expression * expr, const std::string *name ) : ParseNode( name ), expr( expr ) {}
    109109        ExpressionNode( const ExpressionNode &other );
    110110        virtual ~ExpressionNode() {}
    111         virtual ExpressionNode * clone() const { return expr ? new ExpressionNode( expr->clone() ) : nullptr; }
     111        virtual ExpressionNode *clone() const { return expr ? new ExpressionNode( expr->clone() ) : nullptr; }
    112112
    113113        bool get_extension() const { return extension; }
    114         ExpressionNode * set_extension( bool exten ) { extension = exten; return this; }
     114        ExpressionNode *set_extension( bool exten ) { extension = exten; return this; }
    115115
    116116        void print( std::ostream &os, int indent = 0 ) const {}
     
    122122        }
    123123
    124         Expression * build() const { return const_cast<ExpressionNode*>(this)->expr.release(); }
     124        Expression *build() const { return const_cast<ExpressionNode*>(this)->expr.release(); }
    125125  private:
    126126        bool extension = false;
     
    130130template< typename T >
    131131struct maybeBuild_t< Expression, T > {
    132         static inline Expression * doit( const T * orig ) {
     132        static inline Expression * doit( const T *orig ) {
    133133                if ( orig ) {
    134                         Expression * p = orig->build();
     134                        Expression *p = orig->build();
    135135                        p->set_extension( orig->get_extension() );
    136136                        return p;
     
    156156};
    157157
    158 Expression * build_constantInteger( const std::string &str );
    159 Expression * build_constantFloat( const std::string &str );
    160 Expression * build_constantChar( const std::string &str );
    161 ConstantExpr * build_constantStr( const std::string &str );
    162 
    163 NameExpr * build_varref( const std::string * name, bool labelp = false );
    164 Expression * build_typevalue( DeclarationNode * decl );
    165 
    166 Expression * build_cast( DeclarationNode * decl_node, ExpressionNode * expr_node );
    167 Expression * build_fieldSel( ExpressionNode * expr_node, Expression * member );
    168 Expression * build_pfieldSel( ExpressionNode * expr_node, Expression * member );
    169 Expression * build_addressOf( ExpressionNode * expr_node );
    170 Expression * build_sizeOfexpr( ExpressionNode * expr_node );
    171 Expression * build_sizeOftype( DeclarationNode * decl_node );
    172 Expression * build_alignOfexpr( ExpressionNode * expr_node );
    173 Expression * build_alignOftype( DeclarationNode * decl_node );
    174 Expression * build_offsetOf( DeclarationNode * decl_node, NameExpr * member );
    175 Expression * build_and( ExpressionNode * expr_node1, ExpressionNode * expr_node2 );
    176 Expression * build_and_or( ExpressionNode * expr_node1, ExpressionNode * expr_node2, bool kind );
    177 Expression * build_unary_val( OperKinds op, ExpressionNode * expr_node );
    178 Expression * build_unary_ptr( OperKinds op, ExpressionNode * expr_node );
    179 Expression * build_binary_val( OperKinds op, ExpressionNode * expr_node1, ExpressionNode * expr_node2 );
    180 Expression * build_binary_ptr( OperKinds op, ExpressionNode * expr_node1, ExpressionNode * expr_node2 );
    181 Expression * build_cond( ExpressionNode * expr_node1, ExpressionNode * expr_node2, ExpressionNode * expr_node3 );
    182 Expression * build_comma( ExpressionNode * expr_node1, ExpressionNode * expr_node2 );
    183 Expression * build_attrexpr( NameExpr * var, ExpressionNode * expr_node );
    184 Expression * build_attrtype( NameExpr * var, DeclarationNode * decl_node );
    185 Expression * build_tuple( ExpressionNode * expr_node = 0 );
    186 Expression * build_func( ExpressionNode * function, ExpressionNode * expr_node );
    187 Expression * build_range( ExpressionNode * low, ExpressionNode * high );
    188 Expression * build_asmexpr( ExpressionNode * inout, ConstantExpr * constraint, ExpressionNode * operand );
    189 Expression * build_valexpr( StatementNode * s );
    190 Expression * build_compoundLiteral( DeclarationNode * decl_node, InitializerNode * kids );
     158Expression *build_constantInteger( const std::string &str );
     159Expression *build_constantFloat( const std::string &str );
     160Expression *build_constantChar( const std::string &str );
     161ConstantExpr *build_constantStr( const std::string &str );
     162
     163NameExpr *build_varref( const std::string *name, bool labelp = false );
     164Expression *build_typevalue( DeclarationNode *decl );
     165
     166Expression *build_cast( DeclarationNode * decl_node, ExpressionNode *expr_node );
     167Expression *build_fieldSel( ExpressionNode *expr_node, Expression *member );
     168Expression *build_pfieldSel( ExpressionNode *expr_node, Expression *member );
     169Expression *build_addressOf( ExpressionNode *expr_node );
     170Expression *build_sizeOfexpr( ExpressionNode *expr_node );
     171Expression *build_sizeOftype( DeclarationNode *decl_node );
     172Expression *build_alignOfexpr( ExpressionNode *expr_node );
     173Expression *build_alignOftype( DeclarationNode *decl_node );
     174Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member );
     175Expression *build_and( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
     176Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind );
     177Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node );
     178Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node );
     179Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
     180Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
     181Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 );
     182Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
     183Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node );
     184Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node );
     185Expression *build_tuple( ExpressionNode * expr_node = 0 );
     186Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node );
     187Expression *build_range( ExpressionNode * low, ExpressionNode *high );
     188Expression *build_asmexpr( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand );
     189Expression *build_valexpr( StatementNode *s );
     190Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids );
    191191
    192192//##############################################################################
     
    204204        enum BuiltinType { Valist };
    205205
    206         static const char * qualifierName[];
    207         static const char * storageName[];
    208         static const char * basicTypeName[];
    209         static const char * modifierName[];
    210         static const char * aggregateName[];
    211         static const char * typeClassName[];
    212         static const char * builtinTypeName[];
    213 
    214         static DeclarationNode * newFunction( std::string * name, DeclarationNode * ret, DeclarationNode * param, StatementNode * body, bool newStyle = false );
    215         static DeclarationNode * newQualifier( Qualifier );
    216         static DeclarationNode * newForall( DeclarationNode *);
    217         static DeclarationNode * newStorageClass( StorageClass );
    218         static DeclarationNode * newBasicType( BasicType );
    219         static DeclarationNode * newModifier( Modifier );
    220         static DeclarationNode * newBuiltinType( BuiltinType );
    221         static DeclarationNode * newFromTypedef( std::string *);
    222         static DeclarationNode * newAggregate( Aggregate kind, const std::string * name, ExpressionNode * actuals, DeclarationNode * fields, bool body );
    223         static DeclarationNode * newEnum( std::string * name, DeclarationNode * constants );
    224         static DeclarationNode * newEnumConstant( std::string * name, ExpressionNode * constant );
    225         static DeclarationNode * newName( std::string *);
    226         static DeclarationNode * newFromTypeGen( std::string *, ExpressionNode * params );
    227         static DeclarationNode * newTypeParam( TypeClass, std::string *);
    228         static DeclarationNode * newTrait( std::string * name, DeclarationNode * params, DeclarationNode * asserts );
    229         static DeclarationNode * newTraitUse( std::string * name, ExpressionNode * params );
    230         static DeclarationNode * newTypeDecl( std::string * name, DeclarationNode * typeParams );
    231         static DeclarationNode * newPointer( DeclarationNode * qualifiers );
    232         static DeclarationNode * newArray( ExpressionNode * size, DeclarationNode * qualifiers, bool isStatic );
    233         static DeclarationNode * newVarArray( DeclarationNode * qualifiers );
    234         static DeclarationNode * newBitfield( ExpressionNode * size );
    235         static DeclarationNode * newTuple( DeclarationNode * members );
    236         static DeclarationNode * newTypeof( ExpressionNode * expr );
    237         static DeclarationNode * newAttr( std::string *, ExpressionNode * expr );
    238         static DeclarationNode * newAttr( std::string *, DeclarationNode * type );
     206        static const char *qualifierName[];
     207        static const char *storageName[];
     208        static const char *basicTypeName[];
     209        static const char *modifierName[];
     210        static const char *aggregateName[];
     211        static const char *typeClassName[];
     212        static const char *builtinTypeName[];
     213
     214        static DeclarationNode *newFunction( std::string *name, DeclarationNode *ret, DeclarationNode *param, StatementNode *body, bool newStyle = false );
     215        static DeclarationNode *newQualifier( Qualifier );
     216        static DeclarationNode *newForall( DeclarationNode *);
     217        static DeclarationNode *newStorageClass( StorageClass );
     218        static DeclarationNode *newBasicType( BasicType );
     219        static DeclarationNode *newModifier( Modifier );
     220        static DeclarationNode *newBuiltinType( BuiltinType );
     221        static DeclarationNode *newFromTypedef( std::string *);
     222        static DeclarationNode *newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields, bool body );
     223        static DeclarationNode *newEnum( std::string *name, DeclarationNode *constants );
     224        static DeclarationNode *newEnumConstant( std::string *name, ExpressionNode *constant );
     225        static DeclarationNode *newName( std::string *);
     226        static DeclarationNode *newFromTypeGen( std::string *, ExpressionNode *params );
     227        static DeclarationNode *newTypeParam( TypeClass, std::string *);
     228        static DeclarationNode *newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts );
     229        static DeclarationNode *newTraitUse( std::string *name, ExpressionNode *params );
     230        static DeclarationNode *newTypeDecl( std::string *name, DeclarationNode *typeParams );
     231        static DeclarationNode *newPointer( DeclarationNode *qualifiers );
     232        static DeclarationNode *newArray( ExpressionNode *size, DeclarationNode *qualifiers, bool isStatic );
     233        static DeclarationNode *newVarArray( DeclarationNode *qualifiers );
     234        static DeclarationNode *newBitfield( ExpressionNode *size );
     235        static DeclarationNode *newTuple( DeclarationNode *members );
     236        static DeclarationNode *newTypeof( ExpressionNode *expr );
     237        static DeclarationNode *newAttr( std::string *, ExpressionNode *expr );
     238        static DeclarationNode *newAttr( std::string *, DeclarationNode *type );
    239239
    240240        DeclarationNode();
    241241        ~DeclarationNode();
    242         DeclarationNode * clone() const;
    243 
    244         DeclarationNode * addQualifiers( DeclarationNode *);
     242        DeclarationNode *clone() const;
     243
     244        DeclarationNode *addQualifiers( DeclarationNode *);
    245245        void checkQualifiers( const TypeData *, const TypeData * );
    246         void checkStorageClasses( DeclarationNode *q );
    247         DeclarationNode * copyStorageClasses( DeclarationNode *);
    248         DeclarationNode * addType( DeclarationNode *);
    249         DeclarationNode * addTypedef();
    250         DeclarationNode * addAssertions( DeclarationNode *);
    251         DeclarationNode * addName( std::string *);
    252         DeclarationNode * addBitfield( ExpressionNode * size );
    253         DeclarationNode * addVarArgs();
    254         DeclarationNode * addFunctionBody( StatementNode * body );
    255         DeclarationNode * addOldDeclList( DeclarationNode * list );
    256         DeclarationNode * addPointer( DeclarationNode * qualifiers );
    257         DeclarationNode * addArray( DeclarationNode * array );
    258         DeclarationNode * addNewPointer( DeclarationNode * pointer );
    259         DeclarationNode * addNewArray( DeclarationNode * array );
    260         DeclarationNode * addParamList( DeclarationNode * list );
    261         DeclarationNode * addIdList( DeclarationNode * list ); // old-style functions
    262         DeclarationNode * addInitializer( InitializerNode * init );
    263 
    264         DeclarationNode * cloneType( std::string * newName );
    265         DeclarationNode * cloneType( DeclarationNode * existing );
    266         DeclarationNode * cloneType( int ) { return cloneType( ( std::string *)0 ); }
    267         DeclarationNode * cloneBaseType( std::string * newName );
    268         DeclarationNode * cloneBaseType( DeclarationNode * newdecl );
    269 
    270         DeclarationNode * appendList( DeclarationNode * node ) {
     246        DeclarationNode *copyStorageClasses( DeclarationNode *);
     247        DeclarationNode *addType( DeclarationNode *);
     248        DeclarationNode *addTypedef();
     249        DeclarationNode *addAssertions( DeclarationNode *);
     250        DeclarationNode *addName( std::string *);
     251        DeclarationNode *addBitfield( ExpressionNode *size );
     252        DeclarationNode *addVarArgs();
     253        DeclarationNode *addFunctionBody( StatementNode *body );
     254        DeclarationNode *addOldDeclList( DeclarationNode *list );
     255        DeclarationNode *addPointer( DeclarationNode *qualifiers );
     256        DeclarationNode *addArray( DeclarationNode *array );
     257        DeclarationNode *addNewPointer( DeclarationNode *pointer );
     258        DeclarationNode *addNewArray( DeclarationNode *array );
     259        DeclarationNode *addParamList( DeclarationNode *list );
     260        DeclarationNode *addIdList( DeclarationNode *list ); // old-style functions
     261        DeclarationNode *addInitializer( InitializerNode *init );
     262
     263        DeclarationNode *cloneType( std::string *newName );
     264        DeclarationNode *cloneType( DeclarationNode *existing );
     265        DeclarationNode *cloneType( int ) { return cloneType( ( std::string *)0 ); }
     266        DeclarationNode *cloneBaseType( std::string *newName );
     267        DeclarationNode *cloneBaseType( DeclarationNode *newdecl );
     268
     269        DeclarationNode *appendList( DeclarationNode *node ) {
    271270                return (DeclarationNode *)set_last( node );
    272271        }
     
    275274        void printList( std::ostream &os, int indent = 0 ) const;
    276275
    277         Declaration * build() const;
    278         ::Type * buildType() const;
     276        Declaration *build() const;
     277        ::Type *buildType() const;
    279278
    280279        bool get_hasEllipsis() const;
    281280        const std::string &get_name() const { return name; }
    282281        LinkageSpec::Spec get_linkage() const { return linkage; }
    283         DeclarationNode * extractAggregate() const;
     282        DeclarationNode *extractAggregate() const;
    284283        bool has_enumeratorValue() const { return (bool)enumeratorValue; }
    285         ExpressionNode * consume_enumeratorValue() const { return const_cast<DeclarationNode*>(this)->enumeratorValue.release(); }
     284        ExpressionNode *consume_enumeratorValue() const { return const_cast<DeclarationNode*>(this)->enumeratorValue.release(); }
    286285
    287286        bool get_extension() const { return extension; }
    288         DeclarationNode * set_extension( bool exten ) { extension = exten; return this; }
     287        DeclarationNode *set_extension( bool exten ) { extension = exten; return this; }
    289288  public:
    290289        // StorageClass buildStorageClass() const;
     
    307306        BuiltinType builtin;
    308307
    309         TypeData * type;
     308        TypeData *type;
    310309        std::string name;
    311310        // std::list< StorageClass > storageClasses;
     
    313312        bool isInline, isNoreturn;
    314313        std::list< std::string > attributes;
    315         ExpressionNode * bitfieldWidth;
     314        ExpressionNode *bitfieldWidth;
    316315        std::unique_ptr<ExpressionNode> enumeratorValue;
    317         InitializerNode * initializer;
     316        InitializerNode *initializer;
    318317        bool hasEllipsis;
    319318        LinkageSpec::Spec linkage;
     
    324323}; // DeclarationNode
    325324
    326 Type * buildType( TypeData * type );
     325Type *buildType( TypeData *type );
    327326//Type::Qualifiers buildQualifiers( const TypeData::Qualifiers & qualifiers );
    328327
    329 static inline Type * maybeMoveBuildType( const DeclarationNode * orig ) {
     328static inline Type * maybeMoveBuildType( const DeclarationNode *orig ) {
    330329        Type* ret = orig ? orig->buildType() : nullptr;
    331330        delete orig;
     
    338337  public:
    339338        StatementNode() { stmt = nullptr; }
    340         StatementNode( Statement * stmt ) : stmt( stmt ) {}
    341         StatementNode( DeclarationNode * decl );
     339        StatementNode( Statement *stmt ) : stmt( stmt ) {}
     340        StatementNode( DeclarationNode *decl );
    342341        virtual ~StatementNode() {}
    343342
    344         virtual StatementNode * clone() const final { assert( false ); return nullptr; }
    345         Statement * build() const { return const_cast<StatementNode*>(this)->stmt.release(); }
    346 
    347         virtual StatementNode * add_label( const std::string * name ) {
    348                 stmt->get_labels().emplace_back( * name );
     343        virtual StatementNode *clone() const final { assert( false ); return nullptr; }
     344        Statement *build() const { return const_cast<StatementNode*>(this)->stmt.release(); }
     345
     346        virtual StatementNode *add_label( const std::string * name ) {
     347                stmt->get_labels().emplace_back( *name );
    349348                delete name;
    350349                return this;
    351350        }
    352351
    353         virtual StatementNode * append_last_case( StatementNode * );
     352        virtual StatementNode *append_last_case( StatementNode * );
    354353
    355354        virtual void print( std::ostream &os, int indent = 0 ) {}
     
    359358}; // StatementNode
    360359
    361 Statement * build_expr( ExpressionNode * ctl );
     360Statement *build_expr( ExpressionNode *ctl );
    362361
    363362struct ForCtl {
    364         ForCtl( ExpressionNode * expr, ExpressionNode * condition, ExpressionNode * change ) :
     363        ForCtl( ExpressionNode *expr, ExpressionNode *condition, ExpressionNode *change ) :
    365364                init( new StatementNode( build_expr( expr ) ) ), condition( condition ), change( change ) {}
    366         ForCtl( DeclarationNode * decl, ExpressionNode * condition, ExpressionNode * change ) :
     365        ForCtl( DeclarationNode *decl, ExpressionNode *condition, ExpressionNode *change ) :
    367366                init( new StatementNode( decl ) ), condition( condition ), change( change ) {}
    368367
    369         StatementNode * init;
    370         ExpressionNode * condition;
    371         ExpressionNode * change;
     368        StatementNode *init;
     369        ExpressionNode *condition;
     370        ExpressionNode *change;
    372371};
    373372
    374 Statement * build_if( ExpressionNode * ctl, StatementNode * then_stmt, StatementNode * else_stmt );
    375 Statement * build_switch( ExpressionNode * ctl, StatementNode * stmt );
    376 Statement * build_case( ExpressionNode * ctl );
    377 Statement * build_default();
    378 Statement * build_while( ExpressionNode * ctl, StatementNode * stmt, bool kind = false );
    379 Statement * build_for( ForCtl * forctl, StatementNode * stmt );
    380 Statement * build_branch( BranchStmt::Type kind );
    381 Statement * build_branch( std::string * identifier, BranchStmt::Type kind );
    382 Statement * build_computedgoto( ExpressionNode * ctl );
    383 Statement * build_return( ExpressionNode * ctl );
    384 Statement * build_throw( ExpressionNode * ctl );
    385 Statement * build_try( StatementNode * try_stmt, StatementNode * catch_stmt, StatementNode * finally_stmt );
    386 Statement * build_catch( DeclarationNode * decl, StatementNode * stmt, bool catchAny = false );
    387 Statement * build_finally( StatementNode * stmt );
    388 Statement * build_compound( StatementNode * first );
    389 Statement * build_asmstmt( bool voltile, ConstantExpr * instruction, ExpressionNode * output = 0, ExpressionNode * input = 0, ExpressionNode * clobber = 0, LabelNode * gotolabels = 0 );
     373Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt );
     374Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt );
     375Statement *build_case( ExpressionNode *ctl );
     376Statement *build_default();
     377Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind = false );
     378Statement *build_for( ForCtl *forctl, StatementNode *stmt );
     379Statement *build_branch( BranchStmt::Type kind );
     380Statement *build_branch( std::string *identifier, BranchStmt::Type kind );
     381Statement *build_computedgoto( ExpressionNode *ctl );
     382Statement *build_return( ExpressionNode *ctl );
     383Statement *build_throw( ExpressionNode *ctl );
     384Statement *build_try( StatementNode *try_stmt, StatementNode *catch_stmt, StatementNode *finally_stmt );
     385Statement *build_catch( DeclarationNode *decl, StatementNode *stmt, bool catchAny = false );
     386Statement *build_finally( StatementNode *stmt );
     387Statement *build_compound( StatementNode *first );
     388Statement *build_asmstmt( bool voltile, ConstantExpr *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ExpressionNode *clobber = 0, LabelNode *gotolabels = 0 );
    390389
    391390//##############################################################################
    392391
    393392template< typename SynTreeType, typename NodeType >
    394 void buildList( const NodeType * firstNode, std::list< SynTreeType * > &outputList ) {
     393void buildList( const NodeType *firstNode, std::list< SynTreeType * > &outputList ) {
    395394        SemanticError errors;
    396395        std::back_insert_iterator< std::list< SynTreeType * > > out( outputList );
    397         const NodeType * cur = firstNode;
     396        const NodeType *cur = firstNode;
    398397
    399398        while ( cur ) {
    400399                try {
    401 //                      SynTreeType * result = dynamic_cast< SynTreeType * >( maybeBuild< typename std::result_of< decltype(&NodeType::build)(NodeType)>::type >( cur ) );
    402                         SynTreeType * result = dynamic_cast< SynTreeType * >( maybeBuild< typename std::pointer_traits< decltype(cur->build())>::element_type >( cur ) );
     400//                      SynTreeType *result = dynamic_cast< SynTreeType * >( maybeBuild< typename std::result_of< decltype(&NodeType::build)(NodeType)>::type >( cur ) );
     401                        SynTreeType *result = dynamic_cast< SynTreeType * >( maybeBuild< typename std::pointer_traits< decltype(cur->build())>::element_type >( cur ) );
    403402                        if ( result ) {
    404                                 * out++ = result;
     403                                *out++ = result;
    405404                        } // if
    406405                } catch( SemanticError &e ) {
     
    415414
    416415// in DeclarationNode.cc
    417 void buildList( const DeclarationNode * firstNode, std::list< Declaration * > &outputList );
    418 void buildList( const DeclarationNode * firstNode, std::list< DeclarationWithType * > &outputList );
    419 void buildTypeList( const DeclarationNode * firstNode, std::list< Type * > &outputList );
     416void buildList( const DeclarationNode *firstNode, std::list< Declaration * > &outputList );
     417void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType * > &outputList );
     418void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList );
    420419
    421420template< typename SynTreeType, typename NodeType >
    422 void buildMoveList( const NodeType * firstNode, std::list< SynTreeType * > &outputList ) {
     421void buildMoveList( const NodeType *firstNode, std::list< SynTreeType * > &outputList ) {
    423422        buildList(firstNode, outputList);
    424423        delete firstNode;
  • src/Parser/TypeData.h

    rfd782b2 rf006f01  
    1010// Created On       : Sat May 16 15:18:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Sep 10 09:42:54 2016
    13 // Update Count     : 118
     12// Last Modified On : Fri Sep  9 23:20:55 2016
     13// Update Count     : 117
    1414//
    1515
     
    8989        typedef std::bitset< DeclarationNode::NoOfQualifier > Qualifiers;
    9090        Qualifiers qualifiers;
    91         typedef std::bitset< DeclarationNode::NoStorageClass > StorageClasses;
    92         StorageClasses storageclasses;
    9391        DeclarationNode * forall;
    9492
  • src/Parser/parser.cc

    rfd782b2 rf006f01  
    59435943/* Line 1806 of yacc.c  */
    59445944#line 831 "parser.yy"
    5945     { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn), true ) ); }
     5945    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); }
    59465946    break;
    59475947
  • src/Parser/parser.yy

    rfd782b2 rf006f01  
    829829                { $$ = new StatementNode( build_while( $3, $5 ) ); }
    830830        | DO statement WHILE '(' comma_expression ')' ';'
    831                 { $$ = new StatementNode( build_while( $5, $2, true ) ); }
     831                { $$ = new StatementNode( build_while( $5, $2 ) ); }
    832832        | FOR '(' push for_control_expression ')' statement
    833833                { $$ = new StatementNode( build_for( $4, $6 ) ); }
  • src/examples/gc_no_raii/bug-repro/field.c

    rfd782b2 rf006f01  
    6262{
    6363        struct gc_object_header* object;
    64         #ifndef NDEBUG
     64        #if _DEBUG
    6565                intptr_t lower_limit;
    6666                intptr_t upper_limit;
     
    7171                gc_pool_object_iterator* const this,
    7272                void* start_object
    73                 #ifndef NDEBUG
     73                #if _DEBUG
    7474                        , intptr_t pool_start
    7575                        , intptr_t pool_end
  • src/examples/gc_no_raii/src/gcpointers.c

    rfd782b2 rf006f01  
    1414                gc_object_header* obj = gc_get_object_for_ref(gc_get_state(), (void*)this);
    1515                check(obj);
    16                 check(is_valid(obj));
    17                 check(gc_is_managed(this) == gc_is_managed(obj->type_chain) || !obj->type_chain);
     16                check(gc_obj_is_valide(obj));
     17                check(gc_is_managed(this) == gc_is_managed(obj->type_chain) || obj->type_chain == NULL);
    1818                this->next = obj->type_chain;
    1919                obj->type_chain = this;
    20                 check(is_valid(obj));
     20                check(obj->is_valide());
    2121        }
    2222        else
     
    2424                gc_object_header* obj = gc_get_object_ptr((void*)this->ptr);
    2525                check(obj);
    26                 check(is_valid(obj));
    27                 check(!obj->root_chain || this->ptr == obj->root_chain->ptr);
    28                 check(!obj->root_chain || gc_is_managed(this) == gc_is_managed(obj->root_chain));
     26                check(gc_obj_is_valide(obj));
     27                check(gc_is_managed(this) == gc_is_managed(obj->root_chain) || obj->root_chain == NULL);
    2928                this->next = obj->root_chain;
    3029                obj->root_chain = this;
    31                 check(is_valid(obj));
     30                check(gc_obj_is_valide(obj));
    3231        }
    3332}
     
    7069}
    7170
    72 gcpointer_t ?=?(gcpointer_t* this, gcpointer_t rhs)
     71gcpointer_t* gcpointer_assign(gcpointer_t* this, gcpointer_t* rhs)
    7372{
    74         unregister_ptr(this);
    75         this->ptr = rhs.ptr;
    76         register_ptr(this);
     73        if(this != rhs)
     74        {
     75                unregister_ptr(this);
    7776
    78         return *this;
     77                this->ptr = rhs->ptr;
     78
     79                register_ptr(this);
     80        }
     81
     82        return this;
    7983}
    8084
    8185//Logical operators
    82 bool gcpointer_equal(const gcpointer_t* this, const gcpointer_t* rhs)
     86bool gcpointer_equal(gcpointer_t* this, gcpointer_t* rhs)
    8387{
    8488        return this->ptr == rhs->ptr;
    8589}
    8690
    87 bool gcpointer_not_equal(const gcpointer_t* this, const gcpointer_t* rhs)
     91bool gcpointer_not_equal(gcpointer_t* this, gcpointer_t* rhs)
    8892{
    8993        return this->ptr != rhs->ptr;
    9094}
    9195
    92 bool gcpointer_null(const gcpointer_t* this)
     96bool gcpointer_null(gcpointer_t* this)
    9397{
    9498        return this->ptr == (intptr_t)NULL;
    9599}
    96 
    97 #ifndef NDEBUG
    98         bool is_valid(const gcpointer_t* this) {
    99                 if(gcpointer_null(this)) return true;
    100 
    101                 gc_object_header* obj = gc_get_object_ptr((void*)this->ptr);
    102                 check(obj);
    103                 check(is_valid(obj));
    104                 check(!obj->root_chain || this->ptr == obj->root_chain->ptr);
    105 
    106                 if( !gc_is_managed(this))
    107                 {
    108                         check( !(this->next) || this->ptr == this->next->ptr );
    109                 }
    110 
    111                 return true;
    112         }
    113 #endif
    114100
    115101forall(otype T) void ?{}(gcpointer(T)* this) {
     
    121107}
    122108
    123 forall(otype T) void ?{}(gcpointer(T)* this, gcpointer(T) other) {
    124         (&this->internal) { other.internal };
     109forall(otype T) void ?{}(gcpointer(T)* this, gcpointer(T)* other) {
     110        (&this->internal) { other->internal };
    125111}
    126112
     
    129115}
    130116
    131 forall(otype T) gcpointer(T) ?=?(gcpointer(T)* this, gcpointer(T) rhs) {
    132         this->internal = rhs.internal;
    133         return *this;
    134 }
     117// forall(otype T) gcpointer(T) ?=?(gcpointer(T) this, gcpointer(T) rhs);
    135118//
    136119// forall(otype T) T *?(gcpointer(T) this);
     
    141124//
    142125// //Logical operators
    143 forall(otype T) int ?!=?(gcpointer(T) this, int zero) {
    144         return this.internal.ptr != 0;
    145 }
    146126// forall(otype T) int ?!=?(gcpointer(T) this, gcpointer(T) rhs);
    147127// forall(otype T) int ?==?(gcpointer(T) this, gcpointer(T) rhs);
  • src/examples/gc_no_raii/src/gcpointers.h

    rfd782b2 rf006f01  
    33#include <stdbool.h>
    44#include <stdint.h>
    5 
    6 forall(dtype T)
    7 struct gcpointer;
    85
    96struct gcpointer_t
     
    1714void ?{}(gcpointer_t* this, gcpointer_t other);
    1815void ^?{}(gcpointer_t* this);
    19 gcpointer_t ?=?(gcpointer_t* this, gcpointer_t rhs);
     16gcpointer_t* ?=?(gcpointer_t this, gcpointer_t rhs);
    2017
    2118//Logical operators
    2219bool gcpointer_equal(gcpointer_t* this, gcpointer_t* rhs);
    2320bool gcpointer_not_equal(gcpointer_t* this, gcpointer_t* rhs);
    24 bool gcpointer_null(const gcpointer_t* this);
     21bool gcpointer_null(gcpointer_t* this);
    2522
    26 
    27 #ifndef NDEBUG
    28         bool is_valid(const gcpointer_t* this);
    29 #endif
    30 
    31 forall(dtype T)
     23forall(otype T)
    3224struct gcpointer
    3325{
     
    3830forall(otype T) void ?{}(gcpointer(T)* this);
    3931forall(otype T) void ?{}(gcpointer(T)* this, void* address);
    40 forall(otype T) void ?{}(gcpointer(T)* this, gcpointer(T) other);
     32forall(otype T) void ?{}(gcpointer(T)* this, gcpointer(T)* other);
    4133forall(otype T) void ^?{}(gcpointer(T)* this);
    42 forall(otype T) gcpointer(T) ?=?(gcpointer(T)* this, gcpointer(T) rhs);
     34forall(otype T) gcpointer(T) ?=?(gcpointer(T) this, gcpointer(T) rhs);
    4335
    4436
    45 // forall(otype T) T *?(gcpointer(T) this);
     37forall(otype T) T *?(gcpointer(T) this);
    4638forall(otype T) T* get(gcpointer(T)* this);
    4739
    4840//Logical operators
    49 forall(otype T) int ?!=?(gcpointer(T) this, int zero);
    5041forall(otype T) int ?!=?(gcpointer(T) this, gcpointer(T) rhs);
    5142forall(otype T) int ?==?(gcpointer(T) this, gcpointer(T) rhs);
  • src/examples/gc_no_raii/src/internal/card_table.h

    rfd782b2 rf006f01  
    11#pragma once
     2
     3#include <stdlib>
    24
    35#include "globals.h"
     
    79{
    810        size_t card = ( ((intptr_t)address) & CARDS_OFFSET_MASK ) >> CARDS_SIZE_EXP;
    9         checkf(card < CARDS_COUNT, (const char*)"%lu %lu = (%lx & %lx) >> %lu\n", (size_t)CARDS_COUNT, (size_t)card, (size_t)address, (size_t)CARDS_OFFSET_MASK, (size_t)CARDS_SIZE_EXP);
    1011        check(card < CARDS_COUNT);
    1112        return card;
     
    1819};
    1920
    20 static inline void ctor_card(card_table_t* const this)
     21static inline void ctor(card_table_t* const this)
    2122{
    2223        this->count = 0;
    2324}
    2425
    25 static inline void dtor_card(card_table_t* const this)
     26static inline void dtor(card_table_t* const this)
    2627{
    2728
     
    4748        else
    4849        {
    49                 check(card == this->count);
     50                check(card == count);
    5051                this->count++;
    5152                this->cards_start[card] = object;
  • src/examples/gc_no_raii/src/internal/collector.c

    rfd782b2 rf006f01  
    2525        gc_object_header* obj = gc_get_object_ptr((void*)target->ptr);
    2626
    27         check(is_valid(obj));
     27        check(gc_is_valide(obj));
    2828
    2929        gcpointer_t** prev_next_ptr = managed ? &obj->type_chain : &obj->root_chain;
     
    3838void* gc_allocate(size_t target_size)
    3939{
    40         // sout | "Allocating " | target_size | " bytes" | endl;
     40        sout | "Allocating " | target_size | " bytes" | endl;
    4141
    4242        size_t size = gc_compute_size(target_size + sizeof(gc_object_header));
    4343
    44         // sout | "Object header size: " | sizeof(gc_object_header) | " bytes" | endl;
    45         // sout | "Actual allocation size: " | size | " bytes" | endl;
     44        sout | "Object header size: " | sizeof(gc_object_header) | " bytes" | endl;
     45        sout | "Actual allocation size: " | size | " bytes" | endl;
    4646
    4747        check(size < POOL_SIZE_BYTES);
     
    6060        if((intptr_t)(block = gc_try_allocate(gc, size))) return gc_finish_alloc_block(block, size, target_size);
    6161
    62         checkf( (int) 0, "ERROR: allocation in new pool failed");
     62        checkf(false, "ERROR: allocation in new pool failed");
    6363
    6464        return NULL;
     
    6767void* gc_finish_alloc_block(void* block, size_t actual_size, size_t target_size)
    6868{
    69         intptr_t data = ((intptr_t)block) + sizeof(gc_object_header);
     69        void* data = (void*)(((intptr_t)block) + sizeof(gc_object_header));
    7070        void* header = block;
    7171
    72         check( data > ((intptr_t)block));
    73         check( data >= ((intptr_t)header));
    74         check( gc_is_aligned( (void*)data ) );
    75         check( data + target_size <= ((intptr_t)block) + actual_size );
     72        check(((intptr_t)data) > ((intptr_t)block));
     73        check(((intptr_t)data) >= ((intptr_t)header));
     74        check(is_aligned(data));
     75        check(((intptr_t)data) + target_size <= ((intptr_t)block) + actual_size);
    7676
    7777        gc_object_header* obj = placement_ctor(header, actual_size);
    7878
    7979        (void)obj; //remove unsused warning since this is for debug
    80         check(obj == gc_get_object_ptr( (void*)data ));
     80        check(obj == get_object_ptr(data));
    8181
    8282        gc_register_allocation(gc_get_state(), actual_size);
    8383
    84         return (void*)data;
     84        return data;
    8585}
    8686
     
    119119        check(!ptr->forward);
    120120        check(!ptr->is_forwarded);
    121         check(gc_pool_is_from_space(gc_pool_of(ptr)));
     121        check(gc_is_from_space(gc_pool_of(ptr)));
    122122
    123123        gc_memory_pool* pool = gc_pool_of(ptr)->mirror;
     
    143143                check(((intptr_t)field) < ((intptr_t)((intptr_t)object) + object->size));
    144144
    145                 check(gc_is_in_to_space(gc_get_state(), &field->ptr));
     145                check(gc_is_in_to_space(gc_get_state(), &type->ptr));
    146146
    147147                intptr_t* ref = &field->ptr;
  • src/examples/gc_no_raii/src/internal/collector.h

    rfd782b2 rf006f01  
    11#pragma once
    22
    3 #include <stdlib.h>
     3#include <stdlib>
    44
    55#include "tools.h"
  • src/examples/gc_no_raii/src/internal/memory_pool.c

    rfd782b2 rf006f01  
    11#include "memory_pool.h"
    22
    3 extern "C" {
    4         #include <stdlib.h>
    5         #include <string.h>
    6 }
     3#include <stdlib>
    74
    8 #include "collector.h"
    95#include "object_header.h"
    106
     
    1915        card_table_t* new = (card_table_t*)malloc(sizeof(card_table_t));
    2016        this->cards = new;
    21         ctor_card(this->cards);
     17        ctor(this->cards);
    2218
    2319        this->end_p = ((uint8_t*)this) + size;
    2420        this->free_p = this->start_p;
    2521
    26         check( gc_pool_of( (void*)this ) == this);
     22        check(gc_pool_of(this) == this);
    2723        check(this->cards);
    2824        gc_reset_pool(this);
     
    3127void dtor(gc_memory_pool *const this)
    3228{
    33         dtor_card(this->cards);
     29        dtor(this->cards);
    3430        free(this->cards);
    3531}
     
    3834{
    3935        this->free_p = this->start_p;
    40         #ifndef NDEBUG
    41                 memset(this->start_p, 0xCD, gc_pool_size_total(this));
     36        #if _DEBUG
     37                memset(this->start_p, 0xCD, gc_pool_total_size(this));
    4238        #endif
    4339
     
    4541        reset(this->cards);
    4642
    47         check(gc_pool_size_left(this) == gc_pool_size_total(this));
     43        check(gc_pool_size_left(this) == gc_pool_total_size(this));
    4844}
    4945
     
    6258}
    6359
    64 void ?{}(       gc_pool_object_iterator* this,
     60void ctor(
     61                gc_pool_object_iterator* const this,
    6562                struct gc_object_header* start_object
    66                 #ifndef NDEBUG
     63                #if _DEBUG
    6764                        , intptr_t pool_start
    6865                        , intptr_t pool_end
     
    7168{
    7269        this->object = start_object;
    73         #ifndef NDEBUG
     70        #if _DEBUG
    7471                this->lower_limit = pool_start;
    7572                this->upper_limit = pool_end;
    7673        #endif
    7774
    78         check( ((intptr_t)start_object) >= this->lower_limit );
    79         check( ((intptr_t)start_object) <= this->upper_limit );
     75        check( ((intptr_t)start_object) >= lower_limit );
     76        check( ((intptr_t)start_object) <= upper_limit );
    8077}
    81 
    82 void ^?{}( gc_pool_object_iterator* this ) {}
    8378
    8479gc_pool_object_iterator gc_pool_iterator_for(gc_memory_pool* const this, void* member)
     
    8681        size_t card = card_of(member);
    8782        intptr_t member_add = (intptr_t)member;
    88         intptr_t start_obj;
     83        void* start_obj;
     84        intptr_t start_obj_add;
    8985
    9086        do
    9187        {
    9288                check(card < CARDS_COUNT);
    93                 start_obj = (intptr_t)object_at(this->cards, card);
     89                start_obj = object_at(this->cards, card);
    9490                check(card != 0 || start_obj);
    9591                card--;
     92                start_obj_add = (intptr_t)start_obj;
    9693        }
    97         while(start_obj > member_add || !(start_obj));
     94        while(start_obj_add > member_add || start_obj_add != 0);
    9895
    99         check( start_obj );
    100 
     96        check(start_obj);
     97       
    10198        struct gc_object_header* start_obj_typed = (struct gc_object_header*)start_obj;
    10299
    103         return (gc_pool_object_iterator) {
    104                 start_obj_typed
    105                 #ifndef NDEBUG
     100        gc_pool_object_iterator it;
     101        ctor( &it,
     102                start_obj_typed,
     103                #if _DEBUG
    106104                        , (intptr_t)this->start_p
    107105                        , (intptr_t)this->free_p
    108106                #endif
    109         };
     107        );
     108        return it;
    110109}
    111110
     
    118117{
    119118        struct gc_object_header* start_obj = (struct gc_object_header*)this->start_p;
    120         return (gc_pool_object_iterator) {
    121                 start_obj
    122                 #ifndef NDEBUG
     119        gc_pool_object_iterator it;
     120        ctor( &it,
     121                start_obj,
     122                #if _DEBUG
    123123                        , (intptr_t)this->start_p
    124124                        , (intptr_t)this->free_p
    125125                #endif
    126         };
     126        );
     127        return it;
    127128}
    128129
    129130gc_pool_object_iterator end(gc_memory_pool* const this)
    130131{
    131         return (gc_pool_object_iterator) {
    132                 (struct gc_object_header*)this->free_p
    133                 #ifndef NDEBUG
     132        gc_pool_object_iterator it;
     133        ctor( &it,
     134                (struct gc_object_header*)this->free_p,
     135                #if _DEBUG
    134136                        , (intptr_t)this->start_p
    135137                        , (intptr_t)this->free_p
    136138                #endif
    137         };
     139        );
     140        return it;
    138141}
    139142
     
    142145        struct gc_object_header* object = it->object;
    143146        intptr_t next_ptr = ((intptr_t)object) + object->size;
    144         check(next_ptr > it->lower_limit);
    145         check(next_ptr <= it->upper_limit);
     147        check(next_ptr > lower_limit);
     148        check(next_ptr <= upper_limit);
    146149
    147150        struct gc_object_header* next_obj = ((struct gc_object_header*)next_ptr);
    148         check(next_ptr == it->upper_limit || is_valid(next_obj));
     151        check(next_ptr == upper_limit || is_valide(next_obj));
    149152
    150153        it->object = next_obj;
  • src/examples/gc_no_raii/src/internal/memory_pool.h

    rfd782b2 rf006f01  
    3939{
    4040        struct gc_object_header* object;
    41         #ifndef NDEBUG
     41        #if _DEBUG
    4242                intptr_t lower_limit;
    4343                intptr_t upper_limit;
     
    4646
    4747
    48 void ?{}(       gc_pool_object_iterator* this,
     48void ctor(
     49                gc_pool_object_iterator* const this,
    4950                struct gc_object_header* start_object
    50                 #ifndef NDEBUG
     51                #if _DEBUG
    5152                        , intptr_t pool_start
    5253                        , intptr_t pool_end
    5354                #endif
    5455        );
    55 
    56 void ^?{}( gc_pool_object_iterator* this );
    5756
    5857bool ?!=?(const gc_pool_object_iterator lhs, const gc_pool_object_iterator rhs);
  • src/examples/gc_no_raii/src/internal/object_header.c

    rfd782b2 rf006f01  
    33#include <stdint.h>
    44
    5 #include "collector.h"
    65#include "globals.h"
    76#include "gcpointers.h"
     
    98void ctor(gc_object_header* const this, size_t inSize)
    109{
    11         #ifndef NDEBUG
     10        #if _DEBUG
    1211                this->canary_start = CANARY_VALUE;
    1312        #endif
     
    1918        this->is_forwarded = false;
    2019
    21         #ifndef NDEBUG
     20        #if _DEBUG
    2221                this->canary_end = CANARY_VALUE;
    2322        #endif
     
    2625void copy_ctor(gc_object_header* const this, const gc_object_header* const other)
    2726{
    28         #ifndef NDEBUG
     27        #if _DEBUG
    2928                this->canary_start = CANARY_VALUE;
    3029        #endif
     
    3635        this->is_forwarded = false;
    3736
    38         #ifndef NDEBUG
     37        #if _DEBUG
    3938                this->canary_end = CANARY_VALUE;
    4039        #endif
     
    4342        while(root)
    4443        {
    45                 check(gc_get_object_ptr( (void*)root->ptr ) == other);
     44                check(get_object_ptr(root->ptr) == other);
    4645                root->ptr = ((intptr_t)this) + sizeof(gc_object_header);
    4746
    48                 check(gc_get_object_ptr( (void*)root->ptr ) == this);
     47                check(get_object_ptr(root->ptr) == this);
    4948                root = root->next;
    5049        }
     
    5756
    5857                size_t offset = (intptr_t)type - (intptr_t)other;
    59                 check(offset < this->size);
     58                check(offset < size);
    6059
    6160                gcpointer_t* member_ptr = (gcpointer_t*)( (intptr_t)this + offset );
     
    6463
    6564                size_t next_offset = type->next ? (intptr_t)type->next - (intptr_t)other : 0;
    66                 check(next_offset < this->size);
     65                check(next_offset < size);
    6766
    6867                gcpointer_t* next_ptr = type->next ? (gcpointer_t*)((intptr_t)this + next_offset) : NULL;
     
    7473        }
    7574
    76         check(is_valid(this));
     75        check(is_valide(this));
    7776}
    7877
    79 #ifndef NDEBUG
    80         bool is_valid(const gc_object_header* const this)
     78#if _DEBUG
     79        bool is_valide(const gc_object_header* const this)
    8180        {
    82                 check((intptr_t)this->canary_start == (intptr_t)CANARY_VALUE);
    83                 check((intptr_t)this->canary_end == (intptr_t)CANARY_VALUE);
     81                check(this->canary_start == CANARY_VALUE);
     82                check(this->canary_end == CANARY_VALUE);
    8483
    85                 check(this->is_forwarded == ( (intptr_t)this->forward != (intptr_t)NULL));
     84                check(this->is_forwarded == (this->forward != nullptr));
    8685
    8786                check(this->size < POOL_SIZE_BYTES);
     
    9089                while(root)
    9190                {
    92                         checkf(gc_get_object_ptr( (void*)root->ptr ) == this, (const char*)"Expected %lX got %lX\n", gc_get_object_ptr( (void*)root->ptr ), this);
     91                        check(get_object_ptr(root->ptr) == this);
    9392
    9493                        root = root->next;
    9594                }
    9695
    97                 gcpointer_t* type = this->type_chain;
     96                gcpointer_t* type = type_chain;
    9897                while(type)
    9998                {
    10099                        check((intptr_t)type > (intptr_t)this);
    101                         check((intptr_t)type < (intptr_t)(((intptr_t)this) + this->size));
     100                        check((intptr_t)type < (intptr_t)((intptr_t)this + size));
    102101
    103102                        type = type->next;
     
    106105                return true;
    107106        }
    108         #else
    109         #error blarg
    110107#endif
  • src/examples/gc_no_raii/src/internal/object_header.h

    rfd782b2 rf006f01  
    77#include "tools.h"
    88
    9 #ifndef NDEBUG
    10         static void* const CANARY_VALUE = (void*)0xCAFEBABACAFEBABA;
     9#if DEBUG
     10        static const long unsigned int CANARY_VALUE = 0xCAFEBABACAFEBABA;
    1111#endif
    1212
     
    1616struct gc_object_header
    1717{
    18         #ifndef NDEBUG
     18        #if DEBUG
    1919                void* canary_start;
    2020        #endif
     
    2626        bool                    is_forwarded;
    2727
    28         #ifndef NDEBUG
     28        #if DEBUG
    2929                void* canary_end;
    3030        #endif
     
    4747        return this;
    4848}
    49 
    50 #ifndef NDEBUG
    51         bool is_valid(const gc_object_header* const this);
    52 #endif
  • src/examples/gc_no_raii/src/internal/state.c

    rfd782b2 rf006f01  
    2121void gc_state_calc_usage(gc_state *const this);
    2222
    23 #ifndef NDEBUG
     23#if DEBUG
    2424        bool gc_state_roots_match(gc_state *const this);
    2525        bool gc_state_no_from_space_ref(gc_state *const this);
     
    7676gc_object_header* gc_get_object_for_ref(gc_state* state, void* member)
    7777{
    78         volatile int stage = 0;
    7978        intptr_t target = ((intptr_t)member);
    8079        if(!gc_is_in_heap(state, member)) return NULL;
    81         stage++;
    8280
    8381        gc_memory_pool* pool = gc_pool_of(member);
    84         stage++;
    8582        gc_pool_object_iterator it = gc_pool_iterator_for(pool, member);
    86         stage++;
    8783        gc_pool_object_iterator end = end(pool);
    88         stage++;
    8984
    9085        while(it != end)
    9186        {
    9287                gc_object_header* object = *it;
    93                 check(object);
    94                 check( is_valid(object) );
    9588                {
    9689                        intptr_t start = ((intptr_t)object);
     
    10194                        }
    10295                }
    103                 stage++;
    10496                ++it;
    10597        }
    10698
    107         checkf( (int) 0, "is_in_heap() and iterator_for() return inconsistent data");
     99        checkf(false, "is_in_heap() and iterator_for() return inconsistent data");
    108100        abort();
    109101        return NULL;
     
    184176        this->from_code = (~this->from_code) & 0x01;
    185177
    186         #ifndef NDEBUG
     178        #if _DEBUG
    187179                {
    188180                        gc_memory_pool* pool = this->from_space;
     
    259251}
    260252
    261 #ifndef NDEBUG
     253#if _DEBUG
    262254        bool gc_state_roots_match(gc_state* const this)
    263255        {
     
    273265                                size += object->size;
    274266
    275                                 gcpointer_t* ptr = object->root_chain;
     267                                gcpointer_base* ptr = object->root_chain;
    276268                                while(ptr)
    277269                                {
    278                                         check(gc_get_object_ptr( (void*)ptr->ptr ) == object);
    279                                         ptr = ptr->next;
     270                                        check(get_object_ptr(ptr->m_ptr) == object);
     271                                        ptr = ptr->m_next;
    280272                                }
    281273                        }
    282274
    283                         checkf(size + gc_pool_size_left(pool) == gc_pool_size_total(pool),
    284                                 (const char*)"expected %lu + %lu == %lu\n",
    285                                 (size_t)size,
    286                                 (size_t)gc_pool_size_left(pool),
    287                                 (size_t)gc_pool_size_total(pool));
     275                        check(size + gc_pool_size_used(pool) == gc_pool_size_total(pool));
    288276
    289277                        pool = pool->next;
     
    298286                while(pool)
    299287                {
    300                         void** potential_ref = (void**)pool->start_p;
    301                         while(potential_ref < (void**)pool->free_p)
     288                        void** potential_ref = (void**)pool->m_start;
     289                        while(potential_ref < (void**)pool->m_free)
    302290                        {
    303291                                check(!gc_is_in_heap(this, *potential_ref));
  • src/examples/gc_no_raii/src/internal/state.h

    rfd782b2 rf006f01  
    3838static inline bool gc_needs_collect(gc_state* state)
    3939{
    40         // sout | "Used Space: " | state->used_space | " bytes" | endl;
     40        sout | "Used Space: " | state->used_space | " bytes" | endl;
    4141        return state->used_space * 2 > state->total_space;
    4242}
  • src/examples/gc_no_raii/src/tools/checks.h

    rfd782b2 rf006f01  
    11#pragma once
    22
    3 #ifdef NDEBUG
    4 
    5 #define check(x)
    6 
    7 #define checkf(x, format, ...)
    8 
    9 #warning no debug checks
    10 
    11 #else
     3#if _DEBUG
    124
    135#include <stdlib.h>
     
    1810                printf("CHECK failed : %s at %s:%i\n", #x, __FILE__, __LINE__);\
    1911                abort();\
    20         }}while( (int)0 )\
     12        }}while(0)\
    2113
    2214#define checkf(x, ...) do {\
     
    2517                printf(__VA_ARGS__);\
    2618                abort();\
    27         }}while( (int)0 )\
     19        }}while(0)\
     20
     21#else
     22
     23#define check(x)
     24
     25#define checkf(x, format, ...)
    2826
    2927#endif //NO_CHECKS
  • src/examples/gc_no_raii/src/tools/print.c

    rfd782b2 rf006f01  
    11#include "tools.h"
    22
    3 #ifndef NDEBUG
    4         // ofstream *sout = ofstream_stdout();
     3#if _DEBUG
     4        ofstream *sout = ofstream_stdout();
    55#endif
  • src/examples/gc_no_raii/src/tools/print.h

    rfd782b2 rf006f01  
    11#pragma once
    22
    3 // #ifndef NDEBUG
    4 //
    5 // #include <fstream>
    6 //
    7 // #define DEBUG_OUT(x) sout | x | endl;
    8 //
    9 // #else
     3#if _DEBUG
     4
     5#include <fstream>
     6
     7#define DEBUG_OUT(x) sout | x | endl;
     8
     9#else
    1010
    1111#define DEBUG_OUT(x)
    1212
    13 // #endif //NO_CHECKS
     13#endif //NO_CHECKS
  • src/examples/gc_no_raii/test/badlll.c

    rfd782b2 rf006f01  
    11#include "gc.h"
    2 
    3 #include <stdio.h>
    42
    53struct List_t
     
    97};
    108
     9void ?{}(List_t* this);
     10List_t* ?=?(List_t* this, List_t* rhs);
     11
    1112typedef gcpointer(List_t) LLL;
    1213
    13 #define MAX (1024 * 1)
     14#define MAX (1024 * 1024)
    1415
    15 LLL buildLLL(int sz)
     16// LLL buildLLL(int sz)
     17void bla()
    1618{
    17         int i = 0;
    18         LLL ll0;
    19 
    20         gcmalloc( &ll0 );
    21         List_t* ll0_ptr = get( &ll0 );
    22         ll0_ptr->val = i;
    23         LLL lll = ll0;
    24 
    25         for (i = 1; i < sz; i++)
    26         {
    27                 LLL llc;
    28                 gcmalloc( &llc );
    29                 List_t* llc_ptr = get( &llc );
    30                 llc_ptr->val = i;
    31                 List_t* lll_ptr = get( &lll );
    32                 lll_ptr->next = llc;
    33 
    34                 lll = llc;
    35         }
    36 
    37         check(is_valid( &ll0.internal ));
    38 
    39         return ll0;
     19        int i;
     20        // LLL ll0;//, lll, llc;
     21//
     22//      ll0 = gcmalloc();
     23//      ll0->val = 0;
     24//      lll = ll0;
     25//
     26//      for (i = 1; i < sz; i++)
     27//      {
     28//              llc = gcmalloc();
     29//              llc->val = i;
     30//              lll->next = llc;
     31//              lll = llc;
     32//      }
     33//
     34        // return ll0;
    4035}
    41 
    42 void testLLL(LLL lll)
    43 {
    44         unsigned char *counted;
    45 
    46         counted = (unsigned char *) calloc(MAX, sizeof(unsigned char));
    47         while (lll)
    48         {
    49                 List_t* lll_ptr = get( &lll );
    50                 counted[lll_ptr->val]++;
    51                 if (counted[lll_ptr->val] > 1)
    52                 {
    53                         fprintf(stderr, "ERROR! Encountered %d twice!\n", lll_ptr->val);
    54                         exit(1);
    55                 }
    56                 lll = lll_ptr->next;
    57         }
    58 
    59         return;
    60 }
     36//
     37// void testLLL(LLL lll)
     38// {
     39//      unsigned char *counted;
     40//
     41//      counted = (unsigned char *) calloc(MAX, sizeof(unsigned char));
     42//      while (lll)
     43//      {
     44//              counted[lll->val]++;
     45//              if (counted[lll->val] > 1)
     46//              {
     47//                      fprintf(stderr, "ERROR! Encountered %d twice!\n", lll->val);
     48//                      exit(1);
     49//              }
     50//              lll = lll->next;
     51//      }
     52//
     53//      return;
     54// }
    6155
    6256int main(void)
     
    6458        LLL mylll;
    6559
    66         mylll = buildLLL(MAX);
    67 
    68         testLLL(mylll);
     60        // mylll = buildLLL(MAX);
     61        //
     62        // testLLL(mylll);
    6963
    7064        return 0;
  • src/tests/.expect/declarationErrors.txt

    rfd782b2 rf006f01  
    22Error: duplicate static in declaration of x1: static const volatile short int
    33
    4 Error: conflicting extern & static in declaration of x2: extern const volatile short int
     4Error: multiple extern & static in declaration of x2: extern const volatile short int
    55
    6 Error: conflicting extern & auto, conflicting extern & static, conflicting extern & static, duplicate extern in declaration of x3: extern const volatile short int
     6Error: multiple extern & auto, multiple extern & static, multiple extern & static, duplicate extern in declaration of x3: extern const volatile short int
    77
    88Error: duplicate static in declaration of x4: static const volatile instance of const volatile struct __anonymous0
  • src/tests/avltree/avl_test.c

    rfd782b2 rf006f01  
    1414
    1515  // int -> int
    16   tree(int, int) * imap = create(-1, (int)0);
     16  tree(int, int) * imap = create(-1, 0);
    1717  insert(&imap, 12, 13);
    1818  insert(&imap, 2, 3);
Note: See TracChangeset for help on using the changeset viewer.