Ensure grammar is retained during parsing

Since parsing is done in a separate thread, and it works with pointers, we need to ensure that the grammar is retained for at least as long as the thread lives.
This commit is contained in:
Allan Odgaard
2013-08-22 13:02:25 +02:00
parent 05faaf638e
commit 155f9bb932
2 changed files with 3 additions and 0 deletions

View File

@@ -109,6 +109,7 @@ namespace ng
text::indent_t const& indent () const { return _indent; }
bool set_grammar (bundles::item_ptr const& grammarItem);
parse::grammar_ptr grammar () const { return _grammar; }
scope::context_t scope (size_t i, bool includeDynamic = true) const;
std::map<size_t, scope::scope_t> scopes (size_t from, size_t to) const;

View File

@@ -33,6 +33,7 @@ namespace ng
void handle_reply (result_t const& result);
private:
parse::grammar_ptr _grammar;
size_t _client_key;
buffer_t& _buffer;
size_t _revision;
@@ -50,6 +51,7 @@ namespace ng
buffer_parser_t::buffer_parser_t (buffer_t& buffer, parse::stack_ptr const& parserState, std::string const& line, std::pair<size_t, size_t> const& range, size_t const& batch_start, size_t limit_redraw) : _buffer(buffer)
{
_grammar = buffer.grammar();
_client_key = server().register_client(this);
_revision = buffer.revision();
server().send_request(_client_key, (request_t){ parserState, line, range, batch_start, limit_redraw });