Add ast.Expr IsArgsDotFoo and IsMethodCall methods
diff --git a/internal/cgen/var.go b/internal/cgen/var.go
index 6106b29..7321f10 100644
--- a/internal/cgen/var.go
+++ b/internal/cgen/var.go
@@ -25,29 +25,20 @@
 var errNeedDerivedVar = errors.New("cgen: internal error: need derived var")
 
 func (g *gen) needDerivedVar(name t.ID) bool {
+	if name == 0 {
+		return false
+	}
 	for _, o := range g.currFunk.astFunc.Body() {
 		err := o.Walk(func(p *a.Node) error {
 			// Look for p matching "args.name.etc(etc)".
 			if p.Kind() != a.KExpr {
 				return nil
 			}
-			q := p.AsExpr()
-			if q.Operator() != t.IDOpenParen {
-				return nil
+			recv, _, _ := p.AsExpr().IsMethodCall()
+			if (recv != nil) && (recv.IsArgsDotFoo() == name) {
+				return errNeedDerivedVar
 			}
-			q = q.LHS().AsExpr()
-			if q.Operator() != t.IDDot {
-				return nil
-			}
-			q = q.LHS().AsExpr()
-			if q.Operator() != t.IDDot || q.Ident() != name {
-				return nil
-			}
-			q = q.LHS().AsExpr()
-			if q.Operator() != 0 || q.Ident() != t.IDArgs {
-				return nil
-			}
-			return errNeedDerivedVar
+			return nil
 		})
 		if err == errNeedDerivedVar {
 			return true
diff --git a/lang/ast/ast.go b/lang/ast/ast.go
index 95e20a1..a1b773f 100644
--- a/lang/ast/ast.go
+++ b/lang/ast/ast.go
@@ -371,6 +371,24 @@
 func (n *Expr) SetMBounds(x interval.IntRange) { n.mBounds = x }
 func (n *Expr) SetMType(x *TypeExpr)           { n.mType = x }
 
+func (n *Expr) IsArgsDotFoo() (foo t.ID) {
+	if n.id0 == t.IDDot {
+		if (n.lhs.id0 == 0) && (n.lhs.id2 == t.IDArgs) {
+			return n.id2
+		}
+	}
+	return 0
+}
+
+func (n *Expr) IsMethodCall() (recv *Expr, meth t.ID, args []*Node) {
+	if n.id0 == t.IDOpenParen {
+		if o := n.lhs; o.id0 == t.IDDot {
+			return o.lhs.AsExpr(), o.id2, n.list0
+		}
+	}
+	return nil, 0, nil
+}
+
 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 {