xerrors: redirect Is, As, Unwrap to errors package

They're available in the standard library as of Go 1.13.

Change-Id: I8ff4f011a0904ce444e0e8c9b0ce9488668ba851
Reviewed-on: https://go-review.googlesource.com/c/xerrors/+/610077
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
diff --git a/doc.go b/doc.go
index 2ef99f5..c255c43 100644
--- a/doc.go
+++ b/doc.go
@@ -6,7 +6,7 @@
 //
 // This package is based on the Go 2 proposal for error values:
 //
-//	https://golang.org/design/29934-error-values
+// https://go.dev/design/29934-error-values
 //
 // These functions were incorporated into the standard library's errors package
 // in Go 1.13:
@@ -16,8 +16,6 @@
 //
 // Also, Errorf's %w verb was incorporated into fmt.Errorf.
 //
-// Use this package to get equivalent behavior in all supported Go versions.
-//
 // No other features of this package were included in Go 1.13, and at present
 // there are no plans to include any of them.
-package xerrors // import "golang.org/x/xerrors"
+package xerrors
diff --git a/wrap.go b/wrap.go
index 3cc27dc..b54e138 100644
--- a/wrap.go
+++ b/wrap.go
@@ -4,9 +4,7 @@
 
 package xerrors
 
-import (
-	"reflect"
-)
+import "errors"
 
 // A Wrapper provides context around another error.
 type Wrapper interface {
@@ -36,77 +34,50 @@
 // Unwrap returns the result of calling the Unwrap method on err, if err implements
 // Unwrap. Otherwise, Unwrap returns nil.
 //
-// Deprecated: As of Go 1.13, use errors.Unwrap instead.
-func Unwrap(err error) error {
-	u, ok := err.(Wrapper)
-	if !ok {
-		return nil
-	}
-	return u.Unwrap()
-}
+// Unwrap only calls a method of the form "Unwrap() error".
+// In particular Unwrap does not unwrap errors returned by [errors.Join].
+//
+// Deprecated: As of Go 1.13, this function simply calls [errors.Unwrap].
+func Unwrap(err error) error { return errors.Unwrap(err) }
 
-// Is reports whether any error in err's chain matches target.
+// Is reports whether any error in err's tree matches target.
+//
+// The tree consists of err itself, followed by the errors obtained by repeatedly
+// calling its Unwrap() error or Unwrap() []error method. When err wraps multiple
+// errors, Is examines err followed by a depth-first traversal of its children.
 //
 // An error is considered to match a target if it is equal to that target or if
 // it implements a method Is(error) bool such that Is(target) returns true.
 //
-// Deprecated: As of Go 1.13, use errors.Is instead.
-func Is(err, target error) bool {
-	if target == nil {
-		return err == target
-	}
-
-	isComparable := reflect.TypeOf(target).Comparable()
-	for {
-		if isComparable && err == target {
-			return true
-		}
-		if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(target) {
-			return true
-		}
-		// TODO: consider supporing target.Is(err). This would allow
-		// user-definable predicates, but also may allow for coping with sloppy
-		// APIs, thereby making it easier to get away with them.
-		if err = Unwrap(err); err == nil {
-			return false
-		}
-	}
-}
-
-// As finds the first error in err's chain that matches the type to which target
-// points, and if so, sets the target to its value and returns true. An error
-// matches a type if it is assignable to the target type, or if it has a method
-// As(interface{}) bool such that As(target) returns true. As will panic if target
-// is not a non-nil pointer to a type which implements error or is of interface type.
+// An error type might provide an Is method so it can be treated as equivalent
+// to an existing error. For example, if MyError defines
 //
-// The As method should set the target to its value and return true if err
-// matches the type to which target points.
+//	func (m MyError) Is(target error) bool { return target == fs.ErrExist }
 //
-// Deprecated: As of Go 1.13, use errors.As instead.
-func As(err error, target any) bool {
-	if target == nil {
-		panic("errors: target cannot be nil")
-	}
-	val := reflect.ValueOf(target)
-	typ := val.Type()
-	if typ.Kind() != reflect.Ptr || val.IsNil() {
-		panic("errors: target must be a non-nil pointer")
-	}
-	if e := typ.Elem(); e.Kind() != reflect.Interface && !e.Implements(errorType) {
-		panic("errors: *target must be interface or implement error")
-	}
-	targetType := typ.Elem()
-	for err != nil {
-		if reflect.TypeOf(err).AssignableTo(targetType) {
-			val.Elem().Set(reflect.ValueOf(err))
-			return true
-		}
-		if x, ok := err.(interface{ As(any) bool }); ok && x.As(target) {
-			return true
-		}
-		err = Unwrap(err)
-	}
-	return false
-}
+// then Is(MyError{}, fs.ErrExist) returns true. See [syscall.Errno.Is] for
+// an example in the standard library. An Is method should only shallowly
+// compare err and the target and not call [Unwrap] on either.
+//
+// Deprecated: As of Go 1.13, this function simply calls [errors.Is].
+func Is(err, target error) bool { return errors.Is(err, target) }
 
-var errorType = reflect.TypeOf((*error)(nil)).Elem()
+// As finds the first error in err's tree that matches target, and if one is found,
+// sets target to that error value and returns true. Otherwise, it returns false.
+//
+// The tree consists of err itself, followed by the errors obtained by repeatedly
+// calling its Unwrap() error or Unwrap() []error method. When err wraps multiple
+// errors, As examines err followed by a depth-first traversal of its children.
+//
+// An error matches target if the error's concrete value is assignable to the value
+// pointed to by target, or if the error has a method As(any) bool such that
+// As(target) returns true. In the latter case, the As method is responsible for
+// setting target.
+//
+// An error type might provide an As method so it can be treated as if it were a
+// different error type.
+//
+// As panics if target is not a non-nil pointer to either a type that implements
+// error, or to any interface type.
+//
+// Deprecated: As of Go 1.13, this function simply calls [errors.As].
+func As(err error, target any) bool { return errors.As(err, target) }