Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,15 @@ jobs:
name: gem-${{ matrix.os }}-${{ matrix.ruby }}
path: pkg/

- run: echo 'TESTOPTS=-v --ignore-name=/unscan/' >> $GITHUB_ENV
if: ${{ startsWith(matrix.ruby, 'truffle') }}

- run: bundle exec rake test

- run: gem install --verbose --backtrace pkg/*.gem

- run: gem install test-unit-ruby-core test-unit

- name: Run tests on the installed gem
run: ruby run-test.rb
run: ruby run-test.rb ${TESTOPTS}
if: matrix.ruby != '2.4' # strscan is a default gem from 2.5
12 changes: 7 additions & 5 deletions ext/jruby/org/jruby/ext/strscan/RubyStringScanner.java
Original file line number Diff line number Diff line change
Expand Up @@ -83,21 +83,23 @@ public class RubyStringScanner extends RubyObject {

public static RubyClass createScannerClass(final Ruby runtime) {
RubyClass Object = runtime.getObject();
ThreadContext context = runtime.getCurrentContext();

RubyClass scannerClass = runtime.defineClass("StringScanner", Object, RubyStringScanner::new);

RubyClass standardError = runtime.getStandardError();
RubyClass error = scannerClass.defineClassUnder("Error", standardError, standardError.getAllocator());
if (!Object.isConstantDefined("ScanError")) {
Object.defineConstant("ScanError", error);
RubyClass error = scannerClass.defineClassUnder(context, "Error", standardError, standardError.getAllocator());
if (!Object.isConstantDefined(context, "ScanError")) {
Object.defineConstant(context, "ScanError", error);
Object.deprecateConstant(context, "ScanError");
}

RubyString version = runtime.newString(STRSCAN_VERSION);
version.setFrozen(true);
scannerClass.setConstant("Version", version);
scannerClass.setConstant(context, "Version", version);
RubyString id = runtime.newString("$Id$");
id.setFrozen(true);
scannerClass.setConstant("Id", id);
scannerClass.setConstant(context, "Id", id);

scannerClass.defineAnnotatedMethods(RubyStringScanner.class);

Expand Down
1 change: 1 addition & 0 deletions ext/strscan/extconf.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
$INCFLAGS << " -I$(top_srcdir)" if $extmk
have_func("onig_region_memsize(NULL)")
have_func("rb_reg_onig_match", "ruby/re.h")
have_func("rb_deprecate_constant")
create_makefile 'strscan'
else
File.write('Makefile', dummy_makefile("").join)
Expand Down
11 changes: 10 additions & 1 deletion ext/strscan/strscan.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@ extern size_t onig_region_memsize(const struct re_registers *regs);

#define STRSCAN_VERSION "3.1.6"


#ifdef HAVE_RB_DEPRECATE_CONSTANT
/* In ruby 3.0, defined but exposed in external headers */
extern void rb_deprecate_constant(VALUE mod, const char *name);
#else
# define rb_deprecate_constant(mod, name) ((void)0)
#endif

/* =======================================================================
Data Type Definitions
======================================================================= */
Expand Down Expand Up @@ -1604,7 +1612,7 @@ name_to_backref_number(struct re_registers *regs, VALUE regexp, const char* name
(const unsigned char* )name_end,
regs);
if (num >= 1) {
return num;
return num;
}
}
rb_enc_raise(enc, rb_eIndexError, "undefined group name reference: %.*s",
Expand Down Expand Up @@ -2210,6 +2218,7 @@ Init_strscan(void)
ScanError = rb_define_class_under(StringScanner, "Error", rb_eStandardError);
if (!rb_const_defined(rb_cObject, id_scanerr)) {
rb_const_set(rb_cObject, id_scanerr, ScanError);
rb_deprecate_constant(rb_cObject, "ScanError");
}
tmp = rb_str_new2(STRSCAN_VERSION);
rb_obj_freeze(tmp);
Expand Down
2 changes: 1 addition & 1 deletion test/strscan/test_stringscanner.rb
Original file line number Diff line number Diff line change
Expand Up @@ -875,7 +875,7 @@ def test_unscan
assert_equal({}, s.named_captures)
assert_equal("te", s.scan(/../))
assert_equal(nil, s.scan(/\d/))
assert_raise(ScanError) { s.unscan }
assert_raise(StringScanner::Error) { s.unscan }
end

def test_rest
Expand Down