Skip to content

Commit 3cf9aec

Browse files
accept TInterp_t to resolve interpreter
When it is not possible to resolve the interpreter with other information
1 parent 9e2eb5b commit 3cf9aec

File tree

2 files changed

+212
-121
lines changed

2 files changed

+212
-121
lines changed

include/CppInterOp/CppInterOp.h

Lines changed: 47 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ CPPINTEROP_API std::string GetQualifiedCompleteName(TCppScope_t klass);
389389
CPPINTEROP_API std::vector<TCppScope_t> GetUsingNamespaces(TCppScope_t scope);
390390

391391
/// Gets the global scope of the whole C++ instance.
392-
CPPINTEROP_API TCppScope_t GetGlobalScope();
392+
CPPINTEROP_API TCppScope_t GetGlobalScope(TInterp_t interp = nullptr);
393393

394394
/// Strips the typedef and returns the underlying class, and if the
395395
/// underlying decl is not a class it returns the input unchanged.
@@ -398,18 +398,28 @@ CPPINTEROP_API TCppScope_t GetUnderlyingScope(TCppScope_t scope);
398398
/// Gets the namespace or class (by stripping typedefs) for the name
399399
/// passed as a parameter, and if the parent is not passed,
400400
/// then global scope will be assumed.
401+
/// Looks up the name in parent, if parent is nullptr,
402+
/// interp is used to select the interpreter if multiple in-use.
403+
/// interp is ignored if parent is non-null.
401404
CPPINTEROP_API TCppScope_t GetScope(const std::string& name,
402-
TCppScope_t parent = nullptr);
405+
TCppScope_t parent = nullptr,
406+
TInterp_t interp = nullptr);
403407

404408
/// When the namespace is known, then the parent doesn't need
405409
/// to be specified. This will probably be phased-out in
406410
/// future versions of the interop library.
407-
CPPINTEROP_API TCppScope_t GetScopeFromCompleteName(const std::string& name);
411+
/// interp is used to select the interpreter if multiple in-use.
412+
CPPINTEROP_API TCppScope_t GetScopeFromCompleteName(const std::string& name,
413+
TInterp_t interp = nullptr);
408414

409415
/// This function performs a lookup within the specified parent,
410416
/// a specific named entity (functions, enums, etcetera).
417+
/// Looks up the name in parent, if parent is nullptr,
418+
/// interp is used to select the interpreter if multiple in-use.
419+
/// interp is ignored if parent is non-null.
411420
CPPINTEROP_API TCppScope_t GetNamed(const std::string& name,
412-
TCppScope_t parent = nullptr);
421+
TCppScope_t parent = nullptr,
422+
TInterp_t interp = nullptr);
413423

414424
/// Gets the parent of the scope that is passed as a parameter.
415425
CPPINTEROP_API TCppScope_t GetParentScope(TCppScope_t scope);
@@ -493,8 +503,12 @@ CPPINTEROP_API bool IsTemplatedFunction(TCppFunction_t func);
493503

494504
/// This function performs a lookup to check if there is a
495505
/// templated function of that type.
506+
/// Looks up the name in parent, if parent is nullptr,
507+
/// interp is used to select the interpreter if multiple in-use.
508+
/// interp is ignored if parent is non-null.
496509
CPPINTEROP_API bool ExistsFunctionTemplate(const std::string& name,
497-
TCppScope_t parent = nullptr);
510+
TCppScope_t parent = nullptr,
511+
TInterp_t interp = nullptr);
498512

499513
/// Sets a list of all the constructor for a scope/class that is
500514
/// supplied as a parameter.
@@ -542,7 +556,8 @@ CPPINTEROP_API bool IsDestructor(TCppConstFunction_t method);
542556
CPPINTEROP_API bool IsStaticMethod(TCppConstFunction_t method);
543557

544558
///\returns the address of the function given its potentially mangled name.
545-
CPPINTEROP_API TCppFuncAddr_t GetFunctionAddress(const char* mangled_name);
559+
CPPINTEROP_API TCppFuncAddr_t GetFunctionAddress(const char* mangled_name,
560+
TInterp_t interp = nullptr);
546561

547562
///\returns the address of the function given its function declaration.
548563
CPPINTEROP_API TCppFuncAddr_t GetFunctionAddress(TCppFunction_t method);
@@ -643,7 +658,9 @@ CPPINTEROP_API TCppType_t GetCanonicalType(TCppType_t type);
643658

644659
/// Used to either get the built-in type of the provided string, or
645660
/// use the name to lookup the actual type.
646-
CPPINTEROP_API TCppType_t GetType(const std::string& type);
661+
/// interp is used to select the interpreter if multiple in-use.
662+
CPPINTEROP_API TCppType_t GetType(const std::string& type,
663+
TInterp_t interp = nullptr);
647664

648665
///\returns the complex of the provided type.
649666
CPPINTEROP_API TCppType_t GetComplexType(TCppType_t element_type);
@@ -727,10 +744,10 @@ CPPINTEROP_API void UseExternalInterpreter(TInterp_t I);
727744

728745
/// Adds a Search Path for the Interpreter to get the libraries.
729746
CPPINTEROP_API void AddSearchPath(const char* dir, bool isUser = true,
730-
bool prepend = false);
747+
bool prepend = false, TInterp_t I = nullptr);
731748

732749
/// Returns the resource-dir path (for headers).
733-
CPPINTEROP_API const char* GetResourceDir();
750+
CPPINTEROP_API const char* GetResourceDir(TInterp_t I = nullptr);
734751

735752
/// Uses the underlying clang compiler to detect the resource directory.
736753
/// In essence calling clang -print-resource-dir and checks if it ends with
@@ -751,46 +768,52 @@ DetectSystemCompilerIncludePaths(std::vector<std::string>& Paths,
751768

752769
/// Secondary search path for headers, if not found using the
753770
/// GetResourceDir() function.
754-
CPPINTEROP_API void AddIncludePath(const char* dir);
771+
CPPINTEROP_API void AddIncludePath(const char* dir, TInterp_t I = nullptr);
755772

756773
// Gets the currently used include paths
757774
///\param[out] IncludePaths - the list of include paths
758775
///
759776
CPPINTEROP_API void GetIncludePaths(std::vector<std::string>& IncludePaths,
760777
bool withSystem = false,
761-
bool withFlags = false);
778+
bool withFlags = false,
779+
TInterp_t I = nullptr);
762780

763781
/// Only Declares a code snippet in \c code and does not execute it.
764782
///\returns 0 on success
765-
CPPINTEROP_API int Declare(const char* code, bool silent = false);
783+
CPPINTEROP_API int Declare(const char* code, bool silent = false,
784+
TInterp_t I = nullptr);
766785

767786
/// Declares and executes a code snippet in \c code.
768787
///\returns 0 on success
769-
CPPINTEROP_API int Process(const char* code);
788+
CPPINTEROP_API int Process(const char* code, TInterp_t I = nullptr);
770789

771790
/// Declares, executes and returns the execution result as a intptr_t.
772791
///\returns the expression results as a intptr_t.
773-
CPPINTEROP_API intptr_t Evaluate(const char* code, bool* HadError = nullptr);
792+
CPPINTEROP_API intptr_t Evaluate(const char* code, bool* HadError = nullptr,
793+
TInterp_t I = nullptr);
774794

775795
/// Looks up the library if access is enabled.
776796
///\returns the path to the library.
777-
CPPINTEROP_API std::string LookupLibrary(const char* lib_name);
797+
CPPINTEROP_API std::string LookupLibrary(const char* lib_name,
798+
TInterp_t I = nullptr);
778799

779800
/// Finds \c lib_stem considering the list of search paths and loads it by
780801
/// calling dlopen.
781802
/// \returns true on success.
782-
CPPINTEROP_API bool LoadLibrary(const char* lib_stem, bool lookup = true);
803+
CPPINTEROP_API bool LoadLibrary(const char* lib_stem, bool lookup = true,
804+
TInterp_t I = nullptr);
783805

784806
/// Finds \c lib_stem considering the list of search paths and unloads it by
785807
/// calling dlclose.
786808
/// function.
787-
CPPINTEROP_API void UnloadLibrary(const char* lib_stem);
809+
CPPINTEROP_API void UnloadLibrary(const char* lib_stem, TInterp_t I = nullptr);
788810

789811
/// Scans all libraries on the library search path for a given potentially
790812
/// mangled symbol name.
791813
///\returns the path to the first library that contains the symbol definition.
792-
CPPINTEROP_API std::string
793-
SearchLibrariesForSymbol(const char* mangled_name, bool search_system /*true*/);
814+
CPPINTEROP_API std::string SearchLibrariesForSymbol(const char* mangled_name,
815+
bool search_system /*true*/,
816+
TInterp_t I = nullptr);
794817

795818
/// Inserts or replaces a symbol in the JIT with the one provided. This is
796819
/// useful for providing our own implementations of facilities such as printf.
@@ -801,7 +824,8 @@ SearchLibrariesForSymbol(const char* mangled_name, bool search_system /*true*/);
801824
///
802825
///\returns true on failure.
803826
CPPINTEROP_API bool InsertOrReplaceJitSymbol(const char* linker_mangled_name,
804-
uint64_t address);
827+
uint64_t address,
828+
TInterp_t I = nullptr);
805829

806830
/// Tries to load provided objects in a string format (prettyprint).
807831
CPPINTEROP_API std::string ObjToString(const char* type, void* obj);
@@ -838,9 +862,10 @@ GetClassTemplateInstantiationArgs(TCppScope_t templ_instance,
838862

839863
/// Instantiates a function template from a given string representation. This
840864
/// function also does overload resolution.
865+
///\param[in] interp - is used to select the interpreter if multiple in-use.
841866
///\returns the instantiated function template declaration.
842-
CPPINTEROP_API TCppFunction_t
843-
InstantiateTemplateFunctionFromString(const char* function_template);
867+
CPPINTEROP_API TCppFunction_t InstantiateTemplateFunctionFromString(
868+
const char* function_template, TInterp_t interp = nullptr);
844869

845870
/// Finds best overload match based on explicit template parameters (if any)
846871
/// and argument types.

0 commit comments

Comments
 (0)