Changes in / [10e90cb:8ca3a72]


Ignore:
Location:
src
Files:
1 added
3 deleted
34 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/CodeGenerator.cc

    r10e90cb r8ca3a72  
    267267        }
    268268
    269         void CodeGenerator::visit( __attribute__((unused)) TraitDecl * traitDecl ) {}
     269        void CodeGenerator::visit( TraitDecl * traitDecl ) {}
    270270
    271271        void CodeGenerator::visit( TypedefDecl * typeDecl ) {
     
    328328        }
    329329
    330         void CodeGenerator::visit( __attribute__((unused)) ConstructorInit * init ){
     330        void CodeGenerator::visit( ConstructorInit * init ){
    331331                assertf( ! genC, "ConstructorInit nodes should not reach code generation." );
    332332                // xxx - generate something reasonable for constructor/destructor pairs
     
    962962        }
    963963
    964         void CodeGenerator::visit( __attribute__((unused)) NullStmt * nullStmt ) {
     964        void CodeGenerator::visit( NullStmt * nullStmt ) {
    965965                //output << indent << CodeGenerator::printLabels( nullStmt->get_labels() );
    966966                output << "/* null statement */ ;";
  • src/CodeTools/TrackLoc.cc

    r10e90cb r8ca3a72  
    8585                }
    8686
    87                 void postvisit( __attribute__((unused)) BaseSyntaxNode * node ) {
     87                void postvisit(BaseSyntaxNode * node) {
    8888                        parents.pop();
    8989                }
  • src/Common/Assert.cc

    r10e90cb r8ca3a72  
    2121extern const char * __progname;                                                 // global name of running executable (argv[0])
    2222
    23 #define CFA_ASSERT_FMT "*CFA assertion error* \"%s\" from program \"%s\" in \"%s\" at line %d in file \"%s\""
     23#define CFA_ASSERT_FMT "*CFA assertion error* from program \"%s\" in \"%s\" at line %d in file \"%s\""
    2424
    2525// called by macro assert in assert.h
    2626void __assert_fail( const char *assertion, const char *file, unsigned int line, const char *function ) {
    27         fprintf( stderr, CFA_ASSERT_FMT ".\n", assertion, __progname, function, line, file );
     27        fprintf( stderr, CFA_ASSERT_FMT ".\n", __progname, function, line, file );
    2828        abort();
    2929}
     
    3131// called by macro assertf
    3232void __assert_fail_f( const char *assertion, const char *file, unsigned int line, const char *function, const char *fmt, ... ) {
    33         fprintf( stderr, CFA_ASSERT_FMT ": ", assertion, __progname, function, line, file );
     33        fprintf( stderr, CFA_ASSERT_FMT ": ", __progname, function, line, file );
    3434        va_list args;
    3535        va_start( args, fmt );
  • src/Common/PassVisitor.h

    r10e90cb r8ca3a72  
    231231        std::list< Statement* > *       get_beforeStmts() { return stmtsToAddBefore_impl( pass, 0); }
    232232        std::list< Statement* > *       get_afterStmts () { return stmtsToAddAfter_impl ( pass, 0); }
    233         bool visit_children() { bool* skip = skip_children_impl(pass, 0); return ! (skip && *skip); }
    234233};
    235234
  • src/Common/PassVisitor.impl.h

    r10e90cb r8ca3a72  
    33#define VISIT_START( node )  \
    44        call_previsit( node ); \
    5         if( visit_children() ) { \
    6 
    7 #define VISIT_END( node )            \
    8         }                              \
     5
     6#define VISIT_END( node )                \
    97        return call_postvisit( node ); \
    108
    119#define MUTATE_START( node )  \
    1210        call_premutate( node ); \
    13         if( visit_children() ) { \
    1411
    1512#define MUTATE_END( type, node )                \
    16         }                                         \
    1713        return call_postmutate< type * >( node ); \
    1814
  • src/Common/PassVisitor.proto.h

    r10e90cb r8ca3a72  
    2323
    2424template<typename pass_type, typename node_type>
    25 static inline void previsit_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused)) node_type * node, __attribute__((unused)) long unused ) {}
     25static inline void previsit_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) {}
    2626
    2727
     
    3232
    3333template<typename pass_type, typename node_type>
    34 static inline void postvisit_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused)) node_type * node, __attribute__((unused)) long unused ) {}
     34static inline void postvisit_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) {}
    3535
    3636// Mutate
     
    4141
    4242template<typename pass_type, typename node_type>
    43 static inline void premutate_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused)) node_type * node, __attribute__((unused)) long unused ) {}
     43static inline void premutate_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) {}
    4444
    4545
     
    7171
    7272// Fields
    73 #define FIELD_PTR( type, name )                                                                                                        \
    74 template<typename pass_type>                                                                                                           \
    75 static inline auto name##_impl( pass_type& pass, __attribute__((unused)) int unused ) ->decltype( &pass.name ) { return &pass.name; }  \
    76                                                                                                                                        \
    77 template<typename pass_type>                                                                                                           \
     73#define FIELD_PTR( type, name )                                                                                                                  \
     74template<typename pass_type>                                                                                                                     \
     75static inline auto name##_impl( pass_type& pass, __attribute__((unused)) int unused ) ->decltype( &pass.name ) { return &pass.name; }          \
     76                                                                                                                                                 \
     77template<typename pass_type>                                                                                                                     \
    7878static inline type * name##_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused)) long unused ) { return nullptr;}    \
    7979
     
    8181FIELD_PTR( std::list< Statement* >, stmtsToAddBefore )
    8282FIELD_PTR( std::list< Statement* >, stmtsToAddAfter  )
    83 FIELD_PTR( bool, skip_children )
  • src/Concurrency/Keywords.cc

    r10e90cb r8ca3a72  
    6565                FunctionDecl * forwardDeclare( StructDecl * );
    6666                ObjectDecl * addField( StructDecl * );
    67                 void addRoutines( ObjectDecl *, FunctionDecl * );
     67                void addRoutines( StructDecl *, ObjectDecl *, FunctionDecl * );
    6868
    6969                virtual bool is_target( StructDecl * decl ) = 0;
     
    247247        void ConcurrentSueKeyword::visit(StructDecl * decl) {
    248248                Visitor::visit(decl);
    249                 if( decl->get_name() == type_name && decl->has_body() ) {
     249                if( decl->get_name() == type_name ) {
    250250                        assert( !type_decl );
    251251                        type_decl = decl;
     
    264264                FunctionDecl * func = forwardDeclare( decl );
    265265                ObjectDecl * field = addField( decl );
    266                 addRoutines( field, func );
     266                addRoutines( decl, field, func );
    267267        }
    268268
     
    359359        }
    360360
    361         void ConcurrentSueKeyword::addRoutines( ObjectDecl * field, FunctionDecl * func ) {
     361        void ConcurrentSueKeyword::addRoutines( StructDecl * decl, ObjectDecl * field, FunctionDecl * func ) {
    362362                CompoundStmt * statement = new CompoundStmt( noLabels );
    363363                statement->push_back(
  • src/GenPoly/Box.cc

    r10e90cb r8ca3a72  
    101101                        void passTypeVars( ApplicationExpr *appExpr, Type *polyRetType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars );
    102102                        /// wraps a function application with a new temporary for the out-parameter return value
    103                         Expression *addRetParam( ApplicationExpr *appExpr, Type *retType, std::list< Expression *>::iterator &arg );
     103                        Expression *addRetParam( ApplicationExpr *appExpr, FunctionType *function, Type *retType, std::list< Expression *>::iterator &arg );
    104104                        /// Replaces all the type parameters of a generic type with their concrete equivalents under the current environment
    105105                        void replaceParametersWithConcrete( ApplicationExpr *appExpr, std::list< Expression* >& params );
     
    134134                  public:
    135135                        template< typename DeclClass >
    136                         DeclClass *handleDecl( DeclClass *decl );
     136                        DeclClass *handleDecl( DeclClass *decl, Type *type );
    137137                        template< typename AggDecl >
    138138                        AggDecl * handleAggDecl( AggDecl * aggDecl );
     
    663663                }
    664664
    665                 Expression *Pass1::addRetParam( ApplicationExpr *appExpr, Type *retType, std::list< Expression *>::iterator &arg ) {
     665                Expression *Pass1::addRetParam( ApplicationExpr *appExpr, FunctionType *function, Type *retType, std::list< Expression *>::iterator &arg ) {
    666666                        // Create temporary to hold return value of polymorphic function and produce that temporary as a result
    667667                        // using a comma expression.
     
    730730                        Type *concrete = replaceWithConcrete( appExpr, dynType );
    731731                        // add out-parameter for return value
    732                         return addRetParam( appExpr, concrete, arg );
     732                        return addRetParam( appExpr, function, concrete, arg );
    733733                }
    734734
     
    737737//                      if ( ! function->get_returnVals().empty() && isPolyType( function->get_returnVals().front()->get_type(), tyVars ) ) {
    738738                        if ( isDynRet( function, tyVars ) ) {
    739                                 ret = addRetParam( appExpr, function->get_returnVals().front()->get_type(), arg );
     739                                ret = addRetParam( appExpr, function, function->get_returnVals().front()->get_type(), arg );
    740740                        } // if
    741741                        std::string mangleName = mangleAdapterName( function, tyVars );
     
    12801280
    12811281                template< typename DeclClass >
    1282                 DeclClass * Pass2::handleDecl( DeclClass *decl ) {
     1282                DeclClass * Pass2::handleDecl( DeclClass *decl, Type *type ) {
    12831283                        DeclClass *ret = static_cast< DeclClass *>( Parent::mutate( decl ) );
    12841284
     
    12941294
    12951295                DeclarationWithType * Pass2::mutate( FunctionDecl *functionDecl ) {
    1296                         functionDecl = safe_dynamic_cast< FunctionDecl * > ( handleDecl( functionDecl ) );
     1296                        functionDecl = safe_dynamic_cast< FunctionDecl * > ( handleDecl( functionDecl, functionDecl->get_functionType() ) );
    12971297                        FunctionType * ftype = functionDecl->get_functionType();
    12981298                        if ( ! ftype->get_returnVals().empty() && functionDecl->get_statements() ) {
     
    13191319
    13201320                ObjectDecl * Pass2::mutate( ObjectDecl *objectDecl ) {
    1321                         return handleDecl( objectDecl );
     1321                        return handleDecl( objectDecl, objectDecl->get_type() );
    13221322                }
    13231323
     
    13421342                        addToTyVarMap( typeDecl, scopeTyVars );
    13431343                        if ( typeDecl->get_base() ) {
    1344                                 return handleDecl( typeDecl );
     1344                                return handleDecl( typeDecl, typeDecl->get_base() );
    13451345                        } else {
    13461346                                return Parent::mutate( typeDecl );
     
    13491349
    13501350                TypedefDecl * Pass2::mutate( TypedefDecl *typedefDecl ) {
    1351                         return handleDecl( typedefDecl );
     1351                        return handleDecl( typedefDecl, typedefDecl->get_base() );
    13521352                }
    13531353
  • src/InitTweak/FixGlobalInit.cc

    r10e90cb r8ca3a72  
    125125
    126126        // only modify global variables
    127         void GlobalFixer::visit( __attribute__((unused)) FunctionDecl *functionDecl ) {}
    128         void GlobalFixer::visit( __attribute__((unused)) StructDecl *aggregateDecl ) {}
    129         void GlobalFixer::visit( __attribute__((unused)) UnionDecl *aggregateDecl ) {}
    130         void GlobalFixer::visit( __attribute__((unused)) EnumDecl *aggregateDecl ) {}
    131         void GlobalFixer::visit( __attribute__((unused)) TraitDecl *aggregateDecl ) {}
    132         void GlobalFixer::visit( __attribute__((unused)) TypeDecl *typeDecl ) {}
     127        void GlobalFixer::visit( FunctionDecl *functionDecl ) {}
     128        void GlobalFixer::visit( StructDecl *aggregateDecl ) {}
     129        void GlobalFixer::visit( UnionDecl *aggregateDecl ) {}
     130        void GlobalFixer::visit( EnumDecl *aggregateDecl ) {}
     131        void GlobalFixer::visit( TraitDecl *aggregateDecl ) {}
     132        void GlobalFixer::visit( TypeDecl *typeDecl ) {}
    133133
    134134} // namespace InitTweak
  • src/InitTweak/FixInit.cc

    r10e90cb r8ca3a72  
    110110
    111111                        // don't go into other functions
    112                         virtual void visit( __attribute__((unused)) FunctionDecl *decl ) override {}
     112                        virtual void visit( FunctionDecl *decl ) override {}
    113113
    114114                  protected:
  • src/InitTweak/InitTweak.cc

    r10e90cb r8ca3a72  
    9292                InitImpl( Initializer * init ) : init( init ) {}
    9393
    94                 virtual std::list< Expression * > next( __attribute((unused)) std::list< Expression * > & indices ) {
     94                virtual std::list< Expression * > next( std::list< Expression * > & indices ) {
    9595                        // this is wrong, but just a placeholder for now
    9696                        // if ( ! flattened ) flatten( indices );
     
    248248        }
    249249
    250         Statement * ExprImpl::buildListInit( __attribute((unused)) UntypedExpr * dst, __attribute((unused)) std::list< Expression * > & indices ) {
     250        Statement * ExprImpl::buildListInit( UntypedExpr * dst, std::list< Expression * > & indices ) {
    251251                return NULL;
    252252        }
     
    475475                ConstExprChecker() : isConstExpr( true ) {}
    476476
    477                 virtual void visit( __attribute((unused)) ApplicationExpr *applicationExpr ) { isConstExpr = false; }
    478                 virtual void visit( __attribute((unused)) UntypedExpr *untypedExpr ) { isConstExpr = false; }
     477                virtual void visit( ApplicationExpr *applicationExpr ) { isConstExpr = false; }
     478                virtual void visit( UntypedExpr *untypedExpr ) { isConstExpr = false; }
    479479                virtual void visit( NameExpr *nameExpr ) {
    480480                        // xxx - temporary hack, because 0 and 1 really should be constexprs, even though they technically aren't in Cforall today
     
    487487                        if ( ! dynamic_cast< NameExpr * >( arg) && ! dynamic_cast< VariableExpr * >( arg ) && ! dynamic_cast< MemberExpr * >( arg ) && ! dynamic_cast< UntypedMemberExpr * >( arg ) ) isConstExpr = false;
    488488                }
    489                 virtual void visit( __attribute((unused)) LabelAddressExpr *labAddressExpr ) { isConstExpr = false; }
    490                 virtual void visit( __attribute((unused)) UntypedMemberExpr *memberExpr ) { isConstExpr = false; }
    491                 virtual void visit( __attribute((unused)) MemberExpr *memberExpr ) { isConstExpr = false; }
    492                 virtual void visit( __attribute((unused)) VariableExpr *variableExpr ) { isConstExpr = false; }
     489                virtual void visit( LabelAddressExpr *labAddressExpr ) { isConstExpr = false; }
     490                virtual void visit( UntypedMemberExpr *memberExpr ) { isConstExpr = false; }
     491                virtual void visit( MemberExpr *memberExpr ) { isConstExpr = false; }
     492                virtual void visit( VariableExpr *variableExpr ) { isConstExpr = false; }
    493493                // these might be okay?
    494494                // virtual void visit( SizeofExpr *sizeofExpr );
     
    501501                // virtual void visit( LogicalExpr *logicalExpr );
    502502                // virtual void visit( ConditionalExpr *conditionalExpr );
    503                 virtual void visit( __attribute((unused)) TypeExpr *typeExpr ) { isConstExpr = false; }
    504                 virtual void visit( __attribute((unused)) AsmExpr *asmExpr ) { isConstExpr = false; }
    505                 virtual void visit( __attribute((unused)) UntypedValofExpr *valofExpr ) { isConstExpr = false; }
    506                 virtual void visit( __attribute((unused)) CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; }
    507                 virtual void visit( __attribute((unused)) UntypedTupleExpr *tupleExpr ) { isConstExpr = false; }
    508                 virtual void visit( __attribute((unused)) TupleExpr *tupleExpr ) { isConstExpr = false; }
    509                 virtual void visit( __attribute((unused)) TupleAssignExpr *tupleExpr ) { isConstExpr = false; }
     503                virtual void visit( TypeExpr *typeExpr ) { isConstExpr = false; }
     504                virtual void visit( AsmExpr *asmExpr ) { isConstExpr = false; }
     505                virtual void visit( UntypedValofExpr *valofExpr ) { isConstExpr = false; }
     506                virtual void visit( CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; }
     507                virtual void visit( UntypedTupleExpr *tupleExpr ) { isConstExpr = false; }
     508                virtual void visit( TupleExpr *tupleExpr ) { isConstExpr = false; }
     509                virtual void visit( TupleAssignExpr *tupleExpr ) { isConstExpr = false; }
    510510
    511511                bool isConstExpr;
  • src/Parser/ParseNode.h

    r10e90cb r8ca3a72  
    6161        }
    6262
    63         virtual void print( __attribute__((unused)) std::ostream &os, __attribute__((unused)) int indent = 0 ) const {}
    64         virtual void printList( __attribute__((unused)) std::ostream &os, __attribute__((unused)) int indent = 0 ) const {}
     63        virtual void print( std::ostream &os, int indent = 0 ) const {}
     64        virtual void printList( std::ostream &os, int indent = 0 ) const {}
    6565
    6666        static int indent_by;
     
    113113        ExpressionNode * set_extension( bool exten ) { extension = exten; return this; }
    114114
    115         virtual void print( __attribute__((unused)) std::ostream &os, __attribute__((unused)) int indent = 0 ) const override {}
    116         void printOneLine( __attribute__((unused)) std::ostream &os, __attribute__((unused)) int indent = 0 ) const {}
     115        virtual void print( std::ostream &os, int indent = 0 ) const override {}
     116        void printOneLine( std::ostream &os, int indent = 0 ) const {}
    117117
    118118        template<typename T>
     
    283283        }
    284284
    285         virtual void print( __attribute__((unused)) std::ostream &os, __attribute__((unused)) int indent = 0 ) const override;
    286         virtual void printList( __attribute__((unused)) std::ostream &os, __attribute__((unused)) int indent = 0 ) const override;
     285        virtual void print( std::ostream &os, int indent = 0 ) const override;
     286        virtual void printList( std::ostream &os, int indent = 0 ) const override;
    287287
    288288        Declaration * build() const;
     
    363363        virtual StatementNode * append_last_case( StatementNode * );
    364364
    365         virtual void print( __attribute__((unused)) std::ostream &os, __attribute__((unused)) int indent = 0 ) const override {}
    366         virtual void printList( __attribute__((unused)) std::ostream &os, __attribute__((unused)) int indent = 0 ) const override {}
     365        virtual void print( std::ostream &os, int indent = 0 ) const override {}
     366        virtual void printList( std::ostream &os, int indent = 0 ) const override {}
    367367  private:
    368368        std::unique_ptr<Statement> stmt;
  • src/ResolvExpr/CommonType.cc

    r10e90cb r8ca3a72  
    4343
    4444                void getCommonWithVoidPointer( PointerType* voidPointer, PointerType* otherPointer );
     45                template< typename RefType > void handleRefType( RefType *inst, Type *other );
    4546
    4647                Type *result;
     
    125126        }
    126127
    127         void CommonType::visit( __attribute((unused)) VoidType *voidType ) {}
     128        void CommonType::visit( VoidType *voidType ) {
     129        }
    128130
    129131        void CommonType::visit( BasicType *basicType ) {
     
    187189        }
    188190
    189         void CommonType::visit( __attribute((unused)) ArrayType *arrayType ) {}
    190         void CommonType::visit( __attribute((unused)) FunctionType *functionType ) {}
    191         void CommonType::visit( __attribute((unused)) StructInstType *aggregateUseType ) {}
    192         void CommonType::visit( __attribute((unused)) UnionInstType *aggregateUseType ) {}
     191        void CommonType::visit( ArrayType *arrayType ) {
     192        }
     193
     194        void CommonType::visit( FunctionType *functionType ) {
     195        }
     196
     197        template< typename RefType > void CommonType::handleRefType( RefType *inst, Type *other ) {
     198        }
     199
     200        void CommonType::visit( StructInstType *aggregateUseType ) {
     201        }
     202
     203        void CommonType::visit( UnionInstType *aggregateUseType ) {
     204        }
    193205
    194206        void CommonType::visit( EnumInstType *enumInstType ) {
     
    202214        }
    203215
    204         void CommonType::visit( __attribute((unused)) TraitInstType *aggregateUseType ) {
     216        void CommonType::visit( TraitInstType *aggregateUseType ) {
    205217        }
    206218
     
    227239        }
    228240
    229         void CommonType::visit( __attribute((unused)) TupleType *tupleType ) {}
    230         void CommonType::visit( __attribute((unused)) VarArgsType *varArgsType ) {}
     241        void CommonType::visit( TupleType *tupleType ) {
     242        }
     243
     244        void CommonType::visit( VarArgsType *varArgsType ) {
     245        }
    231246
    232247        void CommonType::visit( ZeroType *zeroType ) {
  • src/ResolvExpr/ConversionCost.cc

    r10e90cb r8ca3a72  
    149149        };
    150150
    151         void ConversionCost::visit( __attribute((unused)) VoidType *voidType ) {
     151        void ConversionCost::visit(VoidType *voidType) {
    152152                cost = Cost::infinity;
    153153        }
     
    186186        }
    187187
    188         void ConversionCost::visit(__attribute((unused)) ArrayType *arrayType) {}
    189         void ConversionCost::visit(__attribute((unused)) FunctionType *functionType) {}
     188        void ConversionCost::visit(ArrayType *arrayType) {
     189        }
     190
     191        void ConversionCost::visit(FunctionType *functionType) {
     192        }
    190193
    191194        void ConversionCost::visit(StructInstType *inst) {
     
    205208        }
    206209
    207         void ConversionCost::visit( __attribute((unused)) EnumInstType *inst ) {
     210        void ConversionCost::visit(EnumInstType *inst) {
    208211                static Type::Qualifiers q;
    209212                static BasicType integer( q, BasicType::SignedInt );
     
    214217        }
    215218
    216         void ConversionCost::visit( __attribute((unused)) TraitInstType *inst) {
     219        void ConversionCost::visit(TraitInstType *inst) {
    217220        }
    218221
     
    236239        }
    237240
    238         void ConversionCost::visit( __attribute((unused)) TupleType *tupleType) {
     241        void ConversionCost::visit(TupleType *tupleType) {
    239242                Cost c;
    240243                if ( TupleType *destAsTuple = dynamic_cast< TupleType* >( dest ) ) {
     
    256259        }
    257260
    258         void ConversionCost::visit( __attribute((unused)) VarArgsType *varArgsType) {
     261        void ConversionCost::visit(VarArgsType *varArgsType) {
    259262                if ( dynamic_cast< VarArgsType* >( dest ) ) {
    260263                        cost = Cost::zero;
     
    262265        }
    263266
    264         void ConversionCost::visit( __attribute((unused)) ZeroType *zeroType) {
     267        void ConversionCost::visit(ZeroType *zeroType) {
    265268                if ( dynamic_cast< ZeroType* >( dest ) ) {
    266269                        cost = Cost::zero;
     
    278281        }
    279282
    280         void ConversionCost::visit( __attribute((unused)) OneType *oneType) {
     283        void ConversionCost::visit(OneType *oneType) {
    281284                if ( dynamic_cast< OneType* >( dest ) ) {
    282285                        cost = Cost::zero;
  • src/ResolvExpr/PtrsAssignable.cc

    r10e90cb r8ca3a72  
    6363        }
    6464
    65         PtrsAssignable::PtrsAssignable( Type *dest, const TypeEnvironment &env ) : dest( dest ), result( 0 ), env( env ) {}
     65        PtrsAssignable::PtrsAssignable( Type *dest, const TypeEnvironment &env ) : dest( dest ), result( 0 ), env( env ) {
     66        }
    6667
    67         void PtrsAssignable::visit( __attribute((unused)) VoidType *voidType ) {
     68        void PtrsAssignable::visit( VoidType *voidType ) {
    6869                if ( dynamic_cast< FunctionType* >( dest ) ) {
    6970                        result = 0;
     
    7374        }
    7475
    75         void PtrsAssignable::visit( __attribute__((unused)) BasicType *basicType ) {}
    76         void PtrsAssignable::visit( __attribute__((unused)) PointerType *pointerType ) {}
    77         void PtrsAssignable::visit( __attribute__((unused)) ArrayType *arrayType ) {}
    78         void PtrsAssignable::visit( __attribute__((unused)) FunctionType *functionType ) {
     76        void PtrsAssignable::visit( BasicType *basicType ) {
     77        }
     78
     79        void PtrsAssignable::visit( PointerType *pointerType ) {
     80        }
     81
     82        void PtrsAssignable::visit( ArrayType *arrayType ) {
     83        }
     84
     85        void PtrsAssignable::visit( FunctionType *functionType ) {
    7986                result = -1;
    8087        }
    8188
    82         void PtrsAssignable::visit(  __attribute__((unused)) StructInstType *inst ) {}
    83         void PtrsAssignable::visit(  __attribute__((unused)) UnionInstType *inst ) {}
     89        void PtrsAssignable::visit( StructInstType *inst ) {
     90                // I don't think we should be doing anything here, but I'm willing to admit that I might be wrong
     91        }
     92
     93        void PtrsAssignable::visit( UnionInstType *inst ) {
     94                // I don't think we should be doing anything here, but I'm willing to admit that I might be wrong
     95        }
    8496
    8597        void PtrsAssignable::visit( EnumInstType *inst ) {
     
    91103        }
    92104
    93         void PtrsAssignable::visit(  __attribute__((unused)) TraitInstType *inst ) {}
     105        void PtrsAssignable::visit( TraitInstType *inst ) {
     106                // I definitely don't think we should be doing anything here
     107        }
     108
    94109        void PtrsAssignable::visit( TypeInstType *inst ) {
    95110                EqvClass eqvClass;
     
    101116        }
    102117
    103         void PtrsAssignable::visit(  __attribute__((unused)) TupleType *tupleType ) {}
    104         void PtrsAssignable::visit(  __attribute__((unused)) VarArgsType *varArgsType ) {}
    105         void PtrsAssignable::visit(  __attribute__((unused)) ZeroType *zeroType ) {}
    106         void PtrsAssignable::visit(  __attribute__((unused)) OneType *oneType ) {}
     118        void PtrsAssignable::visit( TupleType *tupleType ) {
     119///  // This code doesn't belong here, but it might be useful somewhere else
     120///   if ( TupleType *destAsTuple = dynamic_cast< TupleType* >( dest ) ) {
     121///     int ret = 0;
     122///     std::list< Type* >::const_iterator srcIt = tupleType->get_types().begin();
     123///     std::list< Type* >::const_iterator destIt = destAsTuple->get_types().begin();
     124///     while ( srcIt != tupleType->get_types().end() && destIt != destAsTuple->get_types().end() ) {
     125///       int assignResult = ptrsAssignable( *srcIt++, *destIt++ );
     126///       if ( assignResult == 0 ) {
     127///         result = assignResult;
     128///         return;
     129///       } else if ( assignResult < 0 ) {
     130///         ret = -1;
     131///       } else if ( ret > 0 ) {
     132///         ret += assignResult;
     133///       }
     134///     }
     135///     if ( srcIt == tupleType->get_types().end() && destIt == destAsTuple->get_types().end() ) {
     136///       result = ret;
     137///     } else {
     138///       result = 0;
     139///     }
     140///   }
     141        }
     142
     143        void PtrsAssignable::visit( VarArgsType *varArgsType ) {
     144        }
     145
     146        void PtrsAssignable::visit( ZeroType *zeroType ) {
     147        }
     148       
     149        void PtrsAssignable::visit( OneType *oneType ) {
     150        }
    107151       
    108152} // namespace ResolvExpr
  • src/ResolvExpr/PtrsCastable.cc

    r10e90cb r8ca3a72  
    9292        }
    9393
    94         void PtrsCastable::visit( __attribute__((unused)) VoidType *voidType) {
     94        void PtrsCastable::visit(VoidType *voidType) {
    9595                result = objectCast( dest, env, indexer );
    9696        }
    9797
    98         void PtrsCastable::visit( __attribute__((unused)) BasicType *basicType) {
     98        void PtrsCastable::visit(BasicType *basicType) {
    9999                result = objectCast( dest, env, indexer );
    100100        }
    101101
    102         void PtrsCastable::visit( __attribute__((unused)) PointerType *pointerType) {
     102        void PtrsCastable::visit(PointerType *pointerType) {
    103103                result = objectCast( dest, env, indexer );
    104104        }
    105105
    106         void PtrsCastable::visit( __attribute__((unused)) ArrayType *arrayType) {
     106        void PtrsCastable::visit(ArrayType *arrayType) {
    107107                result = objectCast( dest, env, indexer );
    108108        }
    109109
    110         void PtrsCastable::visit( __attribute__((unused)) FunctionType *functionType) {
     110        void PtrsCastable::visit(FunctionType *functionType) {
    111111                // result = -1;
    112112                result = functionCast( dest, env, indexer );
    113113        }
    114114
    115         void PtrsCastable::visit( __attribute__((unused)) StructInstType *inst) {
     115        void PtrsCastable::visit(StructInstType *inst) {
    116116                result = objectCast( dest, env, indexer );
    117117        }
    118118
    119         void PtrsCastable::visit( __attribute__((unused)) UnionInstType *inst) {
     119        void PtrsCastable::visit(UnionInstType *inst) {
    120120                result = objectCast( dest, env, indexer );
    121121        }
    122122
    123         void PtrsCastable::visit( __attribute__((unused)) EnumInstType *inst) {
     123        void PtrsCastable::visit(EnumInstType *inst) {
    124124                if ( dynamic_cast< EnumInstType* >( dest ) ) {
    125125                        result = 1;
     
    144144        }
    145145
    146         void PtrsCastable::visit( __attribute__((unused)) TupleType *tupleType) {
     146        void PtrsCastable::visit(TupleType *tupleType) {
    147147                result = objectCast( dest, env, indexer );
    148148        }
    149149
    150         void PtrsCastable::visit( __attribute__((unused)) VarArgsType *varArgsType) {
     150        void PtrsCastable::visit(VarArgsType *varArgsType) {
    151151                result = objectCast( dest, env, indexer );
    152152        }
    153153
    154         void PtrsCastable::visit( __attribute__((unused)) ZeroType *zeroType) {
     154        void PtrsCastable::visit(ZeroType *zeroType) {
    155155                result = objectCast( dest, env, indexer );
    156156        }
    157157
    158         void PtrsCastable::visit( __attribute__((unused)) OneType *oneType) {
     158        void PtrsCastable::visit(OneType *oneType) {
    159159                result = objectCast( dest, env, indexer );
    160160        }
  • src/ResolvExpr/TypeMap.h

    r10e90cb r8ca3a72  
    110110                        }
    111111
    112                         virtual void visit( __attribute__((unused)) VoidType *voidType ) {
     112                        virtual void visit( VoidType *voidType ) {
    113113                                findAndReplace( typeMap.voidValue );
    114114                        }
     
    138138                        }
    139139
    140                         virtual void visit( __attribute__((unused)) FunctionType *functionType ) {
     140                        virtual void visit( FunctionType *functionType ) {
    141141                                findAndReplace( typeMap.functionPointerValue );
    142142                        }
  • src/ResolvExpr/typeops.h

    r10e90cb r8ca3a72  
    132132        }
    133133
     134        template< typename Container1, typename Container2 >
     135        bool typesCompatibleList( Container1 &c1, Container2 &c2, const SymTab::Indexer &indexer, const TypeEnvironment &env ) {
     136                typename Container1::iterator i1 = c1.begin();
     137                typename Container2::iterator i2 = c2.begin();
     138                for ( ; i1 != c1.end() && i2 != c2.end(); ++i1, ++i2 ) {
     139                        if ( ! typesCompatible( *i1, *i2, indexer ) ) {
     140                                return false;
     141                        } // if
     142                }
     143                return ( i1 == c1.end() ) && ( i2 == c2.end() );
     144        }
     145
    134146        /// creates the type represented by the list of returnVals in a FunctionType. The caller owns the return value.
    135147        Type * extractResultType( FunctionType * functionType );
  • src/SymTab/ImplementationType.cc

    r10e90cb r8ca3a72  
    6161        }
    6262
    63         void ImplementationType::visit( __attribute__((unused)) VoidType *voidType ) {}
    64         void ImplementationType::visit( __attribute__((unused)) BasicType *basicType ) {}
     63        void ImplementationType::visit(VoidType *voidType) {
     64        }
     65
     66        void ImplementationType::visit(BasicType *basicType) {
     67        }
    6568
    6669        void ImplementationType::visit(PointerType *pointerType) {
     
    8689        }
    8790
    88         void ImplementationType::visit( __attribute__((unused)) StructInstType * aggregateUseType ) {}
    89         void ImplementationType::visit( __attribute__((unused)) UnionInstType * aggregateUseType ) {}
    90         void ImplementationType::visit( __attribute__((unused)) EnumInstType * aggregateUseType ) {}
    91         void ImplementationType::visit( __attribute__((unused)) TraitInstType * aggregateUseType ) {}
     91        void ImplementationType::visit(StructInstType *aggregateUseType) {
     92        }
     93
     94        void ImplementationType::visit(UnionInstType *aggregateUseType) {
     95        }
     96
     97        void ImplementationType::visit(EnumInstType *aggregateUseType) {
     98        }
     99
     100        void ImplementationType::visit(TraitInstType *aggregateUseType) {
     101        }
    92102
    93103        void ImplementationType::visit(TypeInstType *inst) {
     
    110120        }
    111121
    112         void ImplementationType::visit( __attribute__((unused)) VarArgsType *varArgsType ) {}
    113         void ImplementationType::visit( __attribute__((unused)) ZeroType *zeroType ) {}
    114         void ImplementationType::visit( __attribute__((unused)) OneType *oneType ) {}
     122        void ImplementationType::visit(VarArgsType *varArgsType) {
     123        }
     124
     125        void ImplementationType::visit(ZeroType *zeroType) {
     126        }
     127
     128        void ImplementationType::visit(OneType *oneType) {
     129        }
    115130} // namespace SymTab
    116131
  • src/SynTree/Statement.cc

    r10e90cb r8ca3a72  
    3030Statement::Statement( std::list<Label> _labels ) : labels( _labels ) {}
    3131
    32 void Statement::print( __attribute__((unused)) std::ostream &, __attribute__((unused)) int indent ) const {}
     32void Statement::print( std::ostream &, int indent ) const {}
    3333
    3434Statement::~Statement() {}
     
    365365NullStmt::NullStmt() : CompoundStmt( std::list<Label>() ) {}
    366366
    367 void NullStmt::print( std::ostream &os, __attribute__((unused)) int indent ) const {
     367void NullStmt::print( std::ostream &os, int indent ) const {
    368368        os << "Null Statement" << endl ;
    369369}
  • src/SynTree/Type.h

    r10e90cb r8ca3a72  
    334334        virtual void print( std::ostream & os, int indent = 0 ) const;
    335335
    336         virtual void lookup( __attribute__((unused)) const std::string & name, __attribute__((unused)) std::list< Declaration* > & foundDecls ) const {}
     336        virtual void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const {}
    337337  protected:
    338338        virtual std::string typeString() const = 0;
  • src/SynTree/Visitor.cc

    r10e90cb r8ca3a72  
    122122}
    123123
    124 void Visitor::visit( __attribute__((unused)) BranchStmt *branchStmt ) {
     124void Visitor::visit( BranchStmt *branchStmt ) {
    125125}
    126126
     
    143143}
    144144
    145 void Visitor::visit( __attribute__((unused)) NullStmt *nullStmt ) {
     145void Visitor::visit( NullStmt *nullStmt ) {
    146146}
    147147
     
    445445
    446446
    447 void Visitor::visit( __attribute__((unused)) Subrange *subrange ) {}
    448 
    449 
    450 void Visitor::visit( __attribute__((unused)) Constant *constant ) {}
     447void Visitor::visit( Subrange *subrange ) {}
     448
     449
     450void Visitor::visit( Constant *constant ) {}
    451451// Local Variables: //
    452452// tab-width: 4 //
  • src/driver/cc1.cc

    r10e90cb r8ca3a72  
    8484
    8585
    86 void sigTermHandler( __attribute__((unused)) int signal ) {
     86void sigTermHandler( int signal ) {
    8787        if ( tmpfilefd != -1 ) {                                                        // RACE, file created ?
    8888                rmtmpfile();                                                                    // remove
     
    469469
    470470
    471 int main( const int argc, const char * const argv[], __attribute__((unused)) const char * const env[] ) {
     471int main( const int argc, const char * const argv[], const char * const env[] ) {
    472472#ifdef __DEBUG_H__
    473473        for ( int i = 0; env[i] != NULL; i += 1 ) {
  • src/driver/cfa.cc

    r10e90cb r8ca3a72  
    271271                args[nargs] = "-ldl";
    272272                nargs += 1;
    273                 args[nargs] = "-lrt";
    274                 nargs += 1;
    275273                args[nargs] = "-Xlinker";
    276274                nargs += 1;
  • src/libcfa/Makefile.am

    r10e90cb r8ca3a72  
    5454# not all platforms support concurrency, add option do disable it
    5555if BUILD_CONCURRENCY
    56 libsrc += concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c concurrency/invoke.c concurrency/preemption.c
     56libsrc += concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c concurrency/invoke.c concurrency/signal.c
    5757endif
    5858
  • src/libcfa/Makefile.in

    r10e90cb r8ca3a72  
    4646
    4747# not all platforms support concurrency, add option do disable it
    48 @BUILD_CONCURRENCY_TRUE@am__append_4 = concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c concurrency/invoke.c concurrency/preemption.c
     48@BUILD_CONCURRENCY_TRUE@am__append_4 = concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c concurrency/invoke.c concurrency/signal.c
    4949subdir = src/libcfa
    5050DIST_COMMON = $(am__nobase_cfa_include_HEADERS_DIST) \
     
    104104        concurrency/kernel.c concurrency/monitor.c \
    105105        concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c \
    106         concurrency/invoke.c concurrency/preemption.c
     106        concurrency/invoke.c concurrency/signal.c
    107107am__dirstamp = $(am__leading_dot)dirstamp
    108108@BUILD_CONCURRENCY_TRUE@am__objects_1 = concurrency/libcfa_d_a-coroutine.$(OBJEXT) \
     
    122122@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-alarm.$(OBJEXT) \
    123123@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-invoke.$(OBJEXT) \
    124 @BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-preemption.$(OBJEXT)
     124@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-signal.$(OBJEXT)
    125125am__objects_4 = libcfa_d_a-libcfa-prelude.$(OBJEXT) \
    126126        libcfa_d_a-interpose.$(OBJEXT) \
     
    138138        concurrency/kernel.c concurrency/monitor.c \
    139139        concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c \
    140         concurrency/invoke.c concurrency/preemption.c
     140        concurrency/invoke.c concurrency/signal.c
    141141@BUILD_CONCURRENCY_TRUE@am__objects_5 = concurrency/libcfa_a-coroutine.$(OBJEXT) \
    142142@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-thread.$(OBJEXT) \
     
    154154@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-alarm.$(OBJEXT) \
    155155@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-invoke.$(OBJEXT) \
    156 @BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-preemption.$(OBJEXT)
     156@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-signal.$(OBJEXT)
    157157am__objects_8 = libcfa_a-libcfa-prelude.$(OBJEXT) \
    158158        libcfa_a-interpose.$(OBJEXT) \
     
    445445concurrency/libcfa_d_a-invoke.$(OBJEXT): concurrency/$(am__dirstamp) \
    446446        concurrency/$(DEPDIR)/$(am__dirstamp)
    447 concurrency/libcfa_d_a-preemption.$(OBJEXT):  \
    448         concurrency/$(am__dirstamp) \
     447concurrency/libcfa_d_a-signal.$(OBJEXT): concurrency/$(am__dirstamp) \
    449448        concurrency/$(DEPDIR)/$(am__dirstamp)
    450449libcfa-d.a: $(libcfa_d_a_OBJECTS) $(libcfa_d_a_DEPENDENCIES) $(EXTRA_libcfa_d_a_DEPENDENCIES)
     
    474473concurrency/libcfa_a-invoke.$(OBJEXT): concurrency/$(am__dirstamp) \
    475474        concurrency/$(DEPDIR)/$(am__dirstamp)
    476 concurrency/libcfa_a-preemption.$(OBJEXT):  \
    477         concurrency/$(am__dirstamp) \
     475concurrency/libcfa_a-signal.$(OBJEXT): concurrency/$(am__dirstamp) \
    478476        concurrency/$(DEPDIR)/$(am__dirstamp)
    479477libcfa.a: $(libcfa_a_OBJECTS) $(libcfa_a_DEPENDENCIES) $(EXTRA_libcfa_a_DEPENDENCIES)
     
    490488        -rm -f concurrency/libcfa_a-kernel.$(OBJEXT)
    491489        -rm -f concurrency/libcfa_a-monitor.$(OBJEXT)
    492         -rm -f concurrency/libcfa_a-preemption.$(OBJEXT)
     490        -rm -f concurrency/libcfa_a-signal.$(OBJEXT)
    493491        -rm -f concurrency/libcfa_a-thread.$(OBJEXT)
    494492        -rm -f concurrency/libcfa_d_a-alarm.$(OBJEXT)
     
    497495        -rm -f concurrency/libcfa_d_a-kernel.$(OBJEXT)
    498496        -rm -f concurrency/libcfa_d_a-monitor.$(OBJEXT)
    499         -rm -f concurrency/libcfa_d_a-preemption.$(OBJEXT)
     497        -rm -f concurrency/libcfa_d_a-signal.$(OBJEXT)
    500498        -rm -f concurrency/libcfa_d_a-thread.$(OBJEXT)
    501499        -rm -f containers/libcfa_a-maybe.$(OBJEXT)
     
    539537@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-kernel.Po@am__quote@
    540538@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-monitor.Po@am__quote@
    541 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-preemption.Po@am__quote@
     539@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-signal.Po@am__quote@
    542540@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-thread.Po@am__quote@
    543541@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-alarm.Po@am__quote@
     
    546544@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-kernel.Po@am__quote@
    547545@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-monitor.Po@am__quote@
    548 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-preemption.Po@am__quote@
     546@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-signal.Po@am__quote@
    549547@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-thread.Po@am__quote@
    550548@AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/libcfa_a-maybe.Po@am__quote@
     
    871869@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-invoke.obj `if test -f 'concurrency/invoke.c'; then $(CYGPATH_W) 'concurrency/invoke.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/invoke.c'; fi`
    872870
    873 concurrency/libcfa_d_a-preemption.o: concurrency/preemption.c
    874 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-preemption.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-preemption.Tpo -c -o concurrency/libcfa_d_a-preemption.o `test -f 'concurrency/preemption.c' || echo '$(srcdir)/'`concurrency/preemption.c
    875 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-preemption.Tpo concurrency/$(DEPDIR)/libcfa_d_a-preemption.Po
    876 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/preemption.c' object='concurrency/libcfa_d_a-preemption.o' libtool=no @AMDEPBACKSLASH@
    877 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    878 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-preemption.o `test -f 'concurrency/preemption.c' || echo '$(srcdir)/'`concurrency/preemption.c
    879 
    880 concurrency/libcfa_d_a-preemption.obj: concurrency/preemption.c
    881 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-preemption.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-preemption.Tpo -c -o concurrency/libcfa_d_a-preemption.obj `if test -f 'concurrency/preemption.c'; then $(CYGPATH_W) 'concurrency/preemption.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/preemption.c'; fi`
    882 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-preemption.Tpo concurrency/$(DEPDIR)/libcfa_d_a-preemption.Po
    883 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/preemption.c' object='concurrency/libcfa_d_a-preemption.obj' libtool=no @AMDEPBACKSLASH@
    884 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    885 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-preemption.obj `if test -f 'concurrency/preemption.c'; then $(CYGPATH_W) 'concurrency/preemption.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/preemption.c'; fi`
     871concurrency/libcfa_d_a-signal.o: concurrency/signal.c
     872@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-signal.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-signal.Tpo -c -o concurrency/libcfa_d_a-signal.o `test -f 'concurrency/signal.c' || echo '$(srcdir)/'`concurrency/signal.c
     873@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-signal.Tpo concurrency/$(DEPDIR)/libcfa_d_a-signal.Po
     874@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/signal.c' object='concurrency/libcfa_d_a-signal.o' libtool=no @AMDEPBACKSLASH@
     875@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     876@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-signal.o `test -f 'concurrency/signal.c' || echo '$(srcdir)/'`concurrency/signal.c
     877
     878concurrency/libcfa_d_a-signal.obj: concurrency/signal.c
     879@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-signal.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-signal.Tpo -c -o concurrency/libcfa_d_a-signal.obj `if test -f 'concurrency/signal.c'; then $(CYGPATH_W) 'concurrency/signal.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/signal.c'; fi`
     880@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-signal.Tpo concurrency/$(DEPDIR)/libcfa_d_a-signal.Po
     881@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/signal.c' object='concurrency/libcfa_d_a-signal.obj' libtool=no @AMDEPBACKSLASH@
     882@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     883@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-signal.obj `if test -f 'concurrency/signal.c'; then $(CYGPATH_W) 'concurrency/signal.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/signal.c'; fi`
    886884
    887885libcfa_a-libcfa-prelude.obj: libcfa-prelude.c
     
    11651163@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-invoke.obj `if test -f 'concurrency/invoke.c'; then $(CYGPATH_W) 'concurrency/invoke.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/invoke.c'; fi`
    11661164
    1167 concurrency/libcfa_a-preemption.o: concurrency/preemption.c
    1168 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-preemption.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-preemption.Tpo -c -o concurrency/libcfa_a-preemption.o `test -f 'concurrency/preemption.c' || echo '$(srcdir)/'`concurrency/preemption.c
    1169 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-preemption.Tpo concurrency/$(DEPDIR)/libcfa_a-preemption.Po
    1170 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/preemption.c' object='concurrency/libcfa_a-preemption.o' libtool=no @AMDEPBACKSLASH@
    1171 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1172 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-preemption.o `test -f 'concurrency/preemption.c' || echo '$(srcdir)/'`concurrency/preemption.c
    1173 
    1174 concurrency/libcfa_a-preemption.obj: concurrency/preemption.c
    1175 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-preemption.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-preemption.Tpo -c -o concurrency/libcfa_a-preemption.obj `if test -f 'concurrency/preemption.c'; then $(CYGPATH_W) 'concurrency/preemption.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/preemption.c'; fi`
    1176 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-preemption.Tpo concurrency/$(DEPDIR)/libcfa_a-preemption.Po
    1177 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/preemption.c' object='concurrency/libcfa_a-preemption.obj' libtool=no @AMDEPBACKSLASH@
    1178 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1179 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-preemption.obj `if test -f 'concurrency/preemption.c'; then $(CYGPATH_W) 'concurrency/preemption.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/preemption.c'; fi`
     1165concurrency/libcfa_a-signal.o: concurrency/signal.c
     1166@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-signal.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-signal.Tpo -c -o concurrency/libcfa_a-signal.o `test -f 'concurrency/signal.c' || echo '$(srcdir)/'`concurrency/signal.c
     1167@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-signal.Tpo concurrency/$(DEPDIR)/libcfa_a-signal.Po
     1168@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/signal.c' object='concurrency/libcfa_a-signal.o' libtool=no @AMDEPBACKSLASH@
     1169@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1170@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-signal.o `test -f 'concurrency/signal.c' || echo '$(srcdir)/'`concurrency/signal.c
     1171
     1172concurrency/libcfa_a-signal.obj: concurrency/signal.c
     1173@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-signal.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-signal.Tpo -c -o concurrency/libcfa_a-signal.obj `if test -f 'concurrency/signal.c'; then $(CYGPATH_W) 'concurrency/signal.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/signal.c'; fi`
     1174@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-signal.Tpo concurrency/$(DEPDIR)/libcfa_a-signal.Po
     1175@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/signal.c' object='concurrency/libcfa_a-signal.obj' libtool=no @AMDEPBACKSLASH@
     1176@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1177@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-signal.obj `if test -f 'concurrency/signal.c'; then $(CYGPATH_W) 'concurrency/signal.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/signal.c'; fi`
    11801178install-nobase_cfa_includeHEADERS: $(nobase_cfa_include_HEADERS)
    11811179        @$(NORMAL_INSTALL)
  • src/libcfa/concurrency/alarm.c

    r10e90cb r8ca3a72  
    1 //                              -*- Mode: CFA -*-
    2 //
    3 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
    4 //
    5 // The contents of this file are covered under the licence agreement in the
    6 // file "LICENCE" distributed with Cforall.
    7 //
    8 // alarm.c --
    9 //
    10 // Author           : Thierry Delisle
    11 // Created On       : Fri Jun 2 11:31:25 2017
    12 // Last Modified By : Thierry Delisle
    13 // Last Modified On : --
    14 // Update Count     : 0
    15 //
    16 
    17 extern "C" {
    18 #include <time.h>
    19 #include <sys/time.h>
    20 }
    21 
    22 #include "alarm.h"
    23 #include "kernel_private.h"
    24 #include "preemption.h"
    25 
    26 //=============================================================================================
    27 // Clock logic
    28 //=============================================================================================
    29 
    30 __cfa_time_t __kernel_get_time() {
    31         timespec curr;
    32         clock_gettime( CLOCK_REALTIME, &curr );
    33         return ((__cfa_time_t)curr.tv_sec * TIMEGRAN) + curr.tv_nsec;
    34 }
    35 
    36 void __kernel_set_timer( __cfa_time_t alarm ) {
    37         itimerval val;
    38         val.it_value.tv_sec = alarm / TIMEGRAN;                 // seconds
    39         val.it_value.tv_usec = (alarm % TIMEGRAN) / ( TIMEGRAN / 1_000_000L ); // microseconds
    40         val.it_interval.tv_sec = 0;
    41         val.it_interval.tv_usec = 0;
    42         setitimer( ITIMER_REAL, &val, NULL );
    43 }
    44 
    45 //=============================================================================================
    46 // Alarm logic
    47 //=============================================================================================
    48 
    49 void ?{}( alarm_node_t * this, thread_desc * thrd, __cfa_time_t alarm = 0, __cfa_time_t period = 0 ) {
    50         this->thrd = thrd;
    51         this->alarm = alarm;
    52         this->period = period;
    53         this->next = 0;
    54         this->set = false;
    55         this->kernel_alarm = false;
    56 }
    57 
    58 void ?{}( alarm_node_t * this, processor   * proc, __cfa_time_t alarm = 0, __cfa_time_t period = 0 ) {
    59         this->proc = proc;
    60         this->alarm = alarm;
    61         this->period = period;
    62         this->next = 0;
    63         this->set = false;
    64         this->kernel_alarm = true;
    65 }
    66 
    67 void ^?{}( alarm_node_t * this ) {
    68         if( this->set ) {
    69                 unregister_self( this );
    70         }
    71 }
    72 
    73 static inline void insert_at( alarm_list_t * this, alarm_node_t * n, __alarm_it_t p ) {
    74         assert( !n->next );
    75         if( p == this->tail ) {
    76                 this->tail = &n->next;
    77         }
    78         else {
    79                 n->next = *p;
    80         }
    81         *p = n;
    82 }
    83 
    84 void insert( alarm_list_t * this, alarm_node_t * n ) {
    85         alarm_node_t ** it = &this->head;
    86         while( (*it) && (n->alarm > (*it)->alarm) ) {
    87                 it = &(*it)->next;
    88         }
    89 
    90         insert_at( this, n, it );
    91 }
    92 
    93 alarm_node_t * pop( alarm_list_t * this ) {
    94         alarm_node_t * head = this->head;
    95         if( head ) {
    96                 this->head = head->next;
    97                 if( !head->next ) {
    98                         this->tail = &this->head;
    99                 }
    100                 head->next = NULL;
    101         }
    102         return head;
    103 }
    104 
    105 static inline void remove_at( alarm_list_t * this, alarm_node_t * n, __alarm_it_t it ) {
    106         assert( it );
    107         assert( (*it)->next == n );
    108 
    109         (*it)->next = n->next;
    110         if( !n-> next ) {
    111                 this->tail = it;
    112         }
    113         n->next = NULL;
    114 }
    115 
    116 static inline void remove( alarm_list_t * this, alarm_node_t * n ) {
    117         alarm_node_t ** it = &this->head;
    118         while( (*it) && (*it)->next != n ) {
    119                 it = &(*it)->next;
    120         }
    121 
    122         if( *it ) { remove_at( this, n, it ); }
    123 }
    124 
    125 void register_self( alarm_node_t * this ) {
    126         disable_interrupts();
    127         assert( !systemProcessor->pending_alarm );
    128         lock( &systemProcessor->alarm_lock );
    129         {
    130                 insert( &systemProcessor->alarms, this );
    131                 if( systemProcessor->pending_alarm ) {
    132                         tick_preemption();
    133                 }
    134         }
    135         unlock( &systemProcessor->alarm_lock );
    136         this->set = true;
    137         enable_interrupts();
    138 }
    139 
    140 void unregister_self( alarm_node_t * this ) {
    141         disable_interrupts();
    142         lock( &systemProcessor->alarm_lock );
    143         remove( &systemProcessor->alarms, this );
    144         unlock( &systemProcessor->alarm_lock );
    145         disable_interrupts();
    146         this->set = false;
    147 }
  • src/libcfa/concurrency/kernel

    r10e90cb r8ca3a72  
    2828//-----------------------------------------------------------------------------
    2929// Locks
    30 bool try_lock( spinlock * );
    3130void lock( spinlock * );
    3231void unlock( spinlock * );
     
    8685
    8786        struct FinishAction finish;
    88 
    89         struct alarm_node_t * preemption_alarm;
    90         unsigned int preemption;
    91 
    92         unsigned short disable_preempt_count;
    93 
    94         bool pending_preemption;
    9587};
    9688
     
    10294
    10395// Local Variables: //
    104 // mode: CFA //
    105 // tab-width: 6 //
     96// mode: c //
     97// tab-width: 4 //
    10698// End: //
  • src/libcfa/concurrency/kernel.c

    r10e90cb r8ca3a72  
    3636//CFA Includes
    3737#include "libhdr.h"
    38 #include "preemption.h"
    3938
    4039//Private includes
     
    4847KERNEL_STORAGE(processorCtx_t, systemProcessorCtx);
    4948KERNEL_STORAGE(cluster, systemCluster);
    50 KERNEL_STORAGE(system_proc_t, systemProcessor);
     49KERNEL_STORAGE(processor, systemProcessor);
    5150KERNEL_STORAGE(thread_desc, mainThread);
    5251KERNEL_STORAGE(machine_context_t, mainThread_context);
    5352
    5453cluster * systemCluster;
    55 system_proc_t * systemProcessor;
     54processor * systemProcessor;
    5655thread_desc * mainThread;
    5756
     
    119118// Processor coroutine
    120119void ?{}(processorCtx_t * this, processor * proc) {
    121         (&this->__cor){ "Processor" };
     120        (&this->__cor){};
    122121        this->proc = proc;
    123122        proc->runner = this;
     
    140139        (&this->terminated){};
    141140        this->is_terminated = false;
    142         this->preemption_alarm = NULL;
    143         this->preemption = default_preemption();
    144         this->disable_preempt_count = 1;                //Start with interrupts disabled
    145         this->pending_preemption = false;
    146141
    147142        start( this );
     
    154149        (&this->terminated){};
    155150        this->is_terminated = false;
    156         this->disable_preempt_count = 0;
    157         this->pending_preemption = false;
    158151
    159152        this->runner = runner;
    160153        LIB_DEBUG_PRINT_SAFE("Kernel : constructing processor context %p\n", runner);
    161154        runner{ this };
    162 }
    163 
    164 void ?{}(system_proc_t * this, cluster * cltr, processorCtx_t * runner) {
    165         (&this->alarms){};
    166         (&this->alarm_lock){};
    167         this->pending_alarm = false;
    168 
    169         (&this->proc){ cltr, runner };
    170155}
    171156
     
    193178void main(processorCtx_t * runner) {
    194179        processor * this = runner->proc;
    195 
    196180        LIB_DEBUG_PRINT_SAFE("Kernel : core %p starting\n", this);
    197181
     182        thread_desc * readyThread = NULL;
     183        for( unsigned int spin_count = 0; ! this->is_terminated; spin_count++ )
    198184        {
    199                 // Setup preemption data
    200                 preemption_scope scope = { this };
    201 
    202                 LIB_DEBUG_PRINT_SAFE("Kernel : core %p started\n", this);
    203 
    204                 thread_desc * readyThread = NULL;
    205                 for( unsigned int spin_count = 0; ! this->is_terminated; spin_count++ )
     185                readyThread = nextThread( this->cltr );
     186
     187                if(readyThread)
    206188                {
    207                         readyThread = nextThread( this->cltr );
    208 
    209                         if(readyThread)
    210                         {
    211                                 runThread(this, readyThread);
    212 
    213                                 //Some actions need to be taken from the kernel
    214                                 finishRunning(this);
    215 
    216                                 spin_count = 0;
    217                         }
    218                         else
    219                         {
    220                                 spin(this, &spin_count);
    221                         }
    222                 }
    223 
    224                 LIB_DEBUG_PRINT_SAFE("Kernel : core %p stopping\n", this);
    225         }
    226 
     189                        runThread(this, readyThread);
     190
     191                        //Some actions need to be taken from the kernel
     192                        finishRunning(this);
     193
     194                        spin_count = 0;
     195                }
     196                else
     197                {
     198                        spin(this, &spin_count);
     199                }               
     200        }
     201
     202        LIB_DEBUG_PRINT_SAFE("Kernel : core %p unlocking thread\n", this);
    227203        signal( &this->terminated );
    228204        LIB_DEBUG_PRINT_SAFE("Kernel : core %p terminated\n", this);
     
    323299        LIB_DEBUG_PRINT_SAFE("Kernel : Starting core %p\n", this);
    324300       
     301        // pthread_attr_t attributes;
     302        // pthread_attr_init( &attributes );
     303
    325304        pthread_create( &this->kernel_thread, NULL, CtxInvokeProcessor, (void*)this );
     305
     306        // pthread_attr_destroy( &attributes );
    326307
    327308        LIB_DEBUG_PRINT_SAFE("Kernel : core %p started\n", this);       
     
    335316        assertf( thrd->next == NULL, "Expected null got %p", thrd->next );
    336317       
    337         lock( &systemProcessor->proc.cltr->lock );
    338         append( &systemProcessor->proc.cltr->ready_queue, thrd );
    339         unlock( &systemProcessor->proc.cltr->lock );
     318        lock( &systemProcessor->cltr->lock );
     319        append( &systemProcessor->cltr->ready_queue, thrd );
     320        unlock( &systemProcessor->cltr->lock );
    340321}
    341322
     
    386367}
    387368
    388 //=============================================================================================
    389 // Kernel Setup logic
    390 //=============================================================================================
    391369//-----------------------------------------------------------------------------
    392370// Kernel boot procedures
     
    401379        mainThread{ &info };
    402380
    403         LIB_DEBUG_PRINT_SAFE("Kernel : Main thread ready\n");
    404 
    405         // Enable preemption
    406         kernel_start_preemption();
    407 
    408381        // Initialize the system cluster
    409382        systemCluster = (cluster *)&systemCluster_storage;
    410383        systemCluster{};
    411384
    412         LIB_DEBUG_PRINT_SAFE("Kernel : System cluster ready\n");
    413 
    414385        // Initialize the system processor and the system processor ctx
    415386        // (the coroutine that contains the processing control flow)
    416         systemProcessor = (system_proc_t *)&systemProcessor_storage;
     387        systemProcessor = (processor *)&systemProcessor_storage;
    417388        systemProcessor{ systemCluster, (processorCtx_t *)&systemProcessorCtx_storage };
    418389
    419390        // Add the main thread to the ready queue
    420         // once resume is called on systemProcessor->runner the mainThread needs to be scheduled like any normal thread
     391        // once resume is called on systemProcessor->ctx the mainThread needs to be scheduled like any normal thread
    421392        ScheduleThread(mainThread);
    422393
    423394        //initialize the global state variables
    424         this_processor = &systemProcessor->proc;
     395        this_processor = systemProcessor;
    425396        this_processor->current_thread = mainThread;
    426397        this_processor->current_coroutine = &mainThread->cor;
     
    429400        // context. Hence, the main thread does not begin through CtxInvokeThread, like all other threads. The trick here is that
    430401        // mainThread is on the ready queue when this call is made.
    431         resume( systemProcessor->proc.runner );
     402        resume(systemProcessor->runner);
    432403
    433404
     
    443414        // When its coroutine terminates, it return control to the mainThread
    444415        // which is currently here
    445         systemProcessor->proc.is_terminated = true;
     416        systemProcessor->is_terminated = true;
    446417        suspend();
    447418
     
    450421        // Destroy the system processor and its context in reverse order of construction
    451422        // These were manually constructed so we need manually destroy them
    452         ^(systemProcessor->proc.runner){};
     423        ^(systemProcessor->runner){};
    453424        ^(systemProcessor){};
    454425
     
    513484}
    514485
    515 //=============================================================================================
    516 // Kernel Utilities
    517 //=============================================================================================
    518486//-----------------------------------------------------------------------------
    519487// Locks
     
    523491void ^?{}( spinlock * this ) {
    524492
    525 }
    526 
    527 bool try_lock( spinlock * this ) {
    528         return this->lock == 0 && __sync_lock_test_and_set_4( &this->lock, 1 ) == 0;
    529493}
    530494
  • src/libcfa/concurrency/kernel_private.h

    r10e90cb r8ca3a72  
    2121#include "thread"
    2222
    23 #include "alarm.h"
    24 
    2523//-----------------------------------------------------------------------------
    2624// Scheduler
     
    3735//-----------------------------------------------------------------------------
    3836// Processor
    39 coroutine processorCtx_t {
     37struct processorCtx_t {
    4038        processor * proc;
     39        coroutine_desc __cor;
    4140};
     41
     42DECL_COROUTINE(processorCtx_t);
    4243
    4344void main(processorCtx_t *);
     
    4647void finishRunning(processor * this);
    4748void spin(processor * this, unsigned int * spin_count);
    48 
    49 struct system_proc_t {
    50         processor proc;
    51 
    52         alarm_list_t alarms;
    53         spinlock alarm_lock;
    54 
    55         bool pending_alarm;
    56 };
    57 
    58 extern cluster * systemCluster;
    59 extern system_proc_t * systemProcessor;
    60 extern thread_local processor * this_processor;
    61 
    62 static inline void disable_interrupts() {
    63         __attribute__((unused)) unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, 1, __ATOMIC_SEQ_CST );
    64         assert( prev != (unsigned short) -1 );
    65 }
    66 
    67 static inline void enable_interrupts_noRF() {
    68         unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, -1, __ATOMIC_SEQ_CST );
    69         assert( prev != (unsigned short) 0 );
    70 }
    71 
    72 static inline void enable_interrupts() {
    73         unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, -1, __ATOMIC_SEQ_CST );
    74         assert( prev != (unsigned short) 0 );
    75         if( prev == 1 && this_processor->pending_preemption ) {
    76                 ScheduleInternal( this_processor->current_thread );
    77                 this_processor->pending_preemption = false;
    78         }
    79 }
    8049
    8150//-----------------------------------------------------------------------------
  • src/libcfa/concurrency/monitor

    r10e90cb r8ca3a72  
    9292uintptr_t front( condition * this );
    9393
    94 struct __acceptable_t {
    95         void (*func)(void);
    96         unsigned short count;
    97         monitor_desc * monitors[1];
    98 };
    99 
    100 void __accept_internal( unsigned short count, __acceptable_t * acceptables, void (*func)(void) );
    101 
    10294#endif //MONITOR_H
  • src/libcfa/concurrency/monitor.c

    r10e90cb r8ca3a72  
    212212        ScheduleInternal( locks, count, threads, thread_count );
    213213
    214 
    215214        //WE WOKE UP
    216215
     
    313312        ScheduleInternal( locks, count, &signallee, 1 );
    314313
    315 
    316 
    317 
    318314        LIB_DEBUG_PRINT_SAFE( "Back from signal block\n" );
    319315
     
    334330        );
    335331        return this->blocked.head->user_info;
    336 }
    337 
    338 //-----------------------------------------------------------------------------
    339 // Internal scheduling
    340 void __accept_internal( unsigned short count, __acceptable_t * acceptables, void (*func)(void) ) {
    341         // thread_desc * this = this_thread();
    342 
    343         // unsigned short count = this->current_monitor_count;
    344         // unsigned int recursions[ count ];            //Save the current recursion levels to restore them later
    345         // spinlock *   locks     [ count ];            //We need to pass-in an array of locks to ScheduleInternal
    346 
    347         // lock_all( this->current_monitors, locks, count );
    348 
    349 
    350 
    351 
    352 
    353         // // // Everything is ready to go to sleep
    354         // // ScheduleInternal( locks, count, threads, thread_count );
    355 
    356 
    357         // //WE WOKE UP
    358 
    359 
    360         // //We are back, restore the owners and recursions
    361         // lock_all( locks, count );
    362         // restore_recursion( this->monitors, recursions, count );
    363         // unlock_all( locks, count );
    364332}
    365333
  • src/main.cc

    r10e90cb r8ca3a72  
    146146} // sigSegvBusHandler
    147147
    148 void sigAbortHandler( __attribute__((unused)) int sig_num ) {
     148void sigAbortHandler( int sig_num ) {
    149149        backtrace( 6 );                                                                         // skip first 6 stack frames
    150150        signal( SIGABRT, SIG_DFL);                                                      // reset default signal handler
  • src/tests/test.py

    r10e90cb r8ca3a72  
    197197                        # fetch return code and error from the diff command
    198198                        retcode, error = diff(".expect/%s.txt" % test.path, ".out/%s.log" % test.name, dry_run)
    199 
    200         else:
    201                 with open (out_file, "r") as myfile:
    202                         error = myfile.read()
    203 
    204                
    205199        # clean the executable
    206200        sh("rm -f %s > /dev/null 2>&1" % test.name, dry_run)
Note: See TracChangeset for help on using the changeset viewer.