In generated parsers, export language as a function

This commit is contained in:
Max Brunsfeld 2014-07-31 13:04:46 -07:00
parent 909261d742
commit 0d6d09cbd9
7 changed files with 24 additions and 18 deletions

View file

@ -163,7 +163,9 @@ struct TSLanguage {
.lex_fn = ts_lex, \
}; \
\
const TSLanguage *language_name = &language;
const TSLanguage * language_name() { \
return &language; \
}
#ifdef __cplusplus
}

View file

@ -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([&]() {

View file

@ -37,4 +37,6 @@ static TSLanguage language = {
.hidden_symbol_flags = hidden_symbols,
};
TSLanguage *dummy_language = &language;
const TSLanguage * dummy_language() {
return &language;
}

View file

@ -14,7 +14,7 @@ enum {
dummy_sym3 = 4,
};
extern TSLanguage *dummy_language;
const TSLanguage * dummy_language();
#ifdef __cplusplus
}

View file

@ -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

View file

@ -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);

View file

@ -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);
});