示例#1
0
        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());
        }
示例#2
0
 internal Method(ExternalObjectObj eo, ExternalTypeHandler.IHandler handler)
 {
     _eo      = eo;
     _handler = handler;
 }
示例#3
0
 internal Property(ExternalObjectObj eo, ExternalTypeHandler.IHandler handler)
 {
     _eo      = eo;
     _handler = handler;
 }