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 | |
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')
-rw-r--r-- | gn/run_sksllex.py | 34 | ||||
-rw-r--r-- | gn/sksl.gni | 9 |
2 files changed, 39 insertions, 4 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) diff --git a/gn/sksl.gni b/gn/sksl.gni index c1b6abaf02..65913e3417 100644 --- a/gn/sksl.gni +++ b/gn/sksl.gni @@ -9,15 +9,16 @@ _src = get_path_info("../src", "abspath") skia_sksl_sources = [ "$_src/sksl/SkSLCFGGenerator.cpp", "$_src/sksl/SkSLCompiler.cpp", - "$_src/sksl/SkSLIRGenerator.cpp", - "$_src/sksl/SkSLParser.cpp", "$_src/sksl/SkSLCPPCodeGenerator.cpp", - "$_src/sksl/SkSLHCodeGenerator.cpp", "$_src/sksl/SkSLGLSLCodeGenerator.cpp", + "$_src/sksl/SkSLHCodeGenerator.cpp", + "$_src/sksl/SkSLIRGenerator.cpp", + "$_src/sksl/SkSLLexer.cpp", + "$_src/sksl/SkSLLayoutLexer.cpp", + "$_src/sksl/SkSLParser.cpp", "$_src/sksl/SkSLSPIRVCodeGenerator.cpp", "$_src/sksl/SkSLString.cpp", "$_src/sksl/SkSLUtil.cpp", - "$_src/sksl/lex.layout.cpp", "$_src/sksl/ir/SkSLSymbolTable.cpp", "$_src/sksl/ir/SkSLSetting.cpp", "$_src/sksl/ir/SkSLType.cpp", |