Skip to content

Commit c31eb63

Browse files
committed
Pass Truffle::CExt explicitly to C extension support
PullRequest: truffleruby/734
2 parents 2460ab4 + 491f2fb commit c31eb63

File tree

4 files changed

+11
-5
lines changed

4 files changed

+11
-5
lines changed

lib/truffle/truffle/cext.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,5 +1789,3 @@ def rb_sprintf(format, *args)
17891789
end
17901790

17911791
end
1792-
1793-
Truffle::Interop.export(:ruby_cext, Truffle::CExt)

src/main/c/cext/ruby.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ void* rb_tr_nil;
3333

3434
// Run when loading C-extension support
3535

36-
void rb_tr_init(void) {
37-
truffle_assign_managed(&rb_tr_cext, (void *)polyglot_import("ruby_cext"));
36+
void rb_tr_init(void *ruby_cext) {
37+
truffle_assign_managed(&rb_tr_cext, ruby_cext);
3838
truffle_assign_managed(&rb_tr_undef, rb_tr_get_undef());
3939
truffle_assign_managed(&rb_tr_true, rb_tr_get_true());
4040
truffle_assign_managed(&rb_tr_false, rb_tr_get_false());

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,6 +1349,10 @@ public DynamicObject getSystemCallErrorClass() {
13491349
return systemCallErrorClass;
13501350
}
13511351

1352+
public DynamicObject getTruffleModule() {
1353+
return truffleModule;
1354+
}
1355+
13521356
public DynamicObject getTruffleInternalModule() {
13531357
return truffleInternalModule;
13541358
}

src/main/java/org/truffleruby/language/loader/FeatureLoader.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
import com.oracle.truffle.api.interop.UnsupportedMessageException;
1818
import com.oracle.truffle.api.interop.UnsupportedTypeException;
1919
import com.oracle.truffle.api.nodes.Node;
20+
import com.oracle.truffle.api.object.DynamicObject;
2021
import com.oracle.truffle.api.source.SourceSection;
2122

2223
import org.jcodings.Encoding;
2324
import org.jcodings.specific.UTF8Encoding;
25+
import org.truffleruby.Layouts;
2426
import org.truffleruby.RubyContext;
2527
import org.truffleruby.RubyLanguage;
2628
import org.truffleruby.cext.WrapNodeGen;
@@ -315,6 +317,8 @@ public void ensureCExtImplementationLoaded(String feature, RequireNode requireNo
315317
Metrics.printTime("before-load-cext-support");
316318
try {
317319
requireNode.executeRequire("truffle/cext");
320+
final DynamicObject truffleModule = context.getCoreLibrary().getTruffleModule();
321+
final Object truffleCExt = Layouts.MODULE.getFields(truffleModule).getConstant("CExt").getValue();
318322

319323
final String rubySUpath = context.getRubyHome() + "/lib/cext/ruby.su";
320324
final List<TruffleObject> libraries = loadCExtLibRuby(rubySUpath, feature);
@@ -324,7 +328,7 @@ public void ensureCExtImplementationLoaded(String feature, RequireNode requireNo
324328
final TruffleObject initFunction = requireNode.findFunctionInLibraries(libraries, "rb_tr_init", rubySUpath);
325329
final Node executeInitNode = Message.EXECUTE.createNode();
326330
try {
327-
ForeignAccess.sendExecute(executeInitNode, initFunction);
331+
ForeignAccess.sendExecute(executeInitNode, initFunction, truffleCExt);
328332
} catch (UnsupportedTypeException | ArityException | UnsupportedMessageException e) {
329333
throw new JavaException(e);
330334
}

0 commit comments

Comments
 (0)