(ctx *parser.FunctionCallContext)
| 408 | } |
| 409 | |
| 410 | func (v *Visitor) buildAppendParamValuesReturnLeft(ctx *parser.FunctionCallContext) ([]interface{}, *LeftValue) { |
| 411 | ret := make([]interface{}, 0) |
| 412 | if ctx.ExpressionList() == nil { |
| 413 | return ret, nil |
| 414 | } |
| 415 | var left *LeftValue |
| 416 | for _, context := range ctx.ExpressionList().(*parser.ExpressionListContext).AllExpr() { |
| 417 | value := v.Visit(context) |
| 418 | switch value.(type) { |
| 419 | case *LeftValue: |
| 420 | leftValue := value.(*LeftValue) |
| 421 | if left == nil { |
| 422 | // 只需要赋值一次左值即可,避免 append(buf, temp); temp 也是变量时,第二次遍历时会把 temp 赋值给 left |
| 423 | left = leftValue |
| 424 | } |
| 425 | ret = append(ret, leftValue.GetValue()) |
| 426 | default: |
| 427 | ret = append(ret, value) |
| 428 | } |
| 429 | } |
| 430 | return ret, left |
| 431 | } |
| 432 | |
| 433 | func printf(v *Visitor, ctx *parser.FunctionCallContext) interface{} { |
| 434 | format, variableParams := v.getPrintfParams(ctx) |
no test coverage detected