[Ironruby-core] IronRuby and MarkLogic

N. F. lists at ruby-forum.com
Fri Nov 30 09:30:25 EST 2007


John Messerly wrote:
> 
> If you're up for diving into IronRuby's method binding logic, the place 
> to put a breakpoint is in ironruby/runtime/RubyActionBinder.cs, 
> MakeRuleForInvokeMember, in particular the line:
> 
>     RubyMethodBase method = ec.ResolveMethod(target, action.Name);
> 
> At some point we'll hit that with action.Name == "NewSession". Then step 
> into ResolveMethod and see what happens. It should eventually get to 
> RubyClass.TryGetClrMember with name == "NewSession". But maybe it gets 
> lost somewhere along the way...
> 
> - John

Thanks John...I took up the task and here is what I found out (the most 
important point is the last one - in uppercase - see below:

- calls
GetImmediateClassOf(target).ResolveInstanceMethod(name);
- target has only non-public members

- module is null, so it calls
RubyClass result = TryGetInstanceSingletonOf(obj, out data);

- calls
data = TryGetInstanceData(obj);
- obj (Marklogic.Xcc.Impl.ContentSourceImpl) is null inside of that

- calls
TryGetData(object key)

-eventually returns from TryGetInstanceData with result = null

- calls
GetClassOf(obj, data);

- AND HERE IS THE PROBLEM...I think...
- inside RubyModule.cs (line 481):
// skip lookup on types that are not visible or interfaces:
if (_tracker != null && _tracker.Type.IsVisible && 
!_tracker.Type.IsInterface) {
  return TryGetClrMember(_tracker.Type, name, out method);
}
...this if returns false and it never calls TryGetClrMember!

- Nivaldo

-- 
Posted via http://www.ruby-forum.com/.


More information about the Ironruby-core mailing list