private static bool NeedsParens(AstNode node, JSToken refToken) { bool needsParens = false; // assignments and commas are the only operators that need parens // around them. Conditional is pretty low down the list BinaryOperator binaryOp = node as BinaryOperator; if (binaryOp != null) { OpPrec thisPrecedence = JSScanner.GetOperatorPrecedence(refToken); OpPrec nodePrecedence = JSScanner.GetOperatorPrecedence(binaryOp.OperatorToken); needsParens = (nodePrecedence < thisPrecedence); } return(needsParens); }
private static OpPrec[] InitOperatorsPrec() { OpPrec[] operatorsPrec = new OpPrec[JSToken.LastOperator - JSToken.FirstBinaryOperator + 1]; operatorsPrec[JSToken.Plus - JSToken.FirstBinaryOperator] = OpPrec.precAdditive; operatorsPrec[JSToken.Minus - JSToken.FirstBinaryOperator] = OpPrec.precAdditive; operatorsPrec[JSToken.LogicalOr - JSToken.FirstBinaryOperator] = OpPrec.precLogicalOr; operatorsPrec[JSToken.LogicalAnd - JSToken.FirstBinaryOperator] = OpPrec.precLogicalAnd; operatorsPrec[JSToken.BitwiseOr - JSToken.FirstBinaryOperator] = OpPrec.precBitwiseOr; operatorsPrec[JSToken.BitwiseXor - JSToken.FirstBinaryOperator] = OpPrec.precBitwiseXor; operatorsPrec[JSToken.BitwiseAnd - JSToken.FirstBinaryOperator] = OpPrec.precBitwiseAnd; operatorsPrec[JSToken.Equal - JSToken.FirstBinaryOperator] = OpPrec.precEquality; operatorsPrec[JSToken.NotEqual - JSToken.FirstBinaryOperator] = OpPrec.precEquality; operatorsPrec[JSToken.StrictEqual - JSToken.FirstBinaryOperator] = OpPrec.precEquality; operatorsPrec[JSToken.StrictNotEqual - JSToken.FirstBinaryOperator] = OpPrec.precEquality; operatorsPrec[JSToken.InstanceOf - JSToken.FirstBinaryOperator] = OpPrec.precRelational; operatorsPrec[JSToken.In - JSToken.FirstBinaryOperator] = OpPrec.precRelational; operatorsPrec[JSToken.GreaterThan - JSToken.FirstBinaryOperator] = OpPrec.precRelational; operatorsPrec[JSToken.LessThan - JSToken.FirstBinaryOperator] = OpPrec.precRelational; operatorsPrec[JSToken.LessThanEqual - JSToken.FirstBinaryOperator] = OpPrec.precRelational; operatorsPrec[JSToken.GreaterThanEqual - JSToken.FirstBinaryOperator] = OpPrec.precRelational; operatorsPrec[JSToken.LeftShift - JSToken.FirstBinaryOperator] = OpPrec.precShift; operatorsPrec[JSToken.RightShift - JSToken.FirstBinaryOperator] = OpPrec.precShift; operatorsPrec[JSToken.UnsignedRightShift - JSToken.FirstBinaryOperator] = OpPrec.precShift; operatorsPrec[JSToken.Multiply - JSToken.FirstBinaryOperator] = OpPrec.precMultiplicative; operatorsPrec[JSToken.Divide - JSToken.FirstBinaryOperator] = OpPrec.precMultiplicative; operatorsPrec[JSToken.Modulo - JSToken.FirstBinaryOperator] = OpPrec.precMultiplicative; operatorsPrec[JSToken.Assign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment; operatorsPrec[JSToken.PlusAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment; operatorsPrec[JSToken.MinusAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment; operatorsPrec[JSToken.MultiplyAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment; operatorsPrec[JSToken.DivideAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment; operatorsPrec[JSToken.BitwiseAndAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment; operatorsPrec[JSToken.BitwiseOrAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment; operatorsPrec[JSToken.BitwiseXorAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment; operatorsPrec[JSToken.ModuloAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment; operatorsPrec[JSToken.LeftShiftAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment; operatorsPrec[JSToken.RightShiftAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment; operatorsPrec[JSToken.UnsignedRightShiftAssign - JSToken.FirstBinaryOperator] = OpPrec.precAssignment; operatorsPrec[JSToken.ConditionalIf - JSToken.FirstBinaryOperator] = OpPrec.precConditional; operatorsPrec[JSToken.Colon - JSToken.FirstBinaryOperator] = OpPrec.precConditional; operatorsPrec[JSToken.Comma - JSToken.FirstBinaryOperator] = OpPrec.precComma; return operatorsPrec; }
private static OpPrec[] InitPPOperatorsPrec() { OpPrec[] operatorsPrec = new OpPrec[JSToken.LastPPOperator - JSToken.FirstBinaryOp + 1]; operatorsPrec[JSToken.Plus - JSToken.FirstBinaryOp] = OpPrec.precAdditive; operatorsPrec[JSToken.Minus - JSToken.FirstBinaryOp] = OpPrec.precAdditive; operatorsPrec[JSToken.LogicalOr - JSToken.FirstBinaryOp] = OpPrec.precLogicalOr; operatorsPrec[JSToken.LogicalAnd - JSToken.FirstBinaryOp] = OpPrec.precLogicalAnd; operatorsPrec[JSToken.BitwiseOr - JSToken.FirstBinaryOp] = OpPrec.precBitwiseOr; operatorsPrec[JSToken.BitwiseXor - JSToken.FirstBinaryOp] = OpPrec.precBitwiseXor; operatorsPrec[JSToken.BitwiseAnd - JSToken.FirstBinaryOp] = OpPrec.precBitwiseAnd; operatorsPrec[JSToken.Equal - JSToken.FirstBinaryOp] = OpPrec.precEquality; operatorsPrec[JSToken.NotEqual - JSToken.FirstBinaryOp] = OpPrec.precEquality; operatorsPrec[JSToken.StrictEqual - JSToken.FirstBinaryOp] = OpPrec.precEquality; operatorsPrec[JSToken.StrictNotEqual - JSToken.FirstBinaryOp] = OpPrec.precEquality; operatorsPrec[JSToken.GreaterThan - JSToken.FirstBinaryOp] = OpPrec.precRelational; operatorsPrec[JSToken.LessThan - JSToken.FirstBinaryOp] = OpPrec.precRelational; operatorsPrec[JSToken.LessThanEqual - JSToken.FirstBinaryOp] = OpPrec.precRelational; operatorsPrec[JSToken.GreaterThanEqual - JSToken.FirstBinaryOp] = OpPrec.precRelational; operatorsPrec[JSToken.LeftShift - JSToken.FirstBinaryOp] = OpPrec.precShift; operatorsPrec[JSToken.RightShift - JSToken.FirstBinaryOp] = OpPrec.precShift; operatorsPrec[JSToken.UnsignedRightShift - JSToken.FirstBinaryOp] = OpPrec.precShift; operatorsPrec[JSToken.Multiply - JSToken.FirstBinaryOp] = OpPrec.precMultiplicative; operatorsPrec[JSToken.Divide - JSToken.FirstBinaryOp] = OpPrec.precMultiplicative; operatorsPrec[JSToken.Modulo - JSToken.FirstBinaryOp] = OpPrec.precMultiplicative; return operatorsPrec; }
internal OpListItem(JSToken op, OpPrec prec, OpListItem prev) { this._prev = prev; this._operator = op; this._prec = prec; }
private static OpPrec[] InitOperatorsPrec() { OpPrec[] precArray = new OpPrec[0x24]; precArray[0] = OpPrec.precAdditive; precArray[1] = OpPrec.precAdditive; precArray[2] = OpPrec.precLogicalOr; precArray[3] = OpPrec.precLogicalAnd; precArray[4] = OpPrec.precBitwiseOr; precArray[5] = OpPrec.precBitwiseXor; precArray[6] = OpPrec.precBitwiseAnd; precArray[7] = OpPrec.precEquality; precArray[8] = OpPrec.precEquality; precArray[9] = OpPrec.precEquality; precArray[10] = OpPrec.precEquality; precArray[0x15] = OpPrec.precRelational; precArray[0x16] = OpPrec.precRelational; precArray[11] = OpPrec.precRelational; precArray[12] = OpPrec.precRelational; precArray[13] = OpPrec.precRelational; precArray[14] = OpPrec.precRelational; precArray[15] = OpPrec.precShift; precArray[0x10] = OpPrec.precShift; precArray[0x11] = OpPrec.precShift; precArray[0x12] = OpPrec.precMultiplicative; precArray[0x13] = OpPrec.precMultiplicative; precArray[20] = OpPrec.precMultiplicative; precArray[0x17] = OpPrec.precAssignment; precArray[0x18] = OpPrec.precAssignment; precArray[0x19] = OpPrec.precAssignment; precArray[0x1a] = OpPrec.precAssignment; precArray[0x1b] = OpPrec.precAssignment; precArray[0x1c] = OpPrec.precAssignment; precArray[0x1d] = OpPrec.precAssignment; precArray[30] = OpPrec.precAssignment; precArray[0x1f] = OpPrec.precAssignment; precArray[0x20] = OpPrec.precAssignment; precArray[0x21] = OpPrec.precAssignment; precArray[0x22] = OpPrec.precAssignment; precArray[0x23] = OpPrec.precConditional; return precArray; }
//internal OpAssoc _assoc; internal OpListItem(JSToken op, OpPrec prec, /*OpAssoc assoc,*/ OpListItem prev){ _prev = prev; _operator = op; _prec = prec; //_assoc = assoc; }