diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/slang-lookup-generator/lookup-generator-main.cpp | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/tools/slang-lookup-generator/lookup-generator-main.cpp b/tools/slang-lookup-generator/lookup-generator-main.cpp index cb1c15dd3..f64e2a78f 100644 --- a/tools/slang-lookup-generator/lookup-generator-main.cpp +++ b/tools/slang-lookup-generator/lookup-generator-main.cpp @@ -6,6 +6,7 @@ #include "../../source/compiler-core/slang-lexer.h" #include "../../source/core/slang-io.h" #include "../../source/core/slang-secure-crt.h" +#include "../../source/core/slang-string-util.h" using namespace Slang; @@ -310,7 +311,7 @@ int main(int argc, const char* const* argv) return 1; } - const char* const inJsonPath = argv[1]; + const char* const inPath = argv[1]; const char* const outCppPath = argv[2]; const char* const enumName = argv[3]; const char* const enumerantPrefix = argv[4]; @@ -322,20 +323,36 @@ int main(int argc, const char* const* argv) DiagnosticSink sink(&sourceManager, Lexer::sourceLocationLexer); sink.writer = writer; - JSONContainer container(sink.getSourceManager()); - JSONBuilder builder(&container); - if (SLANG_FAILED(parseJson(inJsonPath, &sink, builder))) + List<String> opnames; + + if (String(inPath).endsWith("json")) { - sink.diagnoseRaw(Severity::Error, "Json parsing failed\n"); - return 1; - } + // If source is a json file parse it. + JSONContainer container(sink.getSourceManager()); + JSONBuilder builder(&container); + if (SLANG_FAILED(parseJson(inPath, &sink, builder))) + { + sink.diagnoseRaw(Severity::Error, "Json parsing failed\n"); + return 1; + } - UnownedStringSlice error; - const List<String> opnames = extractOpNames(error, builder.getRootValue(), container); - if (error.getLength()) + UnownedStringSlice error; + opnames = extractOpNames(error, builder.getRootValue(), container); + if (error.getLength()) + { + sink.diagnoseRaw(Severity::Error, error); + return 1; + } + } + else { - sink.diagnoseRaw(Severity::Error, error); - return 1; + // Otherwise, we assume the input is a text file with one name per line. + String content; + File::readAllText(inPath, content); + List<UnownedStringSlice> words; + StringUtil::split(content.getUnownedSlice(), '\n', words); + for (auto w : words) + opnames.add(w); } HashParams hashParams; |
