summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authordearblue <[email protected]>2021-10-09 13:28:10 +0900
committerdearblue <[email protected]>2021-10-09 13:28:10 +0900
commit8c355ec7e36eaccd7ac39b15fc340cf7894adc40 (patch)
tree579db66c7a8e06277ecc4e93ed24aa5e1fe36c55 /src
parentbec074e6a31fd7a577e2c0e726167da8dc44c4c6 (diff)
downloadmruby-8c355ec7e36eaccd7ac39b15fc340cf7894adc40.tar.gz
mruby-8c355ec7e36eaccd7ac39b15fc340cf7894adc40.zip
Partially allow overriding of `String#[]` methods
This is for the purpose of supporting `Regexp`. - configuration and build ```console % cat regexp_config.rb MRuby::Lockfile.disable MRuby::Build.new do toolchain "clang" enable_debug gem core: "mruby-bin-mruby" gem core: "mruby-print" gem mgem: "mruby-onig-regexp" #gem mgem: "mruby-regexp-pcre" end % rake MRUBY_CONFIG=regexp_config.rb ``` - mruby HEAD (bec074e) ```console % build/host/bin/mruby -e 'p "abcdefg"[/.(?=...$)/]' -e:1: can't convert OnigRegexp into Integer (TypeError) ``` - with this patch ```console % build/host/bin/mruby -e 'p "abcdefg"[/.(?=...$)/]' "d" ```
Diffstat (limited to 'src')
-rw-r--r--src/vm.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/vm.c b/src/vm.c
index 69a873281..676e4d8bf 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1261,7 +1261,15 @@ RETRY_TRY_BLOCK:
regs[a] = mrb_hash_get(mrb, va, vb);
break;
case MRB_TT_STRING:
- regs[a] = mrb_str_aref(mrb, va, vb, mrb_undef_value());
+ switch (mrb_type(vb)) {
+ case MRB_TT_INTEGER:
+ case MRB_TT_STRING:
+ case MRB_TT_RANGE:
+ regs[a] = mrb_str_aref(mrb, va, vb, mrb_undef_value());
+ break;
+ default:
+ goto getidx_fallback;
+ }
break;
default:
getidx_fallback: