private PExpr FindOrCreateMethod(IAccessorFrame frame, string name, out ExternalTypeHandler.IHandler handler) { handler = null; foreach (var m in _methods) { if (m.Name == name) { return(frame.SetResult(m)); } } ExternalTypeHandler type = _context.FindType(_o.GetType()); if (type == null) { return(frame.SetError($"Unhandled type '{_o.GetType().FullName}'.")); } handler = type.GetHandler(name); if (handler == null) { return(frame.SetError($"Missing member {name} on '{_o.GetType().FullName}'.")); } if (handler.PropertyGetter == null) { var meth = new Method(this, handler); _methods.Add(meth); return(frame.SetResult(meth)); } return(new PExpr()); }
internal Method(ExternalObjectObj eo, ExternalTypeHandler.IHandler handler) { _eo = eo; _handler = handler; }
internal Property(ExternalObjectObj eo, ExternalTypeHandler.IHandler handler) { _eo = eo; _handler = handler; }