Ejemplo n.º 1
0
        ///////////////////////////////////////////////////////////////////////

        public override ReturnCode GetIExecute(
            ICallFrame frame,
            EngineFlags engineFlags,
            string name,
            ArgumentList arguments,
            LookupFlags lookupFlags,
            ref bool ambiguous,
            ref long token,
            ref IExecute execute,
            ref Result error
            )
        {
            if (!Engine.HasGlobalOnly(engineFlags))
            {
                IResolve resolve = null;
                string   tail    = null;

                INamespace @namespace = GetNamespaceForIExecute(
                    frame, name, ref resolve, ref tail, ref error);

                if (@namespace != null)
                {
                    if (resolve != null)
                    {
                        return(resolve.GetIExecute(
                                   frame, engineFlags, tail, arguments, lookupFlags,
                                   ref ambiguous, ref token, ref execute, ref error));
                    }
                    else
                    {
                        Interpreter interpreter = base.Interpreter;

                        if (!NamespaceOps.IsGlobal(interpreter, @namespace))
                        {
                            string qualifiedName =
                                NamespaceOps.MakeQualifiedName(
                                    interpreter, @namespace, name);

                            if (base.GetIExecute(frame,
                                                 engineFlags | EngineFlags.ExactMatch,
                                                 qualifiedName, arguments, lookupFlags,
                                                 ref ambiguous, ref token, ref execute,
                                                 ref error) == ReturnCode.Ok)
                            {
                                return(ReturnCode.Ok);
                            }
                        }
                    }
                }
            }

            return(base.GetIExecute(
                       frame, engineFlags, name, arguments, lookupFlags,
                       ref ambiguous, ref token, ref execute, ref error));
        }