1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Convert catch_except_t to stdbool

catch_excep_t is a field that exists for MJIT. In the process of
rewriting MJIT in Ruby, I added API to convert 1/0 of _Bool to
true/false, and it seemed confusing and hard to maintain if you
don't use _Bool for *_p fields.
This commit is contained in:
Takashi Kokubun 2022-08-25 23:00:18 -07:00
parent 098a3cfaa7
commit d6f21b308b
No known key found for this signature in database
GPG key ID: 6FFC433B12EE23DD
4 changed files with 10 additions and 10 deletions

View file

@ -1357,18 +1357,18 @@ new_child_iseq_with_callback(rb_iseq_t *iseq, const struct rb_iseq_new_with_call
static void
set_catch_except_p(struct rb_iseq_constant_body *body)
{
body->catch_except_p = TRUE;
body->catch_except_p = true;
if (body->parent_iseq != NULL) {
set_catch_except_p(ISEQ_BODY(body->parent_iseq));
}
}
/* Set body->catch_except_p to TRUE if the ISeq may catch an exception. If it is FALSE,
JIT-ed code may be optimized. If we are extremely conservative, we should set TRUE
/* Set body->catch_except_p to true if the ISeq may catch an exception. If it is false,
JIT-ed code may be optimized. If we are extremely conservative, we should set true
if catch table exists. But we want to optimize while loop, which always has catch
table entries for break/next/redo.
So this function sets TRUE for limited ISeqs with break/next/redo catch table entries
So this function sets true for limited ISeqs with break/next/redo catch table entries
whose child ISeq would really raise an exception. */
static void
update_catch_except_flags(struct rb_iseq_constant_body *body)
@ -1399,7 +1399,7 @@ update_catch_except_flags(struct rb_iseq_constant_body *body)
if (entry->type != CATCH_TYPE_BREAK
&& entry->type != CATCH_TYPE_NEXT
&& entry->type != CATCH_TYPE_REDO) {
body->catch_except_p = TRUE;
body->catch_except_p = true;
break;
}
}

2
iseq.c
View file

@ -2411,7 +2411,7 @@ rb_iseq_disasm_recursive(const rb_iseq_t *iseq, VALUE indent)
rb_str_cat2(str, "== disasm: ");
rb_str_append(str, iseq_inspect(iseq));
rb_str_catf(str, " (catch: %s)", body->catch_except_p ? "TRUE" : "FALSE");
rb_str_catf(str, " (catch: %s)", body->catch_except_p ? "true" : "false");
if ((l = RSTRING_LEN(str) - indent_len) < header_minlen) {
rb_str_modify_expand(str, header_minlen - l);
memset(RSTRING_END(str), '=', header_minlen - l);

View file

@ -782,9 +782,9 @@ class TestMJIT < Test::Unit::TestCase
def test_catching_deep_exception
assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: '1', success_count: 4)
begin;
def catch_true(paths, prefixes) # catch_except_p: TRUE
prefixes.each do |prefix| # catch_except_p: TRUE
paths.each do |path| # catch_except_p: FALSE
def catch_true(paths, prefixes) # catch_except_p: true
prefixes.each do |prefix| # catch_except_p: true
paths.each do |path| # catch_except_p: false
return path
end
end

View file

@ -474,7 +474,7 @@ struct rb_iseq_constant_body {
iseq_bits_t single;
} mark_bits;
char catch_except_p; /* If a frame of this ISeq may catch exception, set TRUE */
bool catch_except_p; // If a frame of this ISeq may catch exception, set true.
// If true, this ISeq is leaf *and* backtraces are not used, for example,
// by rb_profile_frames. We verify only leafness on VM_CHECK_MODE though.
// Note that GC allocations might use backtraces due to