Changeset 2d019af for src/AST


Ignore:
Timestamp:
Mar 12, 2021, 11:14:29 PM (5 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
41ca6fa, e867b44d
Parents:
6083392
Message:

parser global pragmas, fixes #241

Location:
src/AST
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Convert.cpp

    r6083392 r2d019af  
    99// Author           : Thierry Delisle
    1010// Created On       : Thu May 09 15::37::05 2019
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Thr Nov 12 10:07:00 2020
    13 // Update Count     : 34
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Fri Mar 12 18:43:51 2021
     13// Update Count     : 36
    1414//
    1515
     
    327327        const ast::AsmDecl * visit( const ast::AsmDecl * node ) override final {
    328328                auto decl = new AsmDecl( get<AsmStmt>().accept1( node->stmt ) );
     329                declPostamble( decl, node );
     330                return nullptr;
     331        }
     332
     333        const ast::DirectiveDecl * visit( const ast::DirectiveDecl * node ) override final {
     334                auto decl = new DirectiveDecl( get<DirectiveStmt>().accept1( node->stmt ) );
    329335                declPostamble( decl, node );
    330336                return nullptr;
     
    17691775        }
    17701776
     1777        virtual void visit( const DirectiveDecl * old ) override final {
     1778                auto decl = new ast::DirectiveDecl{
     1779                        old->location,
     1780                        GET_ACCEPT_1(stmt, DirectiveStmt)
     1781                };
     1782                decl->extension  = old->extension;
     1783                decl->uniqueId   = old->uniqueId;
     1784                decl->storage    = { old->storageClasses.val };
     1785
     1786                this->node = decl;
     1787        }
     1788
    17711789        virtual void visit( const StaticAssertDecl * old ) override final {
    17721790                auto decl = new ast::StaticAssertDecl{
  • src/AST/Decl.hpp

    r6083392 r2d019af  
    1010// Created On       : Thu May 9 10:00:00 2019
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jan 11 20:48:38 2021
    13 // Update Count     : 30
     12// Last Modified On : Fri Mar 12 18:25:05 2021
     13// Update Count     : 32
    1414//
    1515
     
    365365};
    366366
     367/// C-preprocessor directive `#...`
     368class DirectiveDecl : public Decl {
     369public:
     370        ptr<DirectiveStmt> stmt;
     371
     372        DirectiveDecl( const CodeLocation & loc, DirectiveStmt * stmt )
     373        : Decl( loc, "", {}, {} ), stmt(stmt) {}
     374
     375        const DirectiveDecl * accept( Visitor & v ) const override { return v.visit( this ); }
     376private:
     377        DirectiveDecl * clone() const override { return new DirectiveDecl( *this ); }
     378        MUTATE_FRIEND
     379};
     380
    367381class StaticAssertDecl : public Decl {
    368382public:
  • src/AST/Fwd.hpp

    r6083392 r2d019af  
    99// Author           : Andrew Beach
    1010// Created On       : Wed May  8 16:05:00 2019
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Thr Jul 23 14:15:00 2020
    13 // Update Count     : 2
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Fri Mar 12 18:37:39 2021
     13// Update Count     : 4
    1414//
    1515
     
    3535class TypedefDecl;
    3636class AsmDecl;
     37class DirectiveDecl;
    3738class StaticAssertDecl;
    3839
  • src/AST/Node.cpp

    r6083392 r2d019af  
    99// Author           : Thierry Delisle
    1010// Created On       : Thu May 16 14:16:00 2019
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Fri Jun  5 10:21:00 2020
    13 // Update Count     : 1
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Fri Mar 12 18:25:06 2021
     13// Update Count     : 2
    1414//
    1515
     
    130130template class ast::ptr_base< ast::AsmDecl, ast::Node::ref_type::weak >;
    131131template class ast::ptr_base< ast::AsmDecl, ast::Node::ref_type::strong >;
     132template class ast::ptr_base< ast::DirectiveDecl, ast::Node::ref_type::weak >;
     133template class ast::ptr_base< ast::DirectiveDecl, ast::Node::ref_type::strong >;
    132134template class ast::ptr_base< ast::StaticAssertDecl, ast::Node::ref_type::weak >;
    133135template class ast::ptr_base< ast::StaticAssertDecl, ast::Node::ref_type::strong >;
  • src/AST/Pass.hpp

    r6083392 r2d019af  
    139139        const ast::Decl *             visit( const ast::TypedefDecl          * ) override final;
    140140        const ast::AsmDecl *          visit( const ast::AsmDecl              * ) override final;
     141        const ast::DirectiveDecl *    visit( const ast::DirectiveDecl        * ) override final;
    141142        const ast::StaticAssertDecl * visit( const ast::StaticAssertDecl     * ) override final;
    142143        const ast::CompoundStmt *     visit( const ast::CompoundStmt         * ) override final;
  • src/AST/Pass.impl.hpp

    r6083392 r2d019af  
    646646
    647647//--------------------------------------------------------------------------
     648// DirectiveDecl
     649template< typename core_t >
     650const ast::DirectiveDecl * ast::Pass< core_t >::visit( const ast::DirectiveDecl * node ) {
     651        VISIT_START( node );
     652
     653        VISIT(
     654                maybe_accept( node, &DirectiveDecl::stmt );
     655        )
     656
     657        VISIT_END( DirectiveDecl, node );
     658}
     659
     660//--------------------------------------------------------------------------
    648661// StaticAssertDecl
    649662template< typename core_t >
  • src/AST/Print.cpp

    r6083392 r2d019af  
    387387
    388388        virtual const ast::AsmDecl * visit( const ast::AsmDecl * node ) override final {
     389                safe_print( node->stmt );
     390                return node;
     391        }
     392
     393        virtual const ast::DirectiveDecl * visit( const ast::DirectiveDecl * node ) override final {
    389394                safe_print( node->stmt );
    390395                return node;
  • src/AST/Visitor.hpp

    r6083392 r2d019af  
    99// Author           : Andrew Beach
    1010// Created On       : Thr May 9 15:28:00 2019
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Thr May 9 15:33:00 2019
    13 // Update Count     : 0
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Fri Mar 12 18:25:07 2021
     13// Update Count     : 1
    1414//
    1515
     
    3131    virtual const ast::Decl *             visit( const ast::TypedefDecl          * ) = 0;
    3232    virtual const ast::AsmDecl *          visit( const ast::AsmDecl              * ) = 0;
     33    virtual const ast::DirectiveDecl *    visit( const ast::DirectiveDecl        * ) = 0;
    3334    virtual const ast::StaticAssertDecl * visit( const ast::StaticAssertDecl     * ) = 0;
    3435    virtual const ast::CompoundStmt *     visit( const ast::CompoundStmt         * ) = 0;
Note: See TracChangeset for help on using the changeset viewer.