(meh MacroExprFactory, target ast.Expr, args []ast.Expr)
| 649 | } |
| 650 | |
| 651 | func optFlatMap(meh MacroExprFactory, target ast.Expr, args []ast.Expr) (ast.Expr, *Error) { |
| 652 | varIdent := args[0] |
| 653 | varName := "" |
| 654 | switch varIdent.Kind() { |
| 655 | case ast.IdentKind: |
| 656 | varName = varIdent.AsIdent() |
| 657 | default: |
| 658 | return nil, meh.NewError(varIdent.ID(), "optFlatMap() variable name must be a simple identifier") |
| 659 | } |
| 660 | mapExpr := args[1] |
| 661 | targetIdent := target |
| 662 | if target.Kind() != ast.IdentKind { |
| 663 | targetIdent = meh.NewIdent(targetVar) |
| 664 | } |
| 665 | res := meh.NewCall( |
| 666 | operators.Conditional, |
| 667 | meh.NewMemberCall(hasValueFunc, targetIdent), |
| 668 | meh.NewComprehension( |
| 669 | meh.NewList(), |
| 670 | unusedIterVar, |
| 671 | varName, |
| 672 | meh.NewMemberCall(valueFunc, meh.Copy(targetIdent)), |
| 673 | meh.NewLiteral(types.False), |
| 674 | meh.NewIdent(varName), |
| 675 | mapExpr, |
| 676 | ), |
| 677 | meh.NewCall(optionalNoneFunc), |
| 678 | ) |
| 679 | if target.Kind() != ast.IdentKind { |
| 680 | return meh.NewComprehension( |
| 681 | meh.NewList(), |
| 682 | unusedIterVar, |
| 683 | targetVar, |
| 684 | target, |
| 685 | meh.NewLiteral(types.False), |
| 686 | meh.NewIdent(targetVar), |
| 687 | res, |
| 688 | ), nil |
| 689 | } |
| 690 | return res, nil |
| 691 | } |
| 692 | |
| 693 | func optUnwrap(value ref.Val) ref.Val { |
| 694 | list := value.(traits.Lister) |
nothing calls this directly
no test coverage detected