antlr4-native 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f14d05febd863a51c3e111e7ef3493eb2fe1b72fe72b0b3d1c5c114a2947f7c7
4
- data.tar.gz: e8f3fe771ae21c552a1074e2f0608f9c87da1e7bd9063f2f8e18363531c37e6b
3
+ metadata.gz: 8bed5c4bbb574d8ad5cbef067bee9fff704a1f0bf8d5fa0b522393d5fa771be3
4
+ data.tar.gz: 44dcb2987d8f3c04bc2f9a4769853b6bdfbf390b0aebdff9fcc783b98a389896
5
5
  SHA512:
6
- metadata.gz: 64cf7e6628edbaff365daf278c1e70dccd7ca083128d604efe8fcb4850c77efc621ce204fe250a7ffb91adb5d6cb4d02de9f1f68bbbb32c4c8c79d725c308a26
7
- data.tar.gz: 1c5ba3ec3908cc1a951794d0e70f87afa0f01694ef623b38269ad5f22569fd8b587c1c6a7e820d32de273f6c87e77d15abcf604e83b0edd13f2a0636c09c5d86
6
+ metadata.gz: 25961945b37da84af109e20b39728f57108d3e7490165d936898c95a76bec6add1e18086609c0085f14614efcd801b31723a17032a111ec86236f31709f52ec6
7
+ data.tar.gz: 20e79181660b66a56c94ef35fccd369c7590ed676703854f91aafa7147398fea220fb26c6e7f7ccb1bc3810fcc4c64f0db0018dda887b6344f6ae97930e24f3e
data/README.md CHANGED
@@ -79,9 +79,8 @@ Finally, if you override `#initialize` in your visitor subclasses, don't forget
79
79
 
80
80
  ## Caveats
81
81
 
82
- 1. Avoid retaining references to contexts, tokens, etc anywhere in your Ruby code. Contexts (i.e. the `ctx` variables in the examples above) and other objects that are created by ANTLR's C++ runtime are automatically cleaned up without the Ruby interpreter's knowledge. You'll almost surely see a segfault if you retain a reference to one of these objects and try to use it after the call to `Parser#visit`.
83
- 2. Due to an ANTLR limitation, parsers cannot be used in a multi-threaded environment, even if each parser instance is used entirely in the context of a single thread (i.e. parsers are not shared between threads). According to the ANTLR C++ developers, parsers should be threadsafe. Unfortunately firsthand experience has proven otherwise. Your mileage may vary.
84
- 3. The description of this gem says "(almost) any ANTLR4 grammar" because many grammars contain target-specific code. For example, the Python3 grammar referenced in the examples above contains inline Java code that the C++ compiler won't understand. You'll need to port any such code to C++ before you'll be able to compile and use the native extension.
82
+ 1. Due to an ANTLR limitation, parsers cannot be used in a multi-threaded environment, even if each parser instance is used entirely in the context of a single thread (i.e. parsers are not shared between threads). According to the ANTLR C++ developers, parsers should be threadsafe. Unfortunately firsthand experience has proven otherwise. Your mileage may vary.
83
+ 1. The description of this gem says "(almost) any ANTLR4 grammar" because many grammars contain target-specific code. For example, the Python3 grammar referenced in the examples above contains inline Java code that the C++ compiler won't understand. You'll need to port any such code to C++ before you'll be able to compile and use the native extension.
85
84
 
86
85
  ## System Requirements
87
86
 
@@ -2,10 +2,10 @@ require 'fileutils'
2
2
 
3
3
  module Antlr4Native
4
4
  class Generator
5
- ANTLR_VERSION = '4.8'.freeze
5
+ ANTLR_VERSION = '4.10.1'.freeze
6
6
 
7
7
  ANTLR_JAR = File.expand_path(
8
- File.join('..', '..', 'vendor', 'antlr4-4.8-1-complete.jar'), __dir__
8
+ File.join('..', '..', 'vendor', "antlr-#{ANTLR_VERSION}-complete.jar"), __dir__
9
9
  ).freeze
10
10
 
11
11
  include StringHelpers
@@ -16,6 +16,7 @@ module Antlr4Native
16
16
  @grammar_files = grammar_files
17
17
  @output_dir = output_dir
18
18
  @parser_root_method = parser_root_method
19
+
19
20
  end
20
21
 
21
22
  def generate
@@ -24,7 +25,7 @@ module Antlr4Native
24
25
  end
25
26
 
26
27
  def gem_name
27
- @gem_name ||= dasherize(parser_ns)
28
+ @gem_name ||= underscore(parser_ns)
28
29
  end
29
30
 
30
31
  def antlr_ns
@@ -147,39 +148,25 @@ module Antlr4Native
147
148
  }
148
149
 
149
150
  Array getChildren() {
150
- if (children == nullptr) {
151
- children = new Array();
152
-
153
- if (orig != nullptr) {
154
- for (auto it = orig -> children.begin(); it != orig -> children.end(); it ++) {
155
- Object parseTree = ContextProxy::wrapParseTree(*it);
151
+ Array children;
152
+ if (orig != nullptr) {
153
+ for (auto it = orig -> children.begin(); it != orig -> children.end(); it ++) {
154
+ Object parseTree = ContextProxy::wrapParseTree(*it);
156
155
 
157
- if (parseTree != Nil) {
158
- children -> push(parseTree);
159
- }
156
+ if (parseTree != Nil) {
157
+ children.push(parseTree);
160
158
  }
161
159
  }
162
160
  }
163
-
164
- return *children;
161
+ return children;
165
162
  }
166
163
 
167
164
  Object getParent() {
168
- if (parent == Nil) {
169
- if (orig != nullptr) {
170
- parent = ContextProxy::wrapParseTree(orig -> parent);
171
- }
172
- }
173
-
174
- return parent;
165
+ return orig == nullptr ? Nil : ContextProxy::wrapParseTree(orig -> parent);
175
166
  }
176
167
 
177
168
  size_t childCount() {
178
- if (orig == nullptr) {
179
- return 0;
180
- }
181
-
182
- return getChildren().size();
169
+ return orig == nullptr ? 0 : orig -> children.size();
183
170
  }
184
171
 
185
172
  bool doubleEquals(Object other) {
@@ -196,8 +183,6 @@ module Antlr4Native
196
183
 
197
184
  protected:
198
185
  tree::ParseTree* orig = nullptr;
199
- Array* children = nullptr;
200
- Object parent = Nil;
201
186
  };
202
187
 
203
188
  class TerminalNodeProxy : public ContextProxy {
@@ -284,7 +269,7 @@ module Antlr4Native
284
269
  this -> lexer -> reset();
285
270
  this -> parser -> reset();
286
271
 
287
- return result;
272
+ return std::any_cast<Object>(result);
288
273
  }
289
274
 
290
275
  ~ParserProxy() {
@@ -331,7 +316,7 @@ module Antlr4Native
331
316
  <<~END
332
317
  extern "C"
333
318
  void Init_#{ext_name}() {
334
- Module rb_m#{parser_ns} = define_module("#{parser_ns}");
319
+ Module rb_m#{parser_ns} = define_module("#{capitalize(parser_ns)}");
335
320
 
336
321
  rb_cToken = define_class_under<Token>(rb_m#{parser_ns}, "Token")
337
322
  .define_method("text", &Token::getText)
@@ -361,8 +346,8 @@ module Antlr4Native
361
346
  rb_cParser = define_class_under<ParserProxy>(rb_m#{parser_ns}, "Parser")
362
347
  .define_singleton_function("parse", &ParserProxy::parse)
363
348
  .define_singleton_function("parse_file", &ParserProxy::parseFile)
364
- .define_method("#{parser_root_method}", &ParserProxy::#{parser_root_method})
365
- .define_method("visit", &ParserProxy::visit);
349
+ .define_method("#{parser_root_method}", &ParserProxy::#{parser_root_method}, Return().keepAlive())
350
+ .define_method("visit", &ParserProxy::visit, Return().keepAlive());
366
351
 
367
352
  #{class_wrappers_str(' ')}
368
353
  }
@@ -1,3 +1,3 @@
1
1
  module Antlr4Native
2
- VERSION = '2.0.0'
2
+ VERSION = '2.2.0'
3
3
  end
@@ -48,7 +48,7 @@ module Antlr4Native
48
48
  Object ruby_visit(ContextProxy* proxy) {
49
49
  auto result = visit(proxy -> getOriginal());
50
50
  try {
51
- return result.as<Object>();
51
+ return std::any_cast<Object>(result);
52
52
  } catch(std::bad_cast) {
53
53
  return Qnil;
54
54
  }
@@ -57,7 +57,7 @@ module Antlr4Native
57
57
  Object ruby_visitChildren(ContextProxy* proxy) {
58
58
  auto result = visitChildren(proxy -> getOriginal());
59
59
  try {
60
- return result.as<Object>();
60
+ return std::any_cast<Object>(result);
61
61
  } catch(std::bad_cast) {
62
62
  return Qnil;
63
63
  }
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: antlr4-native
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cameron Dutro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-24 00:00:00.000000000 Z
11
+ date: 2022-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rice
@@ -43,7 +43,7 @@ files:
43
43
  - lib/antlr4-native/string_helpers.rb
44
44
  - lib/antlr4-native/version.rb
45
45
  - lib/antlr4-native/visitor_generator.rb
46
- - vendor/antlr4-4.8-1-complete.jar
46
+ - vendor/antlr-4.10.1-complete.jar
47
47
  homepage: http://github.com/camertron/antlr4-native-rb
48
48
  licenses: []
49
49
  metadata: {}
Binary file