Make some objects SkylarkValues

Skylark's Printer.BasePrinter doesn't guarantee it will call `.toString` on
objects of unknown types, and in the future that won't be the case anymore.
In order to keep their current string representations objects should implement
the SkylarkValue interface by providing an explicit implementation of `repr`.

PiperOrigin-RevId: 161526182
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Printer.java b/src/main/java/com/google/devtools/build/lib/syntax/Printer.java
index 12cc792..3a6c60d 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Printer.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Printer.java
@@ -20,6 +20,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
 import com.google.devtools.build.lib.syntax.SkylarkList.Tuple;
+import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.io.IOException;
 import java.util.Formattable;
@@ -351,10 +352,10 @@
       } else if (o instanceof Integer || o instanceof Double) {
         this.append(o.toString());
 
-      } else if (o == Boolean.TRUE) {
+      } else if (Boolean.TRUE.equals(o)) {
         this.append("True");
 
-      } else if (o == Boolean.FALSE) {
+      } else if (Boolean.FALSE.equals(o)) {
         this.append("False");
 
       } else if (o instanceof Map<?, ?>) {
@@ -374,6 +375,9 @@
       } else if (o instanceof PathFragment) {
         this.append(((PathFragment) o).getPathString());
 
+      } else if (o instanceof Path) {
+        append(o.toString());
+
       } else if (o instanceof Class<?>) {
         this.append(EvalUtils.getDataTypeNameFromClass((Class<?>) o));