示例#1
0
        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
            );
        }
示例#2
0
        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
            );
        }