Changes in / [f2e40a9f:bf4ac09]


Ignore:
Files:
4 added
4 deleted
32 edited

Legend:

Unmodified
Added
Removed
  • Jenkins/FullBuild

    rf2e40a9f rbf4ac09  
    2020
    2121                                        parallel (
    22                                                 gcc_6_x64: { trigger_build( 'gcc-6',   'x64', true ) },
    23                                                 gcc_6_x86: { trigger_build( 'gcc-6',   'x86', true ) },
    24                                                 gcc_5_x64: { trigger_build( 'gcc-5',   'x64', false ) },
    25                                                 gcc_5_x86: { trigger_build( 'gcc-5',   'x86', false ) },
    26                                                 gcc_4_x64: { trigger_build( 'gcc-4.9', 'x64', false ) },
    27                                                 gcc_4_x86: { trigger_build( 'gcc-4.9', 'x86', false ) },
    28                                                 clang_x64: { trigger_build( 'clang',   'x64', false ) },
    29                                                 clang_x86: { trigger_build( 'clang',   'x86', false ) },
     22                                                gcc_6_x64: { trigger_build( 'gcc-6',   'x64' ) },
     23                                                gcc_6_x86: { trigger_build( 'gcc-6',   'x86' ) },
     24                                                gcc_5_x64: { trigger_build( 'gcc-5',   'x64' ) },
     25                                                gcc_5_x86: { trigger_build( 'gcc-5',   'x86' ) },
     26                                                gcc_4_x64: { trigger_build( 'gcc-4.9', 'x64' ) },
     27                                                gcc_4_x86: { trigger_build( 'gcc-4.9', 'x86' ) },
     28                                                clang_x64: { trigger_build( 'clang',   'x64' ) },
     29                                                clang_x86: { trigger_build( 'clang',   'x86' ) },
    3030                                        )
    3131
     
    6262//===========================================================================================================
    6363
    64 def trigger_build(String cc, String arch, Boolean publish) {
     64def trigger_build(String cc, String arch) {
    6565        def result = build job: 'Cforall/master',               \
    6666                parameters: [                                           \
     
    8282                        [$class: 'BooleanParameterValue',               \
    8383                          name: 'pPublish',                             \
    84                           value: publish],                                      \
     84                          value: true],                                         \
    8585                        [$class: 'BooleanParameterValue',               \
    8686                          name: 'pSilent',                              \
  • Jenkinsfile

    rf2e40a9f rbf4ac09  
    131131                                [$class: 'BooleanParameterDefinition',                                                  \
    132132                                        description: 'If true, jenkins also builds documentation',              \
    133                                         name: 'pBuildDocumentation',                                                    \
     133                                        name: 'pBuildDocumentation',                                                            \
    134134                                        defaultValue: true,                                                             \
    135135                                ],                                                                                              \
     
    137137                                        description: 'If true, jenkins also publishes results',                 \
    138138                                        name: 'pPublish',                                                               \
    139                                         defaultValue: false,                                                            \
     139                                        defaultValue: true,                                                             \
    140140                                ],                                                                                              \
    141141                                [$class: 'BooleanParameterDefinition',                                                  \
    142142                                        description: 'If true, jenkins will not send emails',           \
    143                                         name: 'pSilent',                                                                        \
     143                                        name: 'pSilent',                                                \
    144144                                        defaultValue: false,                                                            \
    145145                                ],                                                                                              \
     
    159159        echo """Compiler                : ${compiler.cc_name} (${compiler.cpp_cc}/${compiler.cfa_cc})
    160160Architecture            : ${arch_name}
    161 Arc Flags               : ${architecture}
     161Arc Flags                       : ${architecture}
    162162Run All Tests           : ${ pRunAllTests.toString() }
    163163Run Benchmark           : ${ pRunBenchmark.toString() }
  • doc/proposals/concurrency/thePlan.md

    rf2e40a9f rbf4ac09  
    77
    88_Phase 2_ : Minimum Viable Product
    9 done - Monitor type and enter/leave mutex member routines
     9Monitor type and enter/leave mutex member routines
    1010Monitors as a language feature (not calling enter/leave by hand)
    1111Internal scheduling
  • doc/proposals/flags.md

    rf2e40a9f rbf4ac09  
    6969In each of the cases above, `FOO` could be replaced by `(BAR | BAZ)` to do the same operation or test on multiple flags at once.
    7070
    71 ### Alternative/Additional Features ###
    72 
    73 #### User-defined enum discriminant iterator ####
    74 It may be useful to provide a more general method for changing the enum discriminant assignment function, e.g. the flag enum discriminants could be defined by something like the following:
    75 
    76         ```
    77         enum(@ << 1) TCP_Flags {  // each discriminant is left-shifted by 1 from the previous
    78                 FIN = 0x1,  // first flag is 1
    79                 SYN,
    80                 ACK,
    81                 ...
    82         }
    83         ```
    84 
    85 #### Member expression for enums ####
    86 As a more ergonomic way to set and unset enum flags, we could define a member expression for flags enums. Since only unions and structs can have member expressions now, this change would be backwards compatible. Basically, given a `FunFlags f`, `f.FOO` would return a proxy object which could be implicitly converted to `bool` (with semantics `f & FOO`, i.e. "check if `FOO` is set on `f`"), as well as having `bool` assigned to it (with semantics `f |= FOO` on true or `f -= FOO` on false, i.e. "set or unset `FOO` on `f` as appropriate"). With this member function, the operations above can be expressed as follows (possibly more ergonomically):
    87 
    88         ```
    89         FunFlags f = some_val();
    90         if ( f.FOO ) { sout | "f has FOO set" | endl; }
    91         f.FOO = true;    // set FOO
    92         f.FOO = false;   // unset FOO
    93         f.FOO = ! f.FOO; // toggle FOO
    94         ```
    95 
    9671### Related Work ###
    9772C# has the [`[Flags]`][1] enum attribute, but their proposal does not go as far; specifically, the flag discriminants must be manually specified, and they do not automatically implement the bitwise operators on the flags.
  • src/Concurrency/Keywords.cc

    rf2e40a9f rbf4ac09  
    8888        //Handles mutex routines definitions :
    8989        // void foo( A * mutex a, B * mutex b,  int i ) {                  void foo( A * a, B * b,  int i ) {
    90         //                                                                       monitor_desc * __monitors[] = { get_monitor(a), get_monitor(b) };
     90        //                                                                       monitor_desc * __monitors[] = { a, b };
    9191        //                                                                       monitor_guard_t __guard = { __monitors, 2 };
    9292        //    /*Some code*/                                       =>           /*Some code*/
     
    9898                using Visitor::visit;
    9999                virtual void visit( FunctionDecl *functionDecl ) override final;
    100                 virtual void visit(   StructDecl *functionDecl ) override final;
    101100
    102101                std::list<DeclarationWithType*> findMutexArgs( FunctionDecl* );
     
    108107                        acceptAll( translationUnit, impl );
    109108                }
    110 
    111           private:
    112                 StructDecl* monitor_decl = nullptr;
    113109        };
    114110
     
    137133                if( ! body ) return;
    138134
    139                 assert(monitor_decl);
    140135                addStatments( body, mutexArgs );
    141         }
    142 
    143         void MutexKeyword::visit(StructDecl* decl) {
    144                 if( decl->get_name() == "monitor_desc" ) {
    145                         assert( !monitor_decl );
    146                         monitor_decl = decl;
    147                 }
    148136        }
    149137
     
    179167
    180168        void MutexKeyword::addStatments( CompoundStmt * body, const std::list<DeclarationWithType * > & args ) {
    181 
    182                 ObjectDecl * monitors = new ObjectDecl(
    183                         "__monitors",
    184                         noStorage,
    185                         LinkageSpec::Cforall,
    186                         nullptr,
    187                         new ArrayType(
    188                                 noQualifiers,
    189                                 new PointerType(
    190                                         noQualifiers,
    191                                         new StructInstType(
    192                                                 noQualifiers,
    193                                                 monitor_decl
    194                                         )
    195                                 ),
    196                                 new ConstantExpr( Constant::from_ulong( args.size() ) ),
    197                                 false,
    198                                 false
    199                         ),
    200                         new ListInit(
    201                                 map_range < std::list<Initializer*> > ( args, [](DeclarationWithType * var ){
    202                                         return new SingleInit( new UntypedExpr(
    203                                                 new NameExpr( "get_monitor" ),
    204                                                 {  new VariableExpr( var ) }
    205                                         ) );
    206                                 })
    207                         )
    208                 );
    209 
    210169                //in reverse order :
    211170                // monitor_guard_t __guard = { __monitors, # };
     
    222181                                new ListInit(
    223182                                        {
    224                                                 new SingleInit( new VariableExpr( monitors ) ),
     183                                                new SingleInit( new NameExpr( "__monitors" ) ),
    225184                                                new SingleInit( new ConstantExpr( Constant::from_ulong( args.size() ) ) )
    226185                                        }
     
    230189
    231190                //monitor_desc * __monitors[] = { a, b };
    232                 body->push_front( new DeclStmt( noLabels, monitors) );
     191                body->push_front(
     192                        new DeclStmt( noLabels, new ObjectDecl(
     193                                "__monitors",
     194                                noStorage,
     195                                LinkageSpec::Cforall,
     196                                nullptr,
     197                                new ArrayType(
     198                                        noQualifiers,
     199                                        new PointerType(
     200                                                noQualifiers,
     201                                                new StructInstType(
     202                                                        noQualifiers,
     203                                                        "monitor_desc"
     204                                                )
     205                                        ),
     206                                        new ConstantExpr( Constant::from_ulong( args.size() ) ),
     207                                        false,
     208                                        false
     209                                ),
     210                                new ListInit(
     211                                        map_range < std::list<Initializer*> > ( args, [](DeclarationWithType * var ){
     212                                                return new SingleInit( new VariableExpr( var ) );
     213                                        })
     214                                )
     215                        ))
     216                );
    233217        }
    234218};
  • src/GenPoly/Box.cc

    rf2e40a9f rbf4ac09  
    381381                // calculate struct layout in function body
    382382
    383                 // initialize size and alignment to 0 and 1 (will have at least one member to re-edit size)
     383                // initialize size and alignment to 0 and 1 (will have at least one member to re-edit size
    384384                addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( sizeParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "0" ) ) ) );
    385385                addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( alignParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) );
     
    18521852
    18531853                        DeclClass *ret = static_cast< DeclClass *>( Mutator::mutate( decl ) );
    1854                         // ScrubTyVars::scrub( decl, scopeTyVars );
    1855                         ScrubTyVars::scrubAll( decl );
     1854                        ScrubTyVars::scrub( decl, scopeTyVars );
    18561855
    18571856                        scopeTyVars.endScope();
  • src/GenPoly/GenPoly.cc

    rf2e40a9f rbf4ac09  
    1515
    1616#include "GenPoly.h"
    17 #include "assert.h"
    1817
    1918#include "SynTree/Expression.h"
    2019#include "SynTree/Type.h"
    21 #include "ResolvExpr/typeops.h"
    2220
    2321#include <iostream>
    24 #include <iterator>
    25 #include <list>
    26 #include <typeindex>
    27 #include <typeinfo>
    28 #include <vector>
    2922using namespace std;
    3023
     
    4538                        for ( std::list< Expression* >::iterator param = params.begin(); param != params.end(); ++param ) {
    4639                                TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
    47                                 assertf(paramType, "Aggregate parameters should be type expressions");
     40                                assert(paramType && "Aggregate parameters should be type expressions");
    4841                                if ( isPolyType( paramType->get_type(), tyVars, env ) ) return true;
    4942                        }
     
    5548                        for ( std::list< Expression* >::iterator param = params.begin(); param != params.end(); ++param ) {
    5649                                TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
    57                                 assertf(paramType, "Aggregate parameters should be type expressions");
     50                                assert(paramType && "Aggregate parameters should be type expressions");
    5851                                if ( isDynType( paramType->get_type(), tyVars, env ) ) return true;
    59                         }
    60                         return false;
    61                 }
    62 
    63                 /// Checks a parameter list for inclusion of polymorphic parameters; will substitute according to env if present
    64                 bool includesPolyParams( std::list< Expression* >& params, const TypeSubstitution *env ) {
    65                         for ( std::list< Expression* >::iterator param = params.begin(); param != params.end(); ++param ) {
    66                                 TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
    67                                 assertf(paramType, "Aggregate parameters should be type expressions");
    68                                 if ( includesPolyType( paramType->get_type(), env ) ) return true;
    69                         }
    70                         return false;
    71                 }
    72 
    73                 /// Checks a parameter list for inclusion of polymorphic parameters from tyVars; will substitute according to env if present
    74                 bool includesPolyParams( std::list< Expression* >& params, const TyVarMap &tyVars, const TypeSubstitution *env ) {
    75                         for ( std::list< Expression* >::iterator param = params.begin(); param != params.end(); ++param ) {
    76                                 TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
    77                                 assertf(paramType, "Aggregate parameters should be type expressions");
    78                                 if ( includesPolyType( paramType->get_type(), tyVars, env ) ) return true;
    7952                        }
    8053                        return false;
     
    214187
    215188                return isPolyType( type, tyVars, env );
    216         }
    217 
    218         bool includesPolyType( Type *type, const TypeSubstitution *env ) {
    219                 type = replaceTypeInst( type, env );
    220 
    221                 if ( dynamic_cast< TypeInstType * >( type ) ) {
    222                         return true;
    223                 } else if ( PointerType *pointerType = dynamic_cast< PointerType* >( type ) ) {
    224                         if ( includesPolyType( pointerType->get_base(), env ) ) return true;
    225                 } else if ( StructInstType *structType = dynamic_cast< StructInstType* >( type ) ) {
    226                         if ( includesPolyParams( structType->get_parameters(), env ) ) return true;
    227                 } else if ( UnionInstType *unionType = dynamic_cast< UnionInstType* >( type ) ) {
    228                         if ( includesPolyParams( unionType->get_parameters(), env ) ) return true;
    229                 }
    230                 return false;
    231         }
    232 
    233         bool includesPolyType( Type *type, const TyVarMap &tyVars, const TypeSubstitution *env ) {
    234                 type = replaceTypeInst( type, env );
    235 
    236                 if ( TypeInstType *typeInstType = dynamic_cast< TypeInstType * >( type ) ) {
    237                         if ( tyVars.find( typeInstType->get_name() ) != tyVars.end() ) {
    238                                 return true;
    239                         }
    240                 } else if ( PointerType *pointerType = dynamic_cast< PointerType* >( type ) ) {
    241                         if ( includesPolyType( pointerType->get_base(), tyVars, env ) ) return true;
    242                 } else if ( StructInstType *structType = dynamic_cast< StructInstType* >( type ) ) {
    243                         if ( includesPolyParams( structType->get_parameters(), tyVars, env ) ) return true;
    244                 } else if ( UnionInstType *unionType = dynamic_cast< UnionInstType* >( type ) ) {
    245                         if ( includesPolyParams( unionType->get_parameters(), tyVars, env ) ) return true;
    246                 }
    247                 return false;
    248189        }
    249190
     
    296237        }
    297238
    298         namespace {
    299                 /// Checks if is a pointer to D
    300                 template<typename D, typename B>
    301                 bool is( const B* p ) { return type_index{typeid(D)} == type_index{typeid(*p)}; }
    302 
    303                 /// Converts to a pointer to D without checking for safety
    304                 template<typename D, typename B>
    305                 inline D* as( B* p ) { return reinterpret_cast<D*>(p); }
    306 
    307                 /// Flattens a declaration list
    308                 template<typename Output>
    309                 void flattenList( list< DeclarationWithType* > src, Output out ) {
    310                         for ( DeclarationWithType* decl : src ) {
    311                                 ResolvExpr::flatten( decl->get_type(), out );
    312                         }
    313                 }
    314 
    315                 /// Flattens a list of types
    316                 template<typename Output>
    317                 void flattenList( list< Type* > src, Output out ) {
    318                         for ( Type* ty : src ) {
    319                                 ResolvExpr::flatten( ty, out );
    320                         }
    321                 }
    322 
    323                 /// Checks if two lists of parameters are equal up to polymorphic substitution.
    324                 bool paramListsPolyCompatible( const list< Expression* >& aparams, const list< Expression* >& bparams ) {
    325                         if ( aparams.size() != bparams.size() ) return false;
    326 
    327                         for ( list< Expression* >::const_iterator at = aparams.begin(), bt = bparams.begin();
    328                                         at != aparams.end(); ++at, ++bt ) {
    329                                 TypeExpr *aparam = dynamic_cast< TypeExpr* >(*at);
    330                                 assertf(aparam, "Aggregate parameters should be type expressions");
    331                                 TypeExpr *bparam = dynamic_cast< TypeExpr* >(*bt);
    332                                 assertf(bparam, "Aggregate parameters should be type expressions");
    333 
    334                                 // xxx - might need to let VoidType be a wildcard here too; could have some voids
    335                                 // stuffed in for dtype-statics.
    336                                 // if ( is<VoidType>( aparam->get_type() ) || is<VoidType>( bparam->get_type() ) ) continue;
    337                                 if ( ! typesPolyCompatible( aparam->get_type(), bparam->get_type() ) ) return false;
    338                         }
    339                        
    340                         return true;
    341                 }
    342         }
    343 
    344         bool typesPolyCompatible( Type *a, Type *b ) {
    345                 type_index aid{ typeid(*a) };
    346                 // polymorphic types always match
    347                 if ( aid == type_index{typeid(TypeInstType)} ) return true;
    348                
    349                 type_index bid{ typeid(*b) };
    350                 // polymorphic types always match
    351                 if ( bid == type_index{typeid(TypeInstType)} ) return true;
    352                
    353                 // can't match otherwise if different types
    354                 if ( aid != bid ) return false;
    355 
    356                 // recurse through type structure (conditions borrowed from Unify.cc)
    357                 if ( aid == type_index{typeid(BasicType)} ) {
    358                         return as<BasicType>(a)->get_kind() == as<BasicType>(b)->get_kind();
    359                 } else if ( aid == type_index{typeid(PointerType)} ) {
    360                         PointerType *ap = as<PointerType>(a), *bp = as<PointerType>(b);
    361 
    362                         // void pointers should match any other pointer type
    363                         return is<VoidType>( ap->get_base() ) || is<VoidType>( bp->get_base() )
    364                                 || typesPolyCompatible( ap->get_base(), bp->get_base() );
    365                 } else if ( aid == type_index{typeid(ArrayType)} ) {
    366                         ArrayType *aa = as<ArrayType>(a), *ba = as<ArrayType>(b);
    367 
    368                         if ( aa->get_isVarLen() ) {
    369                                 if ( ! ba->get_isVarLen() ) return false;
    370                         } else {
    371                                 if ( ba->get_isVarLen() ) return false;
    372 
    373                                 ConstantExpr *ad = dynamic_cast<ConstantExpr*>( aa->get_dimension() );
    374                                 ConstantExpr *bd = dynamic_cast<ConstantExpr*>( ba->get_dimension() );
    375                                 if ( ad && bd
    376                                                 && ad->get_constant()->get_value() != bd->get_constant()->get_value() )
    377                                         return false;
    378                         }
    379 
    380                         return typesPolyCompatible( aa->get_base(), ba->get_base() );
    381                 } else if ( aid == type_index{typeid(FunctionType)} ) {
    382                         FunctionType *af = as<FunctionType>(a), *bf = as<FunctionType>(b);
    383 
    384                         vector<Type*> aparams, bparams;
    385                         flattenList( af->get_parameters(), back_inserter( aparams ) );
    386                         flattenList( bf->get_parameters(), back_inserter( bparams ) );
    387                         if ( aparams.size() != bparams.size() ) return false;
    388 
    389                         vector<Type*> areturns, breturns;
    390                         flattenList( af->get_returnVals(), back_inserter( areturns ) );
    391                         flattenList( bf->get_returnVals(), back_inserter( breturns ) );
    392                         if ( areturns.size() != breturns.size() ) return false;
    393 
    394                         for ( unsigned i = 0; i < aparams.size(); ++i ) {
    395                                 if ( ! typesPolyCompatible( aparams[i], bparams[i] ) ) return false;
    396                         }
    397                         for ( unsigned i = 0; i < areturns.size(); ++i ) {
    398                                 if ( ! typesPolyCompatible( areturns[i], breturns[i] ) ) return false;
    399                         }
    400                         return true;
    401                 } else if ( aid == type_index{typeid(StructInstType)} ) {
    402                         StructInstType *aa = as<StructInstType>(a), *ba = as<StructInstType>(b);
    403 
    404                         if ( aa->get_name() != ba->get_name() ) return false;
    405                         return paramListsPolyCompatible( aa->get_parameters(), ba->get_parameters() );
    406                 } else if ( aid == type_index{typeid(UnionInstType)} ) {
    407                         UnionInstType *aa = as<UnionInstType>(a), *ba = as<UnionInstType>(b);
    408 
    409                         if ( aa->get_name() != ba->get_name() ) return false;
    410                         return paramListsPolyCompatible( aa->get_parameters(), ba->get_parameters() );
    411                 } else if ( aid == type_index{typeid(EnumInstType)} ) {
    412                         return as<EnumInstType>(a)->get_name() == as<EnumInstType>(b)->get_name();
    413                 } else if ( aid == type_index{typeid(TraitInstType)} ) {
    414                         return as<TraitInstType>(a)->get_name() == as<TraitInstType>(b)->get_name();
    415                 } else if ( aid == type_index{typeid(TupleType)} ) {
    416                         TupleType *at = as<TupleType>(a), *bt = as<TupleType>(b);
    417 
    418                         vector<Type*> atypes, btypes;
    419                         flattenList( at->get_types(), back_inserter( atypes ) );
    420                         flattenList( bt->get_types(), back_inserter( btypes ) );
    421                         if ( atypes.size() != btypes.size() ) return false;
    422 
    423                         for ( unsigned i = 0; i < atypes.size(); ++i ) {
    424                                 if ( ! typesPolyCompatible( atypes[i], btypes[i] ) ) return false;
    425                         }
    426                         return true;
    427                 } else return true; // VoidType, VarArgsType, ZeroType & OneType just need the same type
    428         }
    429 
    430239        void addToTyVarMap( TypeDecl * tyVar, TyVarMap &tyVarMap ) {
    431240                tyVarMap[ tyVar->get_name() ] = TypeDecl::Data{ tyVar };
  • src/GenPoly/GenPoly.h

    rf2e40a9f rbf4ac09  
    6767        Type *hasPolyBase( Type *type, const TyVarMap &tyVars, int *levels = 0, const TypeSubstitution *env = 0 );
    6868
    69         /// true iff this type or some base of this type after dereferencing pointers is either polymorphic or a generic type with at least one
    70         /// polymorphic parameter; will look up substitution in env if provided.
    71         bool includesPolyType( Type *type, const TypeSubstitution *env = 0 );
    72 
    73         /// true iff this type or some base of this type after dereferencing pointers is either polymorphic in tyVars, or a generic type with
    74         /// at least one polymorphic parameter in tyVars; will look up substitution in env if provided.
    75         bool includesPolyType( Type *type, const TyVarMap &tyVars, const TypeSubstitution *env = 0 );
    76 
    7769        /// Returns a pointer to the base FunctionType if ty is the type of a function (or pointer to one), NULL otherwise
    7870        FunctionType *getFunctionType( Type *ty );
     
    8173        /// N will be stored in levels, if provided
    8274        VariableExpr *getBaseVar( Expression *expr, int *levels = 0 );
    83 
    84         /// true iff types are structurally identical, where TypeInstType's match any type.
    85         bool typesPolyCompatible( Type *aty, Type *bty );
    8675
    8776        /// Adds the type variable `tyVar` to `tyVarMap`
  • src/GenPoly/InstantiateGeneric.cc

    rf2e40a9f rbf4ac09  
    1616#include <cassert>
    1717#include <list>
    18 #include <unordered_map>
    1918#include <utility>
    2019#include <vector>
     20#include <unordered_map>
    2121
    2222#include "InstantiateGeneric.h"
     
    2525#include "GenPoly.h"
    2626#include "ScopedSet.h"
    27 #include "ScrubTyVars.h"
    2827#include "PolyMutator.h"
    2928
     
    7877                        if ( params.size() != that.params.size() ) return false;
    7978
     79                        SymTab::Indexer dummy;
    8080                        for ( std::list< Type* >::const_iterator it = params.begin(), jt = that.params.begin(); it != params.end(); ++it, ++jt ) {
    81                                 if ( ! typesPolyCompatible( *it, *jt ) ) return false;
     81                                if ( ! ResolvExpr::typesCompatible( *it, *jt, dummy ) ) return false;
    8282                        }
    8383                        return true;
     
    227227                        if ( (*baseParam)->isComplete() ) {
    228228                                // substitute parameter for complete (otype or sized dtype) type
    229                                 if ( isPolyType( paramType->get_type() ) ) {
    230                                         // substitute polymorphic parameter type in to generic type
     229                                int pointerLevels = 0;
     230                                if ( hasPolyBase( paramType->get_type(), &pointerLevels ) && pointerLevels > 0 ) {
     231                                        // Make a void* with equivalent nesting
     232                                        Type* voidPtr = new VoidType( Type::Qualifiers() );
     233                                        while ( pointerLevels > 0 ) {
     234                                                // Just about data layout, so qualifiers *shouldn't* matter
     235                                                voidPtr = new PointerType( Type::Qualifiers(), voidPtr );
     236                                                --pointerLevels;
     237                                        }
     238                                        out.push_back( new TypeExpr( voidPtr ) );
     239                                } else {
     240                                        // Just clone parameter type
    231241                                        out.push_back( paramType->clone() );
    232                                         gt = genericType::dynamic;
    233                                 } else {
    234                                         // normalize possibly dtype-static parameter type
    235                                         out.push_back( new TypeExpr{
    236                                                 ScrubTyVars::scrubAll( paramType->get_type()->clone() ) } );
    237                                         gt |= genericType::concrete;
    238242                                }
     243                                // make the struct concrete or dynamic depending on the parameter
     244                                gt |= isPolyType( paramType->get_type() ) ? genericType::dynamic : genericType::concrete;
    239245                        } else switch ( (*baseParam)->get_kind() ) {
    240246                                case TypeDecl::Dtype:
     
    366372                                concDecl = new StructDecl( typeNamer.newName( inst->get_name() ) );
    367373                                concDecl->set_body( inst->get_baseStruct()->has_body() );
    368                                 substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() );
     374                                substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs,        concDecl->get_members() );
    369375                                DeclMutator::addDeclaration( concDecl );
    370376                                insert( inst, typeSubs, concDecl );
  • src/GenPoly/ScrubTyVars.cc

    rf2e40a9f rbf4ac09  
    2626namespace GenPoly {
    2727        Type * ScrubTyVars::mutate( TypeInstType *typeInst ) {
    28                 if ( ! tyVars ) {
    29                         if ( typeInst->get_isFtype() ) {
    30                                 delete typeInst;
    31                                 return new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) );
    32                         } else {
    33                                 PointerType *ret = new PointerType( Type::Qualifiers(), new VoidType( typeInst->get_qualifiers() ) );
    34                                 delete typeInst;
    35                                 return ret;
    36                         }
    37                 }
    38 
    39                 TyVarMap::const_iterator tyVar = tyVars->find( typeInst->get_name() );
    40                 if ( tyVar != tyVars->end() ) {
     28                TyVarMap::const_iterator tyVar = tyVars.find( typeInst->get_name() );
     29                if ( tyVar != tyVars.end() ) {
    4130                        switch ( tyVar->second.kind ) {
    4231                          case TypeDecl::Any:
  • src/GenPoly/ScrubTyVars.h

    rf2e40a9f rbf4ac09  
    2626namespace GenPoly {
    2727        class ScrubTyVars : public Mutator {
    28                 /// Whether to scrub all type variables from the provided map, dynamic type variables from the provided map, or all type variables
    29                 enum ScrubMode { FromMap, DynamicFromMap, All };
     28          public:
     29                ScrubTyVars( const TyVarMap &tyVars, bool dynamicOnly = false ): tyVars( tyVars ), dynamicOnly( dynamicOnly ) {}
    3030
    31                 ScrubTyVars() : tyVars(nullptr), mode( All ) {}
    32 
    33                 ScrubTyVars( const TyVarMap &tyVars, ScrubMode mode = FromMap ): tyVars( &tyVars ), mode( mode ) {}
    34 
    35         public:
    3631                /// For all polymorphic types with type variables in `tyVars`, replaces generic types, dtypes, and ftypes with the appropriate void type,
    3732                /// and sizeof/alignof expressions with the proper variable
     
    4338                template< typename SynTreeClass >
    4439                static SynTreeClass *scrubDynamic( SynTreeClass *target, const TyVarMap &tyVars );
    45 
    46                 /// For all polymorphic types, replaces generic types, dtypes, and ftypes with the appropriate void type,
    47                 /// and sizeof/alignof expressions with the proper variable
    48                 template< typename SynTreeClass >
    49                 static SynTreeClass *scrubAll( SynTreeClass *target );
    5040
    5141                virtual Type* mutate( TypeInstType *typeInst );
     
    5949                /// Returns the type if it should be scrubbed, NULL otherwise.
    6050                Type* shouldScrub( Type *ty ) {
    61                         switch ( mode ) {
    62                         case FromMap: return isPolyType( ty, *tyVars );
    63                         case DynamicFromMap: return isDynType( ty, *tyVars );
    64                         case All: return isPolyType( ty );
    65                         }
    66                         assert(false); return nullptr; // unreachable
    67                         // return dynamicOnly ? isDynType( ty, tyVars ) : isPolyType( ty, tyVars );
     51                        return dynamicOnly ? isDynType( ty, tyVars ) : isPolyType( ty, tyVars );
     52//                      if ( ! dynamicOnly ) return isPolyType( ty, tyVars );
     53//
     54//                      if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( ty ) ) {
     55//                              return tyVars.find( typeInst->get_name() ) != tyVars.end() ? ty : 0;
     56//                      }
     57//
     58//                      return isDynType( ty, tyVars );
    6859                }
    6960               
     
    7162                Type* mutateAggregateType( Type *ty );
    7263               
    73                 const TyVarMap *tyVars;  ///< Type variables to scrub
    74                 ScrubMode mode;          ///< which type variables to scrub? [FromMap]
     64                const TyVarMap &tyVars;  ///< Type variables to scrub
     65                bool dynamicOnly;        ///< only scrub the types with dynamic layout? [false]
    7566        };
    7667
     
    8374        template< typename SynTreeClass >
    8475        SynTreeClass * ScrubTyVars::scrubDynamic( SynTreeClass *target, const TyVarMap &tyVars ) {
    85                 ScrubTyVars scrubber( tyVars, ScrubTyVars::DynamicFromMap );
    86                 return static_cast< SynTreeClass * >( target->acceptMutator( scrubber ) );
    87         }
    88 
    89         template< typename SynTreeClass >
    90         SynTreeClass * ScrubTyVars::scrubAll( SynTreeClass *target ) {
    91                 ScrubTyVars scrubber;
     76                ScrubTyVars scrubber( tyVars, true );
    9277                return static_cast< SynTreeClass * >( target->acceptMutator( scrubber ) );
    9378        }
  • src/SymTab/Validate.cc

    rf2e40a9f rbf4ac09  
    1010// Created On       : Sun May 17 21:50:04 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar 14 23:30:27 2017
    13 // Update Count     : 350
     12// Last Modified On : Tue Mar  7 07:51:36 2017
     13// Update Count     : 349
    1414//
    1515
     
    323323                        ObjectDecl * obj = dynamic_cast< ObjectDecl * >( *i );
    324324                        assert( obj );
    325                         obj->set_type( new EnumInstType( Type::Qualifiers( Type::Const ), enumDecl->get_name() ) );
     325                        obj->set_type( new EnumInstType( Type::Qualifiers( true, false, false, false, false, false ), enumDecl->get_name() ) );
    326326                } // for
    327327                Parent::visit( enumDecl );
  • src/SynTree/Type.h

    rf2e40a9f rbf4ac09  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar 15 21:28:09 2017
    13 // Update Count     : 85
     12// Last Modified On : Wed Mar 15 21:23:08 2017
     13// Update Count     : 84
    1414//
    1515
     
    2424class Type : public BaseSyntaxNode {
    2525  public:
     26        // struct Qualifiers {
     27        //      Qualifiers(): isConst( false ), isVolatile( false ), isRestrict( false ), isLvalue( false ), isAtomic( false ), isMutex( false ) {}
     28        //      Qualifiers( bool isConst, bool isVolatile, bool isRestrict, bool isLvalue, bool isAtomic, bool isMutex ): isConst( isConst ), isVolatile( isVolatile ), isRestrict( isRestrict ), isLvalue( isLvalue ), isAtomic( isAtomic ), isMutex( isMutex ) {}
     29
     30        //      Qualifiers &operator&=( const Qualifiers &other );
     31        //      Qualifiers &operator+=( const Qualifiers &other );
     32        //      Qualifiers &operator-=( const Qualifiers &other );
     33        //      Qualifiers operator+( const Type::Qualifiers &other );
     34        //      bool operator==( const Qualifiers &other );
     35        //      bool operator!=( const Qualifiers &other );
     36        //      bool operator<=( const Qualifiers &other );
     37        //      bool operator>=( const Qualifiers &other );
     38        //      bool operator<( const Qualifiers &other );
     39        //      bool operator>( const Qualifiers &other );
     40        //      void print( std::ostream &os, int indent = 0 ) const;
     41
     42        //      bool isConst;
     43        //      bool isVolatile;
     44        //      bool isRestrict;
     45        //      bool isLvalue;
     46        //      bool isAtomic;
     47        //      bool isMutex;
     48        // };
     49
    2650        static const char * QualifierNames[];
    2751
     
    76100                        return q;
    77101                }
    78                 void print( std::ostream & os, int indent = 0 ) const {
     102                void print( std::ostream &os, int indent = 0 ) const {
    79103                        if ( (*this).any() ) {                                          // any type qualifiers ?
    80104                                for ( unsigned int i = 0; i < NumTypeQualifier; i += 1 ) {
     
    87111        }; // Qualifiers
    88112
    89         Type( const Qualifiers & tq, const std::list< Attribute * > & attributes );
    90         Type( const Type & other );
     113        Type( const Qualifiers &tq, const std::list< Attribute * > & attributes );
     114        Type( const Type &other );
    91115        virtual ~Type();
    92116
    93         Qualifiers & get_qualifiers() { return tq; }
     117        Qualifiers &get_qualifiers() { return tq; }
    94118        bool get_isConst() { return tq.isConst; }
    95119        bool get_isVolatile() { return tq.isVolatile; }
     
    117141
    118142        virtual Type *clone() const = 0;
    119         virtual void accept( Visitor & v ) = 0;
    120         virtual Type *acceptMutator( Mutator & m ) = 0;
    121         virtual void print( std::ostream & os, int indent = 0 ) const;
     143        virtual void accept( Visitor &v ) = 0;
     144        virtual Type *acceptMutator( Mutator &m ) = 0;
     145        virtual void print( std::ostream &os, int indent = 0 ) const;
    122146  private:
    123147        Qualifiers tq;
     
    130154class VoidType : public Type {
    131155  public:
    132         VoidType( const Type::Qualifiers & tq, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
     156        VoidType( const Type::Qualifiers &tq, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
    133157
    134158        virtual unsigned size() const { return 0; };
     
    136160
    137161        virtual VoidType *clone() const { return new VoidType( *this ); }
    138         virtual void accept( Visitor & v ) { v.visit( this ); }
    139         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
    140         virtual void print( std::ostream & os, int indent = 0 ) const;
     162        virtual void accept( Visitor &v ) { v.visit( this ); }
     163        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     164        virtual void print( std::ostream &os, int indent = 0 ) const;
    141165};
    142166
     
    170194        static const char *typeNames[];                                         // string names for basic types, MUST MATCH with Kind
    171195
    172         BasicType( const Type::Qualifiers & tq, Kind bt, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
     196        BasicType( const Type::Qualifiers &tq, Kind bt, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
    173197
    174198        Kind get_kind() { return kind; }
     
    176200
    177201        virtual BasicType *clone() const { return new BasicType( *this ); }
    178         virtual void accept( Visitor & v ) { v.visit( this ); }
    179         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
    180         virtual void print( std::ostream & os, int indent = 0 ) const;
     202        virtual void accept( Visitor &v ) { v.visit( this ); }
     203        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     204        virtual void print( std::ostream &os, int indent = 0 ) const;
    181205
    182206        bool isInteger() const;
     
    187211class PointerType : public Type {
    188212  public:
    189         PointerType( const Type::Qualifiers & tq, Type *base, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
    190         PointerType( const Type::Qualifiers & tq, Type *base, Expression *dimension, bool isVarLen, bool isStatic, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
     213        PointerType( const Type::Qualifiers &tq, Type *base, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
     214        PointerType( const Type::Qualifiers &tq, Type *base, Expression *dimension, bool isVarLen, bool isStatic, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
    191215        PointerType( const PointerType& );
    192216        virtual ~PointerType();
     
    202226
    203227        virtual PointerType *clone() const { return new PointerType( *this ); }
    204         virtual void accept( Visitor & v ) { v.visit( this ); }
    205         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
    206         virtual void print( std::ostream & os, int indent = 0 ) const;
     228        virtual void accept( Visitor &v ) { v.visit( this ); }
     229        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     230        virtual void print( std::ostream &os, int indent = 0 ) const;
    207231  private:
    208232        Type *base;
     
    216240class ArrayType : public Type {
    217241  public:
    218         ArrayType( const Type::Qualifiers & tq, Type *base, Expression *dimension, bool isVarLen, bool isStatic, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
     242        ArrayType( const Type::Qualifiers &tq, Type *base, Expression *dimension, bool isVarLen, bool isStatic, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
    219243        ArrayType( const ArrayType& );
    220244        virtual ~ArrayType();
     
    232256
    233257        virtual ArrayType *clone() const { return new ArrayType( *this ); }
    234         virtual void accept( Visitor & v ) { v.visit( this ); }
    235         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
    236         virtual void print( std::ostream & os, int indent = 0 ) const;
     258        virtual void accept( Visitor &v ) { v.visit( this ); }
     259        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     260        virtual void print( std::ostream &os, int indent = 0 ) const;
    237261  private:
    238262        Type *base;
     
    244268class FunctionType : public Type {
    245269  public:
    246         FunctionType( const Type::Qualifiers & tq, bool isVarArgs, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
     270        FunctionType( const Type::Qualifiers &tq, bool isVarArgs, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
    247271        FunctionType( const FunctionType& );
    248272        virtual ~FunctionType();
     
    255279
    256280        virtual FunctionType *clone() const { return new FunctionType( *this ); }
    257         virtual void accept( Visitor & v ) { v.visit( this ); }
    258         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
    259         virtual void print( std::ostream & os, int indent = 0 ) const;
     281        virtual void accept( Visitor &v ) { v.visit( this ); }
     282        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     283        virtual void print( std::ostream &os, int indent = 0 ) const;
    260284  private:
    261285        std::list<DeclarationWithType*> returnVals;
     
    271295class ReferenceToType : public Type {
    272296  public:
    273         ReferenceToType( const Type::Qualifiers & tq, const std::string & name, const std::list< Attribute * > & attributes );
    274         ReferenceToType( const ReferenceToType & other );
     297        ReferenceToType( const Type::Qualifiers &tq, const std::string &name, const std::list< Attribute * > & attributes );
     298        ReferenceToType( const ReferenceToType &other );
    275299        virtual ~ReferenceToType();
    276300
    277         const std::string & get_name() const { return name; }
     301        const std::string &get_name() const { return name; }
    278302        void set_name( std::string newValue ) { name = newValue; }
    279303        std::list< Expression* >& get_parameters() { return parameters; }
     
    282306
    283307        virtual ReferenceToType *clone() const = 0;
    284         virtual void accept( Visitor & v ) = 0;
    285         virtual Type *acceptMutator( Mutator & m ) = 0;
    286         virtual void print( std::ostream & os, int indent = 0 ) const;
     308        virtual void accept( Visitor &v ) = 0;
     309        virtual Type *acceptMutator( Mutator &m ) = 0;
     310        virtual void print( std::ostream &os, int indent = 0 ) const;
    287311  protected:
    288312        virtual std::string typeString() const = 0;
     
    296320        typedef ReferenceToType Parent;
    297321  public:
    298         StructInstType( const Type::Qualifiers & tq, const std::string & name, const std::list< Attribute * > & attributes = std::list< Attribute * >()  ) : Parent( tq, name, attributes ), baseStruct( 0 ) {}
    299         StructInstType( const Type::Qualifiers & tq, StructDecl * baseStruct, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
    300         StructInstType( const StructInstType & other ) : Parent( other ), baseStruct( other.baseStruct ) {}
     322        StructInstType( const Type::Qualifiers &tq, const std::string &name, const std::list< Attribute * > & attributes = std::list< Attribute * >()  ) : Parent( tq, name, attributes ), baseStruct( 0 ) {}
     323        StructInstType( const Type::Qualifiers &tq, StructDecl * baseStruct, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
     324        StructInstType( const StructInstType &other ) : Parent( other ), baseStruct( other.baseStruct ) {}
    301325
    302326        StructDecl *get_baseStruct() const { return baseStruct; }
     
    310334        /// Looks up the members of this struct named "name" and places them into "foundDecls".
    311335        /// Clones declarations into "foundDecls", caller responsible for freeing
    312         void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const;
     336        void lookup( const std::string &name, std::list< Declaration* > &foundDecls ) const;
    313337
    314338        virtual StructInstType *clone() const { return new StructInstType( *this ); }
    315         virtual void accept( Visitor & v ) { v.visit( this ); }
    316         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
    317 
    318         virtual void print( std::ostream & os, int indent = 0 ) const;
     339        virtual void accept( Visitor &v ) { v.visit( this ); }
     340        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     341
     342        virtual void print( std::ostream &os, int indent = 0 ) const;
    319343  private:
    320344        virtual std::string typeString() const;
     
    328352        typedef ReferenceToType Parent;
    329353  public:
    330         UnionInstType( const Type::Qualifiers & tq, const std::string & name, const std::list< Attribute * > & attributes = std::list< Attribute * >()  ) : Parent( tq, name, attributes ), baseUnion( 0 ) {}
    331         UnionInstType( const Type::Qualifiers & tq, UnionDecl * baseUnion, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
    332         UnionInstType( const UnionInstType & other ) : Parent( other ), baseUnion( other.baseUnion ) {}
     354        UnionInstType( const Type::Qualifiers &tq, const std::string &name, const std::list< Attribute * > & attributes = std::list< Attribute * >()  ) : Parent( tq, name, attributes ), baseUnion( 0 ) {}
     355        UnionInstType( const Type::Qualifiers &tq, UnionDecl * baseUnion, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
     356        UnionInstType( const UnionInstType &other ) : Parent( other ), baseUnion( other.baseUnion ) {}
    333357
    334358        UnionDecl *get_baseUnion() const { return baseUnion; }
     
    342366        /// looks up the members of this union named "name" and places them into "foundDecls"
    343367        /// Clones declarations into "foundDecls", caller responsible for freeing
    344         void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const;
     368        void lookup( const std::string &name, std::list< Declaration* > &foundDecls ) const;
    345369
    346370        virtual UnionInstType *clone() const { return new UnionInstType( *this ); }
    347         virtual void accept( Visitor & v ) { v.visit( this ); }
    348         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
    349 
    350         virtual void print( std::ostream & os, int indent = 0 ) const;
     371        virtual void accept( Visitor &v ) { v.visit( this ); }
     372        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     373
     374        virtual void print( std::ostream &os, int indent = 0 ) const;
    351375  private:
    352376        virtual std::string typeString() const;
     
    360384        typedef ReferenceToType Parent;
    361385  public:
    362         EnumInstType( const Type::Qualifiers & tq, const std::string & name, const std::list< Attribute * > & attributes = std::list< Attribute * >()  ) : Parent( tq, name, attributes ) {}
    363         EnumInstType( const Type::Qualifiers & tq, EnumDecl * baseEnum, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
    364         EnumInstType( const EnumInstType & other ) : Parent( other ), baseEnum( other.baseEnum ) {}
     386        EnumInstType( const Type::Qualifiers &tq, const std::string &name, const std::list< Attribute * > & attributes = std::list< Attribute * >()  ) : Parent( tq, name, attributes ) {}
     387        EnumInstType( const Type::Qualifiers &tq, EnumDecl * baseEnum, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
     388        EnumInstType( const EnumInstType &other ) : Parent( other ), baseEnum( other.baseEnum ) {}
    365389
    366390        EnumDecl *get_baseEnum() const { return baseEnum; }
     
    370394
    371395        virtual EnumInstType *clone() const { return new EnumInstType( *this ); }
    372         virtual void accept( Visitor & v ) { v.visit( this ); }
    373         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
     396        virtual void accept( Visitor &v ) { v.visit( this ); }
     397        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    374398  private:
    375399        virtual std::string typeString() const;
     
    383407        typedef ReferenceToType Parent;
    384408  public:
    385         TraitInstType( const Type::Qualifiers & tq, const std::string & name, const std::list< Attribute * > & attributes = std::list< Attribute * >()  ) : Parent( tq, name, attributes ) {}
    386         TraitInstType( const TraitInstType & other );
     409        TraitInstType( const Type::Qualifiers &tq, const std::string &name, const std::list< Attribute * > & attributes = std::list< Attribute * >()  ) : Parent( tq, name, attributes ) {}
     410        TraitInstType( const TraitInstType &other );
    387411        ~TraitInstType();
    388412
     
    392416
    393417        virtual TraitInstType *clone() const { return new TraitInstType( *this ); }
    394         virtual void accept( Visitor & v ) { v.visit( this ); }
    395         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
     418        virtual void accept( Visitor &v ) { v.visit( this ); }
     419        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    396420  private:
    397421        virtual std::string typeString() const;
     
    405429        typedef ReferenceToType Parent;
    406430  public:
    407         TypeInstType( const Type::Qualifiers & tq, const std::string & name, TypeDecl *baseType, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
    408         TypeInstType( const Type::Qualifiers & tq, const std::string & name, bool isFtype, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
    409         TypeInstType( const TypeInstType & other );
     431        TypeInstType( const Type::Qualifiers &tq, const std::string &name, TypeDecl *baseType, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
     432        TypeInstType( const Type::Qualifiers &tq, const std::string &name, bool isFtype, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
     433        TypeInstType( const TypeInstType &other );
    410434        ~TypeInstType();
    411435
     
    418442
    419443        virtual TypeInstType *clone() const { return new TypeInstType( *this ); }
    420         virtual void accept( Visitor & v ) { v.visit( this ); }
    421         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
    422         virtual void print( std::ostream & os, int indent = 0 ) const;
     444        virtual void accept( Visitor &v ) { v.visit( this ); }
     445        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     446        virtual void print( std::ostream &os, int indent = 0 ) const;
    423447  private:
    424448        virtual std::string typeString() const;
     
    431455class TupleType : public Type {
    432456  public:
    433         TupleType( const Type::Qualifiers & tq, const std::list< Type * > & types = std::list< Type * >(), const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
     457        TupleType( const Type::Qualifiers &tq, const std::list< Type * > & types = std::list< Type * >(), const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
    434458        TupleType( const TupleType& );
    435459        virtual ~TupleType();
     
    452476
    453477        virtual TupleType *clone() const { return new TupleType( *this ); }
    454         virtual void accept( Visitor & v ) { v.visit( this ); }
    455         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
    456         virtual void print( std::ostream & os, int indent = 0 ) const;
     478        virtual void accept( Visitor &v ) { v.visit( this ); }
     479        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     480        virtual void print( std::ostream &os, int indent = 0 ) const;
    457481  private:
    458482        std::list<Type*> types;
     
    461485class TypeofType : public Type {
    462486  public:
    463         TypeofType( const Type::Qualifiers & tq, Expression *expr, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
     487        TypeofType( const Type::Qualifiers &tq, Expression *expr, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
    464488        TypeofType( const TypeofType& );
    465489        virtual ~TypeofType();
     
    471495
    472496        virtual TypeofType *clone() const { return new TypeofType( *this ); }
    473         virtual void accept( Visitor & v ) { v.visit( this ); }
    474         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
    475         virtual void print( std::ostream & os, int indent = 0 ) const;
     497        virtual void accept( Visitor &v ) { v.visit( this ); }
     498        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     499        virtual void print( std::ostream &os, int indent = 0 ) const;
    476500  private:
    477501        Expression *expr;
     
    480504class AttrType : public Type {
    481505  public:
    482         AttrType( const Type::Qualifiers & tq, const std::string & name, Expression *expr, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
    483         AttrType( const Type::Qualifiers & tq, const std::string & name, Type *type, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
     506        AttrType( const Type::Qualifiers &tq, const std::string &name, Expression *expr, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
     507        AttrType( const Type::Qualifiers &tq, const std::string &name, Type *type, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
    484508        AttrType( const AttrType& );
    485509        virtual ~AttrType();
    486510
    487         const std::string & get_name() const { return name; }
    488         void set_name( const std::string & newValue ) { name = newValue; }
     511        const std::string &get_name() const { return name; }
     512        void set_name( const std::string &newValue ) { name = newValue; }
    489513        Expression *get_expr() const { return expr; }
    490514        void set_expr( Expression *newValue ) { expr = newValue; }
     
    497521
    498522        virtual AttrType *clone() const { return new AttrType( *this ); }
    499         virtual void accept( Visitor & v ) { v.visit( this ); }
    500         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
    501         virtual void print( std::ostream & os, int indent = 0 ) const;
     523        virtual void accept( Visitor &v ) { v.visit( this ); }
     524        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     525        virtual void print( std::ostream &os, int indent = 0 ) const;
    502526  private:
    503527        std::string name;
     
    516540
    517541        virtual VarArgsType *clone() const { return new VarArgsType( *this ); }
    518         virtual void accept( Visitor & v ) { v.visit( this ); }
    519         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
    520         virtual void print( std::ostream & os, int indent = 0 ) const;
     542        virtual void accept( Visitor &v ) { v.visit( this ); }
     543        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     544        virtual void print( std::ostream &os, int indent = 0 ) const;
    521545};
    522546
     
    528552
    529553        virtual ZeroType *clone() const { return new ZeroType( *this ); }
    530         virtual void accept( Visitor & v ) { v.visit( this ); }
    531         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
    532         virtual void print( std::ostream & os, int indent = 0 ) const;
     554        virtual void accept( Visitor &v ) { v.visit( this ); }
     555        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     556        virtual void print( std::ostream &os, int indent = 0 ) const;
    533557};
    534558
     
    540564
    541565        virtual OneType *clone() const { return new OneType( *this ); }
    542         virtual void accept( Visitor & v ) { v.visit( this ); }
    543         virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
    544         virtual void print( std::ostream & os, int indent = 0 ) const;
     566        virtual void accept( Visitor &v ) { v.visit( this ); }
     567        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     568        virtual void print( std::ostream &os, int indent = 0 ) const;
    545569};
    546570
  • src/benchmark/CorCtxSwitch.c

    rf2e40a9f rbf4ac09  
    11#include <fstream>
    22#include <stdlib>
    3 #include <thread>
     3#include <threads>
    44
    55#include <unistd.h>                                     // sysconf
     
    2424
    2525struct GreatSuspender {
    26         coroutine_desc c;
     26        coroutine c;
    2727};
    2828
  • src/benchmark/ThrdCtxSwitch.c

    rf2e40a9f rbf4ac09  
    11#include <fstream>
    22#include <stdlib>
    3 #include <thread>
     3#include <threads>
    44
    55#include <unistd.h>                                     // sysconf
  • src/benchmark/bench.c

    rf2e40a9f rbf4ac09  
    22#include <fstream>
    33#include <stdlib>
    4 #include <thread>
     4#include <threads>
    55
    66#include <unistd.h>                                     // sysconf
     
    8686//=======================================
    8787
    88 struct CoroutineDummy { coroutine_desc c; };
     88struct CoroutineDummy { coroutine c; };
    8989DECL_COROUTINE(CoroutineDummy);
    9090void main(CoroutineDummy * this) {}
     
    119119struct CoroutineResume {
    120120    int N;
    121     coroutine_desc c;
     121    coroutine c;
    122122};
    123123
     
    150150//=======================================
    151151
    152 struct ThreadDummy { thread_desc t; };
     152struct ThreadDummy { thread t; };
    153153DECL_THREAD(ThreadDummy);
    154154void main(ThreadDummy * this) {}
     
    180180    int N;
    181181    long long result;
    182     thread_desc t;
     182    thread t;
    183183};
    184184
  • src/benchmark/csv-data.c

    rf2e40a9f rbf4ac09  
    11#include <fstream>
    22#include <stdlib>
    3 #include <thread>
     3#include <threads>
    44
    55extern "C" {
     
    2626
    2727struct GreatSuspender {
    28         coroutine_desc c;
     28        coroutine c;
    2929};
    3030
  • src/examples/multicore.c

    rf2e40a9f rbf4ac09  
    11#include <kernel>
    2 #include <thread>
     2#include <threads>
    33
    4 struct MyThread { thread_desc t; };
     4struct MyThread { thread t; };
    55
    66DECL_THREAD(MyThread);
  • src/libcfa/Makefile.am

    rf2e40a9f rbf4ac09  
    4545# not all platforms support concurrency, add option do disable it
    4646if BUILD_CONCURRENCY
    47 headers += containers/vector concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor
     47headers += containers/vector concurrency/coroutines concurrency/threads concurrency/kernel concurrency/monitor
    4848endif
    4949
  • src/libcfa/Makefile.in

    rf2e40a9f rbf4ac09  
    4343
    4444# not all platforms support concurrency, add option do disable it
    45 @BUILD_CONCURRENCY_TRUE@am__append_3 = containers/vector concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor
     45@BUILD_CONCURRENCY_TRUE@am__append_3 = containers/vector concurrency/coroutines concurrency/threads concurrency/kernel concurrency/monitor
    4646
    4747# not all platforms support concurrency, add option do disable it
     
    9999am__libcfa_d_a_SOURCES_DIST = libcfa-prelude.c limits.c stdlib.c \
    100100        math.c iostream.c fstream.c iterator.c rational.c assert.c \
    101         containers/vector.c concurrency/coroutine.c \
    102         concurrency/thread.c concurrency/kernel.c \
     101        containers/vector.c concurrency/coroutines.c \
     102        concurrency/threads.c concurrency/kernel.c \
    103103        concurrency/monitor.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \
    104104        concurrency/invoke.c
    105105am__dirstamp = $(am__leading_dot)dirstamp
    106106@BUILD_CONCURRENCY_TRUE@am__objects_1 = containers/libcfa_d_a-vector.$(OBJEXT) \
    107 @BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-coroutine.$(OBJEXT) \
    108 @BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-thread.$(OBJEXT) \
     107@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-coroutines.$(OBJEXT) \
     108@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-threads.$(OBJEXT) \
    109109@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-kernel.$(OBJEXT) \
    110110@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-monitor.$(OBJEXT)
     
    124124am__libcfa_a_SOURCES_DIST = libcfa-prelude.c limits.c stdlib.c math.c \
    125125        iostream.c fstream.c iterator.c rational.c assert.c \
    126         containers/vector.c concurrency/coroutine.c \
    127         concurrency/thread.c concurrency/kernel.c \
     126        containers/vector.c concurrency/coroutines.c \
     127        concurrency/threads.c concurrency/kernel.c \
    128128        concurrency/monitor.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \
    129129        concurrency/invoke.c
    130130@BUILD_CONCURRENCY_TRUE@am__objects_5 =  \
    131131@BUILD_CONCURRENCY_TRUE@        containers/libcfa_a-vector.$(OBJEXT) \
    132 @BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-coroutine.$(OBJEXT) \
    133 @BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-thread.$(OBJEXT) \
     132@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-coroutines.$(OBJEXT) \
     133@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-threads.$(OBJEXT) \
    134134@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-kernel.$(OBJEXT) \
    135135@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-monitor.$(OBJEXT)
     
    175175am__nobase_cfa_include_HEADERS_DIST = limits stdlib math iostream \
    176176        fstream iterator rational assert containers/vector \
    177         concurrency/coroutine concurrency/thread concurrency/kernel \
     177        concurrency/coroutines concurrency/threads concurrency/kernel \
    178178        concurrency/monitor ${shell echo stdhdr/*} \
    179179        concurrency/invoke.h
     
    397397        @$(MKDIR_P) concurrency/$(DEPDIR)
    398398        @: > concurrency/$(DEPDIR)/$(am__dirstamp)
    399 concurrency/libcfa_d_a-coroutine.$(OBJEXT):  \
     399concurrency/libcfa_d_a-coroutines.$(OBJEXT):  \
    400400        concurrency/$(am__dirstamp) \
    401401        concurrency/$(DEPDIR)/$(am__dirstamp)
    402 concurrency/libcfa_d_a-thread.$(OBJEXT): concurrency/$(am__dirstamp) \
     402concurrency/libcfa_d_a-threads.$(OBJEXT): concurrency/$(am__dirstamp) \
    403403        concurrency/$(DEPDIR)/$(am__dirstamp)
    404404concurrency/libcfa_d_a-kernel.$(OBJEXT): concurrency/$(am__dirstamp) \
     
    417417containers/libcfa_a-vector.$(OBJEXT): containers/$(am__dirstamp) \
    418418        containers/$(DEPDIR)/$(am__dirstamp)
    419 concurrency/libcfa_a-coroutine.$(OBJEXT): concurrency/$(am__dirstamp) \
     419concurrency/libcfa_a-coroutines.$(OBJEXT):  \
     420        concurrency/$(am__dirstamp) \
    420421        concurrency/$(DEPDIR)/$(am__dirstamp)
    421 concurrency/libcfa_a-thread.$(OBJEXT): concurrency/$(am__dirstamp) \
     422concurrency/libcfa_a-threads.$(OBJEXT): concurrency/$(am__dirstamp) \
    422423        concurrency/$(DEPDIR)/$(am__dirstamp)
    423424concurrency/libcfa_a-kernel.$(OBJEXT): concurrency/$(am__dirstamp) \
     
    435436        -rm -f *.$(OBJEXT)
    436437        -rm -f concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT)
    437         -rm -f concurrency/libcfa_a-coroutine.$(OBJEXT)
     438        -rm -f concurrency/libcfa_a-coroutines.$(OBJEXT)
    438439        -rm -f concurrency/libcfa_a-invoke.$(OBJEXT)
    439440        -rm -f concurrency/libcfa_a-kernel.$(OBJEXT)
    440441        -rm -f concurrency/libcfa_a-monitor.$(OBJEXT)
    441         -rm -f concurrency/libcfa_a-thread.$(OBJEXT)
    442         -rm -f concurrency/libcfa_d_a-coroutine.$(OBJEXT)
     442        -rm -f concurrency/libcfa_a-threads.$(OBJEXT)
     443        -rm -f concurrency/libcfa_d_a-coroutines.$(OBJEXT)
    443444        -rm -f concurrency/libcfa_d_a-invoke.$(OBJEXT)
    444445        -rm -f concurrency/libcfa_d_a-kernel.$(OBJEXT)
    445446        -rm -f concurrency/libcfa_d_a-monitor.$(OBJEXT)
    446         -rm -f concurrency/libcfa_d_a-thread.$(OBJEXT)
     447        -rm -f concurrency/libcfa_d_a-threads.$(OBJEXT)
    447448        -rm -f containers/libcfa_a-vector.$(OBJEXT)
    448449        -rm -f containers/libcfa_d_a-vector.$(OBJEXT)
     
    470471@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-stdlib.Po@am__quote@
    471472@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/CtxSwitch-@MACHINE_TYPE@.Po@am__quote@
    472 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-coroutine.Po@am__quote@
     473@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-coroutines.Po@am__quote@
    473474@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-invoke.Po@am__quote@
    474475@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-kernel.Po@am__quote@
    475476@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-monitor.Po@am__quote@
    476 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-thread.Po@am__quote@
    477 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-coroutine.Po@am__quote@
     477@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-threads.Po@am__quote@
     478@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-coroutines.Po@am__quote@
    478479@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-invoke.Po@am__quote@
    479480@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-kernel.Po@am__quote@
    480481@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-monitor.Po@am__quote@
    481 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-thread.Po@am__quote@
     482@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-threads.Po@am__quote@
    482483@AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/libcfa_a-vector.Po@am__quote@
    483484@AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/libcfa_d_a-vector.Po@am__quote@
     
    648649@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o containers/libcfa_d_a-vector.obj `if test -f 'containers/vector.c'; then $(CYGPATH_W) 'containers/vector.c'; else $(CYGPATH_W) '$(srcdir)/containers/vector.c'; fi`
    649650
    650 concurrency/libcfa_d_a-coroutine.o: concurrency/coroutine.c
    651 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-coroutine.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-coroutine.Tpo -c -o concurrency/libcfa_d_a-coroutine.o `test -f 'concurrency/coroutine.c' || echo '$(srcdir)/'`concurrency/coroutine.c
    652 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-coroutine.Tpo concurrency/$(DEPDIR)/libcfa_d_a-coroutine.Po
    653 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/coroutine.c' object='concurrency/libcfa_d_a-coroutine.o' libtool=no @AMDEPBACKSLASH@
    654 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    655 @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-coroutine.o `test -f 'concurrency/coroutine.c' || echo '$(srcdir)/'`concurrency/coroutine.c
    656 
    657 concurrency/libcfa_d_a-coroutine.obj: concurrency/coroutine.c
    658 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-coroutine.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-coroutine.Tpo -c -o concurrency/libcfa_d_a-coroutine.obj `if test -f 'concurrency/coroutine.c'; then $(CYGPATH_W) 'concurrency/coroutine.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/coroutine.c'; fi`
    659 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-coroutine.Tpo concurrency/$(DEPDIR)/libcfa_d_a-coroutine.Po
    660 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/coroutine.c' object='concurrency/libcfa_d_a-coroutine.obj' libtool=no @AMDEPBACKSLASH@
    661 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    662 @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-coroutine.obj `if test -f 'concurrency/coroutine.c'; then $(CYGPATH_W) 'concurrency/coroutine.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/coroutine.c'; fi`
    663 
    664 concurrency/libcfa_d_a-thread.o: concurrency/thread.c
    665 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-thread.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-thread.Tpo -c -o concurrency/libcfa_d_a-thread.o `test -f 'concurrency/thread.c' || echo '$(srcdir)/'`concurrency/thread.c
    666 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-thread.Tpo concurrency/$(DEPDIR)/libcfa_d_a-thread.Po
    667 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/thread.c' object='concurrency/libcfa_d_a-thread.o' libtool=no @AMDEPBACKSLASH@
    668 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    669 @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-thread.o `test -f 'concurrency/thread.c' || echo '$(srcdir)/'`concurrency/thread.c
    670 
    671 concurrency/libcfa_d_a-thread.obj: concurrency/thread.c
    672 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-thread.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-thread.Tpo -c -o concurrency/libcfa_d_a-thread.obj `if test -f 'concurrency/thread.c'; then $(CYGPATH_W) 'concurrency/thread.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/thread.c'; fi`
    673 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-thread.Tpo concurrency/$(DEPDIR)/libcfa_d_a-thread.Po
    674 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/thread.c' object='concurrency/libcfa_d_a-thread.obj' libtool=no @AMDEPBACKSLASH@
    675 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    676 @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-thread.obj `if test -f 'concurrency/thread.c'; then $(CYGPATH_W) 'concurrency/thread.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/thread.c'; fi`
     651concurrency/libcfa_d_a-coroutines.o: concurrency/coroutines.c
     652@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-coroutines.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-coroutines.Tpo -c -o concurrency/libcfa_d_a-coroutines.o `test -f 'concurrency/coroutines.c' || echo '$(srcdir)/'`concurrency/coroutines.c
     653@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-coroutines.Tpo concurrency/$(DEPDIR)/libcfa_d_a-coroutines.Po
     654@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/coroutines.c' object='concurrency/libcfa_d_a-coroutines.o' libtool=no @AMDEPBACKSLASH@
     655@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     656@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-coroutines.o `test -f 'concurrency/coroutines.c' || echo '$(srcdir)/'`concurrency/coroutines.c
     657
     658concurrency/libcfa_d_a-coroutines.obj: concurrency/coroutines.c
     659@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-coroutines.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-coroutines.Tpo -c -o concurrency/libcfa_d_a-coroutines.obj `if test -f 'concurrency/coroutines.c'; then $(CYGPATH_W) 'concurrency/coroutines.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/coroutines.c'; fi`
     660@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-coroutines.Tpo concurrency/$(DEPDIR)/libcfa_d_a-coroutines.Po
     661@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/coroutines.c' object='concurrency/libcfa_d_a-coroutines.obj' libtool=no @AMDEPBACKSLASH@
     662@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     663@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-coroutines.obj `if test -f 'concurrency/coroutines.c'; then $(CYGPATH_W) 'concurrency/coroutines.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/coroutines.c'; fi`
     664
     665concurrency/libcfa_d_a-threads.o: concurrency/threads.c
     666@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-threads.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-threads.Tpo -c -o concurrency/libcfa_d_a-threads.o `test -f 'concurrency/threads.c' || echo '$(srcdir)/'`concurrency/threads.c
     667@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-threads.Tpo concurrency/$(DEPDIR)/libcfa_d_a-threads.Po
     668@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/threads.c' object='concurrency/libcfa_d_a-threads.o' libtool=no @AMDEPBACKSLASH@
     669@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     670@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-threads.o `test -f 'concurrency/threads.c' || echo '$(srcdir)/'`concurrency/threads.c
     671
     672concurrency/libcfa_d_a-threads.obj: concurrency/threads.c
     673@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-threads.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-threads.Tpo -c -o concurrency/libcfa_d_a-threads.obj `if test -f 'concurrency/threads.c'; then $(CYGPATH_W) 'concurrency/threads.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/threads.c'; fi`
     674@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-threads.Tpo concurrency/$(DEPDIR)/libcfa_d_a-threads.Po
     675@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/threads.c' object='concurrency/libcfa_d_a-threads.obj' libtool=no @AMDEPBACKSLASH@
     676@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     677@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-threads.obj `if test -f 'concurrency/threads.c'; then $(CYGPATH_W) 'concurrency/threads.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/threads.c'; fi`
    677678
    678679concurrency/libcfa_d_a-kernel.o: concurrency/kernel.c
     
    844845@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o containers/libcfa_a-vector.obj `if test -f 'containers/vector.c'; then $(CYGPATH_W) 'containers/vector.c'; else $(CYGPATH_W) '$(srcdir)/containers/vector.c'; fi`
    845846
    846 concurrency/libcfa_a-coroutine.o: concurrency/coroutine.c
    847 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-coroutine.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-coroutine.Tpo -c -o concurrency/libcfa_a-coroutine.o `test -f 'concurrency/coroutine.c' || echo '$(srcdir)/'`concurrency/coroutine.c
    848 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-coroutine.Tpo concurrency/$(DEPDIR)/libcfa_a-coroutine.Po
    849 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/coroutine.c' object='concurrency/libcfa_a-coroutine.o' libtool=no @AMDEPBACKSLASH@
    850 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    851 @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-coroutine.o `test -f 'concurrency/coroutine.c' || echo '$(srcdir)/'`concurrency/coroutine.c
    852 
    853 concurrency/libcfa_a-coroutine.obj: concurrency/coroutine.c
    854 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-coroutine.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-coroutine.Tpo -c -o concurrency/libcfa_a-coroutine.obj `if test -f 'concurrency/coroutine.c'; then $(CYGPATH_W) 'concurrency/coroutine.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/coroutine.c'; fi`
    855 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-coroutine.Tpo concurrency/$(DEPDIR)/libcfa_a-coroutine.Po
    856 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/coroutine.c' object='concurrency/libcfa_a-coroutine.obj' libtool=no @AMDEPBACKSLASH@
    857 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    858 @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-coroutine.obj `if test -f 'concurrency/coroutine.c'; then $(CYGPATH_W) 'concurrency/coroutine.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/coroutine.c'; fi`
    859 
    860 concurrency/libcfa_a-thread.o: concurrency/thread.c
    861 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-thread.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-thread.Tpo -c -o concurrency/libcfa_a-thread.o `test -f 'concurrency/thread.c' || echo '$(srcdir)/'`concurrency/thread.c
    862 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-thread.Tpo concurrency/$(DEPDIR)/libcfa_a-thread.Po
    863 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/thread.c' object='concurrency/libcfa_a-thread.o' libtool=no @AMDEPBACKSLASH@
    864 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    865 @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-thread.o `test -f 'concurrency/thread.c' || echo '$(srcdir)/'`concurrency/thread.c
    866 
    867 concurrency/libcfa_a-thread.obj: concurrency/thread.c
    868 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-thread.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-thread.Tpo -c -o concurrency/libcfa_a-thread.obj `if test -f 'concurrency/thread.c'; then $(CYGPATH_W) 'concurrency/thread.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/thread.c'; fi`
    869 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-thread.Tpo concurrency/$(DEPDIR)/libcfa_a-thread.Po
    870 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/thread.c' object='concurrency/libcfa_a-thread.obj' libtool=no @AMDEPBACKSLASH@
    871 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    872 @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-thread.obj `if test -f 'concurrency/thread.c'; then $(CYGPATH_W) 'concurrency/thread.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/thread.c'; fi`
     847concurrency/libcfa_a-coroutines.o: concurrency/coroutines.c
     848@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-coroutines.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-coroutines.Tpo -c -o concurrency/libcfa_a-coroutines.o `test -f 'concurrency/coroutines.c' || echo '$(srcdir)/'`concurrency/coroutines.c
     849@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-coroutines.Tpo concurrency/$(DEPDIR)/libcfa_a-coroutines.Po
     850@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/coroutines.c' object='concurrency/libcfa_a-coroutines.o' libtool=no @AMDEPBACKSLASH@
     851@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     852@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-coroutines.o `test -f 'concurrency/coroutines.c' || echo '$(srcdir)/'`concurrency/coroutines.c
     853
     854concurrency/libcfa_a-coroutines.obj: concurrency/coroutines.c
     855@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-coroutines.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-coroutines.Tpo -c -o concurrency/libcfa_a-coroutines.obj `if test -f 'concurrency/coroutines.c'; then $(CYGPATH_W) 'concurrency/coroutines.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/coroutines.c'; fi`
     856@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-coroutines.Tpo concurrency/$(DEPDIR)/libcfa_a-coroutines.Po
     857@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/coroutines.c' object='concurrency/libcfa_a-coroutines.obj' libtool=no @AMDEPBACKSLASH@
     858@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     859@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-coroutines.obj `if test -f 'concurrency/coroutines.c'; then $(CYGPATH_W) 'concurrency/coroutines.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/coroutines.c'; fi`
     860
     861concurrency/libcfa_a-threads.o: concurrency/threads.c
     862@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-threads.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-threads.Tpo -c -o concurrency/libcfa_a-threads.o `test -f 'concurrency/threads.c' || echo '$(srcdir)/'`concurrency/threads.c
     863@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-threads.Tpo concurrency/$(DEPDIR)/libcfa_a-threads.Po
     864@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/threads.c' object='concurrency/libcfa_a-threads.o' libtool=no @AMDEPBACKSLASH@
     865@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     866@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-threads.o `test -f 'concurrency/threads.c' || echo '$(srcdir)/'`concurrency/threads.c
     867
     868concurrency/libcfa_a-threads.obj: concurrency/threads.c
     869@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-threads.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-threads.Tpo -c -o concurrency/libcfa_a-threads.obj `if test -f 'concurrency/threads.c'; then $(CYGPATH_W) 'concurrency/threads.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/threads.c'; fi`
     870@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-threads.Tpo concurrency/$(DEPDIR)/libcfa_a-threads.Po
     871@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/threads.c' object='concurrency/libcfa_a-threads.obj' libtool=no @AMDEPBACKSLASH@
     872@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     873@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-threads.obj `if test -f 'concurrency/threads.c'; then $(CYGPATH_W) 'concurrency/threads.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/threads.c'; fi`
    873874
    874875concurrency/libcfa_a-kernel.o: concurrency/kernel.c
  • src/libcfa/concurrency/invoke.c

    rf2e40a9f rbf4ac09  
    2929
    3030extern void __suspend_internal(void);
    31 extern void __thread_signal_termination(struct thread_desc*);
     31extern void __thread_signal_termination(struct thread*);
    3232
    3333void CtxInvokeCoroutine(
    3434      void (*main)(void *),
    35       struct coroutine_desc *(*get_coroutine)(void *),
     35      struct coroutine *(*get_coroutine)(void *),
    3636      void *this
    3737) {
    3838      // LIB_DEBUG_PRINTF("Invoke Coroutine : Received %p (main %p, get_c %p)\n", this, main, get_coroutine);
    3939
    40       struct coroutine_desc* cor = get_coroutine( this );
     40      struct coroutine* cor = get_coroutine( this );
    4141
    4242      if(cor->state == Primed) {
     
    5757void CtxInvokeThread(
    5858      void (*main)(void *),
    59       struct thread_desc *(*get_thread)(void *),
     59      struct thread *(*get_thread)(void *),
    6060      void *this
    6161) {
    6262      __suspend_internal();
    6363
    64       struct thread_desc* thrd = get_thread( this );
    65       struct coroutine_desc* cor = &thrd->c;
     64      struct thread* thrd = get_thread( this );
     65      struct coroutine* cor = &thrd->c;
    6666      cor->state = Active;
    6767
     
    7979void CtxStart(
    8080      void (*main)(void *),
    81       struct coroutine_desc *(*get_coroutine)(void *),
     81      struct coroutine *(*get_coroutine)(void *),
    8282      void *this,
    8383      void (*invoke)(void *)
  • src/libcfa/concurrency/invoke.h

    rf2e40a9f rbf4ac09  
    3535
    3636      struct simple_thread_list {
    37             struct thread_desc * head;
    38             struct thread_desc ** tail;
     37            struct thread * head;
     38            struct thread ** tail;
    3939      };
    4040
     
    4848      extern "Cforall" {
    4949            void ?{}( struct simple_thread_list * );
    50             void append( struct simple_thread_list *, struct thread_desc * );
    51             struct thread_desc * pop_head( struct simple_thread_list * );
     50            void append( struct simple_thread_list *, struct thread * );
     51            struct thread * pop_head( struct simple_thread_list * );
    5252
    5353            void ?{}(spinlock * this);
     
    7171      enum coroutine_state { Halted, Start, Inactive, Active, Primed };
    7272
    73       struct coroutine_desc {
     73      struct coroutine {
    7474            struct coStack_t stack;
    7575            const char *name;                         // textual name for coroutine/task, initialized by uC++ generated code
    7676            int errno_;                               // copy of global UNIX variable errno
    7777            enum coroutine_state state;       // current execution status for coroutine
    78             struct coroutine_desc *starter;           // first coroutine to resume this one
    79             struct coroutine_desc *last;                      // last coroutine to resume this one
     78            struct coroutine *starter;        // first coroutine to resume this one
     79            struct coroutine *last;                   // last coroutine to resume this one
    8080      };
    8181
    82       struct thread_desc {
    83             struct coroutine_desc c;                 // coroutine body used to store context
     82      struct thread {
     83            struct coroutine c;                 // coroutine body used to store context
    8484            struct signal_once terminated;      // indicate if execuation state is not halted
    85             struct thread_desc * next;               // instrusive link field for threads
     85            struct thread * next;               // instrusive link field for threads
    8686      };
    8787
  • src/libcfa/concurrency/kernel

    rf2e40a9f rbf4ac09  
    66// file "LICENCE" distributed with Cforall.
    77//
    8 // kernel --
     8// threads --
    99//
    1010// Author           : Thierry Delisle
     
    4949struct FinishAction {
    5050        FinishOpCode action_code;
    51         thread_desc * thrd;
     51        thread * thrd;
    5252        spinlock * lock;
    5353};
     
    6262        struct processorCtx_t * runner;
    6363        cluster * cltr;
    64         coroutine_desc * current_coroutine;
    65         thread_desc * current_thread;
     64        coroutine * current_coroutine;
     65        thread * current_thread;
    6666        pthread_t kernel_thread;
    6767       
  • src/libcfa/concurrency/kernel.c

    rf2e40a9f rbf4ac09  
    4343KERNEL_STORAGE(cluster, systemCluster);
    4444KERNEL_STORAGE(processor, systemProcessor);
    45 KERNEL_STORAGE(thread_desc, mainThread);
     45KERNEL_STORAGE(thread, mainThread);
    4646KERNEL_STORAGE(machine_context_t, mainThread_context);
    4747
    4848cluster * systemCluster;
    4949processor * systemProcessor;
    50 thread_desc * mainThread;
     50thread * mainThread;
    5151
    5252//-----------------------------------------------------------------------------
     
    5555thread_local processor * this_processor;
    5656
    57 coroutine_desc * this_coroutine(void) {
     57processor * get_this_processor() {
     58        return this_processor;
     59}
     60
     61coroutine * this_coroutine(void) {
    5862        return this_processor->current_coroutine;
    5963}
    6064
    61 thread_desc * this_thread(void) {
     65thread * this_thread(void) {
    6266        return this_processor->current_thread;
    6367}
     
    99103}
    100104
    101 void ?{}( coroutine_desc * this, current_stack_info_t * info) {
     105void ?{}( coroutine * this, current_stack_info_t * info) {
    102106        (&this->stack){ info };
    103107        this->name = "Main Thread";
     
    106110}
    107111
    108 void ?{}( thread_desc * this, current_stack_info_t * info) {
     112void ?{}( thread * this, current_stack_info_t * info) {
    109113        (&this->c){ info };
    110114}
     
    175179        LIB_DEBUG_PRINTF("Kernel : core %p starting\n", this);
    176180
    177         thread_desc * readyThread = NULL;
     181        thread * readyThread = NULL;
    178182        for( unsigned int spin_count = 0; ! this->is_terminated; spin_count++ )
    179183        {
     
    202206// runThread runs a thread by context switching
    203207// from the processor coroutine to the target thread
    204 void runThread(processor * this, thread_desc * dst) {
    205         coroutine_desc * proc_cor = get_coroutine(this->runner);
    206         coroutine_desc * thrd_cor = get_coroutine(dst);
     208void runThread(processor * this, thread * dst) {
     209        coroutine * proc_cor = get_coroutine(this->runner);
     210        coroutine * thrd_cor = get_coroutine(dst);
    207211       
    208212        //Reset the terminating actions here
     
    293297//-----------------------------------------------------------------------------
    294298// Scheduler routines
    295 void ScheduleThread( thread_desc * thrd ) {
     299void ScheduleThread( thread * thrd ) {
    296300        assertf( thrd->next == NULL, "Expected null got %p", thrd->next );
    297301       
     
    301305}
    302306
    303 thread_desc * nextThread(cluster * this) {
     307thread * nextThread(cluster * this) {
    304308        lock( &this->lock );
    305         thread_desc * head = pop_head( &this->ready_queue );
     309        thread * head = pop_head( &this->ready_queue );
    306310        unlock( &this->lock );
    307311        return head;
     
    313317
    314318void ScheduleInternal( spinlock * lock ) {
    315         this_processor->finish.action_code = Release;
    316         this_processor->finish.lock = lock;
     319        get_this_processor()->finish.action_code = Release;
     320        get_this_processor()->finish.lock = lock;
    317321        suspend();
    318322}
    319323
    320 void ScheduleInternal( thread_desc * thrd ) {
    321         this_processor->finish.action_code = Schedule;
    322         this_processor->finish.thrd = thrd;
     324void ScheduleInternal( thread * thrd ) {
     325        get_this_processor()->finish.action_code = Schedule;
     326        get_this_processor()->finish.thrd = thrd;
    323327        suspend();
    324328}
    325329
    326 void ScheduleInternal( spinlock * lock, thread_desc * thrd ) {
    327         this_processor->finish.action_code = Release_Schedule;
    328         this_processor->finish.lock = lock;
    329         this_processor->finish.thrd = thrd;
     330void ScheduleInternal( spinlock * lock, thread * thrd ) {
     331        get_this_processor()->finish.action_code = Release_Schedule;
     332        get_this_processor()->finish.lock = lock;
     333        get_this_processor()->finish.thrd = thrd;
    330334        suspend();
    331335}
     
    339343        // SKULLDUGGERY: the mainThread steals the process main thread
    340344        // which will then be scheduled by the systemProcessor normally
    341         mainThread = (thread_desc *)&mainThread_storage;
     345        mainThread = (thread *)&mainThread_storage;
    342346        current_stack_info_t info;
    343347        mainThread{ &info };
     
    436440                this->condition = true;
    437441
    438                 thread_desc * it;
     442                thread * it;
    439443                while( it = pop_head( &this->blocked) ) {
    440444                        ScheduleThread( it );
     
    451455}
    452456
    453 void append( simple_thread_list * this, thread_desc * t ) {
     457void append( simple_thread_list * this, thread * t ) {
    454458        assert(this->tail != NULL);
    455459        *this->tail = t;
     
    457461}
    458462
    459 thread_desc * pop_head( simple_thread_list * this ) {
    460         thread_desc * head = this->head;
     463thread * pop_head( simple_thread_list * this ) {
     464        thread * head = this->head;
    461465        if( head ) {
    462466                this->head = head->next;
  • src/libcfa/concurrency/kernel_private.h

    rf2e40a9f rbf4ac09  
    66// file "LICENCE" distributed with Cforall.
    77//
    8 // kernel_private.h --
     8// threads --
    99//
    1010// Author           : Thierry Delisle
     
    1919
    2020#include "kernel"
    21 #include "thread"
     21#include "threads"
    2222
    2323//-----------------------------------------------------------------------------
    2424// Scheduler
    25 void ScheduleThread( thread_desc * );
    26 thread_desc * nextThread(cluster * this);
     25void ScheduleThread( thread * );
     26thread * nextThread(cluster * this);
    2727
    2828void ScheduleInternal();
    2929void ScheduleInternal(spinlock * lock);
    30 void ScheduleInternal(thread_desc * thrd);
    31 void ScheduleInternal(spinlock * lock, thread_desc * thrd);
     30void ScheduleInternal(thread * thrd);
     31void ScheduleInternal(spinlock * lock, thread * thrd);
    3232
    3333//-----------------------------------------------------------------------------
     
    3535struct processorCtx_t {
    3636        processor * proc;
    37         coroutine_desc c;
     37        coroutine c;
    3838};
    3939
     
    4242void main(processorCtx_t *);
    4343void start(processor * this);
    44 void runThread(processor * this, thread_desc * dst);
     44void runThread(processor * this, thread * dst);
    4545void finishRunning(processor * this);
    4646void spin(processor * this, unsigned int * spin_count);
     
    5353}
    5454
    55 extern void ThreadCtxSwitch(coroutine_desc * src, coroutine_desc * dst);
     55extern void ThreadCtxSwitch(coroutine * src, coroutine * dst);
    5656
    5757#endif //KERNEL_PRIVATE_H
  • src/libcfa/concurrency/monitor

    rf2e40a9f rbf4ac09  
    2222#include "stdlib"
    2323
    24 struct monitor_desc {
     24struct __monitor_t {
    2525        spinlock lock;
    26         thread_desc * owner;
     26        thread * owner;
    2727        simple_thread_list entry_queue;
    2828        unsigned int recursion;
    2929};
    3030
    31 static inline void ?{}(monitor_desc * this) {
     31static inline void ?{}(__monitor_t * this) {
    3232        this->owner = 0;
    3333        this->recursion = 0;
     
    3535
    3636//Basic entering routine
    37 void enter(monitor_desc *);
    38 void leave(monitor_desc *);
     37void enter(__monitor_t *);
     38void leave(__monitor_t *);
    3939
    4040//Array entering routine
    41 void enter(monitor_desc **, int count);
    42 void leave(monitor_desc **, int count);
     41void enter(__monitor_t **, int count);
     42void leave(__monitor_t **, int count);
    4343
    4444struct monitor_guard_t {
    45         monitor_desc ** m;
     45        __monitor_t ** m;
    4646        int count;
    4747};
    4848
    49 static inline int ?<?(monitor_desc* lhs, monitor_desc* rhs) {
     49static inline int ?<?(__monitor_t* lhs, __monitor_t* rhs) {
    5050        return ((intptr_t)lhs) < ((intptr_t)rhs);
    5151}
    5252
    53 static inline void ?{}( monitor_guard_t * this, monitor_desc ** m ) {
     53static inline void ?{}( monitor_guard_t * this, __monitor_t ** m ) {
    5454        this->m = m;
    5555        this->count = 1;
     
    5757}
    5858
    59 static inline void ?{}( monitor_guard_t * this, monitor_desc ** m, int count ) {
     59static inline void ?{}( monitor_guard_t * this, __monitor_t ** m, int count ) {
    6060        this->m = m;
    6161        this->count = count;
  • src/libcfa/concurrency/monitor.c

    rf2e40a9f rbf4ac09  
    66// file "LICENCE" distributed with Cforall.
    77//
    8 // monitor_desc.c --
     8// __monitor_t.c --
    99//
    1010// Author           : Thierry Delisle
     
    1919#include "kernel_private.h"
    2020
    21 void enter(monitor_desc * this) {
     21void enter(__monitor_t * this) {
    2222        lock( &this->lock );
    23         thread_desc * thrd = this_thread();
     23        thread * thrd = this_thread();
    2424
    2525        if( !this->owner ) {
     
    4545}
    4646
    47 void leave(monitor_desc * this) {
     47void leave(__monitor_t * this) {
    4848        lock( &this->lock );
    4949
    50         thread_desc * thrd = this_thread();
     50        thread * thrd = this_thread();
    5151        assert( thrd == this->owner );
    5252
     
    5555
    5656        //If we left the last level of recursion it means we are changing who owns the monitor
    57         thread_desc * new_owner = 0;
     57        thread * new_owner = 0;
    5858        if( this->recursion == 0) {
    5959                //Get the next thread in the list
     
    7272}
    7373
    74 void enter(monitor_desc ** monitors, int count) {
     74void enter(__monitor_t ** monitors, int count) {
    7575        for(int i = 0; i < count; i++) {
    7676                // printf("%d\n", i);
     
    7979}
    8080
    81 void leave(monitor_desc ** monitors, int count) {
     81void leave(__monitor_t ** monitors, int count) {
    8282        for(int i = count - 1; i >= 0; i--) {
    8383                // printf("%d\n", i);
  • src/tests/coroutine.c

    rf2e40a9f rbf4ac09  
    11#include <fstream>
    2 #include <coroutine>
     2#include <coroutines>
    33
    44struct Fibonacci {
    55      int fn; // used for communication
    6       coroutine_desc c;
     6      coroutine c;
    77};
    88
     
    1111}
    1212
    13 coroutine_desc* get_coroutine(Fibonacci* this) {
     13coroutine* get_coroutine(Fibonacci* this) {
    1414      return &this->c;
    1515}
     
    4747#ifdef MORE_DEBUG     
    4848      Fibonacci *pf1 = &f1, *pf2 = &f2;
    49       coroutine_desc *cf1 = &f1.c, *cf2 = &f2.c;
     49      coroutine *cf1 = &f1.c, *cf2 = &f2.c;
    5050      covptr_t  *vf1 = vtable(pf1), *vf2 = vtable(pf2);
    51       coroutine_desc *cv1 = get_coroutine(vf1), *cv2 = get_coroutine(vf2);
     51      coroutine *cv1 = get_coroutine(vf1), *cv2 = get_coroutine(vf2);
    5252      Fibonacci *ov1 = (Fibonacci *)get_object(vf1), *ov2 = (Fibonacci *)get_object(vf2);
    5353
  • src/tests/monitor.c

    rf2e40a9f rbf4ac09  
    22#include <kernel>
    33#include <monitor>
    4 #include <thread>
     4#include <threads>
    55
    66struct global_t {
    77        int value;
    8         monitor_desc m;
     8        __monitor_t m;
    99};
    1010
     
    1616
    1717void increment( /*mutex*/ global_t * this ) {
    18         monitor_desc * mon = &this->m;
     18        __monitor_t * mon = &this->m;
    1919        monitor_guard_t g1 = { &mon };
    2020        {
     
    2727}
    2828
    29 struct MyThread { thread_desc t; };
     29struct MyThread { thread t; };
    3030
    3131DECL_THREAD(MyThread);
  • src/tests/multi-monitor.c

    rf2e40a9f rbf4ac09  
    22#include <kernel>
    33#include <monitor>
    4 #include <thread>
     4#include <threads>
    55
    66static int global12, global23, global13;
    77
    8 static monitor_desc m1, m2, m3;
     8static __monitor_t m1, m2, m3;
    99
    10 void increment( /*mutex*/ monitor_desc * p1, /*mutex*/ monitor_desc * p2, int * value ) {
    11         monitor_desc * mons[] = { p1, p2 };
     10void increment( /*mutex*/ __monitor_t * p1, /*mutex*/ __monitor_t * p2, int * value ) {
     11        __monitor_t * mons[] = { p1, p2 };
    1212        monitor_guard_t g = { mons, 2 };
    1313        *value += 1;
     
    1515
    1616struct MyThread {
    17         thread_desc t;
     17        thread t;
    1818        int target;
    1919};
  • src/tests/test.py

    rf2e40a9f rbf4ac09  
    250250parser = argparse.ArgumentParser(description='Script which runs cforall tests')
    251251parser.add_argument('--debug', help='Run all tests in debug or release', type=yes_no, default='no')
    252 parser.add_argument('--concurrent', help='Run concurrent tests', type=yes_no, default='yes')
     252parser.add_argument('--concurrent', help='Run concurrent tests', type=yes_no, default='no')
    253253parser.add_argument('--dry-run', help='Don\'t run the tests, only output the commands', action='store_true')
    254254parser.add_argument('--list', help='List all test available', action='store_true')
  • src/tests/thread.c

    rf2e40a9f rbf4ac09  
    22#include <kernel>
    33#include <stdlib>
    4 #include <thread>
     4#include <threads>
    55
    6 struct First { thread_desc t; signal_once* lock; };
    7 struct Second { thread_desc t; signal_once* lock; };
     6struct First { thread t; signal_once* lock; };
     7struct Second { thread t; signal_once* lock; };
    88
    99DECL_THREAD(First);
Note: See TracChangeset for help on using the changeset viewer.