Changeset 926af74


Ignore:
Timestamp:
Aug 17, 2016, 9:31:28 AM (8 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
3b8e52c, 6643e72
Parents:
5ead9f9
Message:

more refactoring of parser code

Location:
src
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/TypeData.cc

    r5ead9f9 r926af74  
    1010// Created On       : Sat May 16 15:12:51 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Aug 15 20:48:52 2016
    13 // Update Count     : 62
     12// Last Modified On : Wed Aug 17 08:47:48 2016
     13// Update Count     : 63
    1414//
    1515
     
    908908        buildList( enumeration->constants, ret->get_members() );
    909909        std::list< Declaration * >::iterator members = ret->get_members().begin();
    910         for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ), ++members ) {
    911                 if ( cur->get_enumeratorValue() != NULL ) {
     910        for ( const DeclarationNode *cur = enumeration->constants; cur != nullptr; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ), ++members ) {
     911                if ( cur->get_enumeratorValue() != nullptr ) {
    912912                        ObjectDecl *member = dynamic_cast< ObjectDecl * >(*members);
    913913                        member->set_init( new SingleInit( maybeBuild< Expression >( cur->get_enumeratorValue() ), std::list< Expression * >() ) );
  • src/Parser/lex.cc

    r5ead9f9 r926af74  
    14681468 * Author           : Peter A. Buhr
    14691469 * Created On       : Sat Sep 22 08:58:10 2001
    1470  * Last Modified By :
    1471  * Last Modified On : Sun Jul 31 07:19:36 2016
    1472  * Update Count     : 459
     1470 * Last Modified By : Peter A. Buhr
     1471 * Last Modified On : Tue Aug 16 22:34:31 2016
     1472 * Update Count     : 460
    14731473 */
    14741474#line 20 "lex.ll"
     
    14911491#define RETURN_LOCN(x)          yylval.tok.loc.file = yyfilename; yylval.tok.loc.line = yylineno; return( x )
    14921492#define RETURN_VAL(x)           yylval.tok.str = new std::string( yytext ); RETURN_LOCN( x )
    1493 #define RETURN_CHAR(x)          yylval.tok.str = NULL; RETURN_LOCN( x )
     1493#define RETURN_CHAR(x)          yylval.tok.str = nullptr; RETURN_LOCN( x )
    14941494#define RETURN_STR(x)           yylval.tok.str = strtext; RETURN_LOCN( x )
    14951495
  • src/Parser/lex.ll

    r5ead9f9 r926af74  
    99 * Author           : Peter A. Buhr
    1010 * Created On       : Sat Sep 22 08:58:10 2001
    11  * Last Modified By :
    12  * Last Modified On : Sun Jul 31 07:19:36 2016
    13  * Update Count     : 459
     11 * Last Modified By : Peter A. Buhr
     12 * Last Modified On : Tue Aug 16 22:34:31 2016
     13 * Update Count     : 460
    1414 */
    1515
     
    3636#define RETURN_LOCN(x)          yylval.tok.loc.file = yyfilename; yylval.tok.loc.line = yylineno; return( x )
    3737#define RETURN_VAL(x)           yylval.tok.str = new std::string( yytext ); RETURN_LOCN( x )
    38 #define RETURN_CHAR(x)          yylval.tok.str = NULL; RETURN_LOCN( x )
     38#define RETURN_CHAR(x)          yylval.tok.str = nullptr; RETURN_LOCN( x )
    3939#define RETURN_STR(x)           yylval.tok.str = strtext; RETURN_LOCN( x )
    4040
  • src/Parser/parser.cc

    r5ead9f9 r926af74  
    57095709#line 700 "parser.yy"
    57105710    {   // mark all fields in list
    5711                         for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() )
     5711                        for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
    57125712                                iter->set_extension( true );
    57135713                        (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) );
     
    70477047#line 1494 "parser.yy"
    70487048    {   // mark all fields in list
    7049                         for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() )
     7049                        for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
    70507050                                iter->set_extension( true );
    70517051                        (yyval.decl) = (yyvsp[(2) - (3)].decl);
     
    77727772/* Line 1806 of yacc.c  */
    77737773#line 1972 "parser.yy"
    7774     { parseTree = parseTree ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);       }
     7774    { parseTree = parseTree != nullptr ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);    }
    77757775    break;
    77767776
     
    77797779/* Line 1806 of yacc.c  */
    77807780#line 1978 "parser.yy"
    7781     { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     7781    { (yyval.decl) = (yyvsp[(1) - (3)].decl) != nullptr ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
    77827782    break;
    77837783
     
    78227822#line 2004 "parser.yy"
    78237823    {   // mark all fields in list
    7824                         for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() )
     7824                        for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
    78257825                                iter->set_extension( true );
    78267826                        (yyval.decl) = (yyvsp[(2) - (2)].decl);
  • src/Parser/parser.yy

    r5ead9f9 r926af74  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Aug 16 21:31:46 2016
    13 // Update Count     : 1906
     12// Last Modified On : Tue Aug 16 21:59:35 2016
     13// Update Count     : 1907
    1414//
    1515
     
    699699        | EXTENSION declaration                                                         // GCC
    700700                {       // mark all fields in list
    701                         for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
     701                        for ( DeclarationNode *iter = $2; iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
    702702                                iter->set_extension( true );
    703703                        $$ = new StatementNode( $2 );
     
    14931493        | EXTENSION field_declaring_list ';'                            // GCC
    14941494                {       // mark all fields in list
    1495                         for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
     1495                        for ( DeclarationNode *iter = $2; iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
    14961496                                iter->set_extension( true );
    14971497                        $$ = $2;
     
    19701970                {}                                                                                              // empty input file
    19711971        | external_definition_list
    1972                 { parseTree = parseTree ? parseTree->appendList( $1 ) : $1;     }
     1972                { parseTree = parseTree != nullptr ? parseTree->appendList( $1 ) : $1;  }
    19731973        ;
    19741974
     
    19761976        external_definition
    19771977        | external_definition_list push external_definition
    1978                 { $$ = ( $1 != NULL ) ? $1->appendList( $3 ) : $3; }
     1978                { $$ = $1 != nullptr ? $1->appendList( $3 ) : $3; }
    19791979        ;
    19801980
     
    20032003        | EXTENSION external_definition
    20042004                {       // mark all fields in list
    2005                         for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
     2005                        for ( DeclarationNode *iter = $2; iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
    20062006                                iter->set_extension( true );
    20072007                        $$ = $2;
  • src/main.cc

    r5ead9f9 r926af74  
    1010// Created On       : Fri May 15 23:12:02 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Aug 16 21:33:49 2016
    13 // Update Count     : 260
     12// Last Modified On : Wed Aug 17 09:08:43 2016
     13// Update Count     : 274
    1414//
    1515
     
    2020#include "Parser/parser.h"
    2121#include "Parser/TypedefTable.h"
    22 #include "SynTree/Declaration.h"
    23 #include "SynTree/Visitor.h"
    2422#include "GenPoly/Lvalue.h"
    2523#include "GenPoly/Specialize.h"
     
    3028#include "CodeGen/FixNames.h"
    3129#include "ControlStruct/Mutate.h"
    32 #include "Tuples/Mutate.h"
    33 #include "Tuples/FunctionChecker.h"
    34 #include "SymTab/Mangler.h"
    35 #include "SymTab/Indexer.h"
    3630#include "SymTab/Validate.h"
    3731#include "ResolvExpr/AlternativePrinter.h"
    3832#include "ResolvExpr/Resolver.h"
    3933#include "MakeLibCfa.h"
    40 #include "InitTweak/Mutate.h"
    4134#include "InitTweak/GenInit.h"
    4235#include "InitTweak/FixInit.h"
    43 
    44 #include "Common/SemanticError.h"
    4536#include "Common/UnimplementedError.h"
    4637
     
    5142#define OPTPRINT(x) if ( errorp ) std::cerr << x << std::endl;
    5243
    53 extern int yydebug;
    5444
    5545LinkageSpec::Type linkage = LinkageSpec::Cforall;
     
    5747DeclarationNode * parseTree = nullptr;                                  // program parse tree
    5848
     49extern int yydebug;                                                                             // set for -g flag (Grammar)
    5950bool
    6051        astp = false,
     
    6455        exprp = false,
    6556        expraltp = false,
    66         grammarp = false,
    6757        libcfap = false,
    6858        nopreludep = false,
     
    7666        codegenp = false;
    7767
     68static void parse_cmdline( int argc, char *argv[], const char *& filename );
    7869static void parse( FILE * input, LinkageSpec::Type t, bool shouldExit = false );
    7970static void dump( std::list< Declaration * > & translationUnit, std::ostream & out = std::cout );
    80 static void parse_cmdline( int argc, char *argv[], const char *& filename );
    8171
    8272
     
    8575        std::ostream *output = & std::cout;
    8676        std::list< Declaration * > translationUnit;
    87         const char *filename = NULL;
     77        const char *filename = nullptr;
    8878
    8979        parse_cmdline( argc, argv, filename );                          // process command-line arguments
     
    9888                        } // if
    9989                        // if running cfa-cpp directly, might forget to pass -F option (and really shouldn't have to)
    100                         if ( filename == NULL ) filename = argv[ optind ];
     90                        if ( filename == nullptr ) filename = argv[ optind ];
    10191                        // prelude filename comes in differently
    10292                        if ( libcfap ) filename = "prelude.cf";
     
    10696                        // if running cfa-cpp directly, might forget to pass -F option. Since this takes from stdin, pass
    10797                        // a fake name along
    108                         if ( filename == NULL ) filename = "stdin";
     98                        if ( filename == nullptr ) filename = "stdin";
    10999                } // if
    110100
     
    112102                        output = new ofstream( argv[ optind ] );
    113103                } // if
    114 
    115                 yydebug = grammarp;
    116104
    117105                // read in the builtins, extras, and the prelude
     
    119107                        // -l is for initial build ONLY and builtins.cf is not in the lib directory so access it here.
    120108                        FILE * builtins = fopen( libcfap | treep ? "builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
    121                         if ( builtins == NULL ) {
     109                        if ( builtins == nullptr ) {
    122110                                std::cerr << "Error: cannot open builtins.cf" << std::endl;
    123111                                exit( EXIT_FAILURE );
     
    127115                        // read the extra prelude in, if not generating the cfa library
    128116                        FILE * extras = fopen( libcfap | treep ? "extras.cf" : CFA_LIBDIR "/extras.cf", "r" );
    129                         if ( extras == NULL ) {
     117                        if ( extras == nullptr ) {
    130118                                std::cerr << "Error: cannot open extras.cf" << std::endl;
    131119                                exit( EXIT_FAILURE );
     
    136124                                // read the prelude in, if not generating the cfa library
    137125                                FILE * prelude = fopen( treep ? "prelude.cf" : CFA_LIBDIR "/prelude.cf", "r" );
    138                                 if ( prelude == NULL ) {
     126                                if ( prelude == nullptr ) {
    139127                                        std::cerr << "Error: cannot open prelude.cf" << std::endl;
    140128                                        exit( EXIT_FAILURE );
     
    145133                } // if
    146134
    147                 parse( input, libcfap ? LinkageSpec::Intrinsic : LinkageSpec::Cforall, grammarp );
     135                parse( input, libcfap ? LinkageSpec::Intrinsic : LinkageSpec::Cforall, yydebug );
    148136
    149137                if ( parsep ) {
     
    202190                        dump( translationUnit );
    203191                        return 0;
    204                 }
     192                } // if
    205193
    206194                // fix ObjectDecl - replaces ConstructorInit nodes
     
    210198                        dump ( translationUnit );
    211199                        return 0;
    212                 }
     200                } // if
    213201
    214202                OPTPRINT("instantiateGenerics")
     
    224212                        dump( translationUnit );
    225213                        return 0;
    226                 }
     214                } // if
    227215                OPTPRINT( "box" )
    228216                GenPoly::box( translationUnit );
     
    244232                        dump( translationUnit, std::cerr );
    245233                        std::cerr << std::endl << "---End of AST, begin error message:---\n" << std::endl;
    246                 }
     234                } // if
    247235                e.print( std::cerr );
    248236                if ( output != &std::cout ) {
     
    322310                  case Grammar:
    323311                  case 'g':                                                                             // bison debugging info (grammar rules)
    324                         grammarp = true;
     312                        yydebug = true;
    325313                        break;
    326314                  case LibCFA:
     
    398386static void dump( std::list< Declaration * > & translationUnit, std::ostream & out ) {
    399387        std::list< Declaration * > decls;
     388
    400389        if ( noprotop ) {
    401390                filter( translationUnit.begin(), translationUnit.end(), std::back_inserter( decls ), notPrelude );
    402391        } else {
    403392                decls = translationUnit;
    404         }
     393        } // if
    405394
    406395        printAll( decls, out );
  • src/tests/.expect/64/gccExtensions.txt

    r5ead9f9 r926af74  
    1111    asm ( "nop" :  :  :  );
    1212    static int __y__i_2;
     13    static int *__z__Pi_2;
    1314    int __src__i_2;
    1415    int __dst__i_2;
     
    2324    const int __i2__Ci_2;
    2425    const int __i3__Ci_2;
     26    inline int __f1__Fi___2(){
     27    }
     28    inline int __f2__Fi___2(){
     29    }
     30    int __s1__i_2;
     31    int __s2__i_2;
     32    volatile int __v1__Vi_2;
     33    volatile int __v2__Vi_2;
     34    int __t1___2;
     35    int __t2___2;
    2536    __extension__ const int __ex__Ci_2;
    2637    struct S {
     
    7384    ((void)(__extension__ __a__i_2=(__extension__ __b__i_2+__extension__ __c__i_2)));
    7485    ((void)(__extension__ __a__i_2=__extension__ (__extension__ __b__i_2+__extension__ __c__i_2)));
    75     inline int __f1__Fi___2(){
    76     }
    77     inline int __f2__Fi___2(){
    78     }
    79     int __s1__i_2;
    80     int __s2__i_2;
    81     int __t1___2;
    82     int __t2___2;
    83     volatile int __v1__Vi_2;
    84     volatile int __v2__Vi_2;
    8586    int __a1__i_2;
    8687    const int __a2__Ci_2;
  • src/tests/gccExtensions.c

    r5ead9f9 r926af74  
    1010// Created On       : Sun Aug 14 17:28:17 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Aug 17 08:34:57 2016
    13 // Update Count     : 7
     12// Last Modified On : Wed Aug 17 09:26:50 2016
     13// Update Count     : 10
    1414//
    1515
     
    1717
    1818int main(int argc, char const *argv[]) {
     19        // asm extensions
     20
    1921        asm( "nop" );
    2022        __asm( "nop" );
     
    5456                           : L1, L2 );
    5557
     58        // alternative type/qualifer names
     59
    5660        __complex__ c1;
    5761        _Complex c2;
     
    6064        __const int i2;
    6165        __const__ int i3;
     66
     67        __inline int f1() {}
     68        __inline__ int f2() {}
     69
     70        __signed s1;
     71        __signed s2;
     72
     73        __volatile int v1;
     74        __volatile__ int v2;
     75
     76        // symbol table attributes
     77
     78        __typeof(s1) t1;
     79        __typeof__(s1) t2;
     80
     81        // strange extension qualifier
    6282
    6383        __extension__ const int ex;
     
    7191        __extension__ a = __extension__ ( __extension__ b + __extension__ c );
    7292
    73         __inline int f1() {}
    74         __inline__ int f2() {}
    75 
    76         __signed s1;
    77         __signed s2;
    78 
    79         __typeof(s1) t1;
    80         __typeof__(s1) t2;
    81 
    82         __volatile int v1;
    83         __volatile__ int v2;
     93        // attributes
    8494
    8595        __attribute__(()) int a1;
Note: See TracChangeset for help on using the changeset viewer.