Remove ast.NewExpr statusPkg arg
diff --git a/internal/cgen/expr.go b/internal/cgen/expr.go
index fa5ad27..566ca9f 100644
--- a/internal/cgen/expr.go
+++ b/internal/cgen/expr.go
@@ -77,13 +77,13 @@
}
} else if ident.IsDQStrLiteral(g.tm) {
- if z := g.statusMap[n.StatusQID()]; z.cName != "" {
+ if z := g.statusMap[t.QID{0, n.Ident()}]; z.cName != "" {
b.writes("wuffs_base__make_status(")
b.writes(z.cName)
b.writes(")")
return nil
}
- return fmt.Errorf("unrecognized status %s", n.StatusQID().Str(g.tm))
+ return fmt.Errorf("unrecognized status %s", n.Str(g.tm))
} else if c, ok := g.scalarConstsMap[t.QID{0, n.Ident()}]; ok {
b.writes(c.Value().ConstValue().String())
diff --git a/lang/ast/ast.go b/lang/ast/ast.go
index 65304af..95e20a1 100644
--- a/lang/ast/ast.go
+++ b/lang/ast/ast.go
@@ -160,7 +160,7 @@
// Assert keyword . lit(reason) Assert
// Assign operator . . Assign
// Const . pkg name Const
- // Expr operator pkg literal/ident Expr
+ // Expr operator . literal/ident Expr
// Field . . name Field
// File . . . File
// Func funcName receiverPkg receiverName Func
@@ -323,7 +323,6 @@
// Expr is an expression, such as "i", "+j" or "k + l[m(n, o)].p":
// - ID0: <0|operator|IDOpenParen|IDOpenBracket|IDDotDot|IDDot>
-// - ID1: <0|pkg> (for statuses)
// - ID2: <0|literal|ident>
// - LHS: <nil|Expr>
// - MHS: <nil|Expr>
@@ -331,8 +330,7 @@
// - List0: <Arg|Expr> function call args, assoc. op args or list members.
//
// A zero ID0 means an identifier or literal in ID2, like `foo`, `42` or a
-// status literal like `"#foo"` or `pkg."$bar"`. For status literals, ID1 is
-// the package.
+// status literal like `"#foo"`.
//
// For unary operators, ID0 is the operator and RHS is the operand.
//
@@ -362,7 +360,6 @@
func (n *Expr) MBounds() interval.IntRange { return n.mBounds }
func (n *Expr) MType() *TypeExpr { return n.mType }
func (n *Expr) Operator() t.ID { return n.id0 }
-func (n *Expr) StatusQID() t.QID { return t.QID{n.id1, n.id2} }
func (n *Expr) Ident() t.ID { return n.id2 }
func (n *Expr) LHS() *Node { return n.lhs }
func (n *Expr) MHS() *Node { return n.mhs }
@@ -374,7 +371,7 @@
func (n *Expr) SetMBounds(x interval.IntRange) { n.mBounds = x }
func (n *Expr) SetMType(x *TypeExpr) { n.mType = x }
-func NewExpr(flags Flags, operator t.ID, statusPkg t.ID, ident t.ID, lhs *Node, mhs *Node, rhs *Node, args []*Node) *Expr {
+func NewExpr(flags Flags, operator t.ID, ident t.ID, lhs *Node, mhs *Node, rhs *Node, args []*Node) *Expr {
subExprEffect := Flags(0)
if lhs != nil {
subExprEffect |= lhs.flags & Flags(effectMask)
@@ -396,7 +393,6 @@
kind: KExpr,
flags: flags,
id0: operator,
- id1: statusPkg,
id2: ident,
lhs: lhs,
mhs: mhs,
diff --git a/lang/check/assert.go b/lang/check/assert.go
index 8456d90..675f701 100644
--- a/lang/check/assert.go
+++ b/lang/check/assert.go
@@ -58,7 +58,7 @@
type facts []*a.Expr
func (z *facts) appendBinaryOpFact(op t.ID, lhs *a.Expr, rhs *a.Expr) {
- o := a.NewExpr(0, op, 0, 0, lhs.AsNode(), nil, rhs.AsNode(), nil)
+ o := a.NewExpr(0, op, 0, lhs.AsNode(), nil, rhs.AsNode(), nil)
o.SetMBounds(bounds{zero, one})
o.SetMType(typeExprBool)
z.appendFact(o)
@@ -210,7 +210,7 @@
return nil, err
}
if l != lhs || r != rhs {
- o := a.NewExpr(0, op, 0, 0, l.AsNode(), nil, r.AsNode(), nil)
+ o := a.NewExpr(0, op, 0, l.AsNode(), nil, r.AsNode(), nil)
o.SetConstValue(n.ConstValue())
o.SetMType(n.MType())
return o, nil
@@ -343,7 +343,7 @@
"check: internal error: proveReasonRequirement token (0x%X) is not an XBinaryOp", op)
}
if err := q.proveBinaryOp(op, lhs, rhs); err != nil {
- n := a.NewExpr(0, op, 0, 0, lhs.AsNode(), nil, rhs.AsNode(), nil)
+ n := a.NewExpr(0, op, 0, lhs.AsNode(), nil, rhs.AsNode(), nil)
return fmt.Errorf("cannot prove %q: %v", n.Str(q.tm), err)
}
return nil
diff --git a/lang/check/bounds.go b/lang/check/bounds.go
index 0ce1f32..776b89f 100644
--- a/lang/check/bounds.go
+++ b/lang/check/bounds.go
@@ -68,7 +68,7 @@
maxIntBits = big.NewInt(t.MaxIntBits)
- zeroExpr = a.NewExpr(0, 0, 0, t.ID0, nil, nil, nil, nil)
+ zeroExpr = a.NewExpr(0, 0, t.ID0, nil, nil, nil, nil)
)
func init() {
@@ -190,7 +190,7 @@
default:
op, lhs, rhs = t.IDXUnaryNot, nil, n
}
- o := a.NewExpr(n.AsNode().AsRaw().Flags(), op, 0, 0, lhs.AsNode(), nil, rhs.AsNode(), args)
+ o := a.NewExpr(n.AsNode().AsRaw().Flags(), op, 0, lhs.AsNode(), nil, rhs.AsNode(), args)
o.SetMType(n.MType())
return o, nil
}
@@ -457,14 +457,14 @@
}
switch op {
case t.IDPlusEq, t.IDMinusEq:
- oRHS := a.NewExpr(0, op.BinaryForm(), 0, 0, xRHS.AsNode(), nil, rhs.AsNode(), nil)
+ oRHS := a.NewExpr(0, op.BinaryForm(), 0, xRHS.AsNode(), nil, rhs.AsNode(), nil)
// TODO: call SetMBounds?
oRHS.SetMType(typeExprIdeal)
oRHS, err := simplify(q.tm, oRHS)
if err != nil {
return nil, err
}
- o := a.NewExpr(0, xOp, 0, 0, xLHS.AsNode(), nil, oRHS.AsNode(), nil)
+ o := a.NewExpr(0, xOp, 0, xLHS.AsNode(), nil, oRHS.AsNode(), nil)
o.SetMBounds(bounds{zero, one})
o.SetMType(typeExprBool)
return o, nil
@@ -712,7 +712,7 @@
return err
}
- lhs := a.NewExpr(0, 0, 0, n.Name(), nil, nil, nil, nil)
+ lhs := a.NewExpr(0, 0, n.Name(), nil, nil, nil, nil)
lhs.SetMType(n.XType())
// "var x T" has an implicit "= 0".
//
@@ -1265,7 +1265,7 @@
if err != nil {
return nil, err
}
- o := a.NewExpr(0, 0, 0, id, nil, nil, nil, nil)
+ o := a.NewExpr(0, 0, id, nil, nil, nil, nil)
o.SetConstValue(cv)
o.SetMBounds(bounds{cv, cv})
o.SetMType(typeExprIdeal)
@@ -1274,10 +1274,10 @@
// makeSliceLength returns "x.length()".
func makeSliceLength(slice *a.Expr) *a.Expr {
- x := a.NewExpr(0, t.IDDot, 0, t.IDLength, slice.AsNode(), nil, nil, nil)
+ x := a.NewExpr(0, t.IDDot, t.IDLength, slice.AsNode(), nil, nil, nil)
x.SetMBounds(bounds{one, one})
x.SetMType(a.NewTypeExpr(t.IDFunc, 0, t.IDLength, slice.MType().AsNode(), nil, nil))
- x = a.NewExpr(0, t.IDOpenParen, 0, 0, x.AsNode(), nil, nil, nil)
+ x = a.NewExpr(0, t.IDOpenParen, 0, x.AsNode(), nil, nil, nil)
// TODO: call SetMBounds?
x.SetMType(typeExprU64)
return x
@@ -1287,7 +1287,7 @@
//
// n must be the t.ID of a small power of 2.
func makeSliceLengthEqEq(x t.ID, xTyp *a.TypeExpr, n t.ID) *a.Expr {
- xExpr := a.NewExpr(0, 0, 0, x, nil, nil, nil, nil)
+ xExpr := a.NewExpr(0, 0, x, nil, nil, nil, nil)
xExpr.SetMType(xTyp)
lhs := makeSliceLength(xExpr)
@@ -1298,12 +1298,12 @@
}
cv := big.NewInt(int64(nValue))
- rhs := a.NewExpr(0, 0, 0, n, nil, nil, nil, nil)
+ rhs := a.NewExpr(0, 0, n, nil, nil, nil, nil)
rhs.SetConstValue(cv)
rhs.SetMBounds(bounds{cv, cv})
rhs.SetMType(typeExprIdeal)
- ret := a.NewExpr(0, t.IDXBinaryEqEq, 0, 0, lhs.AsNode(), nil, rhs.AsNode(), nil)
+ ret := a.NewExpr(0, t.IDXBinaryEqEq, 0, lhs.AsNode(), nil, rhs.AsNode(), nil)
ret.SetMBounds(bounds{zero, one})
ret.SetMType(typeExprBool)
return ret
@@ -1514,7 +1514,7 @@
continue
}
lhs := a.NewExpr(n.AsNode().AsRaw().Flags(),
- n.Operator(), 0, n.Ident(), n.LHS(), n.MHS(), n.RHS(), args[:i])
+ n.Operator(), n.Ident(), n.LHS(), n.MHS(), n.RHS(), args[:i])
lb, err = q.bcheckExprBinaryOp1(op, lhs, lb, o.AsExpr(), depth)
if err != nil {
return bounds{}, err
diff --git a/lang/check/check.go b/lang/check/check.go
index 414941a..9a40cb7 100644
--- a/lang/check/check.go
+++ b/lang/check/check.go
@@ -140,7 +140,7 @@
if err != nil {
return nil, err
}
- cNode := a.NewConst(0, "", 0, name, xType, a.NewExpr(0, 0, 0, value, nil, nil, nil, nil))
+ cNode := a.NewConst(0, "", 0, name, xType, a.NewExpr(0, 0, value, nil, nil, nil, nil))
if err := c.checkConst(cNode.AsNode()); err != nil {
return nil, err
}
diff --git a/lang/check/data.go b/lang/check/data.go
index 345a833..b1cc71d 100644
--- a/lang/check/data.go
+++ b/lang/check/data.go
@@ -307,7 +307,7 @@
if xc0 == nil {
return errFailed
}
- t1 := a.NewExpr(0, t.IDXBinaryPlus, 0, 0, xb0.AsNode(), nil, xc0.AsNode(), nil)
+ t1 := a.NewExpr(0, t.IDXBinaryPlus, 0, xb0.AsNode(), nil, xc0.AsNode(), nil)
if err := proveReasonRequirement(q, t.IDXBinaryLessThan, xa, t1); err != nil {
return err
}
@@ -355,7 +355,7 @@
return errFailed
}
// a <= (c - b)
- t1 := a.NewExpr(0, t.IDXBinaryMinus, 0, 0, xc.AsNode(), nil, xb.AsNode(), nil)
+ t1 := a.NewExpr(0, t.IDXBinaryMinus, 0, xc.AsNode(), nil, xb.AsNode(), nil)
if err := proveReasonRequirement(q, t.IDXBinaryLessEq, xa, t1); err != nil {
return err
}
diff --git a/lang/check/gen.go b/lang/check/gen.go
index 712f9ac..275d96a 100644
--- a/lang/check/gen.go
+++ b/lang/check/gen.go
@@ -230,7 +230,7 @@
fmt.Fprintf(&out, "if err := proveReasonRequirement(q, t.ID%s, %s, %s); err != nil { return err }\n",
key, l, r)
} else {
- fmt.Fprintf(&out, "%s := a.NewExpr(0, t.ID%s, 0, 0, %s.AsNode(), nil, %s.AsNode(), nil)\n",
+ fmt.Fprintf(&out, "%s := a.NewExpr(0, t.ID%s, 0, %s.AsNode(), nil, %s.AsNode(), nil)\n",
name, key, l, r)
}
return nil
diff --git a/lang/check/optimize.go b/lang/check/optimize.go
index c989379..7cd56df 100644
--- a/lang/check/optimize.go
+++ b/lang/check/optimize.go
@@ -109,7 +109,7 @@
}
return a.NewExpr(x.AsNode().AsRaw().Flags(),
- t.IDXBinaryGreaterEq, 0, 0, x.LHS(), nil, o.AsNode(), nil), nil
+ t.IDXBinaryGreaterEq, 0, x.LHS(), nil, o.AsNode(), nil), nil
})
return retOK, retErr
}
diff --git a/lang/check/resolve.go b/lang/check/resolve.go
index 09cfcfa..c09629c 100644
--- a/lang/check/resolve.go
+++ b/lang/check/resolve.go
@@ -24,9 +24,9 @@
)
var (
- exprArgs = a.NewExpr(0, 0, 0, t.IDArgs, nil, nil, nil, nil)
- exprNullptr = a.NewExpr(0, 0, 0, t.IDNullptr, nil, nil, nil, nil)
- exprThis = a.NewExpr(0, 0, 0, t.IDThis, nil, nil, nil, nil)
+ exprArgs = a.NewExpr(0, 0, t.IDArgs, nil, nil, nil, nil)
+ exprNullptr = a.NewExpr(0, 0, t.IDNullptr, nil, nil, nil, nil)
+ exprThis = a.NewExpr(0, 0, t.IDThis, nil, nil, nil, nil)
)
var (
diff --git a/lang/check/type.go b/lang/check/type.go
index 648b622..01d243b 100644
--- a/lang/check/type.go
+++ b/lang/check/type.go
@@ -359,8 +359,8 @@
return nil
} else if id1.IsDQStrLiteral(q.tm) {
- if _, ok := q.c.statuses[n.StatusQID()]; !ok {
- return fmt.Errorf("check: unrecognized status %s", n.StatusQID().Str(q.tm))
+ if _, ok := q.c.statuses[t.QID{0, n.Ident()}]; !ok {
+ return fmt.Errorf("check: unrecognized status %s", n.Ident().Str(q.tm))
}
n.SetMType(typeExprStatus)
return nil
diff --git a/lang/parse/parse.go b/lang/parse/parse.go
index 52a9b23..298ad49 100644
--- a/lang/parse/parse.go
+++ b/lang/parse/parse.go
@@ -1228,7 +1228,7 @@
if err != nil {
return nil, err
}
- return a.NewExpr(0, t.IDComma, 0, 0, nil, nil, nil, args), nil
+ return a.NewExpr(0, t.IDComma, 0, nil, nil, nil, args), nil
}
func (p *parser) parseExpr() (*a.Expr, error) {
@@ -1270,7 +1270,7 @@
if op == 0 {
return nil, fmt.Errorf(`parse: internal error: no binary form for token 0x%02X`, x)
}
- return a.NewExpr(0, op, 0, 0, lhs.AsNode(), nil, rhs, nil), nil
+ return a.NewExpr(0, op, 0, lhs.AsNode(), nil, rhs, nil), nil
}
args := []*a.Node{lhs.AsNode(), rhs}
@@ -1286,7 +1286,7 @@
if op == 0 {
return nil, fmt.Errorf(`parse: internal error: no associative form for token 0x%02X`, x)
}
- return a.NewExpr(0, op, 0, 0, nil, nil, nil, args), nil
+ return a.NewExpr(0, op, 0, nil, nil, nil, args), nil
}
return lhs, nil
}
@@ -1303,11 +1303,11 @@
if op == 0 {
return nil, fmt.Errorf(`parse: internal error: no unary form for token 0x%02X`, x)
}
- return a.NewExpr(0, op, 0, 0, nil, nil, rhs.AsNode(), nil), nil
+ return a.NewExpr(0, op, 0, nil, nil, rhs.AsNode(), nil), nil
case x.IsLiteral(p.tm):
p.src = p.src[1:]
- return a.NewExpr(0, 0, 0, x, nil, nil, nil, nil), nil
+ return a.NewExpr(0, 0, x, nil, nil, nil, nil), nil
case x == t.IDOpenParen:
p.src = p.src[1:]
@@ -1327,7 +1327,7 @@
if err != nil {
return nil, err
}
- lhs := a.NewExpr(0, 0, 0, id, nil, nil, nil, nil)
+ lhs := a.NewExpr(0, 0, id, nil, nil, nil, nil)
for first := true; ; first = false {
flags := a.Flags(0)
@@ -1344,14 +1344,14 @@
if err != nil {
return nil, err
}
- lhs = a.NewExpr(flags, t.IDOpenParen, 0, 0, lhs.AsNode(), nil, nil, args)
+ lhs = a.NewExpr(flags, t.IDOpenParen, 0, lhs.AsNode(), nil, nil, args)
case t.IDOpenBracket:
id0, mhs, rhs, err := p.parseBracket(t.IDDotDot)
if err != nil {
return nil, err
}
- lhs = a.NewExpr(0, id0, 0, 0, lhs.AsNode(), mhs.AsNode(), rhs.AsNode(), nil)
+ lhs = a.NewExpr(0, id0, 0, lhs.AsNode(), mhs.AsNode(), rhs.AsNode(), nil)
case t.IDDot:
p.src = p.src[1:]
@@ -1364,7 +1364,7 @@
return nil, err
}
}
- lhs = a.NewExpr(0, t.IDDot, 0, selector, lhs.AsNode(), nil, nil, nil)
+ lhs = a.NewExpr(0, t.IDDot, selector, lhs.AsNode(), nil, nil, nil)
}
}
}