mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: simplify value coding for unified IR
In indexed export, values are always exported along with their type and are encoded in a type-sensitive manner, because this matches how cmd/compile handled constants internally. However, go/types intentionally differs from this, decoupling type from value representation. As unified IR strives to be more go/types-centric, it makes sense to embrace this and make values a more first-class encoding. Change-Id: If21d849c4f610358bd776d5665469d180bcd5f6e Reviewed-on: https://go-review.googlesource.com/c/go/+/348014 Trust: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
This commit is contained in:
parent
e30a09013b
commit
4c52eac49b
5 changed files with 14 additions and 26 deletions
|
|
@ -626,7 +626,8 @@ func (pr *pkgReader) objIdx(idx int, implicits, explicits []*types.Type) ir.Node
|
|||
|
||||
case objConst:
|
||||
name := do(ir.OLITERAL, false)
|
||||
typ, val := r.value()
|
||||
typ := r.typ()
|
||||
val := FixValue(typ, r.value())
|
||||
setType(name, typ)
|
||||
setValue(name, val)
|
||||
return name
|
||||
|
|
@ -755,12 +756,6 @@ func (r *reader) typeParamNames() {
|
|||
}
|
||||
}
|
||||
|
||||
func (r *reader) value() (*types.Type, constant.Value) {
|
||||
r.sync(syncValue)
|
||||
typ := r.typ()
|
||||
return typ, FixValue(typ, r.rawValue())
|
||||
}
|
||||
|
||||
func (r *reader) method() *types.Field {
|
||||
r.sync(syncMethod)
|
||||
pos := r.pos()
|
||||
|
|
@ -1556,7 +1551,8 @@ func (r *reader) expr() (res ir.Node) {
|
|||
|
||||
case exprConst:
|
||||
pos := r.pos()
|
||||
typ, val := r.value()
|
||||
typ := r.typ()
|
||||
val := FixValue(typ, r.value())
|
||||
op := r.op()
|
||||
orig := r.string()
|
||||
return typecheck.Expr(OrigConst(pos, typ, val, op, orig))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue