MCPcopy
hub / github.com/qax-os/excelize / prepareEvalInfixExp

Function prepareEvalInfixExp

calc.go:1145–1169  ·  view source on GitHub ↗

prepareEvalInfixExp check the token and stack state for formula function evaluate.

(opfStack, opftStack, opfdStack, argsStack *Stack)

Source from the content-addressed store, hash-verified

1143// prepareEvalInfixExp check the token and stack state for formula function
1144// evaluate.
1145func 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.
1172func calcPow(rOpd, lOpd formulaArg, opdStack *Stack) error {

Callers 1

evalInfixExpFuncMethod · 0.85

Calls 7

calculateFunction · 0.85
newErrorFormulaArgFunction · 0.85
PeekMethod · 0.80
PopMethod · 0.80
LenMethod · 0.80
PushMethod · 0.80
ErrorMethod · 0.45

Tested by

no test coverage detected