--- /dev/null
+# -*- coding: utf-8 -*-
+
+#-------------------------------------------------------------------------
+# drawElements Quality Program utilities
+# --------------------------------------
+#
+# Copyright (c) 2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#-------------------------------------------------------------------------
+
+import os
+import re
+import sys
+from argparse import ArgumentParser
+from common import getChangedFiles, getAllProjectFiles, isTextFile
+
+CHECK_LITERAL_PATTERNS = [
+ r'\b[us]*int[0-9]+_t\b',
+ r'\b[U]*INT(_LEAST|_FAST|)[0-9]+_MAX\b',
++ r'\b0b',
+]
+
+CHECK_LIST = [
+ ".cpp",
+ ".hpp",
+ ".c",
+ ".h",
+]
+
+EXCLUSION_LIST = [
+ "framework/delibs/debase/deDefs.h",
+ "framework/platform/android/tcuAndroidPlatform.cpp",
+ "framework/platform/android/tcuAndroidWindow.hpp",
+ "framework/platform/android/tcuAndroidWindow.cpp",
+ "framework/platform/lnx/X11/tcuLnxX11Xcb.cpp",
+ "framework/platform/lnx/wayland/tcuLnxWayland.hpp",
+ "framework/platform/lnx/wayland/tcuLnxWayland.cpp",
++ "framework/delibs/debase/deFloat16.c",
+]
+
+def checkEnds(line, ends):
+ return any(line.endswith(end) for end in ends)
+
+def checkFileInvalidLiterals (file):
+ error = False
+
+ if checkEnds(file.replace("\\", "/"), CHECK_LIST) and not checkEnds(file.replace("\\", "/"), EXCLUSION_LIST):
+ f = open(file, 'rb')
+ for lineNum, line in enumerate(f):
+ # Remove inline comments
+ idx = line.find("//")
+ if idx > 0:
+ line = line[:idx]
+ # Remove text in quoted literals
+ if line.find("\"") > 0:
+ list = line.split('"')
+ del list[1::2]
+ line = ' '
+ line = line.join(list)
+ for pattern in CHECK_LITERAL_PATTERNS:
+ found = re.search(pattern, line)
+ if found is not None:
+ error = True
+ print "%s:%i Unacceptable type found (pattern:%s)" % (file, lineNum+1, pattern)
+ f.close()
+
+ return not error
+
+def checkInvalidLiterals (files):
+ error = False
+ for file in files:
+ if isTextFile(file):
+ if not checkFileInvalidLiterals(file):
+ error = True
+
+ return not error
+
+if __name__ == "__main__":
+ parser = ArgumentParser()
+ parser.add_argument("-e", "--only-errors", action="store_true", dest="onlyErrors", default=False, help="Print only on error")
+ parser.add_argument("-i", "--only-changed", action="store_true", dest="useGitIndex", default=False, help="Check only modified files. Uses git.")
+
+ args = parser.parse_args()
+
+ if args.useGitIndex:
+ files = getChangedFiles()
+ else:
+ files = getAllProjectFiles()
+
+ error = not checkInvalidLiterals(files)
+
+ if error:
+ print "One or more checks failed"
+ sys.exit(1)
+ if not args.onlyErrors:
+ print "All checks passed"