(this super.Value)
| 350 | } |
| 351 | |
| 352 | func (m *MapExpr) Eval(this super.Value) super.Value { |
| 353 | m.keys.reset() |
| 354 | m.vals.reset() |
| 355 | for _, e := range m.entries { |
| 356 | m.keys.append(e.Key.Eval(this)) |
| 357 | m.vals.append(e.Val.Eval(this)) |
| 358 | } |
| 359 | if len(m.keys.types) == 0 { |
| 360 | typ := m.sctx.LookupTypeMap(super.TypeNull, super.TypeNull) |
| 361 | return super.NewValue(typ, []byte{}) |
| 362 | } |
| 363 | m.builder.Reset() |
| 364 | kIter, vIter := m.keys.iter(m.sctx), m.vals.iter(m.sctx) |
| 365 | for !kIter.done() { |
| 366 | kIter.appendNext(&m.builder) |
| 367 | vIter.appendNext(&m.builder) |
| 368 | } |
| 369 | bytes := m.builder.Bytes() |
| 370 | typ := m.sctx.LookupTypeMap(kIter.typ, vIter.typ) |
| 371 | return super.NewValue(typ, super.NormalizeMap(bytes)) |
| 372 | } |
| 373 | |
| 374 | type collectionBuilder struct { |
| 375 | types []super.Type |
nothing calls this directly
no test coverage detected