Exemple #1
0
        /// <summary>
        ///   Generates the code for a BinaryExpression node.
        /// </summary>
        /// <param name = "be">The BinaryExpression node.</param>
        /// <returns>String containing C# code for BinaryExpression be.</returns>
        private string GenerateBinaryExpression(BinaryExpression be, bool isUnaryExpression, string addition)
        {
            string retstr = "";

            bool marc = FuncCallsMarc();

            if (be.ExpressionSymbol.Equals("&&") || be.ExpressionSymbol.Equals("||"))
            {
                // special case handling for logical and/or, see Mantis 3174
                retstr += "((LSL_Types.LSLInteger)( " +
                          (isUnaryExpression ? addition : "") +
                          "(bool)(";
                retstr += GenerateNode((SYMBOL) be.kids.Pop());
                retstr += "))";
                retstr += Generate(String.Format(" {0} ", be.ExpressionSymbol.Substring(0, 1)), be);
                retstr += "((LSL_Types.LSLInteger)((bool)(";
                foreach (SYMBOL kid in be.kids)
                    retstr += GenerateNode(kid);
                retstr += "))))";
            }
            else if (be.ExpressionSymbol.Equals("!=") || be.ExpressionSymbol.Equals("=="))
            {
                retstr += "((LSL_Types.LSLInteger)(";
                retstr += GenerateNode((SYMBOL) be.kids.Pop());
                retstr += Generate(String.Format(" {0} ", be.ExpressionSymbol), be);
                foreach (SYMBOL kid in be.kids)
                    retstr += GenerateNode(kid);
                retstr += "))";
            }
            else
            {
                /*ObjectList kids = new ObjectList ();
                for (int i = be.kids.Count-1; i >= 0; i--)
                {
                    kids.Add(be.kids[i]);
                }*/
                bool weSetTheAdditionExpression = false;
                if (be.ExpressionSymbol == "+" && !isAdditionExpression)
                {
                    weSetTheAdditionExpression = true;
                    isAdditionExpression = true;
                }
                retstr += GenerateNode((SYMBOL) be.kids.Pop());
                if (weSetTheAdditionExpression)
                    isAdditionExpression = false;
                if (!(retstr == "()" || retstr == ""))
                    retstr += Generate(String.Format(" {0} ", be.ExpressionSymbol), be);
                else
                    //Something was removed, we need to remove the operator here!
                    retstr = "";
                foreach (SYMBOL kid in be.kids)
                    retstr += GenerateNode(kid);
            }

            return DumpFunc(marc) + retstr + DumpAfterFunc(marc);
        }
        /// <summary>
        /// Generates the code for a BinaryExpression node.
        /// </summary>
        /// <param name="be">The BinaryExpression node.</param>
        /// <returns>String containing C# code for BinaryExpression be.</returns>
        private string GenerateBinaryExpression(BinaryExpression be)
        {
            string retstr = "";

            bool marc = FuncCallsMarc();

            if (be.ExpressionSymbol.Equals("&&") || be.ExpressionSymbol.Equals("||"))
            {
                // special case handling for logical and/or, see Mantis 3174
                retstr += "((bool)(";
                retstr += GenerateNode((SYMBOL)be.kids.Pop());
                retstr += "))";
                retstr += Generate(String.Format(" {0} ", be.ExpressionSymbol.Substring(0, 1)), be);
                retstr += "((bool)(";
                foreach (SYMBOL kid in be.kids)
                    retstr += GenerateNode(kid);
                retstr += "))";
            }
            else
            {
                retstr += GenerateNode((SYMBOL)be.kids.Pop());
                retstr += Generate(String.Format(" {0} ", be.ExpressionSymbol), be);
                foreach (SYMBOL kid in be.kids)
                    retstr += GenerateNode(kid);
            }

            return DumpFunc(marc) + retstr.ToString();
        }
        /// <summary>
        /// Generates the code for a BinaryExpression node.
        /// </summary>
        /// <param name="be">The BinaryExpression node.</param>
        /// <returns>String containing C# code for BinaryExpression be.</returns>
        private string GenerateBinaryExpression(BinaryExpression be)
        {
            StringBuilder retstr = new StringBuilder();

            if (be.ExpressionSymbol.Equals("&&") || be.ExpressionSymbol.Equals("||"))
            {
                // special case handling for logical and/or, see Mantis 3174
                retstr.Append("((bool)(");
                retstr.Append(GenerateNode((SYMBOL)be.kids.Pop()));
                retstr.Append("))");
                retstr.Append(Generate(String.Format(" {0} ", be.ExpressionSymbol.Substring(0,1)), be));
                retstr.Append("((bool)(");
                foreach (SYMBOL kid in be.kids)
                    retstr.Append(GenerateNode(kid));
                retstr.Append("))");
            }
            else
            {
                retstr.Append(GenerateNode((SYMBOL)be.kids.Pop()));
                retstr.Append(Generate(String.Format(" {0} ", be.ExpressionSymbol), be));
                foreach (SYMBOL kid in be.kids)
                    retstr.Append(GenerateNode(kid));
            }

            return retstr.ToString();
        }