New Upstream Release - ruby-rsec

Ready changes

Summary

Merged new upstream version: 1.0.0 (was: 0.4.2).

Resulting package

Built on 2023-01-12T09:36 (took 11m26s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-releases ruby-rsec

Lintian Result

Diff

diff --git a/debian/changelog b/debian/changelog
index a2b2cf9..7067f52 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-ruby-rsec (0.4.2-2) UNRELEASED; urgency=medium
+ruby-rsec (1.0.0-1) UNRELEASED; urgency=medium
 
   [ Utkarsh Gupta ]
   * Add salsa-ci.yml
@@ -17,8 +17,9 @@ ruby-rsec (0.4.2-2) UNRELEASED; urgency=medium
     + ruby-rsec: Add :all qualifier for ruby dependency.
   * Update watch file format version to 4.
   * Bump debhelper from old 12 to 13.
+  * New upstream release.
 
- -- Utkarsh Gupta <guptautkarsh2102@gmail.com>  Tue, 13 Aug 2019 07:19:47 +0530
+ -- Utkarsh Gupta <guptautkarsh2102@gmail.com>  Thu, 12 Jan 2023 09:26:33 -0000
 
 ruby-rsec (0.4.2-1) unstable; urgency=medium
 
diff --git a/examples/c_minus.rb b/examples/c_minus.rb
index d987e3f..43d5f45 100644
--- a/examples/c_minus.rb
+++ b/examples/c_minus.rb
@@ -91,7 +91,7 @@ class CMinus
     # p expr.parse! "gcd (v ,u- u/v *v)"
     expr.map{|e| Expr[e] }
   end
-    
+
   # statement parser builder, returns [stmt, block]
   def statement var_decl
     expr = expression()
@@ -114,9 +114,10 @@ class CMinus
     }
     stmt = block | if_stmt | while_stmt | return_stmt | expr_stmt
     # p if_stmt.parse! 'if(v == 0)return u;'
+    # p block.parse! '{ int x; }'
     [stmt, block]
   end
-  
+
   def initialize
     type_id = seq_(TYPE, ID).cached
     # p type_id.parse! 'int a'
@@ -137,10 +138,10 @@ class CMinus
       [ty, id, *maybe_bra]
     }
     params = param.join(COMMA).even | 'void'.r{[]}
-    brace = seq_('(', params, ')')[1]
-    fun_decl = seq_(type_id, brace, block){
-      |(type, id), params, block|
-      Function[type, id, params, block]
+    paren_args = seq_('(', params, ')')[1]
+    fun_decl = seq_(type_id, paren_args, block){|results|
+      type_id_result, params_result, block_result = results
+      Function[*type_id_result, params_result, block_result]
     }
     # p fun_decl.parse! 'int gcd(int u, int v){return 2;}'
     @program = SPACE.join(fun_decl | var_decl | EOSTMT).odd.eof
diff --git a/examples/little_markdown.rb b/examples/little_markdown.rb
index 1449166..9191553 100644
--- a/examples/little_markdown.rb
+++ b/examples/little_markdown.rb
@@ -65,7 +65,7 @@ class LittleMarkdown
       "<span id='#{id}'>#{text}</span>"
     }
     line = (img | link | strong | em | code | escape | id | text).star
-    line.eof.map &:join
+    line.eof.map {|parts, _| parts.join }
   end
   
   # pseudo xml tag parser, except <br> and <hr> and <script>
diff --git a/examples/nasm_manual.rb b/examples/nasm_manual.rb
index 7a236b3..011f265 100644
--- a/examples/nasm_manual.rb
+++ b/examples/nasm_manual.rb
@@ -42,7 +42,7 @@ module NASMManualParser
     tr_class      = 'TR3/4/5/6/7'
     classes       = (imm_class.r | memoffs_class | mem_class | reg_class | tr_class).fail 'operand class'
     reg           = reg_parser.fail 'register'
-    num           = /\d/.r(&:to_i).fail 'num'
+    num           = /\d/.r{|n, _| n.to_i }.fail 'num'
     # memoffs should be left of mem
     operand       = classes | reg | num
     operands      = operand.join('/').even.join(',').even
@@ -107,7 +107,7 @@ module NASMManualParser
     parsed = ''
     parser = instruction_parser.eof
     src = File.read filename
-    src.lines.with_index do |raw_line, idx|
+    src.lines.to_a.each_with_index do |raw_line, idx|
       line = raw_line.strip
       # this shapy shows the line is something defining an nemonic
       if line =~ /^\w+\s+[^;\[]+;\ [^;\[]+\[.+\]$/
diff --git a/examples/slow_json.rb b/examples/slow_json.rb
index 13d0c46..8e36684 100644
--- a/examples/slow_json.rb
+++ b/examples/slow_json.rb
@@ -40,7 +40,7 @@ class SlowJSON
   end
 
   def generate_parser
-    string  = '"'.r >> chars_parser.star.map(&:join) << '"'
+    string  = '"'.r >> chars_parser.star.map{|cs, _| cs.join } << '"'
     # -? int frac? exp?
     number  = prim(:double, allowed_sign: '-')
     @value  = string | number | lazy{@object} | lazy{@array} |
diff --git a/lib/rsec.rb b/lib/rsec.rb
index 7480fc4..10575c6 100644
--- a/lib/rsec.rb
+++ b/lib/rsec.rb
@@ -11,7 +11,7 @@ module Rsec
     TO_PARSER_METHOD = :r
   end
 
-  VERSION = '0.4.2'
+  VERSION = '1.0.0'
 end
 
 require "strscan"
diff --git a/lib/rsec/helpers.rb b/lib/rsec/helpers.rb
index 84735a0..fa55048 100644
--- a/lib/rsec/helpers.rb
+++ b/lib/rsec/helpers.rb
@@ -87,7 +87,7 @@ module Rsec #:nodoc:
         raise 'Floating points does not allow :base'
       end
       base ||= 10
-      Rsec.assert_type base, Fixnum
+      Rsec.assert_type base, Integer
       unless (2..36).include? base
         raise RangeError, ":base should be in 2..36, but got #{base}"
       end
diff --git a/lib/rsec/parsers/misc.rb b/lib/rsec/parsers/misc.rb
index 6ff0c85..4f900dc 100644
--- a/lib/rsec/parsers/misc.rb
+++ b/lib/rsec/parsers/misc.rb
@@ -5,7 +5,7 @@ module Rsec #:nodoc
     def _parse ctx
       res = left()._parse ctx
       return INVALID if INVALID[res]
-      right()[res]
+      right()[res, ctx]
     end
   end
 
diff --git a/readme.rdoc b/readme.rdoc
index b4a1f75..8cd31bf 100644
--- a/readme.rdoc
+++ b/readme.rdoc
@@ -1,17 +1,15 @@
 == Parser / Regexp Combinator for Ruby. 
 
-Easier and faster than treetop / rex+racc.
+PEG grammar for Ruby, based on StringScanner. Consistently superior speed: up to 10 times faster than Treetop[https://github.com/nathansobo/treetop], and twice the speed of rex+racc.
 
-It's ruby1.9 only.
+Compatible with Ruby v1.9 and above.
 
 == License 
 
-As Ruby's
+Same license as for Ruby.
 
 == Install 
 
-The pure Ruby gem is fast enough (about 10+x faster than treetop generated code):
-
     gem in rsec
 
 == Doc
diff --git a/rsec.gemspec b/rsec.gemspec
index 080655f..0a3e025 100644
--- a/rsec.gemspec
+++ b/rsec.gemspec
@@ -2,16 +2,16 @@
 # This file has been automatically generated by gem2tgz #
 #########################################################
 # -*- encoding: utf-8 -*-
-# stub: rsec 0.4.2 ruby lib
+# stub: rsec 1.0.0 ruby lib
 
 Gem::Specification.new do |s|
   s.name = "rsec".freeze
-  s.version = "0.4.2"
+  s.version = "1.0.0"
 
   s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
   s.require_paths = ["lib".freeze]
   s.authors = ["NS".freeze]
-  s.date = "2016-09-25"
+  s.date = "2019-12-10"
   s.description = "Easy and extreme fast dynamic PEG parser combinator.".freeze
   s.extra_rdoc_files = ["readme.rdoc".freeze]
   s.files = ["bench/bench.rb".freeze, "bench/little.rb".freeze, "bench/profile.rb".freeze, "examples/arithmetic.rb".freeze, "examples/bnf.rb".freeze, "examples/c_minus.rb".freeze, "examples/hello.scm".freeze, "examples/little_markdown.rb".freeze, "examples/nasm_manual.rb".freeze, "examples/s_exp.rb".freeze, "examples/scheme.rb".freeze, "examples/slow_json.rb".freeze, "lib/rsec.rb".freeze, "lib/rsec/helpers.rb".freeze, "lib/rsec/parser.rb".freeze, "lib/rsec/parsers/join.rb".freeze, "lib/rsec/parsers/misc.rb".freeze, "lib/rsec/parsers/prim.rb".freeze, "lib/rsec/parsers/repeat.rb".freeze, "lib/rsec/parsers/seq.rb".freeze, "lib/rsec/utils.rb".freeze, "license.txt".freeze, "readme.rdoc".freeze, "test/helpers.rb".freeze, "test/test_branch.rb".freeze, "test/test_examples.rb".freeze, "test/test_join.rb".freeze, "test/test_lookahead.rb".freeze, "test/test_misc.rb".freeze, "test/test_one_of.rb".freeze, "test/test_pattern.rb".freeze, "test/test_prim.rb".freeze, "test/test_repeat.rb".freeze, "test/test_rsec.rb".freeze, "test/test_seq.rb".freeze]
diff --git a/test/test_misc.rb b/test/test_misc.rb
index d98dbd0..553535b 100644
--- a/test/test_misc.rb
+++ b/test/test_misc.rb
@@ -41,6 +41,18 @@ class TestMisc < TC
     ase 'bb', p.parse('b')
     ase INVALID, p.parse('.')
   end
+
+  def test_seq_map
+    p = seq('"'.r, /\w/.r, '"'.r).map{|(_, n, _)| n*2}
+    ase 'bb', p.parse('"b"')
+    ase INVALID, p.parse('.')
+  end
+
+  def test_seq_map_with_context
+    p = seq('"'.r, /\w/.r, '"'.r).map{|(_, n, _), ctx| n*ctx.pos}
+    ase 'bbb', p.parse('"b"')
+    ase INVALID, p.parse('.')
+  end
   
   def test_fail
     p = 'v'.r.fail 'omg!'

More details

Full run details