Ejemplo n.º 1
0
        /// <summary>
        /// Compile a function call. Returns true if it's a call to return a value
        /// </summary>
        private static bool CompileFunctionCall(int level, bool debug, NanCodeWriter wr, Node node, Scope parameterNames)
        {
            var funcName = node.Text;

            if (Desugar.NeedsDesugaring(funcName))
            {
                node = Desugar.ProcessNode(funcName, parameterNames, node);
                var frag = Compile(node, level + 1, debug, parameterNames, null, Context.Default);
                wr.Merge(frag);
                return(frag.ReturnsValues);
            }

            wr.Merge(Compile(node, level + 1, debug, parameterNames, null, Context.Default));


            if (debug)
            {
                wr.Comment("// Function : \"" + funcName
                           + "\" with " + node.Children.Count + " parameter(s)");
            }

            if (funcName == "return")
            {
                wr.Return(node.Children.Count);
            }
            else
            {
                wr.FunctionCall(funcName, node.Children.Count);
            }

            return((funcName == "return") && (node.Children.Count > 0)); // is there a value return?
        }