Changeset 4ee1efb for src/SynTree


Ignore:
Timestamp:
Oct 26, 2017, 11:23:26 AM (6 years ago)
Author:
Rob Schluntz <rschlunt@…>
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:
136ccd7
Parents:
0b9be4d (diff), 598f50e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
git-author:
Rob Schluntz <rschlunt@…> (10/26/17 10:43:08)
git-committer:
Rob Schluntz <rschlunt@…> (10/26/17 11:23:26)
Message:

Merge branch 'fix-missing-cast-warning' into cleanup-dtors

Location:
src/SynTree
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/ApplicationExpr.cc

    r0b9be4d r4ee1efb  
    5959
    6060ApplicationExpr::ApplicationExpr( const ApplicationExpr &other ) :
    61                 Expression( other ), function( maybeClone( other.function ) ), inferParams( other.inferParams ) {
     61                Expression( other ), function( maybeClone( other.function ) ) {
    6262        cloneAll( other.args, args );
    6363}
     
    6666        delete function;
    6767        deleteAll( args );
    68 }
    69 
    70 void printInferParams( const InferredParams & inferParams, std::ostream &os, Indenter indent, int level ) {
    71         if ( ! inferParams.empty() ) {
    72                 os << indent << "with inferred parameters " << level << ":" << std::endl;
    73                 for ( InferredParams::const_iterator i = inferParams.begin(); i != inferParams.end(); ++i ) {
    74                         os << indent+1;
    75                         Declaration::declFromId( i->second.decl )->printShort( os, indent+1 );
    76                         os << std::endl;
    77                         printInferParams( *i->second.inferParams, os, indent+1, level+1 );
    78                 } // for
    79         } // if
    8068}
    8169
     
    8876                printAll( args, os, indent+1 );
    8977        } // if
    90         printInferParams( inferParams, os, indent+1, 0 );
    9178        Expression::print( os, indent );
    9279}
  • src/SynTree/Expression.cc

    r0b9be4d r4ee1efb  
    3333#include "GenPoly/Lvalue.h"
    3434
     35void printInferParams( const InferredParams & inferParams, std::ostream &os, Indenter indent, int level ) {
     36        if ( ! inferParams.empty() ) {
     37                os << indent << "with inferred parameters " << level << ":" << std::endl;
     38                for ( InferredParams::const_iterator i = inferParams.begin(); i != inferParams.end(); ++i ) {
     39                        os << indent+1;
     40                        Declaration::declFromId( i->second.decl )->printShort( os, indent+1 );
     41                        os << std::endl;
     42                        printInferParams( *i->second.inferParams, os, indent+1, level+1 );
     43                } // for
     44        } // if
     45}
     46
    3547Expression::Expression() : result( 0 ), env( 0 ) {}
    3648
    37 Expression::Expression( const Expression &other ) : BaseSyntaxNode( other ), result( maybeClone( other.result ) ), env( maybeClone( other.env ) ), extension( other.extension ) {
     49Expression::Expression( const Expression &other ) : BaseSyntaxNode( other ), result( maybeClone( other.result ) ), env( maybeClone( other.env ) ), extension( other.extension ), inferParams( other.inferParams ) {
    3850}
    3951
     
    4456
    4557void Expression::print( std::ostream &os, Indenter indent ) const {
     58        printInferParams( inferParams, os, indent+1, 0 );
     59
    4660        if ( env ) {
    4761                os << std::endl << indent << "... with environment:" << std::endl;
  • src/SynTree/Expression.h

    r0b9be4d r4ee1efb  
    3131
    3232
    33 /// Expression is the root type for all expressions
    34 class Expression : public BaseSyntaxNode{
    35   public:
    36         Type * result;
    37         TypeSubstitution * env;
    38         bool extension = false;
    39 
    40         Expression();
    41         Expression( const Expression & other );
    42         virtual ~Expression();
    43 
    44         Type *& get_result() { return result; }
    45         const Type * get_result() const { return result; }
    46         void set_result( Type * newValue ) { result = newValue; }
    47 
    48         TypeSubstitution * get_env() const { return env; }
    49         void set_env( TypeSubstitution * newValue ) { env = newValue; }
    50         bool get_extension() const { return extension; }
    51         Expression * set_extension( bool exten ) { extension = exten; return this; }
    52 
    53         virtual Expression * clone() const override = 0;
    54         virtual void accept( Visitor & v ) override = 0;
    55         virtual Expression * acceptMutator( Mutator & m ) override = 0;
    56         virtual void print( std::ostream & os, Indenter indent = {} ) const override;
    57 };
    58 
    5933struct ParamEntry;
    6034
     
    7347        Type * actualType;
    7448        Type * formalType;
    75         Expression* expr;
     49        Expression * expr;
    7650        std::unique_ptr< InferredParams > inferParams;
     51};
     52
     53/// Expression is the root type for all expressions
     54class Expression : public BaseSyntaxNode {
     55  public:
     56        Type * result;
     57        TypeSubstitution * env;
     58        bool extension = false;
     59        InferredParams inferParams;
     60
     61        Expression();
     62        Expression( const Expression & other );
     63        virtual ~Expression();
     64
     65        Type *& get_result() { return result; }
     66        const Type * get_result() const { return result; }
     67        void set_result( Type * newValue ) { result = newValue; }
     68
     69        TypeSubstitution * get_env() const { return env; }
     70        void set_env( TypeSubstitution * newValue ) { env = newValue; }
     71        bool get_extension() const { return extension; }
     72        Expression * set_extension( bool exten ) { extension = exten; return this; }
     73
     74        InferredParams & get_inferParams() { return inferParams; }
     75
     76        virtual Expression * clone() const override = 0;
     77        virtual void accept( Visitor & v ) override = 0;
     78        virtual Expression * acceptMutator( Mutator & m ) override = 0;
     79        virtual void print( std::ostream & os, Indenter indent = {} ) const override;
    7780};
    7881
     
    8386        Expression * function;
    8487        std::list<Expression *> args;
    85         InferredParams inferParams;
    8688
    8789        ApplicationExpr( Expression * function, const std::list<Expression *> & args = std::list< Expression * >() );
     
    9294        void set_function( Expression * newValue ) { function = newValue; }
    9395        std::list<Expression *>& get_args() { return args; }
    94         InferredParams & get_inferParams() { return inferParams; }
    9596
    9697        virtual ApplicationExpr * clone() const { return new ApplicationExpr( * this ); }
  • src/SynTree/Type.h

    r0b9be4d r4ee1efb  
    298298        void set_isStatic( bool newValue ) { isStatic = newValue; }
    299299
    300         virtual bool isComplete() const override { return ! isVarLen; }
     300        // array types are complete if they have a dimension expression or are
     301        // VLAs ('*' in parameter declaration), and incomplete otherwise.
     302        // See 6.7.6.2
     303        virtual bool isComplete() const override { return dimension || isVarLen; }
    301304
    302305        virtual ArrayType *clone() const override { return new ArrayType( *this ); }
Note: See TracChangeset for help on using the changeset viewer.