Parser: Useful error messages when a Python keyword is used.

--
MOS_MIGRATED_REVID=89307831
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
index afca4b3..683f2c7 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
@@ -316,8 +316,16 @@
   public void testAssignKeyword() {
     syntaxEvents.setFailFast(false);
     parseExpr("with = 4");
+    syntaxEvents.assertContainsEvent("keyword 'with' not supported");
     syntaxEvents.assertContainsEvent("syntax error at 'with': expected expression");
-    syntaxEvents.collector().clear();
+  }
+
+  @Test
+  public void testTry() {
+    syntaxEvents.setFailFast(false);
+    parseExpr("try: 1 + 1");
+    syntaxEvents.assertContainsEvent("'try' not supported, all exceptions are fatal");
+    syntaxEvents.assertContainsEvent("syntax error at 'try': expected expression");
   }
 
   @Test
@@ -754,6 +762,21 @@
   }
 
   @Test
+  public void testFunctionDefinitionIgnoredEvenWithUnsupportedKeyword() throws Exception {
+    // Parser skips over entire function definitions without reporting error,
+    // when parsePython is set to true.
+    List<Statement> stmts = parseFile(
+        "x = 1;\n"
+        + "def foo(x, y, **z):\n"
+        + "  try:\n"
+        + "    x = 2\n"
+        + "  with: pass\n"
+        + "  return 2\n"
+        + "x = 3", true /* parsePython */);
+    assertThat(stmts).hasSize(2);
+  }
+
+  @Test
   public void testFunctionDefinitionIgnored() throws Exception {
     // Parser skips over entire function definitions without reporting error,
     // when parsePython is set to true.