@@ -30,50 +30,58 @@ + (void)setupSupportFunctionsToContext:(JSContext *)context
3030 initializedContext = [NSHashTable hashTableWithOptions: NSPointerFunctionsWeakMemory ];
3131 }
3232 if (![initializedContext containsObject: context]) {
33- context[@" __JSB_JSBScriptingSupport" ] = self;
34- [context evaluateScript:
35- @" JSB = (function() {\n "
36- @" var namespace = {\n "
37- @" defineClass: function(declaration, instanceMembers, staticMembers) {\n "
38- @" return __JSB_JSBScriptingSupport.defineClass(declaration,"
39- @" instanceMembers == null ? {} : instanceMembers,"
40- @" staticMembers == null ? {} : staticMembers);\n "
41- @" },\n "
42- @" define: function(declaration, instanceMembers, staticMembers) {\n "
43- @" JSB.dump('`define` is deprecated, use `defineClass` instead.');\n "
44- @" return __JSB_JSBScriptingSupport.defineClass(declaration, instanceMembers, staticMembers);\n "
45- @" },\n "
46- @" require: function(name) {\n "
47- @" return __JSB_JSBScriptingSupport.require(name);\n "
48- @" },\n "
49- @" exports: {},\n "
50- @" selector: function(str) {\n "
51- @" return __JSB_JSBScriptingSupport.selectorFromString(str);\n "
52- @" },\n "
53- @" dispatch_async: function(queue, block) {\n "
54- @" return __JSB_JSBScriptingSupport.dispatch_async(queue, block);\n "
55- @" },\n "
56- @" dispatch_get_global_queue: function(priority, flags) {\n "
57- @" return __JSB_JSBScriptingSupport.dispatch_get_global_queue(priority, flags);\n "
58- @" },\n "
59- @" dispatch_get_main_queue: function() {\n "
60- @" return __JSB_JSBScriptingSupport.dispatch_get_main_queue();\n "
61- @" },\n "
62- @" log: function(format) {\n "
63- @" var args = [];\n "
64- @" for (var i = 1; i < arguments.length; i++) {\n "
65- @" args.push(arguments[i]);\n "
66- @" }\n "
67- @" return __JSB_JSBScriptingSupport.log(format, args);\n "
68- @" },\n "
69- @" dump: function(obj) {\n "
70- @" return __JSB_JSBScriptingSupport.dump(obj);\n "
71- @" }\n "
72- @" };\n "
73- @" \n "
74- @" return namespace;\n "
75- @" })();\n "
76- ];
33+ NSString *UUID = [[[NSUUID UUID ] UUIDString ] stringByReplacingOccurrencesOfString: @" -" withString: @" " ];
34+ NSString *className = [NSString stringWithFormat: @" __JSB_%@ $%@ " , NSStringFromClass (self ), UUID];
35+
36+ context[className] = self;
37+
38+ NSString *placeholder = @" ${CLASS_NAME}" ;
39+ NSString *template =
40+ @" var namespace = {\n "
41+ @" defineClass: function(declaration, instanceMembers, staticMembers) {\n "
42+ @" return ${CLASS_NAME}.defineClass(declaration,"
43+ @" instanceMembers == null ? {} : instanceMembers,"
44+ @" staticMembers == null ? {} : staticMembers);\n "
45+ @" },\n "
46+ @" define: function(declaration, instanceMembers, staticMembers) {\n "
47+ @" JSB.dump('`define` is deprecated, use `defineClass` instead.');\n "
48+ @" return ${CLASS_NAME}.defineClass(declaration, instanceMembers, staticMembers);\n "
49+ @" },\n "
50+ @" require: function(name) {\n "
51+ @" return ${CLASS_NAME}.require(name);\n "
52+ @" },\n "
53+ @" exports: {},\n "
54+ @" selector: function(str) {\n "
55+ @" return ${CLASS_NAME}.selectorFromString(str);\n "
56+ @" },\n "
57+ @" dispatch_async: function(queue, block) {\n "
58+ @" return ${CLASS_NAME}.dispatch_async(queue, block);\n "
59+ @" },\n "
60+ @" dispatch_get_global_queue: function(priority, flags) {\n "
61+ @" return ${CLASS_NAME}.dispatch_get_global_queue(priority, flags);\n "
62+ @" },\n "
63+ @" dispatch_get_main_queue: function() {\n "
64+ @" return ${CLASS_NAME}.dispatch_get_main_queue();\n "
65+ @" },\n "
66+ @" log: function(format) {\n "
67+ @" var args = [];\n "
68+ @" for (var i = 1; i < arguments.length; i++) {\n "
69+ @" args.push(arguments[i]);\n "
70+ @" }\n "
71+ @" return ${CLASS_NAME}.log(format, args);\n "
72+ @" },\n "
73+ @" dump: function(obj) {\n "
74+ @" return ${CLASS_NAME}.dump(obj);\n "
75+ @" }\n "
76+ @" };\n "
77+ @" \n "
78+ @" return namespace;" ;
79+
80+ NSString *script = [template stringByReplacingOccurrencesOfString: placeholder withString: className];
81+
82+ JSValue *function = context[@" Function" ];
83+ JSValue *value = [function constructWithArguments: @[script]];
84+ context[@" JSB" ] = [value callWithArguments: nil ];
7785
7886 [initializedContext addObject: context];
7987 }
0 commit comments