Changes in / [70284830:0a5b683]


Ignore:
Files:
5 added
1 deleted
15 edited

Legend:

Unmodified
Added
Removed
  • Makefile.in

    r70284830 r0a5b683  
    198198        $(top_srcdir)/automake/install-sh \
    199199        $(top_srcdir)/automake/missing INSTALL README automake/compile \
    200         automake/config.guess automake/config.sub automake/depcomp \
    201         automake/install-sh automake/missing automake/ylwrap
     200        automake/config.guess automake/config.sub automake/install-sh \
     201        automake/missing
    202202DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
    203203distdir = $(PACKAGE)-$(VERSION)
  • doc/working/resolver_design.md

    r70284830 r0a5b683  
    9191## Conversion Costs ##
    9292Each possible resolution of an expression has a _cost_ tuple consisting of
    93 the following components:
    94 1. _unsafe_ conversion cost: summed degree of unsafe conversions; unlike CFA03, this is not a simple count of conversions (for symmetry with the safe conversions)
    95 2. _polymorphic unifications_: count of parameters and return values bound to some polymorphic type for boxing
    96 3. _type variables_: number of polymorphic type variables bound
    97 4. negated _type specializations_: Each type assertion specializes the polymorphism, thus decreasing the cost; nested polymorphic types (e.g. `T*`) are also counted as specializations
    98 5. _safe_ conversions: summed degree of safe conversions
    99 6. _qualifier_ conversions: summed degree of qualifier and reference conversions
     93the following components: _unsafe_ conversion cost, _polymorphic_
     94specialization cost, _safe_ conversion cost, a count of _explicit_
     95conversions, and _qualifier_ conversion cost.
    10096These components are lexically-ordered and can be summed element-wise;
    10197summation starts at `(0, 0, 0, 0, 0)`.
    102 
    103 **TODO** update below for consistency with this
    10498
    10599### Lvalue and Qualifier Conversions ###
  • src/CodeGen/CodeGenerator.cc

    r70284830 r0a5b683  
    6464        } // extension
    6565
     66        ostream & CodeGenerator::Indenter::operator()( ostream & output ) const {
     67          return output << string( cg.cur_indent, ' ' );
     68        }
     69
     70        ostream & operator<<( ostream & output, const CodeGenerator::Indenter &indent ) {
     71                return indent( output );
     72        }
     73
    6674        CodeGenerator::LabelPrinter & CodeGenerator::LabelPrinter::operator()( std::list< Label > & l ) {
    6775                labels = &l;
     
    101109        }
    102110
    103         CodeGenerator::CodeGenerator( std::ostream & os, bool pretty, bool genC, bool lineMarks ) : indent( CodeGenerator::tabsize ), insideFunction( false ), output( os ), printLabels( *this ), pretty( pretty ), genC( genC ), lineMarks( lineMarks ) {}
     111        CodeGenerator::CodeGenerator( std::ostream & os, bool pretty, bool genC, bool lineMarks ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ), pretty( pretty ), genC( genC ), lineMarks( lineMarks ) {}
    104112
    105113        string CodeGenerator::mangleName( DeclarationWithType * decl ) {
     
    192200                        output << " {" << endl;
    193201
    194                         ++indent;
     202                        cur_indent += CodeGenerator::tabsize;
    195203                        for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++ ) {
    196204                                output << lineDirective( *i ) << indent;
     
    199207                        } // for
    200208
    201                         --indent;
     209                        cur_indent -= CodeGenerator::tabsize;
    202210
    203211                        output << indent << "}";
     
    229237                        output << " {" << endl;
    230238
    231                         ++indent;
     239                        cur_indent += CodeGenerator::tabsize;
    232240                        for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end();  i++) {
    233241                                ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i );
     
    241249                        } // for
    242250
    243                         --indent;
     251                        cur_indent -= CodeGenerator::tabsize;
    244252
    245253                        output << indent << "}";
     
    753761                std::list< Statement * > & stmts = stmtExpr->get_statements()->get_kids();
    754762                output << lineDirective( stmtExpr) << "({" << std::endl;
    755                 ++indent;
     763                cur_indent += CodeGenerator::tabsize;
    756764                unsigned int numStmts = stmts.size();
    757765                unsigned int i = 0;
     
    776784                        ++i;
    777785                }
    778                 --indent;
     786                cur_indent -= CodeGenerator::tabsize;
    779787                output << indent << "})";
    780788        }
     
    785793                output << "{" << endl;
    786794
    787                 ++indent;
     795                cur_indent += CodeGenerator::tabsize;
    788796
    789797                for ( std::list<Statement *>::iterator i = ks.begin(); i != ks.end();  i++ ) {
     
    796804                        } // if
    797805                } // for
    798                 --indent;
     806                cur_indent -= CodeGenerator::tabsize;
    799807
    800808                output << indent << "}";
     
    864872
    865873                output << "{" << std::endl;
    866                 ++indent;
     874                cur_indent += CodeGenerator::tabsize;
    867875                acceptAll( switchStmt->get_statements(), *this );
    868                 --indent;
     876                cur_indent -= CodeGenerator::tabsize;
    869877                output << indent << "}";
    870878        }
     
    883891                std::list<Statement *> sts = caseStmt->get_statements();
    884892
    885                 ++indent;
     893                cur_indent += CodeGenerator::tabsize;
    886894                for ( std::list<Statement *>::iterator i = sts.begin(); i != sts.end();  i++) {
    887895                        output << indent << printLabels( (*i)->get_labels() )  ;
     
    889897                        output << endl;
    890898                } // for
    891                 --indent;
     899                cur_indent -= CodeGenerator::tabsize;
    892900        }
    893901
  • src/CodeGen/CodeGenerator.h

    r70284830 r0a5b683  
    2323#include "SynTree/Visitor.h"      // for Visitor
    2424#include "SynTree/SynTree.h"      // for Visitor Nodes
    25 
    26 #include "Common/Indenter.h"      // for Indenter
    2725
    2826namespace CodeGen {
     
    102100                template< class Iterator > void genCommaList( Iterator begin, Iterator end );
    103101
     102                struct Indenter {
     103                        Indenter(CodeGenerator &cg) : cg(cg) {}
     104                        CodeGenerator & cg;
     105                        std::ostream& operator()(std::ostream & os) const;
     106                };
     107
    104108                struct LabelPrinter {
    105109                        LabelPrinter(CodeGenerator &cg) : cg(cg), labels( 0 ) {}
     
    124128          private:
    125129                Indenter indent;
     130                int cur_indent;
    126131                bool insideFunction;
    127132                std::ostream &output;
  • src/Common/utility.h

    r70284830 r0a5b683  
    2424#include <sstream>
    2525#include <string>
    26 #include <type_traits>
    2726
    2827#include <cassert>
     
    305304// for ( val : group_iterate( container1, container2, ... ) ) {}
    306305// syntax to have a for each that iterates multiple containers of the same length
    307 // TODO: update to use variadic arguments
     306// TODO: update to use variadic arguments, perfect forwarding
    308307
    309308template< typename T1, typename T2 >
     
    314313
    315314        struct iterator {
    316                 typedef typename std::remove_reference<T1>::type T1val;
    317                 typedef typename std::remove_reference<T2>::type T2val;
    318                 typedef std::tuple<typename T1val::value_type &, typename T2val::value_type &> value_type;
    319                 typedef typename T1val::iterator T1Iter;
    320                 typedef typename T2val::iterator T2Iter;
     315                typedef std::tuple<typename T1::value_type, typename T2::value_type> value_type;
     316                typedef typename T1::iterator T1Iter;
     317                typedef typename T2::iterator T2Iter;
    321318                typedef std::tuple<T1Iter, T2Iter> IterTuple;
    322319                IterTuple it;
     
    326323                }
    327324                bool operator!=( const iterator &other ) const { return it != other.it; }
    328                 value_type operator*() const { return std::tie( *std::get<0>(it), *std::get<1>(it) ); }
     325                value_type operator*() const { return std::make_tuple( *std::get<0>(it), *std::get<1>(it) ); }
    329326        };
    330327        iterator begin() { return iterator( std::get<0>(args).begin(), std::get<1>(args).begin() ); }
     
    336333
    337334template< typename... Args >
    338 group_iterate_t<Args...> group_iterate( Args &&... args ) {
    339         return group_iterate_t<Args...>(std::forward<Args>( args )...);
     335group_iterate_t<Args...> group_iterate( const Args &... args ) {
     336        return group_iterate_t<Args...>(args...);
    340337}
    341338
  • src/ControlStruct/MLEMutator.cc

    r70284830 r0a5b683  
    154154                return switchStmt;
    155155        }
    156 
    157         void addUnused( Statement * stmt, const Label & originalTarget ) {
    158                 // break/continue without a label doesn't need unused attribute
    159                 if ( originalTarget == "" ) return;
    160                 // add unused attribute to the originalTarget of a labelled break/continue
    161                 for ( Label & l : stmt->get_labels() ) {
    162                         // find the label to add unused attribute to
    163                         if ( l == originalTarget ) {
    164                                 for ( Attribute * attr : l.get_attributes() ) {
    165                                         // ensure attribute isn't added twice
    166                                         if ( attr->get_name() == "unused" ) return;
    167                                 }
    168                                 l.get_attributes().push_back( new Attribute( "unused" ) );
    169                                 return;
    170                         }
    171                 }
    172                 assertf( false, "Could not find label '%s' on statement %s", originalTarget.get_name().c_str(), toString( stmt ).c_str() );
    173         }
    174 
    175156
    176157        Statement *MLEMutator::mutate( BranchStmt *branchStmt ) throw ( SemanticError ) {
     
    223204                } // switch
    224205
    225                 // add unused attribute to label to silence warnings
    226                 addUnused( targetEntry->get_controlStructure(), branchStmt->get_originalTarget() );
    227 
    228206                // transform break/continue statements into goto to simplify later handling of branches
    229207                delete branchStmt;
  • src/Makefile.in

    r70284830 r0a5b683  
    219219        SymTab/driver_cfa_cpp-TypeEquality.$(OBJEXT) \
    220220        SymTab/driver_cfa_cpp-Autogen.$(OBJEXT) \
     221        SymTab/driver_cfa_cpp-TreeStruct.$(OBJEXT) \
    221222        SynTree/driver_cfa_cpp-Type.$(OBJEXT) \
    222223        SynTree/driver_cfa_cpp-VoidType.$(OBJEXT) \
     
    517518        SymTab/Indexer.cc SymTab/Mangler.cc SymTab/Validate.cc \
    518519        SymTab/FixFunction.cc SymTab/ImplementationType.cc \
    519         SymTab/TypeEquality.cc SymTab/Autogen.cc SynTree/Type.cc \
    520         SynTree/VoidType.cc SynTree/BasicType.cc \
     520        SymTab/TypeEquality.cc SymTab/Autogen.cc SymTab/TreeStruct.cc \
     521        SynTree/Type.cc SynTree/VoidType.cc SynTree/BasicType.cc \
    521522        SynTree/PointerType.cc SynTree/ArrayType.cc \
    522523        SynTree/FunctionType.cc SynTree/ReferenceToType.cc \
     
    851852SymTab/driver_cfa_cpp-Autogen.$(OBJEXT): SymTab/$(am__dirstamp) \
    852853        SymTab/$(DEPDIR)/$(am__dirstamp)
     854SymTab/driver_cfa_cpp-TreeStruct.$(OBJEXT): SymTab/$(am__dirstamp) \
     855        SymTab/$(DEPDIR)/$(am__dirstamp)
    853856SynTree/$(am__dirstamp):
    854857        @$(MKDIR_P) SynTree
     
    10451048@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-Indexer.Po@am__quote@
    10461049@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-Mangler.Po@am__quote@
     1050@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-TreeStruct.Po@am__quote@
    10471051@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-TypeEquality.Po@am__quote@
    10481052@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-Validate.Po@am__quote@
     
    20972101@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    20982102@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-Autogen.obj `if test -f 'SymTab/Autogen.cc'; then $(CYGPATH_W) 'SymTab/Autogen.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/Autogen.cc'; fi`
     2103
     2104SymTab/driver_cfa_cpp-TreeStruct.o: SymTab/TreeStruct.cc
     2105@am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-TreeStruct.o -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-TreeStruct.Tpo -c -o SymTab/driver_cfa_cpp-TreeStruct.o `test -f 'SymTab/TreeStruct.cc' || echo '$(srcdir)/'`SymTab/TreeStruct.cc
     2106@am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) SymTab/$(DEPDIR)/driver_cfa_cpp-TreeStruct.Tpo SymTab/$(DEPDIR)/driver_cfa_cpp-TreeStruct.Po
     2107@AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='SymTab/TreeStruct.cc' object='SymTab/driver_cfa_cpp-TreeStruct.o' libtool=no @AMDEPBACKSLASH@
     2108@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     2109@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-TreeStruct.o `test -f 'SymTab/TreeStruct.cc' || echo '$(srcdir)/'`SymTab/TreeStruct.cc
     2110
     2111SymTab/driver_cfa_cpp-TreeStruct.obj: SymTab/TreeStruct.cc
     2112@am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-TreeStruct.obj -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-TreeStruct.Tpo -c -o SymTab/driver_cfa_cpp-TreeStruct.obj `if test -f 'SymTab/TreeStruct.cc'; then $(CYGPATH_W) 'SymTab/TreeStruct.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/TreeStruct.cc'; fi`
     2113@am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) SymTab/$(DEPDIR)/driver_cfa_cpp-TreeStruct.Tpo SymTab/$(DEPDIR)/driver_cfa_cpp-TreeStruct.Po
     2114@AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='SymTab/TreeStruct.cc' object='SymTab/driver_cfa_cpp-TreeStruct.obj' libtool=no @AMDEPBACKSLASH@
     2115@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     2116@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-TreeStruct.obj `if test -f 'SymTab/TreeStruct.cc'; then $(CYGPATH_W) 'SymTab/TreeStruct.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/TreeStruct.cc'; fi`
    20992117
    21002118SynTree/driver_cfa_cpp-Type.o: SynTree/Type.cc
  • src/Parser/DeclarationNode.cc

    r70284830 r0a5b683  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Thr Aug 10 17:02:00 2017
    13 // Update Count     : 1021
     12// Last Modified On : Fri Jul 14 16:55:00 2017
     13// Update Count     : 1020
    1414//
    1515
     
    275275        return newnode;
    276276} // DeclarationNode::newEnumConstant
     277
     278DeclarationNode * DeclarationNode::newTreeStruct( Aggregate kind, const string * name, const string * parent, ExpressionNode * actuals, DeclarationNode * fields, bool body ) {
     279        assert( name );
     280        DeclarationNode * newnode = new DeclarationNode;
     281        newnode->type = new TypeData( TypeData::Aggregate );
     282        newnode->type->aggregate.kind = kind;
     283        newnode->type->aggregate.name = name;
     284        newnode->type->aggregate.actuals = actuals;
     285        newnode->type->aggregate.fields = fields;
     286        newnode->type->aggregate.body = body;
     287        newnode->type->aggregate.tagged = true;
     288        newnode->type->aggregate.parent = parent;
     289        return newnode;
     290} // DeclarationNode::newTreeStruct
    277291
    278292DeclarationNode * DeclarationNode::newName( string * name ) {
  • src/Parser/ParseNode.h

    r70284830 r0a5b683  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 13:28:16 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Thu Aug 10 16:54:00 2017
    13 // Update Count     : 789
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Thu Jul 27 12:08:08 2017
     13// Update Count     : 788
    1414//
    1515
     
    248248        static DeclarationNode * newAsmStmt( StatementNode * stmt ); // gcc external asm statement
    249249
     250        // Perhaps this would best fold into newAggragate.
     251        static DeclarationNode * newTreeStruct( Aggregate kind, const std::string * name, const std::string * parent, ExpressionNode * actuals, DeclarationNode * fields, bool body );
     252
    250253        DeclarationNode();
    251254        ~DeclarationNode();
     
    332335
    333336        static UniqueName anonymous;
     337
     338        // Temp to test TreeStruct
     339        const std::string * parent_name;
    334340}; // DeclarationNode
    335341
  • src/Parser/TypeData.cc

    r70284830 r0a5b683  
    1010// Created On       : Sat May 16 15:12:51 2015
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Fri Aug 11 10:50:00 2017
     12// Last Modified On : Wed Aug  9 13:50:00 2017
    1313// Update Count     : 567
    1414//
     
    6363                aggregate.fields = nullptr;
    6464                aggregate.body = false;
     65                aggregate.tagged = false;
     66                aggregate.parent = nullptr;
    6567                break;
    6668          case AggregateInst:
     
    121123                delete aggregate.actuals;
    122124                delete aggregate.fields;
     125                delete aggregate.parent;
    123126                // delete aggregate;
    124127                break;
     
    621624        switch ( td->aggregate.kind ) {
    622625          case DeclarationNode::Struct:
     626                if ( td->aggregate.tagged ) {
     627                        at = new StructDecl( *td->aggregate.name, td->aggregate.parent, attributes, linkage );
     628                        buildForall( td->aggregate.params, at->get_parameters() );
     629                        break;
     630                }
    623631          case DeclarationNode::Coroutine:
    624632          case DeclarationNode::Monitor:
  • src/ResolvExpr/CurrentObject.cc

    r70284830 r0a5b683  
    1919#include "CurrentObject.h"
    2020
    21 #include "Common/Indenter.h"
    22 
    2321#include "SynTree/Declaration.h"
    2422#include "SynTree/Initializer.h"
     
    4745                        assertf( false, "unhandled type on getConstValue %s", toString( constExpr->get_result() ).c_str() ); // xxx - might be semantic error
    4846                }
     47        }
     48
     49        struct Indenter {
     50                static const int amt = 2;
     51                unsigned int indent = 0;
     52
     53                Indenter & operator+=(int nlevels) { indent += amt*nlevels; return *this; }
     54                Indenter & operator-=(int nlevels) { indent -= amt*nlevels; return *this; }
     55                Indenter operator+(int nlevels) { Indenter indenter = *this; return indenter += nlevels; }
     56                Indenter operator-(int nlevels) { Indenter indenter = *this; return indenter -= nlevels; }
     57                Indenter & operator++() { return *this += 1; }
     58                Indenter & operator--() { return *this -= 1; }
     59        };
     60        std::ostream & operator<<( std::ostream & out, Indenter & indent ) {
     61                return out << std::string(indent.indent, ' ');
    4962        }
    5063
  • src/ResolvExpr/CurrentObject.h

    r70284830 r0a5b683  
    2424        class MemberIterator;
    2525
    26         // TODO: memory management of MemberIterators
    2726        class CurrentObject {
    2827        public:
  • src/SymTab/module.mk

    r70284830 r0a5b683  
    1111## Created On       : Mon Jun  1 17:49:17 2015
    1212## Last Modified By : Andrew Beach
    13 ## Last Modified On : Thr Aug 10 16:08:00 2017
    14 ## Update Count     : 4
     13## Last Modified On : Wed Jul 12 13:06:00 2017
     14## Update Count     : 3
    1515###############################################################################
    1616
     
    2121       SymTab/ImplementationType.cc \
    2222       SymTab/TypeEquality.cc \
    23        SymTab/Autogen.cc
     23       SymTab/Autogen.cc \
     24       SymTab/TreeStruct.cc
  • src/SynTree/Declaration.h

    r70284830 r0a5b683  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Fri Aug 11 10:20:00 2017
    13 // Update Count     : 127
     12// Last Modified On : Wed Aug  9 14:45:00 2017
     13// Update Count     : 126
    1414//
    1515
     
    269269        typedef AggregateDecl Parent;
    270270  public:
    271         StructDecl( const std::string &name, DeclarationNode::Aggregate kind = DeclarationNode::Struct, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage ), kind( kind ) {}
    272         StructDecl( const StructDecl &other ) : Parent( other ), kind( other.kind ) {}
     271        StructDecl( const std::string &name, DeclarationNode::Aggregate kind = DeclarationNode::Struct, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage ), kind( kind ), tagged( false ), parent_name( "" ) {}
     272        StructDecl( const std::string &name, const std::string *parent, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage ), kind( DeclarationNode::Struct ), tagged( true ), parent_name( parent ? *parent : "" ) {}
     273        StructDecl( const StructDecl &other ) : Parent( other ) {}
    273274
    274275        bool is_coroutine() { return kind == DeclarationNode::Coroutine; }
     
    276277        bool is_thread() { return kind == DeclarationNode::Thread; }
    277278
     279        // Tagged/Tree Structure Excetion
     280        bool get_tagged() { return tagged; }
     281        void set_tagged( bool newValue ) { tagged = newValue; }
     282        bool has_parent() { return parent_name != ""; }
     283        std::string get_parentName() { return parent_name; }
     284
    278285        virtual StructDecl *clone() const { return new StructDecl( *this ); }
    279286        virtual void accept( Visitor &v ) { v.visit( this ); }
     
    282289        DeclarationNode::Aggregate kind;
    283290        virtual std::string typeString() const;
     291
     292        bool tagged;
     293        std::string parent_name;
    284294};
    285295
  • src/tests/pybin/tools.py

    r70284830 r0a5b683  
    8585                                "--unchanged-group-format='%%=' \\"
    8686                                "--changed-group-format='\t\texpected :\n"
    87                                 "%%<"
     87                                "%%<\n"
    8888                                "\t\tgot :\n"
    89                                 "%%>\n' \\\n"
     89                                "%%>' \\\n"
    9090                                "--new-line-format='\t\t%%dn\t%%L' \\\n"
    9191                                "--old-line-format='\t\t%%dn\t%%L' \\\n"
     
    9494
    9595        # fetch return code and error from the diff command
    96         return sh(diff_cmd % (lhs, rhs), dry_run, False)
     96        return sh(diff_cmd % (lhs, rhs), dry_run, False)       
Note: See TracChangeset for help on using the changeset viewer.