Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Convert.cpp

    r043a5b6 rd76c588  
    1010// Created On       : Thu May 09 15::37::05 2019
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Wed May 29 11:05:00 2019
    13 // Update Count     : 8
     12// Last Modified On : Tue May 28 12:00:00 2019
     13// Update Count     : 7
    1414//
    1515
     
    2525#include "AST/TypeSubstitution.hpp"
    2626
    27 #include "SymTab/Autogen.h"
    2827#include "SynTree/Attribute.h"
    2928#include "SynTree/Declaration.h"
    3029#include "SynTree/TypeSubstitution.h"
    31 
    32 #include "Validate/FindSpecialDecls.h"
    3330
    3431//================================================================================================
     
    4542
    4643//================================================================================================
    47 namespace {
    48 
    49 // This is to preserve the FindSpecialDecls hack. It does not (and perhaps should not)
    50 // allow us to use the same stratagy in the new ast.
    51 ast::FunctionDecl * dereferenceOperator = nullptr;
    52 ast::StructDecl   * dtorStruct = nullptr;
    53 ast::FunctionDecl * dtorStructDestroy = nullptr;
    54 
    55 }
    56 
    57 //================================================================================================
    5844class ConverterNewToOld : public ast::Visitor {
    5945        BaseSyntaxNode * node = nullptr;
     
    7763                std::list< T * > acceptL( const U & container ) {
    7864                        std::list< T * > ret;
    79                         for (auto ptr : container ) {
     65                        for ( auto ptr : container ) {
    8066                                ret.emplace_back( accept1( ptr ) );
    8167                        }
     
    173159                );
    174160                decl->withExprs = get<Expression>().acceptL( node->withExprs );
    175                 if ( dereferenceOperator == node ) {
    176                         Validate::dereferenceOperator = decl;
    177                 }
    178                 if ( dtorStructDestroy == node ) {
    179                         Validate::dtorStructDestroy = decl;
    180                 }
    181161                return declWithTypePostamble( decl, node );
    182162        }
     
    234214                        LinkageSpec::Spec( node->linkage.val )
    235215                );
    236 
    237                 if ( dtorStruct == node ) {
    238                         Validate::dtorStruct = decl;
    239                 }
    240 
    241216                return aggregatePostamble( decl, node );
    242217        }
     
    896871                );
    897872
     873                rslt->tempDecls = get<ObjectDecl>().acceptL(node->tempDecls);
     874                rslt->returnDecls = get<ObjectDecl>().acceptL(node->returnDecls);
     875                rslt->dtors = get<Expression>().acceptL(node->dtors);
     876
    898877                auto expr = visitBaseExpr( node, rslt );
    899878                this->node = expr;
     
    14531432                };
    14541433                cache.emplace( old, decl );
     1434                decl->withExprs = GET_ACCEPT_V(withExprs, Expr);
    14551435                decl->scopeLevel = old->scopeLevel;
    14561436                decl->mangleName = old->mangleName;
     
    14601440
    14611441                this->node = decl;
    1462 
    1463                 if ( Validate::dereferenceOperator == old ) {
    1464                         dereferenceOperator = decl;
    1465                 }
    1466 
    1467                 if ( Validate::dtorStructDestroy == old ) {
    1468                         dtorStructDestroy = decl;
    1469                 }
    14701442        }
    14711443
     
    14891461
    14901462                this->node = decl;
    1491 
    1492                 if ( Validate::dtorStruct == old ) {
    1493                         dtorStruct = decl;
    1494                 }
    14951463        }
    14961464
     
    15171485        virtual void visit( EnumDecl * old ) override final {
    15181486                if ( inCache( old ) ) return;
    1519                 auto decl = new ast::EnumDecl(
     1487                auto decl = new ast::UnionDecl(
    15201488                        old->location,
    15211489                        old->name,
     
    15371505        virtual void visit( TraitDecl * old ) override final {
    15381506                if ( inCache( old ) ) return;
    1539                 auto decl = new ast::TraitDecl(
     1507                auto decl = new ast::UnionDecl(
    15401508                        old->location,
    15411509                        old->name,
     
    22982266                );
    22992267
     2268                rslt->tempDecls = GET_ACCEPT_V(tempDecls, ObjectDecl);
     2269                rslt->returnDecls = GET_ACCEPT_V(returnDecls, ObjectDecl);
     2270                rslt->dtors = GET_ACCEPT_V(dtors, Expr);
     2271
    23002272                this->node = visitBaseExpr( old, rslt );
    23012273        }
Note: See TracChangeset for help on using the changeset viewer.