aboutsummaryrefslogtreecommitdiffhomepage
path: root/gn
diff options
context:
space:
mode:
authorGravatar Ethan Nicholas <ethannicholas@google.com>2017-09-07 15:44:01 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-09-11 16:17:00 +0000
commitc576e93d174f3106e072a2f506bca3990b541265 (patch)
treed4a410200aa71183c95643535b440bec919f2e18 /gn
parenta2bdf005f3c706065d1aa93f319f4b73932721d4 (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.py34
-rw-r--r--gn/sksl.gni9
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",