(self)
Build a mapping of `HoldableObject` types to their corresponding
            `ObjectHolder`s. This mapping is used in `InterpreterBase` to automatically
            holderify all returned values from methods and functions.
Build a mapping of `HoldableObject` types to their corresponding
            `ObjectHolder`s. This mapping is used in `InterpreterBase` to automatically
            holderify all returned values from methods and functions.
Build a mapping of HoldableObject types to their corresponding ObjectHolder s . This mapping is used in InterpreterBase to automatically holderify all returned values from methods and functions .
def build_holder_map(self) -> None:
        '''
            Build a mapping of `HoldableObject` types to their corresponding
            `ObjectHolder`s. This mapping is used in `InterpreterBase` to automatically
            holderify all returned values from methods and functions.
        '''
        self.holder_map.update({
            # Primitives
            list: P_OBJ.ArrayHolder,
            dict: P_OBJ.DictHolder,
            int: P_OBJ.IntegerHolder,
            bool: P_OBJ.BooleanHolder,
            str: P_OBJ.StringHolder,
            P_OBJ.MesonVersionString: P_OBJ.MesonVersionStringHolder,

            # Meson types
            mesonlib.File: OBJ.FileHolder,
            build.SharedLibrary: OBJ.SharedLibraryHolder,
            build.StaticLibrary: OBJ.StaticLibraryHolder,
            build.BothLibraries: OBJ.BothLibrariesHolder,
            build.SharedModule: OBJ.SharedModuleHolder,
            build.Executable: OBJ.ExecutableHolder,
            build.Jar: OBJ.JarHolder,
            build.CustomTarget: OBJ.CustomTargetHolder,
            build.CustomTargetIndex: OBJ.CustomTargetIndexHolder,
            build.Generator: OBJ.GeneratorHolder,
            build.GeneratedList: OBJ.GeneratedListHolder,
            build.ExtractedObjects: OBJ.GeneratedObjectsHolder,
            build.RunTarget: OBJ.RunTargetHolder,
            build.AliasTarget: OBJ.AliasTargetHolder,
            build.Headers: OBJ.HeadersHolder,
            build.Man: OBJ.ManHolder,
            build.EmptyDir: OBJ.EmptyDirHolder,
            build.Data: OBJ.DataHolder,
            build.SymlinkData: OBJ.SymlinkDataHolder,
            build.InstallDir: OBJ.InstallDirHolder,
            build.IncludeDirs: OBJ.IncludeDirsHolder,
            build.EnvironmentVariables: OBJ.EnvironmentVariablesHolder,
            compilers.RunResult: compilerOBJ.TryRunResultHolder,
            dependencies.ExternalLibrary: OBJ.ExternalLibraryHolder,
            coredata.UserFeatureOption: OBJ.FeatureOptionHolder,
            envconfig.MachineInfo: OBJ.MachineHolder,
        })

        '''
            Build a mapping of `HoldableObject` base classes to their
            corresponding `ObjectHolder`s. The difference to `self.holder_map`
            is that the keys here define an upper bound instead of requiring an
            exact match.

            The mappings defined here are only used when there was no direct hit
            found in `self.holder_map`.
        '''
        self.bound_holder_map.update({
            dependencies.Dependency: OBJ.DependencyHolder,
            ExternalProgram: OBJ.ExternalProgramHolder,
            compilers.Compiler: compilerOBJ.CompilerHolder,
            ModuleObject: OBJ.ModuleObjectHolder,
            MutableModuleObject: OBJ.MutableModuleObjectHolder,
        })
def build_holder_map ( self ) -> None : self . holder_map . update ( { # Primitives list : P_OBJ . ArrayHolder , dict : P_OBJ . DictHolder , int : P_OBJ . IntegerHolder , bool : P_OBJ . BooleanHolder , str : P_OBJ . StringHolder , P_OBJ . MesonVersionString : P_OBJ . MesonVersionStringHolder , # Meson types mesonlib . File : OBJ . FileHolder , build . SharedLibrary : OBJ . SharedLibraryHolder , build . StaticLibrary : OBJ . StaticLibraryHolder , build . BothLibraries : OBJ . BothLibrariesHolder , build . SharedModule : OBJ . SharedModuleHolder , build . Executable : OBJ . ExecutableHolder , build . Jar : OBJ . JarHolder , build . CustomTarget : OBJ . CustomTargetHolder , build . CustomTargetIndex : OBJ . CustomTargetIndexHolder , build . Generator : OBJ . GeneratorHolder , build . GeneratedList : OBJ . GeneratedListHolder , build . ExtractedObjects : OBJ . GeneratedObjectsHolder , build . RunTarget : OBJ . RunTargetHolder , build . AliasTarget : OBJ . AliasTargetHolder , build . Headers : OBJ . HeadersHolder , build . Man : OBJ . ManHolder , build . EmptyDir : OBJ . EmptyDirHolder , build . Data : OBJ . DataHolder , build . SymlinkData : OBJ . SymlinkDataHolder , build . InstallDir : OBJ . InstallDirHolder , build . IncludeDirs : OBJ . IncludeDirsHolder , build . EnvironmentVariables : OBJ . EnvironmentVariablesHolder , compilers . RunResult : compilerOBJ . TryRunResultHolder , dependencies . ExternalLibrary : OBJ . ExternalLibraryHolder , coredata . UserFeatureOption : OBJ . FeatureOptionHolder , envconfig . MachineInfo : OBJ . MachineHolder , } ) '''
            Build a mapping of `HoldableObject` base classes to their
            corresponding `ObjectHolder`s. The difference to `self.holder_map`
            is that the keys here define an upper bound instead of requiring an
            exact match.

            The mappings defined here are only used when there was no direct hit
            found in `self.holder_map`.
        ''' self . bound_holder_map . update ( { dependencies . Dependency : OBJ . DependencyHolder , ExternalProgram : OBJ . ExternalProgramHolder , compilers . Compiler : compilerOBJ . CompilerHolder , ModuleObject : OBJ . ModuleObjectHolder , MutableModuleObject : OBJ . MutableModuleObjectHolder , } )