From 155f9bb93264d992eadfff124730bfe3eb3d4710 Mon Sep 17 00:00:00 2001 From: Allan Odgaard Date: Thu, 22 Aug 2013 13:02:25 +0200 Subject: [PATCH] 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. --- Frameworks/buffer/src/buffer.h | 1 + Frameworks/buffer/src/parsing.cc | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Frameworks/buffer/src/buffer.h b/Frameworks/buffer/src/buffer.h index d53926c3..68620fac 100644 --- a/Frameworks/buffer/src/buffer.h +++ b/Frameworks/buffer/src/buffer.h @@ -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 scopes (size_t from, size_t to) const; diff --git a/Frameworks/buffer/src/parsing.cc b/Frameworks/buffer/src/parsing.cc index 2c19d18d..2ff2b34c 100644 --- a/Frameworks/buffer/src/parsing.cc +++ b/Frameworks/buffer/src/parsing.cc @@ -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 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 });