gopls/internal/lsp/frob: fix build breakage

CL 510378 fixed only one of the three cases of prematurely
using new API that was called out during its code review,
but I didn't notice this because I used AutoSubmit, which
circumvents the Kokoro check of older toolchains.

Change-Id: I723b94149a6b3fb3d05ec667910e4a14e2303a9a
Reviewed-on: https://go-review.googlesource.com/c/tools/+/523075
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Alan Donovan <adonovan@google.com>
gopls-CI: kokoro <noreply+kokoro@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
diff --git a/gopls/internal/lsp/frob/frob.go b/gopls/internal/lsp/frob/frob.go
index e3abcfe..57f1ef5 100644
--- a/gopls/internal/lsp/frob/frob.go
+++ b/gopls/internal/lsp/frob/frob.go
@@ -95,7 +95,7 @@
 
 		case reflect.Array,
 			reflect.Slice,
-			reflect.Pointer:
+			reflect.Ptr: // TODO(adonovan): after go1.18, use Pointer
 			fr.addElem(fr.t.Elem())
 
 		case reflect.Map:
@@ -213,7 +213,7 @@
 			}
 		}
 
-	case reflect.Pointer:
+	case reflect.Ptr: // TODO(adonovan): after go1.18, use Pointer
 		if v.IsNil() {
 			out.uint8(0)
 		} else {
@@ -337,7 +337,7 @@
 			}
 		}
 
-	case reflect.Pointer:
+	case reflect.Ptr: // TODO(adonovan): after go1.18, use Pointer
 		isNil := in.uint8() == 0
 		if !isNil {
 			ptr := reflect.New(fr.elems[0].t)
@@ -398,7 +398,38 @@
 type writer struct{ data []byte }
 
 func (w *writer) uint8(v uint8)   { w.data = append(w.data, v) }
-func (w *writer) uint16(v uint16) { w.data = le.AppendUint16(w.data, v) }
-func (w *writer) uint32(v uint32) { w.data = le.AppendUint32(w.data, v) }
-func (w *writer) uint64(v uint64) { w.data = le.AppendUint64(w.data, v) }
+func (w *writer) uint16(v uint16) { w.data = appendUint16(w.data, v) }
+func (w *writer) uint32(v uint32) { w.data = appendUint32(w.data, v) }
+func (w *writer) uint64(v uint64) { w.data = appendUint64(w.data, v) }
 func (w *writer) bytes(v []byte)  { w.data = append(w.data, v...) }
+
+// TODO(adonovan): delete these as in go1.19 they are methods on LittleEndian:
+
+func appendUint16(b []byte, v uint16) []byte {
+	return append(b,
+		byte(v),
+		byte(v>>8),
+	)
+}
+
+func appendUint32(b []byte, v uint32) []byte {
+	return append(b,
+		byte(v),
+		byte(v>>8),
+		byte(v>>16),
+		byte(v>>24),
+	)
+}
+
+func appendUint64(b []byte, v uint64) []byte {
+	return append(b,
+		byte(v),
+		byte(v>>8),
+		byte(v>>16),
+		byte(v>>24),
+		byte(v>>32),
+		byte(v>>40),
+		byte(v>>48),
+		byte(v>>56),
+	)
+}