Ignore:
Timestamp:
May 17, 2019, 4:01:50 PM (3 years ago)
Author:
Michael Brooks <mlbrooks@…>
Branches:
arm-eh, cleanup-dtors, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr
Children:
f6964ef
Parents:
74dbbf6
Message:

added old-to-new conversion for TypeSubstitution?, within a framework for expressions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Convert.cpp

    r74dbbf6 r172d9342  
    1616#include "Convert.hpp"
    1717
    18 #include "AST/Pass.hpp"
    19 
    2018#include "AST/Attribute.hpp"
    2119#include "AST/Decl.hpp"
     
    2321#include "AST/Init.hpp"
    2422#include "AST/Stmt.hpp"
    25 
     23#include "AST/TypeSubstitution.hpp"
    2624
    2725#include "SynTree/Attribute.h"
    2826#include "SynTree/Declaration.h"
     27#include "SynTree/TypeSubstitution.h"
    2928
    3029//================================================================================================
     
    496495
    497496        const ast::Init * visit( const ast::ConstructorInit * node ) override final {
    498                 (void)node;
    499                 return nullptr;
    500         }
    501 
    502         const ast::Constant * visit( const ast::Constant * node ) override final {
    503497                (void)node;
    504498                return nullptr;
     
    970964        }
    971965
     966        ast::TypeSubstitution * convertTypeSubstitution(const TypeSubstitution * old) {
     967
     968                ast::TypeSubstitution *rslt = new ast::TypeSubstitution();
     969
     970                for (decltype(old->begin()) old_i = old->begin(); old_i != old->end(); old_i++) {
     971                        rslt->add( old_i->first,
     972                                   getAccept1<ast::Type>(old_i->second) );
     973                }
     974
     975                for (decltype(old->beginVar()) old_i = old->beginVar(); old_i != old->endVar(); old_i++) {
     976                        rslt->addVar( old_i->first,
     977                                      getAccept1<ast::Expr>(old_i->second) );
     978                }
     979        }
     980
     981        void convertInferUnion(ast::Expr::InferUnion &nwInferred, InferredParams oldInferParams, const std::vector<UniqueId> &oldResnSlots) {
     982               
     983                (void) nwInferred;
     984                (void) oldInferParams;
     985                (void) oldResnSlots;
     986               
     987                // TODO
     988        }
     989
     990        ast::Expr * visitBaseExpr(Expression * old, ast::Expr * nw) {
     991
     992                nw->result = GET_ACCEPT_1(result, Type);
     993                nw->env    = convertTypeSubstitution(old->env);
     994
     995                nw->extension = old->extension;
     996                convertInferUnion(nw->inferred, old->inferParams, old->resnSlots);
     997
     998                return nw;
     999        }
     1000
    9721001        virtual void visit( ApplicationExpr * ) override final {
    973 
     1002                // TODO
    9741003        }
    9751004
    9761005        virtual void visit( UntypedExpr * ) override final {
    977 
    978         }
    979 
    980         virtual void visit( NameExpr * ) override final {
    981 
     1006                // TODO
     1007        }
     1008
     1009        virtual void visit( NameExpr * old ) override final {
     1010                this->node = visitBaseExpr( old,
     1011                        new ast::NameExpr(
     1012                                old->location,
     1013                                old->get_name()
     1014                        )
     1015                );
    9821016        }
    9831017
    9841018        virtual void visit( CastExpr * ) override final {
    985 
     1019                // TODO ... (rest)
    9861020        }
    9871021
Note: See TracChangeset for help on using the changeset viewer.