Skip to content

Commit c7967ae

Browse files
dweinsteinoleavr
authored andcommittedJun 20, 2019
Add ObjC.Object#$moduleName (#16)
Useful to determine which module owns a given class.
1 parent 5db48d9 commit c7967ae

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed
 

‎index.js

+8
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,7 @@ function Runtime() {
406406
"$superClass",
407407
"$class",
408408
"$className",
409+
"$moduleName",
409410
"$protocols",
410411
"$methods",
411412
"$ownMethods",
@@ -419,6 +420,7 @@ function Runtime() {
419420
let cachedSuperClass = null;
420421
let cachedClass = null;
421422
let cachedClassName = null;
423+
let cachedModuleName = null;
422424
let cachedProtocols = null;
423425
let cachedMethodNames = null;
424426
let cachedProtocolMethods = null;
@@ -518,6 +520,11 @@ function Runtime() {
518520
cachedClassName = api.object_getClassName(handle).readUtf8String();
519521
}
520522
return cachedClassName;
523+
case "$moduleName":
524+
if (cachedModuleName === null) {
525+
cachedModuleName = api.class_getImageName(classHandle()).readUtf8String();
526+
}
527+
return cachedModuleName;
521528
case "$protocols":
522529
if (cachedProtocols === null) {
523530
cachedProtocols = {};
@@ -2674,6 +2681,7 @@ function getApi() {
26742681
"objc_registerClassPair": ['void', ['pointer']],
26752682
"class_isMetaClass": ['bool', ['pointer']],
26762683
"class_getName": ['pointer', ['pointer']],
2684+
"class_getImageName": ['pointer', ['pointer']],
26772685
"class_copyProtocolList": ['pointer', ['pointer', 'pointer']],
26782686
"class_copyMethodList": ['pointer', ['pointer', 'pointer']],
26792687
"class_getClassMethod": ['pointer', ['pointer', 'pointer']],

‎test/basics.m

+14
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
TESTENTRY (kind_can_be_retrieved)
1818
TESTENTRY (super_can_be_retrieved)
1919
TESTENTRY (class_name_can_be_retrieved)
20+
TESTENTRY (module_name_can_be_retrieved)
2021
TESTENTRY (protocols_can_be_retrieved)
2122
TESTENTRY (all_method_names_can_be_retrieved)
2223
TESTENTRY (own_method_names_can_be_retrieved)
@@ -218,6 +219,19 @@ - (void)secret {}
218219
EXPECT_SEND_MESSAGE_WITH ("\"string\"");
219220
}
220221

222+
TESTCASE (module_name_can_be_retrieved)
223+
{
224+
COMPILE_AND_LOAD_SCRIPT (
225+
"var NSString = ObjC.classes.NSString;"
226+
"var badger = NSString.stringWithString_(\"badger\");"
227+
"send(NSString.$moduleName);"
228+
"send(badger.$moduleName);");
229+
EXPECT_SEND_MESSAGE_WITH ("\"/System/Library/Frameworks"
230+
"/Foundation.framework/Versions/C/Foundation\"");
231+
EXPECT_SEND_MESSAGE_WITH ("\"/System/Library/Frameworks"
232+
"/CoreFoundation.framework/Versions/A/CoreFoundation\"");
233+
}
234+
221235
TESTCASE (protocols_can_be_retrieved)
222236
{
223237
COMPILE_AND_LOAD_SCRIPT (

0 commit comments

Comments
 (0)
Please sign in to comment.