mirror of
https://github.com/golang/go
synced 2024-11-05 17:46:16 -07:00
cmd/compile: remove typecheck.Orig* functions
Same as CL 526397, but for typecheck. Change-Id: Ia8f19a54ffaa2ae3b86a4c66cbe6d973482796cd Reviewed-on: https://go-review.googlesource.com/c/go/+/526236 Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
aa381c538a
commit
e50bbae2de
@ -355,26 +355,17 @@ func ForCapture(fn *ir.Func) []VarAndLoop {
|
|||||||
})
|
})
|
||||||
|
|
||||||
postNotNil := x.Post != nil
|
postNotNil := x.Post != nil
|
||||||
var tmpFirstDcl *ir.AssignStmt
|
var tmpFirstDcl ir.Node
|
||||||
if postNotNil {
|
if postNotNil {
|
||||||
// body' = prebody +
|
// body' = prebody +
|
||||||
// (6) if tmp_first {tmp_first = false} else {Post} +
|
// (6) if tmp_first {tmp_first = false} else {Post} +
|
||||||
// if !cond {break} + ...
|
// if !cond {break} + ...
|
||||||
tmpFirst := typecheck.TempAt(base.Pos, fn, types.Types[types.TBOOL])
|
tmpFirst := typecheck.TempAt(base.Pos, fn, types.Types[types.TBOOL])
|
||||||
|
tmpFirstDcl = typecheck.Stmt(ir.NewAssignStmt(x.Pos(), tmpFirst, ir.NewBool(base.Pos, true)))
|
||||||
// tmpFirstAssign assigns val to tmpFirst
|
tmpFirstSetFalse := typecheck.Stmt(ir.NewAssignStmt(x.Pos(), tmpFirst, ir.NewBool(base.Pos, false)))
|
||||||
tmpFirstAssign := func(val bool) *ir.AssignStmt {
|
|
||||||
s := ir.NewAssignStmt(x.Pos(), tmpFirst, typecheck.OrigBool(tmpFirst, val))
|
|
||||||
s.SetTypecheck(1)
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
tmpFirstDcl = tmpFirstAssign(true)
|
|
||||||
tmpFirstDcl.Def = true // also declares tmpFirst
|
|
||||||
tmpFirstSetFalse := tmpFirstAssign(false)
|
|
||||||
ifTmpFirst := ir.NewIfStmt(x.Pos(), tmpFirst, ir.Nodes{tmpFirstSetFalse}, ir.Nodes{x.Post})
|
ifTmpFirst := ir.NewIfStmt(x.Pos(), tmpFirst, ir.Nodes{tmpFirstSetFalse}, ir.Nodes{x.Post})
|
||||||
ifTmpFirst.SetTypecheck(1)
|
ifTmpFirst.PtrInit().Append(typecheck.Stmt(ir.NewDecl(base.Pos, ir.ODCL, tmpFirst))) // declares tmpFirst
|
||||||
preBody.Append(ifTmpFirst)
|
preBody.Append(typecheck.Stmt(ifTmpFirst))
|
||||||
}
|
}
|
||||||
|
|
||||||
// body' = prebody +
|
// body' = prebody +
|
||||||
|
@ -1033,7 +1033,7 @@ func addStr(n *ir.AddStringExpr) ir.Node {
|
|||||||
for _, c := range s {
|
for _, c := range s {
|
||||||
strs = append(strs, ir.StringVal(c))
|
strs = append(strs, ir.StringVal(c))
|
||||||
}
|
}
|
||||||
return typecheck.OrigConst(n, constant.MakeString(strings.Join(strs, "")))
|
return ir.NewConstExpr(constant.MakeString(strings.Join(strs, "")), n)
|
||||||
}
|
}
|
||||||
newList := make([]ir.Node, 0, need)
|
newList := make([]ir.Node, 0, need)
|
||||||
for i := 0; i < len(s); i++ {
|
for i := 0; i < len(s); i++ {
|
||||||
@ -1046,9 +1046,7 @@ func addStr(n *ir.AddStringExpr) ir.Node {
|
|||||||
i2++
|
i2++
|
||||||
}
|
}
|
||||||
|
|
||||||
nl := ir.Copy(n).(*ir.AddStringExpr)
|
newList = append(newList, ir.NewConstExpr(constant.MakeString(strings.Join(strs, "")), s[i]))
|
||||||
nl.List = s[i:i2]
|
|
||||||
newList = append(newList, typecheck.OrigConst(nl, constant.MakeString(strings.Join(strs, ""))))
|
|
||||||
i = i2 - 1
|
i = i2 - 1
|
||||||
} else {
|
} else {
|
||||||
newList = append(newList, s[i])
|
newList = append(newList, s[i])
|
||||||
|
@ -8,7 +8,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"go/constant"
|
"go/constant"
|
||||||
"go/token"
|
"go/token"
|
||||||
"internal/types/errors"
|
|
||||||
"math"
|
"math"
|
||||||
"math/big"
|
"math/big"
|
||||||
"unicode"
|
"unicode"
|
||||||
@ -330,50 +329,6 @@ func makeComplex(real, imag constant.Value) constant.Value {
|
|||||||
return constant.BinaryOp(constant.ToFloat(real), token.ADD, constant.MakeImag(constant.ToFloat(imag)))
|
return constant.BinaryOp(constant.ToFloat(real), token.ADD, constant.MakeImag(constant.ToFloat(imag)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// For matching historical "constant OP overflow" error messages.
|
|
||||||
// TODO(mdempsky): Replace with error messages like go/types uses.
|
|
||||||
var overflowNames = [...]string{
|
|
||||||
ir.OADD: "addition",
|
|
||||||
ir.OSUB: "subtraction",
|
|
||||||
ir.OMUL: "multiplication",
|
|
||||||
ir.OLSH: "shift",
|
|
||||||
ir.OXOR: "bitwise XOR",
|
|
||||||
ir.OBITNOT: "bitwise complement",
|
|
||||||
}
|
|
||||||
|
|
||||||
// OrigConst returns an OLITERAL with orig n and value v.
|
|
||||||
func OrigConst(n ir.Node, v constant.Value) ir.Node {
|
|
||||||
lno := ir.SetPos(n)
|
|
||||||
v = ConvertVal(v, n.Type(), false)
|
|
||||||
base.Pos = lno
|
|
||||||
|
|
||||||
switch v.Kind() {
|
|
||||||
case constant.Int:
|
|
||||||
if constant.BitLen(v) <= ir.ConstPrec {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
fallthrough
|
|
||||||
case constant.Unknown:
|
|
||||||
what := overflowNames[n.Op()]
|
|
||||||
if what == "" {
|
|
||||||
base.Fatalf("unexpected overflow: %v", n.Op())
|
|
||||||
}
|
|
||||||
base.ErrorfAt(n.Pos(), errors.NumericOverflow, "constant %v overflow", what)
|
|
||||||
n.SetType(nil)
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
return ir.NewConstExpr(v, n)
|
|
||||||
}
|
|
||||||
|
|
||||||
func OrigBool(n ir.Node, v bool) ir.Node {
|
|
||||||
return OrigConst(n, constant.MakeBool(v))
|
|
||||||
}
|
|
||||||
|
|
||||||
func OrigInt(n ir.Node, v int64) ir.Node {
|
|
||||||
return OrigConst(n, constant.MakeInt64(v))
|
|
||||||
}
|
|
||||||
|
|
||||||
// DefaultLit on both nodes simultaneously;
|
// DefaultLit on both nodes simultaneously;
|
||||||
// if they're both ideal going in they better
|
// if they're both ideal going in they better
|
||||||
// get the same type going out.
|
// get the same type going out.
|
||||||
|
@ -274,7 +274,7 @@ func walkLenCap(n *ir.UnaryExpr, init *ir.Nodes) ir.Node {
|
|||||||
}
|
}
|
||||||
if t.IsArray() {
|
if t.IsArray() {
|
||||||
safeExpr(n.X, init)
|
safeExpr(n.X, init)
|
||||||
con := typecheck.OrigInt(n, t.NumElem())
|
con := ir.NewConstExpr(constant.MakeInt64(t.NumElem()), n)
|
||||||
con.SetTypecheck(1)
|
con.SetTypecheck(1)
|
||||||
return con
|
return con
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user