/// <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(); }