- 
                Notifications
    
You must be signed in to change notification settings  - Fork 710
 
Description
Context
This issue is the first step of #9638.
In #9638, we want to have extension.Module as the single source of implementation in pybindings, which means that pybindings.PyModule should use extension.Module rather than its own pybindings.Module.
The issue is that pybindings.PyModule is dependent on the method getter from pybindings.Module, which extension.Module do not have. Since we don't want to expose method getter in extension.Module, we have to protect the getter, wrap the functions that is dependent on it and use the protected getter there, ultimately decouple pybindings from a method getter.
Proposal
Although we are decoupling the method getter from pybindings implementation, method itself is still needed for bundled programs. To keep having the method getter while not exposing it, we can create a protected method getter to confine its usage inside a wrapper class inheriting extension.Module that we are about to create.
// In extension.module
class Module {
    // Everything else keeps same
protected:
  /**
   * Get a method by method name.
   *
   * @param[in] method_name The name of the method to get.
   *
   * @returns A Result object containing either a pointer to the requested
   *          method or an error to indicate failure.
   */
  ET_NODISCARD inline runtime::Result<Method*> get_method(
      const std::string& method_name);
}