Changes in / [d0bacde:6c89ecc]


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/CodeTools/ResolvProtoDump.cc

    rd0bacde r6c89ecc  
    204204                /// ensures type inst names are uppercase
    205205                static void ti_name( const std::string& name, std::stringstream& ss ) {
    206                         // replace built-in wide character types with named types
    207                         if ( name == "char16_t" || name == "char32_t" || name == "wchar_t" ) {
    208                                 ss << "#" << name;
    209                                 return;
    210                         }
    211 
    212                         // strip leading underscore
    213206                        unsigned i = 0;
    214207                        while ( i < name.size() && name[i] == '_' ) { ++i; }
     
    217210                                return;
    218211                        }
    219 
    220                         std::string stripped = name.substr(i);
    221                         // strip trailing "_generic_" from autogen names (avoids some user-generation issues)
    222                         char generic[] = "_generic_"; size_t n_generic = sizeof(generic) - 1;
    223                         if ( stripped.size() >= n_generic
    224                                         && stripped.substr( stripped.size() - n_generic ) == generic ) {
    225                                 stripped.resize( stripped.size() - n_generic );
    226                         }
    227 
    228                         // uppercase first character
    229                         ss << (char)std::toupper( static_cast<unsigned char>(stripped[0]) )
    230                            << (stripped.c_str() + 1);
     212                        ss << (char)std::toupper( static_cast<unsigned char>(name[i]) )
     213                           << (name.c_str() + i + 1);
    231214                }
    232215
     
    414397                        }
    415398
    416                         /// Handle already-resolved variables as type constants
    417                         void previsit( VariableExpr* expr ) {
    418                                 PassVisitor<TypePrinter> tyPrinter{ closed, ss };
    419                                 expr->var->get_type()->accept( tyPrinter );
    420                                 visit_children = false;
    421                         }
    422 
    423399                        /// Calls handled as calls
    424400                        void previsit( UntypedExpr* expr ) {
     
    450426                        }
    451427
    452                         /// Already-resolved calls reduced to their type constant
    453                         void previsit( ApplicationExpr* expr ) {
    454                                 PassVisitor<TypePrinter> tyPrinter{ closed, ss };
    455                                 expr->result->accept( tyPrinter );
     428                        /// Already-resolved calls skipped
     429                        void previsit( ApplicationExpr* ) {
    456430                                visit_children = false;
    457431                        }
     
    558532                                for ( Initializer* it : li->initializers ) {
    559533                                        build( it, ss );
     534                                        ss << ' ';
    560535                                }
    561536                        }
     
    564539                /// Adds an object initializer to the list of expressions
    565540                void build( const std::string& name, Initializer* init, std::stringstream& ss ) {
    566                         ss << "$constructor( &";
     541                        ss << "$constructor( ";
    567542                        rp_name( name, ss );
    568                         ss << ' ';
     543                        ss << "() ";
    569544                        build( init, ss );
    570545                        ss << ')';
     
    701676                }
    702677
    703                 void previsit( AsmStmt* ) {
    704                         // skip asm statements
    705                         visit_children = false;
    706                 }
    707 
    708678                void previsit( Expression* expr ) {
    709679                        std::stringstream ss;
     
    716686                /// Print non-prelude global declarations for resolv proto
    717687                void printGlobals() const {
    718                         std::cout << "#$ptr<T> $addr T" << std::endl;  // &?
     688                        std::cout << "#ptr<T> $addr T" << std::endl;  // &?
    719689                        int i = (int)BasicType::SignedInt;
    720690                        std::cout << i << " $and " << i << ' ' << i << std::endl;  // ?&&?
Note: See TracChangeset for help on using the changeset viewer.