prepareEvalInfixExp check the token and stack state for formula function evaluate.
(opfStack, opftStack, opfdStack, argsStack *Stack)
| 1143 | // prepareEvalInfixExp check the token and stack state for formula function |
| 1144 | // evaluate. |
| 1145 | func prepareEvalInfixExp(opfStack, opftStack, opfdStack, argsStack *Stack) { |
| 1146 | // current token is function stop |
| 1147 | for opftStack.Peek().(efp.Token) != opfStack.Peek().(efp.Token) { |
| 1148 | // calculate trigger |
| 1149 | topOpt := opftStack.Peek().(efp.Token) |
| 1150 | if err := calculate(opfdStack, topOpt); err != nil { |
| 1151 | argsStack.Peek().(*list.List).PushBack(newErrorFormulaArg(err.Error(), err.Error())) |
| 1152 | opftStack.Pop() |
| 1153 | continue |
| 1154 | } |
| 1155 | opftStack.Pop() |
| 1156 | } |
| 1157 | argument := true |
| 1158 | if opftStack.Len() > 2 && opfdStack.Len() == 1 { |
| 1159 | topOpt := opftStack.Pop() |
| 1160 | if opftStack.Peek().(efp.Token).TType == efp.TokenTypeOperatorInfix { |
| 1161 | argument = false |
| 1162 | } |
| 1163 | opftStack.Push(topOpt) |
| 1164 | } |
| 1165 | // push opfd to args |
| 1166 | if argument && opfdStack.Len() > 0 { |
| 1167 | argsStack.Peek().(*list.List).PushBack(opfdStack.Pop().(formulaArg)) |
| 1168 | } |
| 1169 | } |
| 1170 | |
| 1171 | // calcPow evaluate exponentiation arithmetic operations. |
| 1172 | func calcPow(rOpd, lOpd formulaArg, opdStack *Stack) error { |
no test coverage detected