Changes in / [9082d7e8:d24b1985]


Ignore:
Files:
1 deleted
35 edited

Legend:

Unmodified
Added
Removed
  • Jenkins/Promote

    r9082d7e8 rd24b1985  
    3636                dir (BuildDir) {
    3737                    sh 'rm -rf *'
    38                         sshagent (credentials: ['git_key_mar27']) {
     38                        sshagent (credentials: ['github_key_jun1']) {
    3939                                sh "git clone --bare ${RemoteRepo} repo"
    4040                        }
     
    6969                        sh "git status"
    7070                        sh "git diff-index --quiet HEAD || git commit -m 'Push from build machine: ${name}'"
    71                         sshagent (credentials: ['git_key_mar27']) {
     71                        sshagent (credentials: ['github_key_jun1']) {
    7272                                sh "git push origin master"
    7373                        }
  • libcfa/src/concurrency/pthread.cfa

    r9082d7e8 rd24b1985  
    152152
    153153//######################### Attr helpers #########################
    154 typedef struct cfaPthread_attr_t {                                              // thread attributes
     154struct cfaPthread_attr_t {                                                              // thread attributes
    155155                int contentionscope;
    156156                int detachstate;
     
    160160                int inheritsched;
    161161                struct sched_param param;
    162 } cfaPthread_attr_t;
     162} typedef cfaPthread_attr_t;
    163163
    164164static const cfaPthread_attr_t default_attrs {
  • libcfa/src/interpose.cfa

    r9082d7e8 rd24b1985  
    1010// Created On       : Wed Mar 29 16:10:31 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Mar 27 21:09:03 2023
    13 // Update Count     : 196
     12// Last Modified On : Mon Mar 13 22:39:12 2023
     13// Update Count     : 193
    1414//
    1515
     
    4040        union { generic_fptr_t fptr; void * ptr; } originalFunc;
    4141
    42         #if defined( _GNU_SOURCE )
    43         if ( version ) {
    44                 originalFunc.ptr = dlvsym( library, symbol, version );
    45         } else {
    46                 originalFunc.ptr = dlsym( library, symbol );
    47         } // if
    48         #else
    4942        originalFunc.ptr = dlsym( library, symbol );
    50         #endif // _GNU_SOURCE
    51 
    52         if ( ! originalFunc.ptr ) {                                                     // == nullptr
     43        if ( ! originalFunc.ptr ) {                                                             // == nullptr
    5344                abort( "interpose_symbol : internal error, %s\n", dlerror() );
    5445        } // if
     
    5849static generic_fptr_t interpose_symbol( const char symbol[], const char version[] ) {
    5950        void * library;
    60 
    6151        #if defined( RTLD_NEXT )
    6252        library = RTLD_NEXT;
  • libcfa/src/interpose_thread.cfa

    r9082d7e8 rd24b1985  
    1414//
    1515
    16 // BUG in 32-bit gcc with interpose: fixed in >= gcc-9.5, gcc-10.4, gcc-12.2
    1716#ifdef __i386__                                                                                 // 32-bit architecture
    1817#undef _GNU_SOURCE
     
    3433typedef void (* generic_fptr_t)(void);
    3534
    36 generic_fptr_t libcfa_public interpose_symbol(
     35generic_fptr_t interpose_symbol(
    3736        generic_fptr_t (*do_interpose_symbol)( void * library, const char symbol[], const char version[] ),
    3837        const char symbol[],
    3938        const char version[]
    40 ) {
     39) libcfa_public {
    4140        void * library;
    4241
  • src/AST/ParseNode.hpp

    r9082d7e8 rd24b1985  
    4040        template<typename node_t>
    4141        friend node_t * mutate(const node_t * node);
    42         template<typename node_t>
    43         friend node_t * shallowCopy(const node_t * node);
    4442};
    4543
  • src/CodeGen/CodeGenerator.cc

    r9082d7e8 rd24b1985  
    1717#include <cassert>                   // for assert, assertf
    1818#include <list>                      // for _List_iterator, list, list<>::it...
    19 #include <sstream>                   // for stringstream
    2019
    2120#include "AST/Decl.hpp"              // for DeclWithType
    2221#include "Common/UniqueName.h"       // for UniqueName
     22#include "Common/utility.h"          // for CodeLocation, toString
    2323#include "GenType.h"                 // for genType
    2424#include "InitTweak/InitTweak.h"     // for getPointerBase
  • src/Common/DeclStats.cpp

    r9082d7e8 rd24b1985  
    2323#include <iostream>
    2424#include <map>
    25 #include <sstream>
    2625#include <unordered_map>
    2726#include <unordered_set>
  • src/Common/ResolvProtoDump.cpp

    r9082d7e8 rd24b1985  
    1919#include <iostream>
    2020#include <set>
    21 #include <sstream>
    2221#include <unordered_set>
    2322
     
    2726#include "AST/Type.hpp"
    2827#include "CodeGen/OperatorTable.h"
     28#include "Common/utility.h"
    2929
    3030namespace {
  • src/Common/module.mk

    r9082d7e8 rd24b1985  
    5252        Common/Stats/Time.cc \
    5353        Common/Stats/Time.h \
    54         Common/ToString.hpp \
    5554        Common/UniqueName.cc \
    5655        Common/UniqueName.h \
  • src/Common/utility.h

    r9082d7e8 rd24b1985  
    2222#include <list>
    2323#include <memory>
     24#include <sstream>
    2425#include <string>
    2526#include <type_traits>
     
    142143        dst.swap( src );
    143144}
     145
     146template < typename T >
     147void toString_single( std::ostream & os, const T & value ) {
     148        os << value;
     149}
     150
     151template < typename T, typename... Params >
     152void toString_single( std::ostream & os, const T & value, const Params & ... params ) {
     153        os << value;
     154        toString_single( os, params ... );
     155}
     156
     157template < typename ... Params >
     158std::string toString( const Params & ... params ) {
     159        std::ostringstream os;
     160        toString_single( os, params... );
     161        return os.str();
     162}
     163
     164#define toCString( ... ) toString( __VA_ARGS__ ).c_str()
    144165
    145166template< typename... Args >
  • src/ControlStruct/ExceptDeclNew.cpp

    r9082d7e8 rd24b1985  
    1515
    1616#include "ExceptDecl.h"
    17 
    18 #include <sstream>
    1917
    2018#include "AST/Decl.hpp"
  • src/ControlStruct/MLEMutator.cc

    r9082d7e8 rd24b1985  
    2525#include <memory>                          // for allocator_traits<>::value_...
    2626
    27 #include "Common/ToString.hpp"             // for toString
     27#include "Common/utility.h"                // for toString, operator+
    2828#include "ControlStruct/LabelGenerator.h"  // for LabelGenerator
    2929#include "MLEMutator.h"
  • src/GenPoly/Box.cc

    r9082d7e8 rd24b1985  
    3131#include "Common/SemanticError.h"        // for SemanticError
    3232#include "Common/UniqueName.h"           // for UniqueName
    33 #include "Common/ToString.hpp"           // for toCString
     33#include "Common/utility.h"              // for toString
    3434#include "FindFunction.h"                // for findFunction, findAndReplace...
    3535#include "GenPoly/ErasableScopedMap.h"   // for ErasableScopedMap<>::const_i...
  • src/GenPoly/Lvalue.cc

    r9082d7e8 rd24b1985  
    1717#include <string>                        // for string
    1818
    19 #include "Common/ToString.hpp"           // for toCString
    2019#include "Common/UniqueName.h"
    2120#include "Common/PassVisitor.h"
  • src/GenPoly/LvalueNew.cpp

    r9082d7e8 rd24b1985  
    2525#include "AST/Pass.hpp"
    2626#include "Common/SemanticError.h"      // for SemanticWarning
    27 #include "Common/ToString.hpp"         // for toCString
    2827#include "Common/UniqueName.h"         // for UniqueName
    2928#include "GenPoly/GenPoly.h"           // for genFunctionType
  • src/InitTweak/FixInit.cc

    r9082d7e8 rd24b1985  
    3232#include "Common/PassVisitor.h"        // for PassVisitor, WithStmtsToAdd
    3333#include "Common/SemanticError.h"      // for SemanticError
    34 #include "Common/ToString.hpp"         // for toCString
    3534#include "Common/UniqueName.h"         // for UniqueName
     35#include "Common/utility.h"            // for CodeLocation, ValueGuard, toSt...
    3636#include "FixGlobalInit.h"             // for fixGlobalInit
    3737#include "GenInit.h"                   // for genCtorDtor
  • src/InitTweak/FixInitNew.cpp

    r9082d7e8 rd24b1985  
    2020#include "Common/PassVisitor.h"        // for PassVisitor, WithStmtsToAdd
    2121#include "Common/SemanticError.h"      // for SemanticError
    22 #include "Common/ToString.hpp"         // for toCString
    2322#include "Common/UniqueName.h"         // for UniqueName
     23#include "Common/utility.h"            // for CodeLocation, ValueGuard, toSt...
    2424#include "FixGlobalInit.h"             // for fixGlobalInit
    2525#include "GenInit.h"                   // for genCtorDtor
  • src/InitTweak/GenInit.cc

    r9082d7e8 rd24b1985  
    3131#include "Common/PassVisitor.h"        // for PassVisitor, WithGuards, WithShort...
    3232#include "Common/SemanticError.h"      // for SemanticError
    33 #include "Common/ToString.hpp"         // for toCString
    3433#include "Common/UniqueName.h"         // for UniqueName
    3534#include "Common/utility.h"            // for ValueGuard, maybeClone
  • src/Parser/ParseNode.h

    r9082d7e8 rd24b1985  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar 29 08:40:27 2023
    13 // Update Count     : 948
     12// Last Modified On : Sun Feb 19 09:02:37 2023
     13// Update Count     : 940
    1414//
    1515
     
    425425Statement * build_directive( std::string * directive );
    426426SuspendStmt * build_suspend( StatementNode *, SuspendStmt::Type = SuspendStmt::None);
    427 WaitForStmt * build_waitfor( WaitForStmt * existing, ExpressionNode * when, ExpressionNode * targetExpr, StatementNode * stmt );
    428 WaitForStmt * build_waitfor_else( WaitForStmt * existing, ExpressionNode * when, StatementNode * stmt );
    429 WaitForStmt * build_waitfor_timeout( WaitForStmt * existing, ExpressionNode * when, ExpressionNode * timeout, StatementNode * stmt );
     427WaitForStmt * build_waitfor( ExpressionNode * target, StatementNode * stmt, ExpressionNode * when );
     428WaitForStmt * build_waitfor( ExpressionNode * target, StatementNode * stmt, ExpressionNode * when, WaitForStmt * existing );
     429WaitForStmt * build_waitfor_timeout( ExpressionNode * timeout, StatementNode * stmt, ExpressionNode * when );
     430WaitForStmt * build_waitfor_timeout( ExpressionNode * timeout, StatementNode * stmt, ExpressionNode * when, StatementNode * else_stmt, ExpressionNode * else_when );
    430431Statement * build_with( ExpressionNode * exprs, StatementNode * stmt );
    431432Statement * build_mutex( ExpressionNode * exprs, StatementNode * stmt );
  • src/Parser/StatementNode.cc

    r9082d7e8 rd24b1985  
    1111// Created On       : Sat May 16 14:59:41 2015
    1212// Last Modified By : Peter A. Buhr
    13 // Last Modified On : Wed Mar 29 08:51:23 2023
    14 // Update Count     : 454
     13// Last Modified On : Wed Feb  2 20:29:30 2022
     14// Update Count     : 425
    1515//
    1616
     
    268268
    269269        return node;
    270 } // build_suspend
    271 
    272 WaitForStmt * build_waitfor( WaitForStmt * existing, ExpressionNode * when, ExpressionNode * targetExpr, StatementNode * stmt ) {
     270}
     271
     272WaitForStmt * build_waitfor( ExpressionNode * targetExpr, StatementNode * stmt, ExpressionNode * when ) {
     273        auto node = new WaitForStmt();
     274
    273275        WaitForStmt::Target target;
    274276        target.function = maybeBuild( targetExpr );
     
    280282        delete targetExpr;
    281283
    282         existing->clauses.insert( existing->clauses.begin(), WaitForStmt::Clause{
     284        node->clauses.push_back( WaitForStmt::Clause{
     285                target,
     286                maybeMoveBuild( stmt ),
     287                notZeroExpr( maybeMoveBuild( when ) )
     288        });
     289
     290        return node;
     291} // build_waitfor
     292
     293WaitForStmt * build_waitfor( ExpressionNode * targetExpr, StatementNode * stmt, ExpressionNode * when, WaitForStmt * node ) {
     294        WaitForStmt::Target target;
     295        target.function = maybeBuild( targetExpr );
     296
     297        ExpressionNode * next = dynamic_cast<ExpressionNode *>( targetExpr->get_next() );
     298        targetExpr->set_next( nullptr );
     299        buildMoveList< Expression >( next, target.arguments );
     300
     301        delete targetExpr;
     302
     303        node->clauses.insert( node->clauses.begin(), WaitForStmt::Clause{
    283304                std::move( target ),
    284305                maybeMoveBuild( stmt ),
     
    286307        });
    287308
    288         return existing;
     309        return node;
    289310} // build_waitfor
    290311
    291 WaitForStmt * build_waitfor_else( WaitForStmt * existing, ExpressionNode * when, StatementNode * stmt ) {
    292         existing->orelse.statement  = maybeMoveBuild( stmt );
    293         existing->orelse.condition  = notZeroExpr( maybeMoveBuild( when ) );
    294 
    295         return existing;
    296 } // build_waitfor_else
    297 
    298 WaitForStmt * build_waitfor_timeout( WaitForStmt * existing, ExpressionNode * when, ExpressionNode * timeout, StatementNode * stmt ) {
    299         existing->timeout.time      = maybeMoveBuild( timeout );
    300         existing->timeout.statement = maybeMoveBuild( stmt );
    301         existing->timeout.condition = notZeroExpr( maybeMoveBuild( when ) );
    302 
    303         return existing;
     312WaitForStmt * build_waitfor_timeout( ExpressionNode * timeout, StatementNode * stmt, ExpressionNode * when ) {
     313        auto node = new WaitForStmt();
     314
     315        if( timeout ) {
     316                node->timeout.time      = maybeMoveBuild( timeout );
     317                node->timeout.statement = maybeMoveBuild( stmt    );
     318                node->timeout.condition = notZeroExpr( maybeMoveBuild( when ) );
     319        } else {
     320                node->orelse.statement  = maybeMoveBuild( stmt );
     321                node->orelse.condition  = notZeroExpr( maybeMoveBuild( when ) );
     322        } // if
     323
     324        return node;
     325} // build_waitfor_timeout
     326
     327WaitForStmt * build_waitfor_timeout( ExpressionNode * timeout, StatementNode * stmt, ExpressionNode * when,  StatementNode * else_, ExpressionNode * else_when ) {
     328        auto node = new WaitForStmt();
     329
     330        node->timeout.time      = maybeMoveBuild( timeout );
     331        node->timeout.statement = maybeMoveBuild( stmt    );
     332        node->timeout.condition = notZeroExpr( maybeMoveBuild( when ) );
     333
     334        node->orelse.statement  = maybeMoveBuild( else_ );
     335        node->orelse.condition  = notZeroExpr( maybeMoveBuild( else_when ) );
     336
     337        return node;
    304338} // build_waitfor_timeout
    305339
  • src/Parser/lex.ll

    r9082d7e8 rd24b1985  
    1010 * Created On       : Sat Sep 22 08:58:10 2001
    1111 * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Sat Mar 25 08:09:03 2023
    13  * Update Count     : 768
     12 * Last Modified On : Mon Jan 30 19:03:34 2023
     13 * Update Count     : 767
    1414 */
    1515
     
    214214__alignof               { KEYWORD_RETURN(ALIGNOF); }                    // GCC
    215215__alignof__             { KEYWORD_RETURN(ALIGNOF); }                    // GCC
    216 and                             { QKEYWORD_RETURN(WAND); }                              // CFA
    217216asm                             { KEYWORD_RETURN(ASM); }
    218217__asm                   { KEYWORD_RETURN(ASM); }                                // GCC
  • src/Parser/parser.yy

    r9082d7e8 rd24b1985  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar 29 17:56:42 2023
    13 // Update Count     : 6325
     12// Last Modified On : Wed Mar 22 21:26:01 2023
     13// Update Count     : 6002
    1414//
    1515
     
    4444
    4545#include <cstdio>
    46 #include <sstream>
    4746#include <stack>
    4847using namespace std;
     
    271270        SemanticError( yylloc, ::toString( "Identifier \"", identifier, "\" cannot appear before a ", kind, ".\n"
    272271                                   "Possible cause is misspelled storage/CV qualifier, misspelled typename, or missing generic parameter." ) );
     272} // IdentifierBeforeType
     273
     274static bool TypedefForall( DeclarationNode * decl ) {
     275        if ( decl->type->forall || (decl->type->kind == TypeData::Aggregate && decl->type->aggregate.params) ) {
     276                SemanticError( yylloc, "forall qualifier in typedef is currently unimplemented." );
     277                return true;
     278        } // if
     279        return false;
    273280} // IdentifierBeforeType
    274281
     
    352359
    353360// names and constants: lexer differentiates between identifier and typedef names
    354 %token<tok> IDENTIFIER          TYPEDIMname             TYPEDEFname             TYPEGENname
    355 %token<tok> TIMEOUT                     WAND    WOR                     CATCH                   RECOVER                 CATCHRESUME             FIXUP           FINALLY         // CFA
     361%token<tok> IDENTIFIER          QUOTED_IDENTIFIER       TYPEDIMname             TYPEDEFname             TYPEGENname
     362%token<tok> TIMEOUT                     WOR                                     CATCH                   RECOVER                 CATCHRESUME             FIXUP           FINALLY         // CFA
    356363%token<tok> INTEGERconstant     CHARACTERconstant       STRINGliteral
    357364%token<tok> DIRECTIVE
     
    422429%type<catch_kind> handler_key
    423430%type<sn> mutex_statement
    424 %type<en> when_clause                                   when_clause_opt                         waitfor         waituntil               timeout
    425 %type<sn> waitfor_statement                             waituntil_statement
    426 %type<wfs> wor_waitfor_clause                   waituntil_clause                        wand_waituntil_clause   wor_waituntil_clause
     431%type<en> when_clause                                   when_clause_opt                         waitfor                                         timeout
     432%type<sn> waitfor_statement
     433%type<wfs> waitfor_clause
    427434
    428435// declarations
     
    528535// Similar issues exit with the waitfor statement.
    529536
    530 // Order of these lines matters (low-to-high precedence). THEN is left associative over WAND/WOR/TIMEOUT/ELSE, WAND/WOR
    531 // is left associative over TIMEOUT/ELSE, and TIMEOUT is left associative over ELSE.
     537// Order of these lines matters (low-to-high precedence). THEN is left associative over WOR/TIMEOUT/ELSE, WOR is left
     538// associative over TIMEOUT/ELSE, and TIMEOUT is left associative over ELSE.
    532539%precedence THEN                // rule precedence for IF/WAITFOR statement
    533 %precedence ANDAND              // token precedence for start of WAND in WAITFOR statement
    534 %precedence WAND                // token precedence for start of WAND in WAITFOR statement
    535 %precedence OROR                // token precedence for start of WOR in WAITFOR statement
    536540%precedence WOR                 // token precedence for start of WOR in WAITFOR statement
    537541%precedence TIMEOUT             // token precedence for start of TIMEOUT in WAITFOR statement
     
    620624quasi_keyword:                                                                                  // CFA
    621625        TIMEOUT
    622         | WAND
    623626        | WOR
    624627        | CATCH
     
    771774                { $$ = new ExpressionNode( build_pfieldSel( $1, build_tuple( $4 ) ) ); }
    772775        | postfix_expression ICR
    773                 { $$ = new ExpressionNode( build_unary_val( OperKinds::IncrPost, $1 ) ); }
     776                { $$ = new ExpressionNode( build_unary_val( OperKinds::IncrPost, $1 ) ); }
    774777        | postfix_expression DECR
    775                 { $$ = new ExpressionNode( build_unary_val( OperKinds::DecrPost, $1 ) ); }
     778                { $$ = new ExpressionNode( build_unary_val( OperKinds::DecrPost, $1 ) ); }
    776779        | '(' type_no_function ')' '{' initializer_list_opt comma_opt '}' // C99, compound-literal
    777780                { $$ = new ExpressionNode( build_compoundLiteral( $2, new InitializerNode( $5, true ) ) ); }
     
    801804        '@'                                                                                                     // CFA, default parameter
    802805                { SemanticError( yylloc, "Default parameter for argument is currently unimplemented." ); $$ = nullptr; }
    803                 // { $$ = new ExpressionNode( build_constantInteger( *new string( "2" ) ) ); }
     806                // { $$ = new ExpressionNode( build_constantInteger( *new string( "2" ) ) ); }
    804807        | assignment_expression
    805808        ;
     
    876879                }
    877880        | unary_operator cast_expression
    878                 { $$ = new ExpressionNode( build_unary_val( $1, $2 ) ); }
     881                { $$ = new ExpressionNode( build_unary_val( $1, $2 ) ); }
    879882        | ICR unary_expression
    880                 { $$ = new ExpressionNode( build_unary_val( OperKinds::Incr, $2 ) ); }
     883                { $$ = new ExpressionNode( build_unary_val( OperKinds::Incr, $2 ) ); }
    881884        | DECR unary_expression
    882                 { $$ = new ExpressionNode( build_unary_val( OperKinds::Decr, $2 ) ); }
     885                { $$ = new ExpressionNode( build_unary_val( OperKinds::Decr, $2 ) ); }
    883886        | SIZEOF unary_expression
    884887                { $$ = new ExpressionNode( new SizeofExpr( maybeMoveBuild( $2 ) ) ); }
     
    11331136        | mutex_statement
    11341137        | waitfor_statement
    1135         | waituntil_statement
    11361138        | exception_statement
    11371139        | enable_disable_statement
     
    12431245        | declaration comma_expression                                          // semi-colon separated
    12441246                { $$ = new CondCtl( $1, $2 ); }
    1245         ;
     1247        ;
    12461248
    12471249// CASE and DEFAULT clauses are only allowed in the SWITCH statement, precluding Duff's device. In addition, a case
     
    13261328                }
    13271329        | FOR '(' for_control_expression_list ')' statement     %prec THEN
    1328                 { $$ = new StatementNode( build_for( $3, maybe_build_compound( $5 ) ) ); }
     1330                { $$ = new StatementNode( build_for( $3, maybe_build_compound( $5 ) ) ); }
    13291331        | FOR '(' for_control_expression_list ')' statement ELSE statement // CFA
    13301332                { $$ = new StatementNode( build_for( $3, maybe_build_compound( $5 ), $7 ) ); }
     
    15181520                        SemanticError( yylloc, "Type iterator is currently unimplemented." ); $$ = nullptr;
    15191521                }
    1520         ;
     1522        ;
    15211523
    15221524downupdowneq:
     
    15271529        | ErangeDownEq
    15281530                { $$ = OperKinds::GEThan; }
    1529         ;
     1531        ;
    15301532
    15311533updown:
     
    15341536        | ErangeDown
    15351537                { $$ = OperKinds::GThan; }
    1536         ;
     1538        ;
    15371539
    15381540updowneq:
     
    15421544        | ErangeDownEq
    15431545                { $$ = OperKinds::GEThan; }
    1544         ;
     1546        ;
    15451547
    15461548jump_statement:
     
    16251627        ;
    16261628
     1629waitfor:
     1630        WAITFOR '(' cast_expression ')'
     1631                { $$ = $3; }
     1632//      | WAITFOR '(' cast_expression ',' argument_expression_list_opt ')'
     1633//              { $$ = (ExpressionNode *)$3->set_last( $5 ); }
     1634        | WAITFOR '(' cast_expression_list ':' argument_expression_list_opt ')'
     1635                { $$ = (ExpressionNode *)($3->set_last( $5 )); }
     1636        ;
     1637
    16271638cast_expression_list:
    16281639        cast_expression
     
    16331644
    16341645timeout:
    1635         TIMEOUT '(' comma_expression ')'                        { $$ = $3; }
    1636         ;
    1637 
    1638 wor:
    1639         OROR
    1640         | WOR
    1641 
    1642 waitfor:
    1643         WAITFOR '(' cast_expression ')'
    1644                 { $$ = $3; }
    1645         | WAITFOR '(' cast_expression_list ':' argument_expression_list_opt ')'
    1646                 { $$ = (ExpressionNode *)($3->set_last( $5 )); }
    1647         ;
    1648 
    1649 wor_waitfor_clause:
     1646        TIMEOUT '(' comma_expression ')'                        { $$ = $3; }
     1647        ;
     1648
     1649waitfor_clause:
    16501650        when_clause_opt waitfor statement                                       %prec THEN
    1651                 // Called first: create header for WaitForStmt.
    1652                 { $$ = build_waitfor( new WaitForStmt(), $1, $2, maybe_build_compound( $3 ) ); }
    1653         | wor_waitfor_clause wor when_clause_opt waitfor statement      %prec THEN
    1654                 { $$ = build_waitfor( $1, $3, $4, maybe_build_compound( $5 ) ); }
    1655         | wor_waitfor_clause wor when_clause_opt ELSE statement
    1656                 { $$ = build_waitfor_else( $1, $3, maybe_build_compound( $5 ) ); }
    1657         | wor_waitfor_clause wor when_clause_opt timeout statement      %prec THEN
    1658                 { $$ = build_waitfor_timeout( $1, $3, $4, maybe_build_compound( $5 ) ); }
     1651                { $$ = build_waitfor( $2, maybe_build_compound( $3 ), $1 ); }
     1652        | when_clause_opt waitfor statement WOR waitfor_clause
     1653                { $$ = build_waitfor( $2, maybe_build_compound( $3 ), $1, $5 ); }
     1654        | when_clause_opt timeout statement                                     %prec THEN
     1655                { $$ = build_waitfor_timeout( $2, maybe_build_compound( $3 ), $1 ); }
     1656        | when_clause_opt ELSE statement
     1657                { $$ = build_waitfor_timeout( nullptr, maybe_build_compound( $3 ), $1 ); }
    16591658        // "else" must be conditional after timeout or timeout is never triggered (i.e., it is meaningless)
    1660         | wor_waitfor_clause wor when_clause_opt timeout statement wor ELSE statement // syntax error
     1659        | when_clause_opt timeout statement WOR ELSE statement // syntax error
    16611660                { SemanticError( yylloc, "else clause must be conditional after timeout or timeout never triggered." ); $$ = nullptr; }
    1662         | wor_waitfor_clause wor when_clause_opt timeout statement wor when_clause ELSE statement
    1663                 { $$ = build_waitfor_else( build_waitfor_timeout( $1, $3, $4, maybe_build_compound( $5 ) ), $7, maybe_build_compound( $9 ) ); }
     1661        | when_clause_opt timeout statement WOR when_clause ELSE statement
     1662                { $$ = build_waitfor_timeout( $2, maybe_build_compound( $3 ), $1, maybe_build_compound( $7 ), $5 ); }
     1663        ;
    16641664
    16651665waitfor_statement:
    1666         wor_waitfor_clause                                                                      %prec THEN
    1667                 { $$ = new StatementNode( $1 ); }
    1668         ;
    1669 
    1670 wand:
    1671         ANDAND
    1672         | WAND
    1673         ;
    1674 
    1675 waituntil:
    1676         WAITUNTIL '(' cast_expression ')'
    1677                 { $$ = $3; }
    1678         ;
    1679 
    1680 waituntil_clause:
    1681         when_clause_opt waituntil statement
    1682                 { printf( "waituntil_clause 1\n" ); $$ = nullptr; }
    1683         | '(' wor_waituntil_clause ')'
    1684                 { printf( "waituntil_clause 2\n" ); $$ = nullptr; }
    1685         ;
    1686 
    1687 wand_waituntil_clause:
    1688         waituntil_clause                                                                        %prec THEN
    1689                 { printf( "wand_waituntil_clause 1\n" ); $$ = nullptr; }
    1690         | waituntil_clause wand wand_waituntil_clause
    1691                 { printf( "wand_waituntil_clause 2\n" ); $$ = nullptr; }
    1692         ;
    1693 
    1694 wor_waituntil_clause:
    1695         wand_waituntil_clause
    1696                 { printf( "wor_waituntil_clause 1\n" ); $$ = nullptr; }
    1697         | wor_waituntil_clause wor wor_waituntil_clause         %prec THEN
    1698                 { printf( "wor_waituntil_clause 2\n" ); $$ = nullptr; }
    1699         | wor_waituntil_clause wor when_clause_opt ELSE statement
    1700                 { printf( "wor_waituntil_clause 3\n" ); $$ = nullptr; }
    1701         | wor_waituntil_clause wor when_clause_opt timeout statement    %prec THEN
    1702                 { printf( "wor_waituntil_clause 4\n" ); $$ = nullptr; }
    1703         // "else" must be conditional after timeout or timeout is never triggered (i.e., it is meaningless)
    1704         | wor_waituntil_clause wor when_clause_opt timeout statement wor ELSE statement // syntax error
    1705                 { SemanticError( yylloc, "else clause must be conditional after timeout or timeout never triggered." ); $$ = nullptr; }
    1706         | wor_waituntil_clause wor when_clause_opt timeout statement wor when_clause ELSE statement
    1707                 { printf( "wor_waituntil_clause 6\n" ); $$ = nullptr; }
    1708         ;
    1709 
    1710 waituntil_statement:
    1711         wor_waituntil_clause                                                            %prec THEN
    1712                 // SKULLDUGGERY: create an empty compound statement to test parsing of waituntil statement.
    1713                 { $$ = new StatementNode( build_compound( (StatementNode *)0 ) ); }
     1666        when_clause_opt waitfor statement                                       %prec THEN
     1667                { $$ = new StatementNode( build_waitfor( $2, $3, $1 ) ); }
     1668        | when_clause_opt waitfor statement WOR waitfor_clause
     1669                { $$ = new StatementNode( build_waitfor( $2, $3, $1, $5 ) ); }
    17141670        ;
    17151671
    17161672exception_statement:
    1717         TRY compound_statement handler_clause                           %prec THEN
     1673        TRY compound_statement handler_clause                                   %prec THEN
    17181674                { $$ = new StatementNode( build_try( $2, $3, nullptr ) ); }
    17191675        | TRY compound_statement finally_clause
     
    18751831                {
    18761832                        // printf( "C_DECLARATION1 %p %s\n", $$, $$->name ? $$->name->c_str() : "(nil)" );
    1877                         // for ( Attribute * attr: reverseIterate( $$->attributes ) ) {
     1833                        // for ( Attribute * attr: reverseIterate( $$->attributes ) ) {
    18781834                        //   printf( "\tattr %s\n", attr->name.c_str() );
    18791835                        // } // for
     
    20111967                {
    20121968                        typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname, "4" );
    2013                         if ( $2->type->forall || ($2->type->kind == TypeData::Aggregate && $2->type->aggregate.params) ) {
    2014                                 SemanticError( yylloc, "forall qualifier in typedef is currently unimplemented." ); $$ = nullptr;
    2015                         } else $$ = $3->addType( $2 )->addTypedef(); // watchout frees $2 and $3
     1969                        if ( TypedefForall( $2 ) ) $$ = nullptr;
     1970                        else $$ = $3->addType( $2 )->addTypedef();              // watchout frees $2 and $3
    20161971                }
    20171972        | typedef_declaration pop ',' push declarator
     
    20211976                }
    20221977        | type_qualifier_list TYPEDEF type_specifier declarator // remaining OBSOLESCENT (see 2 )
    2023                 { SemanticError( yylloc, "Type qualifiers/specifiers before TYPEDEF is deprecated, move after TYPEDEF." ); $$ = nullptr; }
     1978                {
     1979                        typedefTable.addToEnclosingScope( *$4->name, TYPEDEFname, "6" );
     1980                        if ( TypedefForall( $1 ) ) $$ = nullptr;
     1981                        else $$ = $4->addQualifiers( $1 )->addType( $3 )->addTypedef();
     1982                }
    20241983        | type_specifier TYPEDEF declarator
    2025                 { SemanticError( yylloc, "Type qualifiers/specifiers before TYPEDEF is deprecated, move after TYPEDEF." ); $$ = nullptr; }
     1984                {
     1985                        typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname, "7" );
     1986                        if ( TypedefForall( $1 ) ) $$ = nullptr;
     1987                        else $$ = $3->addType( $1 )->addTypedef();
     1988                }
    20261989        | type_specifier TYPEDEF type_qualifier_list declarator
    2027                 { SemanticError( yylloc, "Type qualifiers/specifiers before TYPEDEF is deprecated, move after TYPEDEF." ); $$ = nullptr; }
     1990                {
     1991                        typedefTable.addToEnclosingScope( *$4->name, TYPEDEFname, "8" );
     1992                        if ( TypedefForall( $3 ) ) $$ = nullptr;
     1993                        else $$ = $4->addQualifiers( $1 )->addType( $1 )->addTypedef();
     1994                }
    20281995        ;
    20291996
     
    20321999        TYPEDEF identifier '=' assignment_expression
    20332000                {
    2034                         SemanticError( yylloc, "TYPEDEF expression is deprecated, use typeof(...) instead." ); $$ = nullptr;
     2001                        SemanticError( yylloc, "Typedef expression is deprecated, use typeof(...) instead." ); $$ = nullptr;
    20352002                }
    20362003        | typedef_expression pop ',' push identifier '=' assignment_expression
    20372004                {
    2038                         SemanticError( yylloc, "TYPEDEF expression is deprecated, use typeof(...) instead." ); $$ = nullptr;
     2005                        SemanticError( yylloc, "Typedef expression is deprecated, use typeof(...) instead." ); $$ = nullptr;
    20392006                }
    20402007        ;
     
    23342301                {
    23352302                        // printf( "sue_declaration_specifier %p %s\n", $$, $$->type->aggregate.name ? $$->type->aggregate.name->c_str() : "(nil)" );
    2336                         // for ( Attribute * attr: reverseIterate( $$->attributes ) ) {
     2303                        // for ( Attribute * attr: reverseIterate( $$->attributes ) ) {
    23372304                        //   printf( "\tattr %s\n", attr->name.c_str() );
    23382305                        // } // for
     
    23502317                {
    23512318                        // printf( "sue_type_specifier %p %s\n", $$, $$->type->aggregate.name ? $$->type->aggregate.name->c_str() : "(nil)" );
    2352                         // for ( Attribute * attr: reverseIterate( $$->attributes ) ) {
     2319                        // for ( Attribute * attr: reverseIterate( $$->attributes ) ) {
    23532320                        //   printf( "\tattr %s\n", attr->name.c_str() );
    23542321                        // } // for
     
    24282395                {
    24292396                        // printf( "elaborated_type %p %s\n", $$, $$->type->aggregate.name ? $$->type->aggregate.name->c_str() : "(nil)" );
    2430                         // for ( Attribute * attr: reverseIterate( $$->attributes ) ) {
     2397                        // for ( Attribute * attr: reverseIterate( $$->attributes ) ) {
    24312398                        //   printf( "\tattr %s\n", attr->name.c_str() );
    24322399                        // } // for
     
    25552522                        $$ = fieldDecl( $1, $2 );
    25562523                        // printf( "type_specifier2 %p %s\n", $$, $$->type->aggregate.name ? $$->type->aggregate.name->c_str() : "(nil)" );
    2557                         // for ( Attribute * attr: reverseIterate( $$->attributes ) ) {
     2524                        // for ( Attribute * attr: reverseIterate( $$->attributes ) ) {
    25582525                        //   printf( "\tattr %s\n", attr->name.c_str() );
    25592526                        // } // for
     
    25622529                { $$ = fieldDecl( $2, $3 ); distExt( $$ ); }
    25632530        | STATIC type_specifier field_declaring_list_opt ';' // CFA
    2564                 { SemanticError( yylloc, "STATIC aggregate field qualifier currently unimplemented." ); $$ = nullptr; }
     2531                { SemanticError( yylloc, "STATIC aggregate field qualifier currently unimplemented." ); $$ = nullptr; }
    25652532        | INLINE type_specifier field_abstract_list_opt ';'     // CFA
    25662533                {
     
    25732540                }
    25742541        | INLINE aggregate_control ';'                                          // CFA
    2575                 { SemanticError( yylloc, "INLINE aggregate control currently unimplemented." ); $$ = nullptr; }
     2542                { SemanticError( yylloc, "INLINE aggregate control currently unimplemented." ); $$ = nullptr; }
    25762543        | typedef_declaration ';'                                                       // CFA
    25772544        | cfa_field_declaring_list ';'                                          // CFA, new style field declaration
     
    26562623                { $$ = DeclarationNode::newEnum( $3->name, $6, true, false, nullptr, $4 )->addQualifiers( $2 ); }
    26572624        | ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt '{' enumerator_list comma_opt '}'
    2658                 {
     2625                {
    26592626                        if ( $3->storageClasses.val != 0 || $3->type->qualifiers.any() )
    26602627                        { SemanticError( yylloc, "storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." ); }
     
    31903157                {
    31913158                        distQual( $5, $1 );
    3192                         forall = false;
     3159                        forall = false;
    31933160                        $$ = $5;
    31943161                }
     
    32013168                {
    32023169                        distQual( $5, $1 );
    3203                         forall = false;
     3170                        forall = false;
    32043171                        $$ = $5;
    32053172                }
     
    32123179                {
    32133180                        distQual( $6, $1->addQualifiers( $2 ) );
    3214                         forall = false;
     3181                        forall = false;
    32153182                        $$ = $6;
    32163183                }
     
    34193386        | '(' attribute_list variable_ptr ')' array_dimension
    34203387                { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }
    3421         | '(' variable_array ')' multi_array_dimension          // redundant parenthesis
     3388        | '(' variable_array ')' multi_array_dimension          // redundant parenthesis
    34223389                { $$ = $2->addArray( $4 ); }
    34233390        | '(' attribute_list variable_array ')' multi_array_dimension // redundant parenthesis
     
    38423809        | ErangeUpEq
    38433810                { $$ = OperKinds::LEThan; }
    3844         ;
     3811        ;
    38453812
    38463813multi_array_dimension:
  • src/ResolvExpr/Candidate.cpp

    r9082d7e8 rd24b1985  
    1717
    1818#include <iostream>
    19 #include <sstream>
    2019
    2120#include "AST/Print.hpp"
     
    4544        sorted.reserve(cands.size());
    4645        for(const auto & c : cands) {
    47                 std::ostringstream ss;
     46                std::stringstream ss;
    4847                print( ss, *c, indent );
    4948                sorted.push_back(ss.str());
  • src/ResolvExpr/Resolver.cc

    r9082d7e8 rd24b1985  
    3939#include "AST/Type.hpp"
    4040#include "Common/Eval.h"                 // for eval
    41 #include "Common/Iterate.hpp"            // for group_iterate
    4241#include "Common/PassVisitor.h"          // for PassVisitor
    4342#include "Common/SemanticError.h"        // for SemanticError
    4443#include "Common/Stats/ResolveTime.h"    // for ResolveTime::start(), ResolveTime::stop()
    45 #include "Common/ToString.hpp"           // for toCString
     44#include "Common/utility.h"              // for ValueGuard, group_iterate
    4645#include "InitTweak/GenInit.h"
    4746#include "InitTweak/InitTweak.h"         // for isIntrinsicSingleArgCallStmt
  • src/SymTab/FixFunction.cc

    r9082d7e8 rd24b1985  
    2121#include "AST/Pass.hpp"
    2222#include "AST/Type.hpp"
    23 #include "Common/utility.h"       // for copy
     23#include "Common/utility.h"       // for maybeClone, copy
    2424#include "SynTree/Declaration.h"  // for FunctionDecl, ObjectDecl, Declarati...
    2525#include "SynTree/Expression.h"   // for Expression
  • src/SymTab/Mangler.cc

    r9082d7e8 rd24b1985  
    2424#include "CodeGen/OperatorTable.h"       // for OperatorInfo, operatorLookup
    2525#include "Common/PassVisitor.h"
    26 #include "Common/ToString.hpp"           // for toCString
    2726#include "Common/SemanticError.h"        // for SemanticError
     27#include "Common/utility.h"              // for toString
    2828#include "ResolvExpr/TypeEnvironment.h"  // for TypeEnvironment
    2929#include "SynTree/LinkageSpec.h"         // for Spec, isOverridable, AutoGen, Int...
  • src/SymTab/Validate.cc

    r9082d7e8 rd24b1985  
    5555#include "Common/ScopedMap.h"          // for ScopedMap
    5656#include "Common/SemanticError.h"      // for SemanticError
    57 #include "Common/ToString.hpp"         // for toCString
    5857#include "Common/UniqueName.h"         // for UniqueName
    59 #include "Common/utility.h"            // for cloneAll, deleteAll
     58#include "Common/utility.h"            // for operator+, cloneAll, deleteAll
    6059#include "CompilationState.h"          // skip some passes in new-ast build
    6160#include "Concurrency/Keywords.h"      // for applyKeywords
  • src/SymTab/ValidateType.cc

    r9082d7e8 rd24b1985  
    1818#include "CodeGen/OperatorTable.h"
    1919#include "Common/PassVisitor.h"
    20 #include "Common/ToString.hpp"
    2120#include "SymTab/FixFunction.h"
    2221#include "SynTree/Declaration.h"
  • src/SynTree/Type.cc

    r9082d7e8 rd24b1985  
    1616
    1717#include "Attribute.h"                // for Attribute
    18 #include "Common/ToString.hpp"        // for toCString
    1918#include "Common/utility.h"           // for cloneAll, deleteAll, printAll
    2019#include "InitTweak/InitTweak.h"      // for getPointerBase
     
    106105int Type::referenceDepth() const { return 0; }
    107106
    108 AggregateDecl * Type::getAggr() const {
    109         assertf( false, "Non-aggregate type: %s", toCString( this ) );
    110 }
    111 
    112107TypeSubstitution Type::genericSubstitution() const { assertf( false, "Non-aggregate type: %s", toCString( this ) ); }
    113108
  • src/SynTree/Type.h

    r9082d7e8 rd24b1985  
    2424#include "BaseSyntaxNode.h"  // for BaseSyntaxNode
    2525#include "Common/Iterate.hpp"// for operator+
     26#include "Common/utility.h"  // for toCString
    2627#include "Mutator.h"         // for Mutator
    2728#include "SynTree.h"         // for AST nodes
     
    185186        virtual bool isComplete() const { return true; }
    186187
    187         virtual AggregateDecl * getAggr() const;
     188        virtual AggregateDecl * getAggr() const { assertf( false, "Non-aggregate type: %s", toCString( this ) ); }
    188189
    189190        virtual TypeSubstitution genericSubstitution() const;
  • src/Validate/FixQualifiedTypes.cpp

    r9082d7e8 rd24b1985  
    1616#include "Validate/FixQualifiedTypes.hpp"
    1717
    18 #include "AST/LinkageSpec.hpp"             // for Linkage
    1918#include "AST/Pass.hpp"
    2019#include "AST/TranslationUnit.hpp"
    21 #include "Common/ToString.hpp"             // for toString
    22 #include "SymTab/Mangler.h"                // for Mangler
    2320#include "Validate/NoIdSymbolTable.hpp"
     21#include "SymTab/Mangler.h"            // for Mangler
     22#include "AST/LinkageSpec.hpp"                     // for Linkage
    2423
    2524namespace Validate {
  • src/Validate/ForallPointerDecay.cpp

    r9082d7e8 rd24b1985  
    2222#include "CodeGen/OperatorTable.h"
    2323#include "Common/CodeLocation.h"
    24 #include "Common/ToString.hpp"
    2524#include "SymTab/FixFunction.h"
    2625
  • src/Validate/HandleAttributes.cc

    r9082d7e8 rd24b1985  
    1919#include "Common/Eval.h"
    2020#include "Common/PassVisitor.h"
    21 #include "Common/ToString.hpp"
    2221#include "Common/SemanticError.h"
    2322#include "ResolvExpr/Resolver.h"
  • src/Validate/HoistStruct.cpp

    r9082d7e8 rd24b1985  
    1616#include "Validate/HoistStruct.hpp"
    1717
    18 #include <sstream>
    19 
    2018#include "AST/Pass.hpp"
    2119#include "AST/TranslationUnit.hpp"
     20#include "Common/utility.h"
    2221
    2322namespace Validate {
  • src/include/cassert

    r9082d7e8 rd24b1985  
    2020#include_next <cassert>
    2121
    22 #include "Common/ToString.hpp"
     22#include <string>
     23
     24template < typename ... Params >
     25std::string toString( const Params & ... params );
    2326
    2427#ifdef NDEBUG
Note: See TracChangeset for help on using the changeset viewer.