diff options
author | Ethan Nicholas <ethannicholas@google.com> | 2017-09-07 15:44:01 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-09-11 16:17:00 +0000 |
commit | c576e93d174f3106e072a2f506bca3990b541265 (patch) | |
tree | d4a410200aa71183c95643535b440bec919f2e18 /gn/run_sksllex.py | |
parent | a2bdf005f3c706065d1aa93f319f4b73932721d4 (diff) |
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 <bsalomon@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Diffstat (limited to 'gn/run_sksllex.py')
-rw-r--r-- | gn/run_sksllex.py | 34 |
1 files changed, 34 insertions, 0 deletions
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) |