diff --git a/internal/cgen/builtin.go b/internal/cgen/builtin.go
index e2fcff0..74903fe 100644
--- a/internal/cgen/builtin.go
+++ b/internal/cgen/builtin.go
@@ -102,23 +102,23 @@
 func (g *gen) writeBuiltinIO(b *buffer, recv *a.Expr, method t.ID, args []*a.Node, depth uint32) error {
 	switch method {
 	case t.IDAvailable:
-		p0, p1 := "", ""
+		p, q := "", ""
 		// TODO: don't hard-code these.
 		switch recv.Str(g.tm) {
 		case "args.dst":
-			p0 = "io2_a_dst"
-			p1 = "iop_a_dst"
+			p = "io2_a_dst"
+			q = "iop_a_dst"
 		case "args.src":
-			p0 = "io2_a_src"
-			p1 = "iop_a_src"
+			p = "io2_a_src"
+			q = "iop_a_src"
 		case "w":
-			p0 = "io2_v_w"
-			p1 = "iop_v_w"
+			p = "io2_v_w"
+			q = "iop_v_w"
 		}
-		if p0 == "" {
+		if p == "" {
 			return fmt.Errorf(`TODO: cgen a "foo.available" expression`)
 		}
-		b.printf("((uint64_t)(%s - %s))", p0, p1)
+		b.printf("((uint64_t)(%s - %s))", p, q)
 		return nil
 	}
 	return errNoSuchBuiltin
diff --git a/internal/cgen/var.go b/internal/cgen/var.go
index fb08a55..d5f5a14 100644
--- a/internal/cgen/var.go
+++ b/internal/cgen/var.go
@@ -95,9 +95,9 @@
 	}
 
 	preName := prefix + name.Str(g.tm)
-	i0, i1 := "meta.ri", "meta.wi"
+	i1, i2 := "meta.ri", "meta.wi"
 	if typ.QID()[1] == t.IDIOWriter {
-		i0, i1 = "meta.wi", "data.len"
+		i1, i2 = "meta.wi", "data.len"
 	}
 
 	if header {
@@ -109,12 +109,12 @@
 	b.printf("if (%s) {", preName)
 
 	b.printf("%s%s = %s->data.ptr + %s->%s;",
-		iopPrefix, preName, preName, preName, i0)
+		iopPrefix, preName, preName, preName, i1)
 
 	if header {
 		b.printf("%s%s = %s%s;", io1Prefix, preName, iopPrefix, preName)
 		b.printf("%s%s = %s->data.ptr + %s->%s;",
-			io2Prefix, preName, preName, preName, i1)
+			io2Prefix, preName, preName, preName, i2)
 
 		if typ.QID()[1] == t.IDIOWriter {
 			b.printf("if (%s->meta.closed) {", preName)
@@ -153,13 +153,13 @@
 	}
 
 	preName := prefix + name.Str(g.tm)
-	i0 := "ri"
+	index := "ri"
 	if typ.QID()[1] == t.IDIOWriter {
-		i0 = "wi"
+		index = "wi"
 	}
 
 	b.printf("if (%s) { %s->meta.%s = ((size_t)(%s%s - %s->data.ptr)); }\n",
-		preName, preName, i0, iopPrefix, preName, preName)
+		preName, preName, index, iopPrefix, preName, preName)
 	return nil
 }
 
