Skip to content

Commit 408158a

Browse files
committed
Implement rb_error_frozen_object.
1 parent 4bfa8c8 commit 408158a

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/error.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,8 @@ bool rb_warning_category_enabled_p(rb_warning_category_t category) {
4949
void rb_tr_warn_va_list(const char *fmt, va_list args) {
5050
RUBY_CEXT_INVOKE("rb_tr_warn", rb_vsprintf(fmt, args));
5151
}
52+
53+
void rb_error_frozen_object(VALUE frozen_obj) {
54+
RUBY_CEXT_INVOKE_NO_WRAP("rb_error_frozen_object", frozen_obj);
55+
UNREACHABLE;
56+
}

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)