Changeset f685679


Ignore:
Timestamp:
May 23, 2019, 5:06:30 PM (5 years ago)
Author:
Andrew Beach <ajbeach@…>
Branches:
ADT, arm-eh, ast-experimental, cleanup-dtors, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
f1ec88a
Parents:
3ca912a
Message:

Translation can go both ways without crashing. Don't seem to be the inverse of each other.

Location:
src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Convert.cpp

    r3ca912a rf685679  
    1010// Created On       : Thu May 09 15::37::05 2019
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Tue May 21 15:30:00 2019
    13 // Update Count     : 5
     12// Last Modified On : Thu May 23 16:59:00 2019
     13// Update Count     : 6
    1414//
    1515
     
    121121        const ast::DeclWithType * declWithTypePostamble (
    122122                        DeclarationWithType * decl, const ast::DeclWithType * node ) {
    123                 declPostamble( decl, node );
     123                cache.emplace( node, decl );
    124124                decl->mangleName = node->mangleName;
    125125                decl->scopeLevel = node->scopeLevel;
     
    128128                decl->isDeleted = node->isDeleted;
    129129                // fs comes from constructor
    130                 cache.emplace( node, decl );
     130                declPostamble( decl, node );
    131131                return nullptr;
    132132        }
     
    162162        }
    163163
    164         // NamedTypeDecl
    165164        const ast::Decl * namedTypePostamble( NamedTypeDecl * decl, const ast::NamedTypeDecl * node ) {
    166                 declPostamble( decl, node );
    167165                // base comes from constructor
    168166                decl->parameters = get<TypeDecl>().acceptL( node->params );
    169167                decl->assertions = get<DeclarationWithType>().acceptL( node->assertions );
     168                declPostamble( decl, node );
    170169                return nullptr;
    171170        }
     
    197196
    198197        const ast::Decl * aggregatePostamble( AggregateDecl * decl, const ast::AggregateDecl * node ) {
     198                cache.emplace( node, decl );
    199199                decl->members = get<Declaration>().acceptL( node->members );
    200200                decl->parameters = get<TypeDecl>().acceptL( node->params );
     
    202202                // attributes come from constructor
    203203                decl->parent = get<AggregateDecl>().accept1( node->parent );
    204                 cache.emplace( node, decl );
     204                declPostamble( decl, node );
    205205                return nullptr;
    206206        }
     
    263263
    264264        const ast::Stmt * stmtPostamble( Statement * stmt, const ast::Stmt * node ) {
     265                cache.emplace( node, stmt );
    265266                stmt->location = node->location;
    266267                stmt->labels = makeLabelL( stmt, node->labels );
    267                 cache.emplace( node, stmt );
    268268                this->node = stmt;
    269269                return nullptr;
     
    279279        const ast::Stmt * visit( const ast::ExprStmt * node ) override final {
    280280                if ( inCache( node ) ) return nullptr;
    281                 auto stmt = new ExprStmt( get<Expression>().accept1( node->expr ) );
     281                auto stmt = new ExprStmt( nullptr );
     282                cache.emplace( node, stmt );
     283                stmt->expr = get<Expression>().accept1( node->expr );
    282284                return stmtPostamble( stmt, node );
    283285        }
     
    508510        TypeSubstitution * convertTypeSubstitution(const ast::TypeSubstitution * src) {
    509511
     512                if (!src) return nullptr;
     513
    510514                TypeSubstitution *rslt = new TypeSubstitution();
    511515
     
    19021906        virtual void visit( ImplicitCtorDtorStmt * old ) override final {
    19031907                if ( inCache( old ) ) return;
    1904                 this->node = new ast::ImplicitCtorDtorStmt(
    1905                         old->location,
    1906                         GET_ACCEPT_1(callStmt, Stmt),
     1908                auto stmt = new ast::ImplicitCtorDtorStmt(
     1909                        old->location,
     1910                        nullptr,
    19071911                        GET_LABELS_V(old->labels)
    19081912                );
     1913                this->node = stmt;
    19091914                cache.emplace( old, this->node );
     1915                stmt->callStmt = GET_ACCEPT_1(callStmt, Stmt);
    19101916        }
    19111917
  • src/AST/Node.hpp

    r3ca912a rf685679  
    1010// Created On       : Wed May 8 10:27:04 2019
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Wed May 15 16:02:00 2019
    13 // Update Count     : 3
     12// Last Modified On : Thu May 23 16:00:00 2019
     13// Update Count     : 4
    1414//
    1515
     
    109109        ~ptr_base() { if( node ) _dec(node); }
    110110
     111        ptr_base( const ptr_base & o ) : node(o.node) {
     112                if( node ) _inc(node);
     113        }
     114
     115        ptr_base( ptr_base && o ) : node(o.node) {
     116                if( node ) _inc(node);
     117        }
     118
    111119        template< enum Node::ref_type o_ref_t >
    112120        ptr_base( const ptr_base<node_t, o_ref_t> & o ) : node(o.node) {
     
    122130        ptr_base & operator=( const o_node_t * node ) {
    123131                assign( node ? strict_dynamic_cast<const node_t *>(node) : nullptr );
     132                return *this;
     133        }
     134
     135        ptr_base & operator=( const ptr_base & o ) {
     136                assign(o.node);
     137                return *this;
     138        }
     139
     140        ptr_base & operator=( ptr_base && o ) {
     141                assign(o.node);
    124142                return *this;
    125143        }
  • src/include/cassert

    r3ca912a rf685679  
    99// Author           : Peter A. Buhr
    1010// Created On       : Thu Aug 18 13:19:26 2016
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Aug  1 11:56:01 2017
    13 // Update Count     : 16
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Thu May 23 15:30:00 2017
     13// Update Count     : 17
    1414//
    1515
     
    4343#endif
    4444
    45 template<typename T, typename U>
    46 static inline __attribute__((nonnull)) T strict_dynamic_cast( const U & src ) {
     45enum StrictAllowNull {NonNull, AllowNull};
     46
     47template<typename T, StrictAllowNull nullable = NonNull, typename U>
     48static inline T strict_dynamic_cast( const U & src ) {
     49        if (nullable == AllowNull && src == nullptr) {
     50                return nullptr;
     51        }
    4752        assert(src);
    4853        T ret = dynamic_cast<T>(src);
Note: See TracChangeset for help on using the changeset viewer.