Implement list.clear()
#8728
Closes #8764.
PiperOrigin-RevId: 258347327
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java
index 1c3856b..1ae08f9 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java
@@ -490,6 +490,17 @@
}
@SkylarkCallable(
+ name = "clear",
+ doc = "Removes all the elements of the list.",
+ useLocation = true,
+ useEnvironment = true)
+ public Runtime.NoneType clearMethod(Location loc, Environment env) throws EvalException {
+ checkMutable(loc, env.mutability());
+ contents.clear();
+ return Runtime.NONE;
+ }
+
+ @SkylarkCallable(
name = "insert",
doc = "Inserts an item at a given position.",
parameters = {
diff --git a/src/test/starlark/testdata/list_mutation.sky b/src/test/starlark/testdata/list_mutation.sky
index 7e5a3ee..3dbcf7e 100644
--- a/src/test/starlark/testdata/list_mutation.sky
+++ b/src/test/starlark/testdata/list_mutation.sky
@@ -93,3 +93,12 @@
[1, 2].pop(3) ### index out of range (index is 3, but sequence has 2 elements)
---
(1, 2).pop() ### type 'tuple' has no method pop()
+---
+
+# clear
+
+foo = [1, 2, 3, 4]
+foo.clear()
+assert_eq(foo, [])
+
+assert_eq(['a', 'b'].clear(), None)
\ No newline at end of file