public override DynamicMetaObject FallbackGetIndex(DynamicMetaObject target, DynamicMetaObject[] indexes, DynamicMetaObject errorSuggestion) { if (!target.HasValue) return Defer(target); foreach (var index in indexes) if (!index.HasValue) return Defer(index); var targetType = target.LimitType; if (target.GetType() != typeof(TotemType.MetaObject)) { foreach (var type in _context.Types) { if (type.Handles(targetType)) { return type.GetMetaObject(target.Expression, target.Restrictions, target.Value).BindGetIndex(this, indexes); } } } return errorSuggestion ?? TotemProtocol.TypeError( this, "Cannot get index of '{0}'", target ); }
public override DynamicMetaObject FallbackGetMember(DynamicMetaObject target, DynamicMetaObject errorSuggestion) { if (!target.HasValue) return Defer(target); var targetType = target.LimitType; if (target.GetType() != typeof(TotemType.MetaObject)) { foreach (var type in _context.Types) { if (type.Handles(targetType)) return type.GetMetaObject(target.Expression, target.Restrictions, target.Value).BindGetMember(this); } } return errorSuggestion ?? TotemProtocol.TypeError( this, string.Format("{0} has no property {1}", "{0}", Name), target ); }