Make clear_var_list set nonexistant variables to empty strings

Make's clear-var-list causes the variables to exist as empty strings.
Mimic that functionality in starlark for the variable diff and ?=.

Bug: 262303006
Test: ./out/rbcrun ./build/make/tests/run.rbc
Change-Id: I5f9c8cf342d875b1022c5c74906e59fa68fcd6c9
diff --git a/core/product_config.rbc b/core/product_config.rbc
index b3156c6..b0d6977 100644
--- a/core/product_config.rbc
+++ b/core/product_config.rbc
@@ -860,6 +860,10 @@
         if v in cfg:
             cfg[v] = __zero_value(cfg[v])
 
+        if v not in cfg and v not in g:
+            # Cause the variable to appear set like the make version does
+            g[v] = ""
+
 
 def __get_options():
     """Returns struct containing runtime global settings."""
diff --git a/tests/run.rbc b/tests/run.rbc
index 06f56d3..e8c4caa 100644
--- a/tests/run.rbc
+++ b/tests/run.rbc
@@ -164,13 +164,14 @@
 
 g = {"FOO": "a", "BAR": "c", "BAZ": "e"}
 cfg = {"FOO": "b", "BAR": "d", "BAZ": "f"}
-rblf.clear_var_list(g, struct(cfg=cfg), "FOO BAR")
+rblf.clear_var_list(g, struct(cfg=cfg), "FOO BAR NEWVAR")
 assert_eq("", g["FOO"])
 assert_eq("", cfg["FOO"])
 assert_eq("", g["BAR"])
 assert_eq("", cfg["BAR"])
 assert_eq("e", g["BAZ"])
 assert_eq("f", cfg["BAZ"])
+assert_eq("", g.get("NEWVAR"))
 
 test_single_value_inheritance()
 test_artifact_path_requirements()