Skip to content

Commit d31f2ef

Browse files
committed
Implement rb_error_frozen_object.
1 parent dc22b98 commit d31f2ef

File tree

4 files changed

+11
-0
lines changed

4 files changed

+11
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Compatibility:
2121
* Joni has been updated from 2.2.1 to 2.2.6 (@andrykonchin).
2222
* Fix numeric coercing when `#coerce` method is not public (#3848, @andrykonchin).
2323
* Fix `Kernel#raise` and don't override `cause` at exception re-raising (#3831, @andrykonchin).
24+
* Implement `rb_error_frozen_object` for the google-protobuf gem (@nirvdrum).
2425

2526
Performance:
2627

lib/truffle/truffle/cext.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2347,6 +2347,10 @@ def rb_eval_cmd_kw(cmd, args, kw_splat)
23472347
end
23482348
end
23492349

2350+
def rb_error_frozen_object(object)
2351+
raise FrozenError.new("can't modify frozen #{Primitive.class(self)}", receiver: self)
2352+
end
2353+
23502354
def rb_tr_warn(message)
23512355
location = caller_locations(1, 1)[0]
23522356
message_with_prefix = "#{location.label}: warning: #{message}"

src/main/c/cext/exception.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ VALUE rb_errinfo(void) {
6161
return RUBY_CEXT_INVOKE("rb_errinfo");
6262
}
6363

64+
void rb_error_frozen_object(VALUE frozen_obj) {
65+
RUBY_CEXT_INVOKE_NO_WRAP("rb_error_frozen_object", frozen_obj);
66+
UNREACHABLE;
67+
}
68+
6469
void rb_syserr_fail(int eno, const char *message) {
6570
VALUE messageValue = (message == NULL) ? Qnil : rb_str_new_cstr(message);
6671
polyglot_invoke(RUBY_CEXT, "rb_syserr_fail", eno, rb_tr_unwrap(messageValue));

tool/generate-cext-trampoline.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
NO_RETURN_FUNCTIONS = %w[
1414
ruby_malloc_size_overflow
1515
rb_error_arity
16+
rb_error_frozen_object
1617
rb_iter_break
1718
rb_iter_break_value
1819
rb_f_notimplement

0 commit comments

Comments
 (0)