Skip to content

Commit 3668475

Browse files
authored
Allow an evaluator to be set. (#6)
* Force an evaluator to be set. * Added default to prevent interface breakage.
1 parent bfcdf83 commit 3668475

File tree

3 files changed

+17
-7
lines changed

3 files changed

+17
-7
lines changed

Sources/Substrata/DataBridge.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,6 @@ extension JSDataBridge {
5050
// we already have one fool!
5151
if self.engine != nil { return }
5252
self.engine = engine
53-
engine.evaluate(script: "var \(JSDataBridge.dataBridgeKey) = {};")
53+
engine.evaluate(script: "var \(JSDataBridge.dataBridgeKey) = {};", evaluator: "JSDataBridge.setEngine")
5454
}
5555
}

Sources/Substrata/Engine.swift

+14-4
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,28 @@ public class JSEngine {
5656
}
5757

5858
if let jsSource = jsSource {
59-
evaluate(script: jsSource)
59+
evaluate(script: jsSource, evaluator: "JSEngine.loadBundle")
6060
}
6161

6262
completion?(jsError)
6363
}
64-
64+
6565
@discardableResult
6666
public func evaluate(script: String) -> JSConvertible? {
67+
return evaluate(script: script, evaluator: Constants.Evaluator)
68+
}
69+
70+
/// Evaluates a script and returns a result.
71+
///
72+
/// params:
73+
/// - script: The script to evaluate
74+
/// - evaluator: An optional identifying name of the evaluator, useful in debugging.
75+
@discardableResult
76+
public func evaluate(script: String, evaluator: String) -> JSConvertible? {
6777
var outerResult: JSConvertible? = nil
6878
context.performThreadSafe { [weak self] in
6979
guard let self else { return }
70-
let result = JS_Eval(context.ref, script, script.lengthOfBytes(using: .utf8), Constants.Evaluator, 0)
80+
let result = JS_Eval(context.ref, script, script.lengthOfBytes(using: .utf8), evaluator, 0)
7181
outerResult = result.toJSConvertible(context: context)
7282
result.free(context)
7383
}
@@ -86,7 +96,7 @@ public class JSEngine {
8696

8797
public func value(for keyPath: String) -> JSConvertible? {
8898
guard keyPath.count > 0 else { return nil }
89-
let result = evaluate(script: keyPath)
99+
let result = evaluate(script: keyPath, evaluator: "JSEngine.value")
90100
return result
91101
}
92102

Sources/Substrata/Objects/Builtins.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ internal class Builtins {
3636
}
3737
return output;
3838
}
39-
""")
39+
""", evaluator: "JSEngine.Builtins")
4040

41-
if let getInstanceMethodNames = engine.evaluate(script: "_getInstanceMethodNames")?.typed(as: JSFunction.self) {
41+
if let getInstanceMethodNames = engine.evaluate(script: "_getInstanceMethodNames", evaluator: "JSEngine.Builtins.evaluate")?.typed(as: JSFunction.self) {
4242
functions["_getInstanceMethodNames"] = getInstanceMethodNames
4343
}
4444
}

0 commit comments

Comments
 (0)