-- fields.cue --
a: 1 @xml(,attr)
b: 2 @foo(a,b=4) @go(Foo)
c!: d?: string
X=e: [Y=string]: int
#Schema: {
	name: string
	...
}
embed: {
	#Schema
}
-- out/debugprint/fields.cue --
*ast.File{
	Filename: "fields.cue"
	Decls: []ast.Decl{
		*ast.Field{
			Label: *ast.Ident{
				NamePos: token.Pos("fields.cue:1:1", nospace)
				Name: "a"
			}
			Optional: token.Pos("-")
			Constraint: token.Token("ILLEGAL")
			TokenPos: token.Pos("fields.cue:1:2", nospace)
			Token: token.Token(":")
			Value: *ast.BasicLit{
				ValuePos: token.Pos("fields.cue:1:4", blank)
				Kind: token.Token("INT")
				Value: "1"
			}
			Attrs: []*ast.Attribute{
				{
					At: token.Pos("fields.cue:1:6", blank)
					Text: "@xml(,attr)"
				}
			}
		}
		*ast.Field{
			Label: *ast.Ident{
				NamePos: token.Pos("fields.cue:2:1", newline)
				Name: "b"
			}
			Optional: token.Pos("-")
			Constraint: token.Token("ILLEGAL")
			TokenPos: token.Pos("fields.cue:2:2", nospace)
			Token: token.Token(":")
			Value: *ast.BasicLit{
				ValuePos: token.Pos("fields.cue:2:4", blank)
				Kind: token.Token("INT")
				Value: "2"
			}
			Attrs: []*ast.Attribute{
				{
					At: token.Pos("fields.cue:2:6", blank)
					Text: "@foo(a,b=4)"
				}
				{
					At: token.Pos("fields.cue:2:18", blank)
					Text: "@go(Foo)"
				}
			}
		}
		*ast.Field{
			Label: *ast.Ident{
				NamePos: token.Pos("fields.cue:3:1", newline)
				Name: "c"
			}
			Optional: token.Pos("fields.cue:3:2", nospace)
			Constraint: token.Token("!")
			TokenPos: token.Pos("fields.cue:3:3", nospace)
			Token: token.Token(":")
			Value: *ast.StructLit{
				Lbrace: token.Pos("-")
				Elts: []ast.Decl{
					*ast.Field{
						Label: *ast.Ident{
							NamePos: token.Pos("fields.cue:3:5", blank)
							Name: "d"
						}
						Optional: token.Pos("fields.cue:3:6", nospace)
						Constraint: token.Token("?")
						TokenPos: token.Pos("fields.cue:3:7", nospace)
						Token: token.Token(":")
						Value: *ast.Ident{
							NamePos: token.Pos("fields.cue:3:9", blank)
							Name: "string"
						}
						Attrs: []*ast.Attribute{}
					}
				}
				Rbrace: token.Pos("-")
			}
			Attrs: []*ast.Attribute{}
		}
		*ast.Field{
			Label: *ast.Alias{
				Ident: *ast.Ident{
					NamePos: token.Pos("fields.cue:4:1", newline)
					Name: "X"
				}
				Equal: token.Pos("fields.cue:4:2", nospace)
				Expr: *ast.Ident{
					NamePos: token.Pos("fields.cue:4:3", nospace)
					Name: "e"
				}
			}
			Optional: token.Pos("-")
			Constraint: token.Token("ILLEGAL")
			TokenPos: token.Pos("fields.cue:4:4", nospace)
			Token: token.Token(":")
			Value: *ast.StructLit{
				Lbrace: token.Pos("-")
				Elts: []ast.Decl{
					*ast.Field{
						Label: *ast.ListLit{
							Lbrack: token.Pos("fields.cue:4:6", blank)
							Elts: []ast.Expr{
								*ast.Alias{
									Ident: *ast.Ident{
										NamePos: token.Pos("fields.cue:4:7", nospace)
										Name: "Y"
									}
									Equal: token.Pos("fields.cue:4:8", nospace)
									Expr: *ast.Ident{
										NamePos: token.Pos("fields.cue:4:9", nospace)
										Name: "string"
									}
								}
							}
							Rbrack: token.Pos("fields.cue:4:15", nospace)
						}
						Optional: token.Pos("-")
						Constraint: token.Token("ILLEGAL")
						TokenPos: token.Pos("fields.cue:4:16", nospace)
						Token: token.Token(":")
						Value: *ast.Ident{
							NamePos: token.Pos("fields.cue:4:18", blank)
							Name: "int"
						}
						Attrs: []*ast.Attribute{}
					}
				}
				Rbrace: token.Pos("-")
			}
			Attrs: []*ast.Attribute{}
		}
		*ast.Field{
			Label: *ast.Ident{
				NamePos: token.Pos("fields.cue:5:1", newline)
				Name: "#Schema"
			}
			Optional: token.Pos("-")
			Constraint: token.Token("ILLEGAL")
			TokenPos: token.Pos("fields.cue:5:8", nospace)
			Token: token.Token(":")
			Value: *ast.StructLit@ref001{
				Lbrace: token.Pos("fields.cue:5:10", blank)
				Elts: []ast.Decl{
					*ast.Field{
						Label: *ast.Ident{
							NamePos: token.Pos("fields.cue:6:2", newline)
							Name: "name"
						}
						Optional: token.Pos("-")
						Constraint: token.Token("ILLEGAL")
						TokenPos: token.Pos("fields.cue:6:6", nospace)
						Token: token.Token(":")
						Value: *ast.Ident{
							NamePos: token.Pos("fields.cue:6:8", blank)
							Name: "string"
						}
						Attrs: []*ast.Attribute{}
					}
					*ast.Ellipsis{
						Ellipsis: token.Pos("fields.cue:7:2", newline)
						Type: nil
					}
				}
				Rbrace: token.Pos("fields.cue:8:1", newline)
			}
			Attrs: []*ast.Attribute{}
		}
		*ast.Field{
			Label: *ast.Ident{
				NamePos: token.Pos("fields.cue:9:1", newline)
				Name: "embed"
			}
			Optional: token.Pos("-")
			Constraint: token.Token("ILLEGAL")
			TokenPos: token.Pos("fields.cue:9:6", nospace)
			Token: token.Token(":")
			Value: *ast.StructLit{
				Lbrace: token.Pos("fields.cue:9:8", blank)
				Elts: []ast.Decl{
					*ast.EmbedDecl{
						Expr: *ast.Ident{
							NamePos: token.Pos("fields.cue:10:2", newline)
							Name: "#Schema"
							Node: @ref001 (*ast.StructLit)
						}
					}
				}
				Rbrace: token.Pos("fields.cue:11:1", newline)
			}
			Attrs: []*ast.Attribute{}
		}
	}
	Imports: []*ast.ImportSpec{}
}
-- out/debugprint/fields.cue/omitempty-strings --
*ast.File{
	Filename: "fields.cue"
	Decls: []ast.Decl{
		*ast.Field{
			Label: *ast.Ident{
				Name: "a"
			}
			Value: *ast.BasicLit{
				Value: "1"
			}
			Attrs: []*ast.Attribute{
				{
					Text: "@xml(,attr)"
				}
			}
		}
		*ast.Field{
			Label: *ast.Ident{
				Name: "b"
			}
			Value: *ast.BasicLit{
				Value: "2"
			}
			Attrs: []*ast.Attribute{
				{
					Text: "@foo(a,b=4)"
				}
				{
					Text: "@go(Foo)"
				}
			}
		}
		*ast.Field{
			Label: *ast.Ident{
				Name: "c"
			}
			Value: *ast.StructLit{
				Elts: []ast.Decl{
					*ast.Field{
						Label: *ast.Ident{
							Name: "d"
						}
						Value: *ast.Ident{
							Name: "string"
						}
					}
				}
			}
		}
		*ast.Field{
			Label: *ast.Alias{
				Ident: *ast.Ident{
					Name: "X"
				}
				Expr: *ast.Ident{
					Name: "e"
				}
			}
			Value: *ast.StructLit{
				Elts: []ast.Decl{
					*ast.Field{
						Label: *ast.ListLit{
							Elts: []ast.Expr{
								*ast.Alias{
									Ident: *ast.Ident{
										Name: "Y"
									}
									Expr: *ast.Ident{
										Name: "string"
									}
								}
							}
						}
						Value: *ast.Ident{
							Name: "int"
						}
					}
				}
			}
		}
		*ast.Field{
			Label: *ast.Ident{
				Name: "#Schema"
			}
			Value: *ast.StructLit{
				Elts: []ast.Decl{
					*ast.Field{
						Label: *ast.Ident{
							Name: "name"
						}
						Value: *ast.Ident{
							Name: "string"
						}
					}
				}
			}
		}
		*ast.Field{
			Label: *ast.Ident{
				Name: "embed"
			}
			Value: *ast.StructLit{
				Elts: []ast.Decl{
					*ast.EmbedDecl{
						Expr: *ast.Ident{
							Name: "#Schema"
						}
					}
				}
			}
		}
	}
}
