Exec implements the InterpretableV2 interface method.
(frame *ExecutionFrame)
| 805 | |
| 806 | // Exec implements the InterpretableV2 interface method. |
| 807 | func (m *evalMap) Exec(frame *ExecutionFrame) ref.Val { |
| 808 | entries := make(map[ref.Val]ref.Val, len(m.keys)) |
| 809 | // If any argument is unknown or error early terminate. |
| 810 | for i, key := range m.keys { |
| 811 | keyVal := key.Exec(frame) |
| 812 | if types.IsUnknownOrError(keyVal) { |
| 813 | return keyVal |
| 814 | } |
| 815 | valVal := m.vals[i].Exec(frame) |
| 816 | if types.IsUnknownOrError(valVal) { |
| 817 | return valVal |
| 818 | } |
| 819 | if m.hasOptionals && m.optionals[i] { |
| 820 | optVal, ok := valVal.(*types.Optional) |
| 821 | if !ok { |
| 822 | return types.LabelErrNode(m.id, invalidOptionalEntryInit(keyVal, valVal)) |
| 823 | } |
| 824 | if !optVal.HasValue() { |
| 825 | delete(entries, keyVal) |
| 826 | continue |
| 827 | } |
| 828 | valVal = optVal.GetValue() |
| 829 | } |
| 830 | entries[keyVal] = valVal |
| 831 | } |
| 832 | return types.NewRefValMap(m.adapter, entries) |
| 833 | } |
| 834 | |
| 835 | // Eval implements the Interpretable interface method. |
| 836 | func (m *evalMap) Eval(ctx Activation) ref.Val { |
no test coverage detected