Skip to content

Commit bddf986

Browse files
committed
Implement rb_error_frozen_object.
1 parent 34a4fbe commit bddf986

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
@@ -26,6 +26,7 @@ Compatibility:
2626
* Fix `rb_str_locktmp()` and `rb_str_unlocktmp()` to raise `FrozenError` when string argument is frozen (#3752, @andrykonchin).
2727
* Fix Struct setters to raise `FrozenError` when a struct is frozen (#3850, @andrykonchin).
2828
* Fix `Struct#initialize` when mixed positional and keyword arguments (#3855, @andrykonchin).
29+
* Implement `rb_error_frozen_object` for the google-protobuf gem (@nirvdrum).
2930

3031
Performance:
3132

lib/truffle/truffle/cext.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2374,6 +2374,10 @@ def rb_eval_cmd_kw(cmd, args, kw_splat)
23742374
end
23752375
end
23762376

2377+
def rb_error_frozen_object(object)
2378+
raise FrozenError.new("can't modify frozen #{Primitive.class(object)}", receiver: object)
2379+
end
2380+
23772381
def rb_tr_warn(message)
23782382
location = caller_locations(1, 1)[0]
23792383
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)