From 0d6d09cbd9fc9e110cb3e164754c5d13b22e092d Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 31 Jul 2014 13:04:46 -0700 Subject: [PATCH] In generated parsers, export language as a function --- include/tree_sitter/parser.h | 4 +++- spec/runtime/document_spec.cc | 4 ++-- spec/runtime/helpers/dummy_language.c | 4 +++- spec/runtime/helpers/dummy_language.h | 2 +- spec/runtime/languages/language_specs.cc | 18 +++++++++--------- spec/runtime/node_spec.cc | 4 ++-- spec/runtime/parser_spec.cc | 6 ++++-- 7 files changed, 24 insertions(+), 18 deletions(-) diff --git a/include/tree_sitter/parser.h b/include/tree_sitter/parser.h index 7539c218..d4e76de5 100644 --- a/include/tree_sitter/parser.h +++ b/include/tree_sitter/parser.h @@ -163,7 +163,9 @@ struct TSLanguage { .lex_fn = ts_lex, \ }; \ \ - const TSLanguage *language_name = &language; + const TSLanguage * language_name() { \ + return &language; \ + } #ifdef __cplusplus } diff --git a/spec/runtime/document_spec.cc b/spec/runtime/document_spec.cc index 1d6d2d9c..13041eb4 100644 --- a/spec/runtime/document_spec.cc +++ b/spec/runtime/document_spec.cc @@ -2,7 +2,7 @@ #include "runtime/helpers/spy_reader.h" #include "runtime/tree.h" -extern "C" const TSLanguage * ts_language_json; +extern "C" const TSLanguage * ts_language_json(); START_TEST @@ -11,7 +11,7 @@ describe("incremental parsing", [&]() { before_each([&]() { doc = ts_document_make(); - ts_document_set_language(doc, ts_language_json); + ts_document_set_language(doc, ts_language_json()); }); after_each([&]() { diff --git a/spec/runtime/helpers/dummy_language.c b/spec/runtime/helpers/dummy_language.c index 6fb2be1e..acc975fb 100644 --- a/spec/runtime/helpers/dummy_language.c +++ b/spec/runtime/helpers/dummy_language.c @@ -37,4 +37,6 @@ static TSLanguage language = { .hidden_symbol_flags = hidden_symbols, }; -TSLanguage *dummy_language = &language; +const TSLanguage * dummy_language() { + return &language; +} diff --git a/spec/runtime/helpers/dummy_language.h b/spec/runtime/helpers/dummy_language.h index 0f95965a..8cb02271 100644 --- a/spec/runtime/helpers/dummy_language.h +++ b/spec/runtime/helpers/dummy_language.h @@ -14,7 +14,7 @@ enum { dummy_sym3 = 4, }; -extern TSLanguage *dummy_language; +const TSLanguage * dummy_language(); #ifdef __cplusplus } diff --git a/spec/runtime/languages/language_specs.cc b/spec/runtime/languages/language_specs.cc index 8ce26e19..f02bf44a 100644 --- a/spec/runtime/languages/language_specs.cc +++ b/spec/runtime/languages/language_specs.cc @@ -1,10 +1,10 @@ #include "runtime/runtime_spec_helper.h" #include "runtime/helpers/read_test_entries.h" -extern "C" TSLanguage *ts_language_javascript; -extern "C" TSLanguage *ts_language_json; -extern "C" TSLanguage *ts_language_arithmetic; -extern "C" TSLanguage *ts_language_golang; +extern "C" const TSLanguage *ts_language_javascript(); +extern "C" const TSLanguage *ts_language_json(); +extern "C" const TSLanguage *ts_language_arithmetic(); +extern "C" const TSLanguage *ts_language_golang(); START_TEST @@ -19,7 +19,7 @@ describe("Languages", [&]() { ts_document_free(doc); }); - auto run_tests_for_language = [&](string language_name, TSLanguage *language) { + auto run_tests_for_language = [&](string language_name, const TSLanguage *language) { describe(language_name.c_str(), [&]() { before_each([&]() { ts_document_set_language(doc, language); @@ -36,10 +36,10 @@ describe("Languages", [&]() { }); }; - run_tests_for_language("json", ts_language_json); - run_tests_for_language("arithmetic", ts_language_arithmetic); - run_tests_for_language("javascript", ts_language_javascript); - run_tests_for_language("golang", ts_language_golang); + run_tests_for_language("json", ts_language_json()); + run_tests_for_language("arithmetic", ts_language_arithmetic()); + run_tests_for_language("javascript", ts_language_javascript()); + run_tests_for_language("golang", ts_language_golang()); }); END_TEST diff --git a/spec/runtime/node_spec.cc b/spec/runtime/node_spec.cc index 2b74d79d..858c9ced 100644 --- a/spec/runtime/node_spec.cc +++ b/spec/runtime/node_spec.cc @@ -1,6 +1,6 @@ #include "runtime/runtime_spec_helper.h" -extern "C" TSLanguage * ts_language_json; +extern "C" TSLanguage * ts_language_json(); START_TEST @@ -10,7 +10,7 @@ describe("Node", []() { before_each([&]() { document = ts_document_make(); - ts_document_set_language(document, ts_language_json); + ts_document_set_language(document, ts_language_json()); ts_document_set_input_string(document, " [12, 5, 345]"); root = ts_document_root_node(document); diff --git a/spec/runtime/parser_spec.cc b/spec/runtime/parser_spec.cc index 64a85627..08593d14 100644 --- a/spec/runtime/parser_spec.cc +++ b/spec/runtime/parser_spec.cc @@ -20,10 +20,12 @@ START_TEST describe("LR Parsers", [&]() { TSParser parser; SpyReader *reader; + TSLanguage language; before_each([&]() { - dummy_language->lex_fn = fake_lex; - parser = ts_parser_make(dummy_language); + language = *dummy_language(); + language.lex_fn = fake_lex; + parser = ts_parser_make(&language); reader = new SpyReader("some structured text", 5); });