From c576e93d174f3106e072a2f506bca3990b541265 Mon Sep 17 00:00:00 2001 From: Ethan Nicholas Date: Thu, 7 Sep 2017 15:44:01 -0400 Subject: Switch to the new SkSL lexer. This completely replaces flex with a new in-house lexical analyzer generator, which we have done for performance and memory usage reasons. Flex requires us to copy strings every time we need the text of a token, whereas this new lexer allows us to handle strings as a (non-null-terminated) pointer and length everywhere, eliminating most string copies. Bug: skia: Change-Id: I2add26efc9e20cb699520e82abcf713af3968aca Reviewed-on: https://skia-review.googlesource.com/39780 Reviewed-by: Brian Salomon Commit-Queue: Ethan Nicholas --- gn/run_sksllex.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 gn/run_sksllex.py (limited to 'gn/run_sksllex.py') diff --git a/gn/run_sksllex.py b/gn/run_sksllex.py new file mode 100644 index 0000000000..0377283b5a --- /dev/null +++ b/gn/run_sksllex.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python +# +# Copyright 2017 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import os +import subprocess +import sys + +sksllex = sys.argv[1] +clangFormat = sys.argv[2] +src = sys.argv[3] +try: + subprocess.check_output([sksllex, src + "/sksl/lex/sksl.lex", "Lexer", + "Token", src + "/sksl/SkSLLexer.h", src + + "/sksl/SkSLLexer.cpp"]) + subprocess.check_call(clangFormat + " -i \"" + src + "/sksl/SkSLLexer.h\"", + shell=True) + subprocess.check_call(clangFormat + " -i \"" + src + + "/sksl/SkSLLexer.cpp\"", shell=True) + subprocess.check_output([sksllex, src + "/sksl/lex/layout.lex", + "LayoutLexer", "LayoutToken", + src + "/sksl/SkSLLayoutLexer.h", + src + "/sksl/SkSLLayoutLexer.cpp"]) + subprocess.check_call(clangFormat + " -i \"" + src + + "/sksl/SkSLLayoutLexer.h\"", shell=True) + subprocess.check_call(clangFormat + " -i \"" + src + + "/sksl/SkSLLayoutLexer.cpp\"", shell=True) +except subprocess.CalledProcessError as err: + print("### Lexer error:") + print(err.output) + exit(1) -- cgit v1.2.3