@@ -119,7 +119,7 @@ Option Base 0
119119'
120120'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
121121' CONSTANTS:
122- Private pi As Double
122+ Private PI As Double
123123Private PID2 As Double
124124Private e As Double
125125Private Const op_plus As String = "+"
@@ -131,6 +131,7 @@ Private Const op_Factorial As String = "!"
131131Private Const op_mod As String = "%"
132132Private Const op_power As String = "^"
133133Private Const op_equal As String = "="
134+ Private Const op_equal_ As String = "=="
134135Private Const op_inequality As String = "<>"
135136Private Const op_gt As String = ">"
136137Private Const op_lt As String = "<"
@@ -217,12 +218,13 @@ Public Enum OperatorToken
217218 otPower = 6 '^
218219 otMod = 7 '%
219220 otEqual = 101 '=
220- otNotEqual = 102 '<>
221- otGreaterThan = 103 '>
222- otLessThan = 104 '<
223- otGreaterThanOrEqual = 105 '>=
224- otLessThanOrEqual = 106 '<=
225- otLike = 107 '$
221+ otEqual_ = 102 '==
222+ otNotEqual = 103 '<>
223+ otGreaterThan = 104 '>
224+ otLessThan = 105 '<
225+ otGreaterThanOrEqual = 106 '>=
226+ otLessThanOrEqual = 107 '<=
227+ otLike = 108 '$
226228 otLogicalAND = 201 '&
227229 otLogicalOR = 202 '|
228230 otLogicalXOR = 203 '||
@@ -1705,7 +1707,7 @@ Private Sub BottomLevelEval(ByRef aToken As token)
17051707 Else
17061708 If aToken.OperationToken < 200 Then 'Comparison operators
17071709 Select Case aToken.OperationToken
1708- Case OperatorToken.otEqual
1710+ Case OperatorToken.otEqual, OperatorToken.otEqual _
17091711 aToken.EvalResult = (CastOPtype(aToken.Arg1.Operand, aToken.Arg1.NegationFlagOn) = _
17101712 CastOPtype(aToken.Arg2.Operand, aToken.Arg2.NegationFlagOn))
17111713 Case OperatorToken.otNotEqual
@@ -4053,24 +4055,29 @@ Private Function GetLCOpInfo(ByRef expression As String) As TokenInfo
40534055 Dim GreatterOrEqualSymbolPos As Long
40544056 Dim LessOrEqualSymbolPos As Long
40554057 Dim EqualSymbolPos As Long
4058+ Dim EqualSymbolPos_ As Long
40564059 Dim LessThanSymbolPos As Long
40574060 Dim GreatterThanSymbolPos As Long
40584061 Dim LogANDSymbolPos As Long
40594062 Dim LogORSymbolPos As Long
40604063 Dim LogXORSymbolPos As Long
40614064 Dim LikeSymbolPos As Long
40624065 Dim testChar As String
4066+ Dim testChar2 As String
40634067
40644068 '@--------------------------------------------------------------------
40654069 ' Comparisons first
40664070 Do 'Discard false positives
40674071 EqualSymbolPos = GetOPeratorSymbolPos(expression, op_equal, EqualSymbolPos + 1 )
40684072 If EqualSymbolPos > 2 Then
40694073 testChar = MidB$(expression, EqualSymbolPos - 2 , 2 )
4074+ testChar2 = MidB$(expression, EqualSymbolPos + 2 , 2 ) 'Check ahead for "=="
40704075 Else
40714076 testChar = vbNullString
4077+ testChar2 = vbNullString
40724078 End If
4073- Loop While EqualSymbolPos > 0 And testChar Like "[<>]"
4079+ Loop While EqualSymbolPos > 0 And (testChar Like "[<>=]" Or testChar2 = op_equal)
4080+ EqualSymbolPos_ = GetOPeratorSymbolPos(expression, op_equal_)
40744081 NotEqualSymbolPos = GetOPeratorSymbolPos(expression, op_inequality)
40754082 Do
40764083 GreatterThanSymbolPos = GetOPeratorSymbolPos(expression, op_gt, GreatterThanSymbolPos + 1 )
@@ -4091,15 +4098,18 @@ Private Function GetLCOpInfo(ByRef expression As String) As TokenInfo
40914098 GreatterOrEqualSymbolPos = GetOPeratorSymbolPos(expression, op_gtequal)
40924099 LessOrEqualSymbolPos = GetOPeratorSymbolPos(expression, op_ltequal)
40934100 LikeSymbolPos = InStrB(LessThanSymbolPos + 1 , expression, op_like)
4094- If NonZero(EqualSymbolPos, NotEqualSymbolPos, GreatterThanSymbolPos, _
4101+ If NonZero(EqualSymbolPos, EqualSymbolPos_, NotEqualSymbolPos, GreatterThanSymbolPos, _
40954102 LessThanSymbolPos, GreatterOrEqualSymbolPos, LessOrEqualSymbolPos, LikeSymbolPos) Then
4096- GetLCOpInfo.Position = MinNonZero(EqualSymbolPos, NotEqualSymbolPos, GreatterThanSymbolPos, _
4103+ GetLCOpInfo.Position = MinNonZero(EqualSymbolPos, EqualSymbolPos_, NotEqualSymbolPos, GreatterThanSymbolPos, _
40974104 LessThanSymbolPos, GreatterOrEqualSymbolPos, LessOrEqualSymbolPos, _
40984105 LikeSymbolPos) 'Priority to the first operator
40994106 Select Case GetLCOpInfo.Position
41004107 Case EqualSymbolPos
41014108 GetLCOpInfo.OperationToken = otEqual
41024109 GetLCOpInfo.OperatorLen = LenB(op_equal)
4110+ Case EqualSymbolPos_
4111+ GetLCOpInfo.OperationToken = otEqual_
4112+ GetLCOpInfo.OperatorLen = LenB(op_equal_)
41034113 Case NotEqualSymbolPos
41044114 GetLCOpInfo.OperationToken = otNotEqual
41054115 GetLCOpInfo.OperatorLen = LenB(op_inequality)
@@ -4287,6 +4297,7 @@ Private Function GetOpSymbol(ByRef OPtoken As OperatorToken) As String
42874297 Case OperatorToken.otMod: GetOpSymbol = op_mod
42884298 Case OperatorToken.otPower: GetOpSymbol = op_power
42894299 Case OperatorToken.otEqual: GetOpSymbol = op_equal
4300+ Case OperatorToken.otEqual_: GetOpSymbol = op_equal_
42904301 Case OperatorToken.otNotEqual: GetOpSymbol = op_inequality
42914302 Case OperatorToken.otGreaterThan: GetOpSymbol = op_gt
42924303 Case OperatorToken.otLessThan: GetOpSymbol = op_lt
@@ -9097,6 +9108,4 @@ err_Handler:
90979108 Zero = e_ValueError
90989109 BuildErrMessage errEvalError, d_lCurly & fName & d_rCurly & " | Error#: " & err.Number & d_Space & _
90999110 d_lParenthesis & err.Description & d_rParenthesis
9100- End Function
9101-
9102-
9111+ End Function
0 commit comments