Skip to content

Commit 044d716

Browse files
committed
Define rb_eFatal for C extensions
1 parent ee6dbbf commit 044d716

File tree

5 files changed

+21
-7
lines changed

5 files changed

+21
-7
lines changed

lib/cext/include/truffleruby/constants.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// From tool/generate-cext-constants.rb
1+
// From ./tool/generate-cext-constants.rb
22

33
VALUE rb_tr_get_undef(void);
44
VALUE rb_tr_get_true(void);
@@ -67,6 +67,7 @@ VALUE rb_tr_get_ThreadError(void);
6767
VALUE rb_tr_get_WaitReadable(void);
6868
VALUE rb_tr_get_WaitWritable(void);
6969
VALUE rb_tr_get_ZeroDivError(void);
70+
VALUE rb_tr_get_eFatal(void);
7071
VALUE rb_tr_get_stdin(void);
7172
VALUE rb_tr_get_stdout(void);
7273
VALUE rb_tr_get_stderr(void);
@@ -138,6 +139,7 @@ VALUE rb_tr_get_default_rs(void);
138139
#define rb_mWaitReadable rb_tr_get_WaitReadable()
139140
#define rb_mWaitWritable rb_tr_get_WaitWritable()
140141
#define rb_eZeroDivError rb_tr_get_ZeroDivError()
142+
#define rb_eFatal rb_tr_get_eFatal()
141143
#define rb_stdin rb_tr_get_stdin()
142144
#define rb_stdout rb_tr_get_stdout()
143145
#define rb_stderr rb_tr_get_stderr()

lib/truffle/truffle/cext_constants.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# From tool/generate-cext-constants.rb
1+
# From ./tool/generate-cext-constants.rb
22

33
module Truffle::CExt
44
def Qundef
@@ -269,6 +269,10 @@ def rb_eZeroDivError
269269
ZeroDivisionError
270270
end
271271

272+
def rb_eFatal
273+
Truffle::CExt.rb_const_get(Object, "fatal")
274+
end
275+
272276
def rb_stdin
273277
$stdin
274278
end

src/main/c/cext/cext_constants.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,10 @@ VALUE rb_tr_get_ZeroDivError(void) {
268268
return RUBY_CEXT_INVOKE("rb_eZeroDivError");
269269
}
270270

271+
VALUE rb_tr_get_eFatal(void) {
272+
return RUBY_CEXT_INVOKE("rb_eFatal");
273+
}
274+
271275
VALUE rb_tr_get_stdin(void) {
272276
return RUBY_CEXT_INVOKE("rb_stdin");
273277
}

src/main/java/org/truffleruby/core/CoreLibrary.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,9 @@ public CoreLibrary(RubyContext context) {
335335
exceptionClass = defineClass("Exception");
336336
Layouts.CLASS.setInstanceFactoryUnsafe(exceptionClass, Layouts.EXCEPTION.createExceptionShape(exceptionClass, exceptionClass));
337337

338+
// fatal
339+
defineClass(exceptionClass, "fatal");
340+
338341
// NoMemoryError
339342
noMemoryErrorClass = defineClass(exceptionClass, "NoMemoryError");
340343

tool/generate-cext-constants.rb

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
IO::WaitReadable,
7777
IO::WaitWritable,
7878
[ZeroDivisionError, 'ZeroDivError'],
79+
['Truffle::CExt.rb_const_get(Object, "fatal")', 'eFatal'],
7980
['$stdin', 'stdin'],
8081
['$stdout', 'stdout'],
8182
['$stderr', 'stderr'],
@@ -88,7 +89,7 @@
8889
value, name = const
8990
else
9091
value = const
91-
92+
9293
if value.nil?
9394
name = 'nil'
9495
elsif value.is_a?(Module)
@@ -97,13 +98,13 @@
9798
name = value.to_s
9899
end
99100
end
100-
101+
101102
if value.nil?
102103
expr = 'nil'
103104
else
104105
expr = value.to_s
105106
end
106-
107+
107108
if [true, false, nil].include?(value) or name == 'undef'
108109
tag = 'Q'
109110
elsif value.is_a?(Class) && (value < Exception || value == Exception)
@@ -115,9 +116,9 @@
115116
else
116117
tag = 'rb_'
117118
end
118-
119+
119120
macro_name = "#{tag}#{name}"
120-
121+
121122
[macro_name, name, expr]
122123
end
123124

0 commit comments

Comments
 (0)