Add support for the ternary operator to the header scrubber.

Used in various uapi headers.

Change-Id: Id0f862d2adc7ddc9727e8a29160d5435f8d547c3
diff --git a/libc/kernel/tools/cpp.py b/libc/kernel/tools/cpp.py
index 2cc4e94..04e4256 100644
--- a/libc/kernel/tools/cpp.py
+++ b/libc/kernel/tools/cpp.py
@@ -554,19 +554,21 @@
         where "op" is a string describing the operation"""
 
     unaries  = [ "!", "~" ]
-    binaries = [ "+", "-", "<", "<=", ">=", ">", "&&", "||", "*", "/", "%", "&", "|", "^", "<<", ">>", "==", "!=" ]
-    precedences = { "||": 1,
-                    "&&": 2,
-                     "|": 3,
-                     "^": 4,
-                     "&": 5,
-                     "==":6, "!=":6,
-                     "<":7, "<=":7, ">":7, ">=":7,
-                     "<<":8, ">>":8,
-                     "+":9, "-":9,
-                     "*":10, "/":10, "%":10,
-                     "!":11, "~":12
-                     }
+    binaries = [ "+", "-", "<", "<=", ">=", ">", "&&", "||", "*", "/", "%", "&", "|", "^", "<<", ">>", "==", "!=", "?", ":" ]
+    precedences = {
+        "?": 1, ":": 1,
+        "||": 2,
+        "&&": 3,
+        "|": 4,
+        "^": 5,
+        "&": 6,
+        "==": 7, "!=": 7,
+        "<": 8, "<=": 8, ">": 8, ">=": 8,
+        "<<": 9, ">>": 9,
+        "+": 10, "-": 10,
+        "*": 11, "/": 11, "%": 11,
+        "!": 12, "~": 12
+    }
 
     re_cpp_constant = re.compile(r"((\d|\w|_)+)")
 
@@ -581,7 +583,7 @@
         if debugCppExpr:
             print "CppExpr: got " + repr(self.expr)
         if self.i != self.n:
-            print 'crap at end of input (%d != %d)' % (self.i, self.n)
+            print 'crap at end of input (%d != %d): %s' % (self.i, self.n, repr(tokens))
             raise
 
 
@@ -778,6 +780,10 @@
             self.nextToken()
             primary = self.parseExpression(0)
             self.expectId(tokRPAREN)
+        elif op.id == "?":
+            self.nextToken()
+            primary = self.parseExpression(0)
+            self.expectId(":")
         elif op.id == tokNUMBER:
             primary = self.is_number()
         elif op.id == tokIDENT: