Changes in / [4269d1b:8a9a3ab]


Ignore:
Files:
45 added
45 deleted
36 edited

Legend:

Unmodified
Added
Removed
  • driver/cfa.cc

    r4269d1b r8a9a3ab  
    1010// Created On       : Tue Aug 20 13:44:49 2002
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Jun  9 14:36:41 2023
    13 // Update Count     : 479
     12// Last Modified On : Wed Aug 30 21:48:48 2023
     13// Update Count     : 480
    1414//
    1515
     
    361361                } // if
    362362                args[nargs++] = "-I" CFA_INCDIR "concurrency";
    363                 args[nargs++] = "-I" CFA_INCDIR "containers";
     363                args[nargs++] = "-I" CFA_INCDIR "collections";
    364364                libbase = CFA_LIBDIR;
    365365                break;
     
    372372                } // if
    373373                args[nargs++] = "-I" TOP_SRCDIR "libcfa/src" "/concurrency";
    374                 args[nargs++] = "-I" TOP_SRCDIR "libcfa/src" "/containers";
     374                args[nargs++] = "-I" TOP_SRCDIR "libcfa/src" "/collections";
    375375
    376376                libbase = TOP_BUILDDIR "libcfa/";
  • libcfa/src/Makefile.am

    r4269d1b r8a9a3ab  
    1111## Created On       : Sun May 31 08:54:01 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Mon Aug 14 17:10:51 2023
    14 ## Update Count     : 262
     13## Last Modified On : Wed Aug 30 21:22:45 2023
     14## Update Count     : 263
    1515###############################################################################
    1616
     
    5252        bits/algorithm.hfa \
    5353        bits/align.hfa \
    54         bits/containers.hfa \
     54        bits/collections.hfa \
    5555        bits/debug.hfa \
    5656        bits/defs.hfa \
     
    6363        concurrency/iofwd.hfa \
    6464        concurrency/barrier.hfa \
    65         containers/array.hfa \
    66         containers/list.hfa \
    67         containers/lockfree.hfa \
    68         containers/string_sharectx.hfa \
    69         containers/vector2.hfa \
     65        collections/array.hfa \
     66        collections/list.hfa \
     67        collections/lockfree.hfa \
     68        collections/string_sharectx.hfa \
     69        collections/vector2.hfa \
    7070        vec/vec.hfa \
    7171        vec/vec2.hfa \
     
    8989        bits/weakso_locks.hfa \
    9090        algorithms/range_iterator.hfa \
    91         containers/maybe.hfa \
    92         containers/pair.hfa \
    93         containers/result.hfa \
    94         containers/string.hfa \
    95         containers/string_res.hfa \
    96         containers/vector.hfa \
     91        collections/maybe.hfa \
     92        collections/pair.hfa \
     93        collections/result.hfa \
     94        collections/string.hfa \
     95        collections/string_res.hfa \
     96        collections/vector.hfa \
    9797        device/cpu.hfa
    9898
  • libcfa/src/bits/weakso_locks.hfa

    r4269d1b r8a9a3ab  
    2020#include "bits/locks.hfa"
    2121#include "bits/sequence.hfa"
    22 #include "bits/containers.hfa"
    23 #include "containers/list.hfa"
     22#include "bits/collections.hfa"
     23#include "collections/list.hfa"
    2424
    2525struct select_node;
  • libcfa/src/concurrency/alarm.hfa

    r4269d1b r8a9a3ab  
    1010// Created On       : Fri Jun 2 11:31:25 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Mar 26 16:25:41 2018
    13 // Update Count     : 11
     12// Last Modified On : Wed Aug 30 21:27:40 2023
     13// Update Count     : 12
    1414//
    1515
     
    2323#include "time.hfa"
    2424
    25 #include "containers/list.hfa"
     25#include "collections/list.hfa"
    2626
    2727struct thread$;
  • libcfa/src/concurrency/invoke.h

    r4269d1b r8a9a3ab  
    1010// Created On       : Tue Jan 17 12:27:26 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar 14 13:39:31 2023
    13 // Update Count     : 59
     12// Last Modified On : Wed Aug 30 21:27:51 2023
     13// Update Count     : 60
    1414//
    1515
    1616// No not use #pragma once was this file is included twice in some places. It has its own guard system.
    1717
    18 #include "bits/containers.hfa"
     18#include "bits/collections.hfa"
    1919#include "bits/defs.hfa"
    2020#include "bits/locks.hfa"
     
    2323
    2424#ifdef __cforall
    25 #include "containers/list.hfa"
     25#include "collections/list.hfa"
    2626extern "C" {
    2727#endif
  • libcfa/src/concurrency/kernel.hfa

    r4269d1b r8a9a3ab  
    1010// Created On       : Tue Jan 17 12:27:26 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Feb  4 12:29:26 2020
    13 // Update Count     : 22
     12// Last Modified On : Wed Aug 30 21:28:46 2023
     13// Update Count     : 23
    1414//
    1515
     
    2020#include "coroutine.hfa"
    2121
    22 #include "containers/list.hfa"
     22#include "collections/list.hfa"
    2323
    2424extern "C" {
  • libcfa/src/concurrency/locks.hfa

    r4269d1b r8a9a3ab  
    2121
    2222#include "bits/weakso_locks.hfa"
    23 #include "containers/lockfree.hfa"
    24 #include "containers/list.hfa"
     23#include "collections/lockfree.hfa"
     24#include "collections/list.hfa"
    2525
    2626#include "limits.hfa"
  • libcfa/src/concurrency/once.hfa

    r4269d1b r8a9a3ab  
    1616#pragma once
    1717
    18 #include "containers/lockfree.hfa"
     18#include "collections/lockfree.hfa"
    1919#include "kernel/fwd.hfa"
    2020
  • libcfa/src/concurrency/select.hfa

    r4269d1b r8a9a3ab  
    1717#pragma once
    1818
    19 #include "containers/list.hfa"
     19#include "collections/list.hfa"
    2020#include "alarm.hfa"
    2121#include "kernel.hfa"
  • libcfa/src/executor.baseline.txt

    r4269d1b r8a9a3ab  
    55
    66#include <thread.hfa>
    7 #include <containers/list.hfa>
     7#include <collections/list.hfa>
    88
    99forall( T & | $dlistable(T, T) ) {
  • libcfa/src/executor.cfa

    r4269d1b r8a9a3ab  
    55
    66#include <thread.hfa>
    7 #include <containers/list.hfa>
     7#include <collections/list.hfa>
    88
    99forall( T &, TLink& = dlink(T) | embedded(T, TLink, dlink(T)) ) {
  • libcfa/src/iostream.cfa

    r4269d1b r8a9a3ab  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Aug 28 13:36:16 2023
    13 // Update Count     : 1527
     12// Last Modified On : Thu Aug 31 11:27:56 2023
     13// Update Count     : 1545
    1414//
    1515
     
    971971                } // if
    972972
    973                 int check = f.wd - 1;
    974                 const char * scanset = f.scanset;;
     973                const char * scanset = f.scanset;
    975974                if ( f.flags.delimit ) scanset = f.delimit;             // getline ?
    976 
    977                 // getline
    978                 // if ( f.flags.delimit ) {
    979                 //      enum { size = 32 };
    980                 //      char fmtstr[size];
    981                 //      snprintf( fmtstr, size, "%%%d[^%c]s", f.wd, f.delimit );
    982                 //      if ( ! f.flags.rwd ) f.s[check] = '\0';         // insert sentinel
    983                 //      int len = fmt( is, fmtstr, f.s );                       // read upto delimiter
    984                 //      if ( ! f.flags.rwd && f.s[check] != '\0' )      // sentinel overwritten ?
    985                 //              throw (cstring_length){ &cstring_length_vt };
    986                 //      if ( len == 0 ) f.s[0] = '\0';                          // empty read => argument unchanged => set empty
    987                 //      // fprintf( stderr, "getline %s %s %d %d %d '%c'\n", fmtstr, f.s, len, f.wd, check, f.s[check] );
    988                 //      if ( ! eof( is ) ) fmt( is, "%*c" );            // ignore delimiter
    989                 //      return is;
    990                 // } // if
    991975
    992976                size_t len = 0;
     
    1013997                } // if
    1014998
     999                int check = f.wd - 1;
    10151000                if ( ! f.flags.rwd ) f.s[check] = '\0';                 // insert sentinel
    10161001                len = fmt( is, fmtstr, f.s );
    10171002                //fprintf( stderr, "KK %s %zd %d %c %s\n", fmtstr, len, check, f.s[check], f.s );
     1003
    10181004                if ( ! f.flags.rwd && f.s[check] != '\0' )              // sentinel overwritten ?
    10191005                        throw (cstring_length){ &cstring_length_vt };
    10201006
    10211007                if ( f.flags.delimit ) {                                                // getline ?
    1022                         if ( len == 0 ) f.s[0] = '\0';                          // empty read => argument unchanged => set empty
    1023                         if ( ! eof( is ) ) fmt( is, "%*c" );            // ignore delimiter
     1008                        if ( len == 0 ) f.s[0] = '\0';                          // empty read => argument unchanged => set empty
     1009                        if ( ! eof( is ) ) fmt( is, "%*c" );            // ignore delimiter
    10241010                } //if
    10251011                return is;
  • libcfa/src/iostream.hfa

    r4269d1b r8a9a3ab  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Aug 25 14:55:06 2023
    13 // Update Count     : 535
     12// Last Modified On : Thu Aug 31 10:55:35 2023
     13// Update Count     : 544
    1414//
    1515
     
    406406// *********************************** manipulators ***********************************
    407407
    408 struct _Istream_Cstr {
    409         char * s;
     408struct _Istream_str_base {
    410409        union {
    411410                const char * scanset;
     
    422421                } flags;
    423422        };
     423}; // _Istream_str_base
     424
     425struct _Istream_Cstr {
     426        char * s;
     427        inline _Istream_str_base;
    424428}; // _Istream_Cstr
    425429
    426430static inline {
    427431        // width must include room for null terminator
    428         _Istream_Cstr wdi( unsigned int wd, char s[] ) { return (_Istream_Cstr)@{ s, {0p}, wd, {.all : 0} }; }
     432        _Istream_Cstr wdi( unsigned int wd, char s[] ) { return (_Istream_Cstr)@{ s, { {0p}, wd, {.all : 0} } }; }
    429433        // read width does not include null terminator
    430434        _Istream_Cstr wdi( unsigned int wd, unsigned int rwd, char s[] ) {
    431435                if ( wd <= rwd ) throw (cstring_length){ &cstring_length_vt };
    432                 return (_Istream_Cstr)@{ s, {0p}, rwd, {.flags.rwd : true} };
     436                return (_Istream_Cstr)@{ s, { {0p}, rwd, {.flags.rwd : true} } };
    433437        }
    434         _Istream_Cstr skip( const char scanset[] ) { return (_Istream_Cstr)@{ 0p, {scanset}, -1, {.all : 0} }; }
    435         _Istream_Cstr skip( unsigned int wd ) { return (_Istream_Cstr)@{ 0p, {0p}, wd, {.all : 0} }; }
     438        _Istream_Cstr skip( const char scanset[] ) { return (_Istream_Cstr)@{ 0p, { {scanset}, -1, {.all : 0} } }; }
     439        _Istream_Cstr skip( unsigned int wd ) { return (_Istream_Cstr)@{ 0p, { {0p}, wd, {.all : 0} } }; }
    436440        _Istream_Cstr & getline( _Istream_Cstr & fmt, const char delimit = '\n' ) {
    437441                fmt.delimit[0] = delimit; fmt.delimit[1] = '\0'; fmt.flags.delimit = true; fmt.flags.inex = true; return fmt; }
    438442        _Istream_Cstr & incl( const char scanset[], _Istream_Cstr & fmt ) { fmt.scanset = scanset; fmt.flags.inex = false; return fmt; }
    439443        _Istream_Cstr & excl( const char scanset[], _Istream_Cstr & fmt ) { fmt.scanset = scanset; fmt.flags.inex = true; return fmt; }
    440         _Istream_Cstr ignore( char s[] ) { return (_Istream_Cstr)@{ s, {0p}, -1, {.flags.ignore : true} }; }
     444        _Istream_Cstr ignore( char s[] ) { return (_Istream_Cstr)@{ s, { {0p}, -1, {.flags.ignore : true} } }; }
    441445        _Istream_Cstr & ignore( _Istream_Cstr & fmt ) { fmt.flags.ignore = true; return fmt; }
    442446} // distribution
  • src/InitTweak/FixInitNew.cpp

    r4269d1b r8a9a3ab  
    573573        assertf( global.dtorDestroy, "Destructor generation requires __destroy_Destructor." );
    574574
    575         const CodeLocation loc = ret->location;
     575        const CodeLocation & loc = ret->location;
    576576
    577577        // generate a __Destructor for ret that calls the destructor
  • src/Parser/parser.yy

    r4269d1b r8a9a3ab  
    26912691        | ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt identifier attribute_list_opt
    26922692                {
    2693                         if ( $3->storageClasses.any() || $3->type->qualifiers.val != 0 ) {
     2693                        if ( $3 && ($3->storageClasses.any() || $3->type->qualifiers.val != 0 )) {
    26942694                                SemanticError( yylloc, "syntax error, storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." );
    26952695                        }
     
    28292829
    28302830cfa_abstract_parameter_declaration:                                             // CFA, new & old style parameter declaration
    2831         abstract_parameter_declaration
     2831        // empty
     2832                { $$ = nullptr; }
     2833        | abstract_parameter_declaration
    28322834        | cfa_identifier_parameter_declarator_no_tuple
    28332835        | cfa_abstract_tuple
     
    38543856                // { SemanticError( yylloc, "New array dimension is currently unimplemented." ); $$ = nullptr; }
    38553857        | '[' push array_type_list pop ']'                                      // CFA
    3856                 { SemanticError( yylloc, "Type array dimension is currently unimplemented." ); $$ = nullptr; }
     3858                { $$ = DeclarationNode::newArray( $3, nullptr, false ); }
    38573859        | multi_array_dimension
    38583860        ;
  • src/ResolvExpr/CurrentObject.cc

    r4269d1b r8a9a3ab  
    10451045                        PRINT( std::cerr << "____untyped: " << expr << std::endl; )
    10461046                        auto dit = desigAlts.begin();
    1047                         if ( auto nexpr = dynamic_cast< const NameExpr * >( expr ) ) {
    1048                                 for ( const Type * t : curTypes ) {
    1049                                         assert( dit != desigAlts.end() );
    1050 
    1051                                         DesignatorChain & d = *dit;
     1047
     1048                        for ( const Type * t : curTypes ) {
     1049                                assert( dit != desigAlts.end() );
     1050                                DesignatorChain & d = *dit;
     1051                                if ( auto nexpr = dynamic_cast< const NameExpr *>( expr ) ) {
    10521052                                        PRINT( std::cerr << "____actual: " << t << std::endl; )
    10531053                                        if ( auto refType = dynamic_cast< const BaseInstType * >( t ) ) {
     
    10621062                                                        }
    10631063                                                }
     1064                                        } else if ( auto at = dynamic_cast< const ArrayType * >( t ) ) {
     1065                                                auto nexpr = dynamic_cast< const NameExpr *>( expr );
     1066                                                auto res = eval( nexpr );
     1067                                                for ( const Decl * mem : refType->lookup( nexpr->name ) ) {
     1068                                                        if ( auto field = dynamic_cast< const ObjectDecl * >( mem ) ) {
     1069                                                                DesignatorChain d2 = d;
     1070                                                                d2.emplace_back( new VariableExpr{ expr->location, field } );
     1071                                                                newDesigAlts.emplace_back( std::move( d2 ) );
     1072                                                                // newTypes.emplace_back( field->type );
     1073                                                                newTypes.emplace_back( at->base );
     1074                                                        }
     1075                                                }
     1076
     1077                                                // d.emplace_back( expr );
     1078                                                // newDesigAlts.emplace_back( d );
     1079                                                // newTypes.emplace_back( at->base );
    10641080                                        }
    10651081
    10661082                                        ++dit;
    1067                                 }
    1068                         } else {
    1069                                 for ( const Type * t : curTypes ) {
    1070                                         assert( dit != desigAlts.end() );
    1071 
    1072                                         DesignatorChain & d = *dit;
     1083                                } else {
    10731084                                        if ( auto at = dynamic_cast< const ArrayType * >( t ) ) {
    10741085                                                PRINT( std::cerr << "____alt: " << at->get_base() << std::endl; )
  • src/ResolvExpr/ResolveTypeof.cc

    r4269d1b r8a9a3ab  
    1515
    1616#include "ResolveTypeof.h"
    17 #include "RenameVars.h"
    18 
    19 #include <cassert>               // for assert
     17
     18#include <cassert>  // for assert
    2019
    2120#include "AST/CVQualifiers.hpp"
     
    2524#include "AST/Type.hpp"
    2625#include "AST/TypeEnvironment.hpp"
    27 #include "Common/PassVisitor.h"  // for PassVisitor
    28 #include "Common/utility.h"      // for copy
    29 #include "Resolver.h"            // for resolveInVoidContext
     26#include "Common/PassVisitor.h"   // for PassVisitor
     27#include "Common/utility.h"       // for copy
     28#include "InitTweak/InitTweak.h"  // for isConstExpr
     29#include "RenameVars.h"
     30#include "Resolver.h"  // for resolveInVoidContext
     31#include "SymTab/Mangler.h"
    3032#include "SynTree/Expression.h"  // for Expression
    3133#include "SynTree/Mutator.h"     // for Mutator
    3234#include "SynTree/Type.h"        // for TypeofType, Type
    33 #include "SymTab/Mangler.h"
    34 #include "InitTweak/InitTweak.h" // for isConstExpr
    3535
    3636namespace SymTab {
     
    3939
    4040namespace ResolvExpr {
    41         namespace {
     41namespace {
    4242#if 0
    4343                void
     
    5252        }
    5353
    54         class ResolveTypeof_old : public WithShortCircuiting {
    55           public:
     54class ResolveTypeof_old : public WithShortCircuiting {
     55   public:
    5656                ResolveTypeof_old( const SymTab::Indexer &indexer ) : indexer( indexer ) {}
    5757                void premutate( TypeofType *typeofType );
    5858                Type * postmutate( TypeofType *typeofType );
    5959
    60           private:
    61                 const SymTab::Indexer &indexer;
    62         };
     60   private:
     61    const SymTab::Indexer &indexer;
     62};
    6363
    6464        Type * resolveTypeof( Type *type, const SymTab::Indexer &indexer ) {
     
    7171        }
    7272
    73         Type * ResolveTypeof_old::postmutate( TypeofType *typeofType ) {
     73    Type * ResolveTypeof_old::postmutate( TypeofType *typeofType ) {
    7474#if 0
    7575                std::cerr << "resolving typeof: ";
     
    7777                std::cerr << std::endl;
    7878#endif
    79                 // pass on null expression
     79    // pass on null expression
    8080                if ( ! typeofType->expr ) return typeofType;
    8181
    82                 bool isBasetypeof = typeofType->is_basetypeof;
    83                 auto oldQuals = typeofType->get_qualifiers().val;
    84 
    85                 Type* newType;
     82    bool isBasetypeof = typeofType->is_basetypeof;
     83    auto oldQuals = typeofType->get_qualifiers().val;
     84
     85    Type* newType;
    8686                if ( TypeExpr* tyExpr = dynamic_cast<TypeExpr*>(typeofType->expr) ) {
    87                         // typeof wrapping type
    88                         newType = tyExpr->type;
    89                         tyExpr->type = nullptr;
    90                         delete tyExpr;
    91                 } else {
    92                         // typeof wrapping expression
     87        // typeof wrapping type
     88        newType = tyExpr->type;
     89        tyExpr->type = nullptr;
     90        delete tyExpr;
     91    } else {
     92        // typeof wrapping expression
    9393                        Expression * newExpr = resolveInVoidContext( typeofType->expr, indexer );
    9494                        assert( newExpr->result && ! newExpr->result->isVoid() );
    95                         newType = newExpr->result;
    96                         newExpr->result = nullptr;
    97                         delete typeofType;
    98                         delete newExpr;
    99                 }
    100 
    101                 // clear qualifiers for base, combine with typeoftype quals in any case
    102                 if ( isBasetypeof ) {
     95        newType = newExpr->result;
     96        newExpr->result = nullptr;
     97        delete typeofType;
     98        delete newExpr;
     99    }
     100
     101    // clear qualifiers for base, combine with typeoftype quals in any case
     102    if ( isBasetypeof ) {
    103103                        // replace basetypeof(<enum>) by int
    104104                        if ( dynamic_cast<EnumInstType*>(newType) ) {
     
    112112                                = ( newType->get_qualifiers().val & ~Type::Qualifiers::Mask ) | oldQuals;
    113113                } else {
    114                         newType->get_qualifiers().val |= oldQuals;
    115                 }
    116 
    117                 return newType;
    118         }
     114        newType->get_qualifiers().val |= oldQuals;
     115    }
     116
     117    return newType;
     118}
    119119
    120120namespace {
    121         struct ResolveTypeof_new : public ast::WithShortCircuiting {
    122                 const ResolveContext & context;
     121struct ResolveTypeof_new : public ast::WithShortCircuiting {
     122    const ResolveContext & context;
    123123
    124124                ResolveTypeof_new( const ResolveContext & context ) :
     
    127127                void previsit( const ast::TypeofType * ) { visit_children = false; }
    128128
    129                 const ast::Type * postvisit( const ast::TypeofType * typeofType ) {
    130                         // pass on null expression
    131                         if ( ! typeofType->expr ) return typeofType;
    132 
    133                         ast::ptr< ast::Type > newType;
    134                         if ( auto tyExpr = typeofType->expr.as< ast::TypeExpr >() ) {
    135                                 // typeof wrapping type
    136                                 newType = tyExpr->type;
    137                         } else {
    138                                 // typeof wrapping expression
    139                                 ast::TypeEnvironment dummy;
    140                                 ast::ptr< ast::Expr > newExpr =
    141                                         resolveInVoidContext( typeofType->expr, context, dummy );
    142                                 assert( newExpr->result && ! newExpr->result->isVoid() );
    143                                 newType = newExpr->result;
    144                         }
    145 
    146                         // clear qualifiers for base, combine with typeoftype quals regardless
    147                         if ( typeofType->kind == ast::TypeofType::Basetypeof ) {
    148                                 // replace basetypeof(<enum>) by int
     129        const ast::Type * postvisit( const ast::TypeofType * typeofType ) {
     130        // pass on null expression
     131            if ( ! typeofType->expr ) return typeofType;
     132
     133            ast::ptr< ast::Type > newType;
     134            if ( auto tyExpr = typeofType->expr.as< ast::TypeExpr >() ) {
     135            // typeof wrapping type
     136            newType = tyExpr->type;
     137        } else {
     138            // typeof wrapping expression
     139            ast::TypeEnvironment dummy;
     140            ast::ptr< ast::Expr > newExpr =
     141                resolveInVoidContext( typeofType->expr, context, dummy );
     142            assert( newExpr->result && ! newExpr->result->isVoid() );
     143            newType = newExpr->result;
     144        }
     145
     146        // clear qualifiers for base, combine with typeoftype quals regardless
     147        if ( typeofType->kind == ast::TypeofType::Basetypeof ) {
     148            // replace basetypeof(<enum>) by int
    149149                                if ( newType.as< ast::EnumInstType >() ) {
    150150                                        newType = new ast::BasicType{
    151151                                                ast::BasicType::SignedInt, newType->qualifiers, copy(newType->attributes) };
    152                                 }
     152            }
    153153                                reset_qualifiers(
    154154                                        newType,
    155155                                        ( newType->qualifiers & ~ast::CV::EquivQualifiers ) | typeofType->qualifiers );
    156                         } else {
     156        } else {
    157157                                add_qualifiers( newType, typeofType->qualifiers );
    158                         }
    159 
    160                         return newType.release();
    161                 }
    162         };
     158        }
     159
     160        return newType.release();
     161    }
     162};
    163163} // anonymous namespace
    164164
     
    195195
    196196const ast::ObjectDecl * fixObjectType( const ast::ObjectDecl * decl , const ResolveContext & context ) {
    197         if (decl->isTypeFixed) {
    198                 return decl;
    199         }
    200 
    201         auto mutDecl = mutate(decl);
    202         {
    203                 auto resolvedType = resolveTypeof(decl->type, context);
    204                 resolvedType = fixArrayType(resolvedType, context);
    205                 mutDecl->type = resolvedType;
    206         }
    207 
    208         // Do not mangle unnamed variables.
    209         if (!mutDecl->name.empty()) {
    210                 mutDecl->mangleName = Mangle::mangle(mutDecl);
    211         }
    212 
    213         mutDecl->type = renameTyVars(mutDecl->type, RenameMode::GEN_EXPR_ID);
    214         mutDecl->isTypeFixed = true;
    215         return mutDecl;
    216 }
    217 
    218 } // namespace ResolvExpr
     197    if (decl->isTypeFixed) {
     198        return decl;
     199    }
     200
     201    auto mutDecl = mutate(decl);
     202    fixObjectInit(decl, context);
     203    {
     204        auto resolvedType = resolveTypeof(decl->type, context);
     205        resolvedType = fixArrayType(resolvedType, context);
     206        mutDecl->type = resolvedType;
     207    }
     208
     209    // Do not mangle unnamed variables.
     210    if (!mutDecl->name.empty()) {
     211        mutDecl->mangleName = Mangle::mangle(mutDecl);
     212    }
     213
     214    mutDecl->type = renameTyVars(mutDecl->type, RenameMode::GEN_EXPR_ID);
     215    mutDecl->isTypeFixed = true;
     216    return mutDecl;
     217}
     218
     219const ast::ObjectDecl *fixObjectInit(const ast::ObjectDecl *decl,
     220                                     const ResolveContext &context) {
     221    if (decl->isTypeFixed) {
     222        return decl;
     223    }
     224
     225    auto mutDecl = mutate(decl);
     226
     227    if ( auto mutListInit = mutDecl->init.as<ast::ListInit>() ) {
     228        // std::list<ast::Designation *> newDesignations;       
     229
     230        for ( size_t k = 0; k < mutListInit->designations.size(); k++ ) {
     231            const ast::Designation *des = mutListInit->designations[k].get();
     232            // Desination here
     233            ast::Designation * newDesination = new ast::Designation(des->location);
     234
     235            if (des->designators.size() == 0) continue;
     236
     237            // The designator I want to replace
     238            const ast::Expr * designator = des->designators.at(0);
     239
     240            if ( const ast::NameExpr * designatorName = dynamic_cast<const ast::NameExpr *>(designator) ) {
     241                auto candidates = context.symtab.lookupId(designatorName->name);
     242                // Does not work for the overloading case currently
     243                // assert( candidates.size() == 1 );
     244                if ( candidates.size() != 1 ) return mutDecl;
     245                auto candidate = candidates.at(0);
     246                if ( const ast::EnumInstType * enumInst = dynamic_cast<const ast::EnumInstType *>(candidate.id->get_type()) ) {
     247                    // determine that is an enumInst, swap it with its const value
     248                    assert( candidates.size() == 1 );
     249                    const ast::EnumDecl * baseEnum = enumInst->base;
     250                    // Need to iterate over all enum value to find the initializer to swap
     251                    for ( size_t m = 0; m < baseEnum->members.size(); ++m ) {
     252                        if ( baseEnum->members.at(m)->name == designatorName->name ) {
     253                            const ast::ObjectDecl * mem = baseEnum->members.at(m).as<const ast::ObjectDecl>();
     254                            assert(mem);
     255                            if ( mem->init ) {
     256                                const ast::SingleInit * memInit = mem->init.as<const ast::SingleInit>();
     257                                ast::Expr * initValue = shallowCopy( memInit->value.get() );
     258                                newDesination->designators.push_back( initValue );
     259                            } else {
     260                                SemanticError(des->location, "TODO: Enum Array Designation with no explicit value is not implemented");
     261                            }
     262                        }
     263                    }
     264                    if ( newDesination->designators.size() == 0 ) {
     265                        SemanticError(des->location, "Resolution Error: Resolving array designation as Enum Instance value, but cannot find a desgination value");
     266                    }
     267                } else {
     268                    newDesination->designators.push_back( des->designators.at(0) );
     269                }
     270            } else {
     271                newDesination->designators.push_back( des->designators.at(0) );
     272            }
     273            mutListInit = ast::mutate_field_index(mutListInit, &ast::ListInit::designations, k, newDesination);
     274        }
     275    }
     276    return mutDecl;
     277}
     278
     279}  // namespace ResolvExpr
    219280
    220281// Local Variables: //
  • src/ResolvExpr/ResolveTypeof.h

    r4269d1b r8a9a3ab  
    3232        const ast::Type * fixArrayType( const ast::Type *, const ResolveContext & );
    3333        const ast::ObjectDecl * fixObjectType( const ast::ObjectDecl * decl , const ResolveContext & );
     34        const ast::ObjectDecl * fixObjectInit( const ast::ObjectDecl * decl , const ResolveContext &);
    3435} // namespace ResolvExpr
    3536
  • src/ResolvExpr/Resolver.cc

    r4269d1b r8a9a3ab  
    15071507                                if ( InitTweak::tryConstruct( mutDecl ) && ( managedTypes.isManaged( mutDecl ) || ((! isInFunction() || mutDecl->storage.is_static ) && ! InitTweak::isConstExpr( mutDecl->init ) ) ) ) {
    15081508                                        // constructed objects cannot be designated
    1509                                         if ( InitTweak::isDesignated( mutDecl->init ) ) SemanticError( mutDecl, "Cannot include designations in the initializer for a managed Object. If this is really what you want, then initialize with @=.\n" );
     1509                                        // if ( InitTweak::isDesignated( mutDecl->init ) ) SemanticError( mutDecl, "Cannot include designations in the initializer for a managed Object. If this is really what you want, then initialize with @=.\n" );
     1510                                        if ( InitTweak::isDesignated( mutDecl->init ) ) {
     1511                                                SemanticError( mutDecl, "Cannot include designations in the initializer for a managed Object. If this is really what you want, then initialize with @=.\n" );
     1512                                        }
    15101513                                        // constructed objects should not have initializers nested too deeply
    15111514                                        if ( ! InitTweak::checkInitDepth( mutDecl ) ) SemanticError( mutDecl, "Managed object's initializer is too deep " );
  • src/Validate/GenericParameter.cpp

    r4269d1b r8a9a3ab  
    301301const ast::Expr * TranslateDimensionCore::postvisit(
    302302                const ast::TypeExpr * expr ) {
    303         // Does nothing, except prevents matching ast::Expr (above).
     303        if ( auto instType = dynamic_cast<const ast::EnumInstType *>( expr->type.get() ) ) {
     304                const ast::EnumDecl * baseEnum = instType->base.get();
     305                return ast::ConstantExpr::from_int( expr->location, baseEnum->members.size() );
     306        }
    304307        return expr;
    305308}
  • tests/Makefile.am

    r4269d1b r8a9a3ab  
    1111## Created On       : Sun May 31 09:08:15 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Sun May 28 08:15:43 2023
    14 ## Update Count     : 196
     13## Last Modified On : Wed Aug 30 22:31:45 2023
     14## Update Count     : 197
    1515###############################################################################
    1616
     
    9191        concurrency/unified_locking/mutex_test.hfa \
    9292        concurrency/channels/parallel_harness.hfa \
    93         array-container/dimexpr-match.hfa \
    94         array-container/dimexpr-match-detail.sh
     93        array-collections/dimexpr-match.hfa \
     94        array-collections/dimexpr-match-detail.sh
    9595
    9696dist-hook:
     
    227227        -cp ${test} ${abspath ${@}}
    228228
    229 array-container/dimexpr-match-c-ERRS : array-container/dimexpr-match-c.cfa
     229array-collections/dimexpr-match-c-ERRS : array-collections/dimexpr-match-c.cfa
    230230        ${CFACOMPILE_SYNTAX} -DERRS
    231231        -cp ${test} ${abspath ${@}}
    232232
    233 array-container/dimexpr-match-cfa-ERRS : array-container/dimexpr-match-cfa.cfa
     233array-collections/dimexpr-match-cfa-ERRS : array-collections/dimexpr-match-cfa.cfa
    234234        ${CFACOMPILE_SYNTAX} -DERRS
    235235        -cp ${test} ${abspath ${@}}
  • tests/collections/atomic_mpsc.cfa

    r4269d1b r8a9a3ab  
    11#include <fstream.hfa>
    2 #include <containers/lockfree.hfa>
     2#include <collections/lockfree.hfa>
    33#include <thread.hfa>
    44
  • tests/collections/string-api-coverage.cfa

    r4269d1b r8a9a3ab  
    1 #include <containers/string.hfa>
     1#include <collections/string.hfa>
    22#include <string_sharectx.hfa>
    33
  • tests/collections/string-istream.cfa

    r4269d1b r8a9a3ab  
    11#include <iostream.hfa>
    2 #include <containers/string.hfa>
    3 #include <containers/string_res.hfa>
     2#include <collections/string.hfa>
     3#include <collections/string_res.hfa>
    44
    55
  • tests/collections/string-overwrite.cfa

    r4269d1b r8a9a3ab  
    1 #include <containers/string.hfa>
     1#include <collections/string.hfa>
    22#include <string_sharectx.hfa>
    33
  • tests/collections/vector-demo.cfa

    r4269d1b r8a9a3ab  
    1 #include <containers/vector2.hfa>
     1#include <collections/vector2.hfa>
    22
    33void raiiTests() {
  • tests/concurrency/unified_locking/thread_test.cfa

    r4269d1b r8a9a3ab  
    33#include <stdlib.hfa>
    44#include <thread.hfa>
    5 #include <containers/array.hfa>
     5#include <collections/array.hfa>
    66
    77static unsigned int taskCount = 4;
  • tests/list/dlist-insert-remove.cfa

    r4269d1b r8a9a3ab  
    1 #include <containers/list.hfa>
     1#include <collections/list.hfa>
    22#include <fstream.hfa>
    33#include <assert.h>
  • tests/maybe.cfa

    r4269d1b r8a9a3ab  
    1010// Created On       : Thr May 25 16:02:00 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Sep 25 15:13:28 2020
    13 // Update Count     : 2
     12// Last Modified On : Wed Aug 30 21:45:27 2023
     13// Update Count     : 3
    1414//
    1515
    1616#include <assert.h>
    17 #include <containers/maybe.hfa>
     17#include <collections/maybe.hfa>
    1818
    1919void checkPredicates() {
  • tests/pybin/settings.py

    r4269d1b r8a9a3ab  
    141141        all_install  = [Install(o)      for o in list(dict.fromkeys(options.install))]
    142142        archive      = os.path.abspath(os.path.join(original_path, options.archive_errors)) if options.archive_errors else None
    143         invariant    = options.no_invariant
     143        invariant    = options.invariant
    144144        continue_    = options.continue_
    145145        dry_run      = options.dry_run # must be called before tools.config_hash()
  • tests/result.cfa

    r4269d1b r8a9a3ab  
    1010// Created On       : Thr May 25 16:50:00 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Sep 25 15:22:59 2020
    13 // Update Count     : 2
     12// Last Modified On : Wed Aug 30 21:46:34 2023
     13// Update Count     : 3
    1414//
    1515
    1616#include <assert.h>
    17 #include <containers/result.hfa>
     17#include <collections/result.hfa>
    1818
    1919void checkPredicates() {
  • tests/test.py

    r4269d1b r8a9a3ab  
    114114        parser.add_argument('--install', help='Run all tests based on installed binaries or tree binaries', type=comma_separated(yes_no), default='no')
    115115        parser.add_argument('--continue', help='When multiple specifications are passed (debug/install/arch), sets whether or not to continue if the last specification failed', type=yes_no, default='yes', dest='continue_')
    116         parser.add_argument('--invariant', help='Tell the compiler to check invariants.', action='store_true')
    117         parser.add_argument('--no-invariant', help='Tell the compiler not to check invariants.', action='store_false')
     116        parser.add_argument('--no-invariant', help='Tell the compiler not to check invariants.', action='store_false', dest='invariant')
     117        parser.add_argument('--invariant', help='Tell the compiler to check invariants.', action='store_const', const=True)
    118118        parser.add_argument('--timeout', help='Maximum duration in seconds after a single test is considered to have timed out', type=int, default=180)
    119119        parser.add_argument('--global-timeout', help='Maximum cumulative duration in seconds after the ALL tests are considered to have timed out', type=int, default=7200)
  • tests/zombies/gc_no_raii/premake4.lua

    r4269d1b r8a9a3ab  
    4848                linkoptions (linkOptionList)
    4949                includedirs (includeDirList)
    50                 files { "src/**.c", "containers/**.c" }
     50                files { "src/**.c", "collections/**.c" }
    5151
    5252        configuration "debug"
  • tests/zombies/hashtable.cfa

    r4269d1b r8a9a3ab  
    11
    2 #include <containers/list.hfa>
     2#include <collections/list.hfa>
    33
    44#include <exception.hfa>
  • tests/zombies/hashtable2.cfa

    r4269d1b r8a9a3ab  
    11
    2 #include <containers/list.hfa>
     2#include <collections/list.hfa>
    33
    44typedef unsigned int K;
  • tests/zombies/linked-list-perf/experiment.koad

    r4269d1b r8a9a3ab  
    6767#elif defined IMPL_CFA_MIKE_NEW
    6868
    69         #include <containers/list.hfa>
     69        #include <collections/list.hfa>
    7070        struct S {
    7171                int f[64]; // FIXME: make "is volatile" consistent; given bug #TBD
Note: See TracChangeset for help on using the changeset viewer.