Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/Box.cc

    rd18540f r474a170  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Mon Dec 19 16:36:00 2022
    13 // Update Count     : 348
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Fri Dec 13 23:40:34 2019
     13// Update Count     : 347
    1414//
    1515
     
    214214                /// sizeof expressions of polymorphic types with the proper variable,
    215215                /// and strips fields from generic struct declarations.
    216                 struct Pass3 final {
     216                struct Pass3 final : public BoxPass, public WithGuards {
     217                        template< typename DeclClass >
     218                        void handleDecl( DeclClass * decl, Type * type );
     219
    217220                        void premutate( ObjectDecl * objectDecl );
    218221                        void premutate( FunctionDecl * functionDecl );
     
    220223                        void premutate( StructDecl * structDecl );
    221224                        void premutate( UnionDecl * unionDecl );
     225                        void premutate( TypeDecl * typeDecl );
     226                        void premutate( PointerType * pointerType );
     227                        void premutate( FunctionType * funcType );
    222228                };
    223229        } // anonymous namespace
     
    18801886////////////////////////////////////////// Pass3 ////////////////////////////////////////////////////
    18811887
     1888                template< typename DeclClass >
     1889                void Pass3::handleDecl( DeclClass * decl, Type * type ) {
     1890                        GuardScope( scopeTyVars );
     1891                        makeTyVarMap( type, scopeTyVars );
     1892                        ScrubTyVars::scrubAll( decl );
     1893                }
     1894
    18821895                void Pass3::premutate( ObjectDecl * objectDecl ) {
    1883                         ScrubTyVars::scrubAll( objectDecl );
     1896                        handleDecl( objectDecl, objectDecl->type );
    18841897                }
    18851898
    18861899                void Pass3::premutate( FunctionDecl * functionDecl ) {
    1887                         ScrubTyVars::scrubAll( functionDecl );
     1900                        handleDecl( functionDecl, functionDecl->type );
    18881901                }
    18891902
    18901903                void Pass3::premutate( TypedefDecl * typedefDecl ) {
    1891                         ScrubTyVars::scrubAll( typedefDecl );
     1904                        handleDecl( typedefDecl, typedefDecl->base );
    18921905                }
    18931906
    18941907                /// Strips the members from a generic aggregate
    1895                 static void stripGenericMembers( AggregateDecl * decl ) {
     1908                void stripGenericMembers(AggregateDecl * decl) {
    18961909                        if ( ! decl->parameters.empty() ) decl->members.clear();
    18971910                }
     
    19031916                void Pass3::premutate( UnionDecl * unionDecl ) {
    19041917                        stripGenericMembers( unionDecl );
     1918                }
     1919
     1920                void Pass3::premutate( TypeDecl * typeDecl ) {
     1921                        addToTyVarMap( typeDecl, scopeTyVars );
     1922                }
     1923
     1924                void Pass3::premutate( PointerType * pointerType ) {
     1925                        GuardScope( scopeTyVars );
     1926                        makeTyVarMap( pointerType, scopeTyVars );
     1927                }
     1928
     1929                void Pass3::premutate( FunctionType * functionType ) {
     1930                        GuardScope( scopeTyVars );
     1931                        makeTyVarMap( functionType, scopeTyVars );
    19051932                }
    19061933        } // anonymous namespace
     
    19121939// compile-command: "make install" //
    19131940// End: //
     1941
Note: See TracChangeset for help on using the changeset viewer.