(loc ast.Node, typ *super.TypeRecord, bytes scode.Bytes)
| 503 | } |
| 504 | |
| 505 | func recordToExpr(loc ast.Node, typ *super.TypeRecord, bytes scode.Bytes) Expr { |
| 506 | var elems []RecordElem |
| 507 | it := scode.NewRecordIter(bytes, typ.Opts) |
| 508 | for _, f := range typ.Fields { |
| 509 | if it.Done() { |
| 510 | panic(it) |
| 511 | } |
| 512 | var elem RecordElem |
| 513 | if val, none := it.Next(f.Opt); none { |
| 514 | elem = &NoneElem{Node: loc, Name: f.Name, Type: NewLiteral(loc, super.NewTypeValue(typ))} |
| 515 | } else { |
| 516 | elem = &FieldElem{Node: loc, Name: f.Name, Value: valueToExpr(loc, f.Type, val), Opt: f.Opt} |
| 517 | } |
| 518 | elems = append(elems, elem) |
| 519 | } |
| 520 | return &RecordExpr{ |
| 521 | Node: loc, |
| 522 | Elems: elems, |
| 523 | } |
| 524 | } |
| 525 | |
| 526 | func arrayToExpr(loc ast.Node, typ *super.TypeArray, bytes scode.Bytes) Expr { |
| 527 | var elems []ArrayElem |
no test coverage detected