Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Revert "Subscript-based JSValue conversion"
This reverts commit 4373e95.
  • Loading branch information
j-f1 committed Aug 4, 2020
commit 774b08bf0d8826aa53ff2c736c93a56fb039e1fd
6 changes: 3 additions & 3 deletions IntegrationTests/TestSuites/Sources/PrimaryTests/main.swift
Original file line number Diff line number Diff line change
Expand Up @@ -271,14 +271,14 @@ Call_Function_With_This: do {

Object_Conversion: do {
// let array1 = [1, 2, 3]
// let jsArray1 = JSValue(from: array1).object!
// let jsArray1 = array1.jsValue().object!
// try expectEqual(jsArray1.length, .number(3))
// try expectEqual(jsArray1[0], .number(1))
// try expectEqual(jsArray1[1], .number(2))
// try expectEqual(jsArray1[2], .number(3))

let array2: [JSValueConvertible] = [1, "str", false]
let jsArray2 = JSValue(from: array2).object!
let jsArray2 = array2.jsValue().object!
try expectEqual(jsArray2.length, .number(3))
try expectEqual(jsArray2[0], .number(1))
try expectEqual(jsArray2[1], .string("str"))
Expand All @@ -293,7 +293,7 @@ Object_Conversion: do {
"prop1": 1,
"prop2": "foo",
]
let jsDict1 = JSValue(from: dict1).object!
let jsDict1 = dict1.jsValue().object!
try expectEqual(jsDict1.prop1, .number(1))
try expectEqual(jsDict1.prop2, .string("foo"))
} catch {
Expand Down
8 changes: 5 additions & 3 deletions Sources/JavaScriptKit/JSFunction.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class JSFunctionRef: JSObjectRef {
return result
}
}
return JSValue(from: result)
return result.jsValue()
}

@discardableResult
Expand Down Expand Up @@ -57,7 +57,7 @@ public class JSFunctionRef: JSObjectRef {
fatalError("unavailable")
}

public override subscript(jsValue _: ()) -> JSValue {
override public func jsValue() -> JSValue {
.function(self)
}
}
Expand Down Expand Up @@ -105,7 +105,9 @@ public func _call_host_function(
guard let hostFunc = JSClosure.sharedFunctions[hostFuncRef] else {
fatalError("The function was already released")
}
let args = UnsafeBufferPointer(start: argv, count: Int(argc)).map(JSValue.init(from:))
let args = UnsafeBufferPointer(start: argv, count: Int(argc)).map {
$0.jsValue()
}
let result = hostFunc(args)
let callbackFuncRef = JSFunctionRef(id: callbackFuncRef)
_ = callbackFuncRef(result)
Expand Down
2 changes: 1 addition & 1 deletion Sources/JavaScriptKit/JSObject.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public class JSObjectRef: Equatable {
return lhs.id == rhs.id
}

public subscript(jsValue _: ()) -> JSValue {
public func jsValue() -> JSValue {
.object(self)
}
}
4 changes: 2 additions & 2 deletions Sources/JavaScriptKit/JSValue.swift
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public func getJSValue(this: JSObjectRef, name: String) -> JSValue {
_get_prop(this.id, name, Int32(name.count),
&rawValue.kind,
&rawValue.payload1, &rawValue.payload2, &rawValue.payload3)
return JSValue(from: rawValue)
return rawValue.jsValue()
}

public func setJSValue(this: JSObjectRef, name: String, value: JSValue) {
Expand All @@ -88,7 +88,7 @@ public func getJSValue(this: JSObjectRef, index: Int32) -> JSValue {
_get_subscript(this.id, index,
&rawValue.kind,
&rawValue.payload1, &rawValue.payload2, &rawValue.payload3)
return JSValue(from: rawValue)
return rawValue.jsValue()
}

public func setJSValue(this: JSObjectRef, index: Int32, value: JSValue) {
Expand Down
49 changes: 23 additions & 26 deletions Sources/JavaScriptKit/JSValueConvertible.swift
Original file line number Diff line number Diff line change
@@ -1,58 +1,55 @@
import _CJavaScriptKit

public protocol JSValueConvertible {
subscript(jsValue _: ()) -> JSValue { get }
func jsValue() -> JSValue
}

extension JSValue: JSValueConvertible {
public init(from convertible: JSValueConvertible) {
self = convertible[jsValue: ()]
}
public subscript(jsValue _: ()) -> JSValue { self }
public func jsValue() -> JSValue { self }
}

extension Bool: JSValueConvertible {
public subscript(jsValue _: ()) -> JSValue { .boolean(self) }
public func jsValue() -> JSValue { .boolean(self) }
}

extension Int: JSValueConvertible {
public subscript(jsValue _: ()) -> JSValue { .number(Double(self)) }
public func jsValue() -> JSValue { .number(Double(self)) }
}

extension Int8: JSValueConvertible {
public subscript(jsValue _: ()) -> JSValue { .number(Double(self)) }
public func jsValue() -> JSValue { .number(Double(self)) }
}

extension Int16: JSValueConvertible {
public subscript(jsValue _: ()) -> JSValue { .number(Double(self)) }
public func jsValue() -> JSValue { .number(Double(self)) }
}

extension Int32: JSValueConvertible {
public subscript(jsValue _: ()) -> JSValue { .number(Double(self)) }
public func jsValue() -> JSValue { .number(Double(self)) }
}

extension UInt: JSValueConvertible {
public subscript(jsValue _: ()) -> JSValue { .number(Double(self)) }
public func jsValue() -> JSValue { .number(Double(self)) }
}

extension UInt8: JSValueConvertible {
public subscript(jsValue _: ()) -> JSValue { .number(Double(self)) }
public func jsValue() -> JSValue { .number(Double(self)) }
}

extension UInt16: JSValueConvertible {
public subscript(jsValue _: ()) -> JSValue { .number(Double(self)) }
public func jsValue() -> JSValue { .number(Double(self)) }
}

extension Float: JSValueConvertible {
public subscript(jsValue _: ()) -> JSValue { .number(Double(self)) }
public func jsValue() -> JSValue { .number(Double(self)) }
}

extension Double: JSValueConvertible {
public subscript(jsValue _: ()) -> JSValue { .number(self) }
public func jsValue() -> JSValue { .number(self) }
}

extension String: JSValueConvertible {
public subscript(jsValue _: ()) -> JSValue { .string(self) }
public func jsValue() -> JSValue { .string(self) }
}

extension JSObjectRef: JSValueConvertible {
Expand All @@ -63,16 +60,16 @@ extension JSObjectRef: JSValueConvertible {
private let Object = JSObjectRef.global.Object.function!

extension Dictionary where Value: JSValueConvertible, Key == String {
public subscript(jsValue _: ()) -> JSValue {
JSValue(from: self as Dictionary<Key, JSValueConvertible>)
public func jsValue() -> JSValue {
Swift.Dictionary<Key, JSValueConvertible>.jsValue(self)()
}
}

extension Dictionary: JSValueConvertible where Value == JSValueConvertible, Key == String {
public subscript(jsValue _: ()) -> JSValue {
public func jsValue() -> JSValue {
let object = Object.new()
for (key, value) in self {
object[key] = JSValue(from: value)
object[key] = value.jsValue()
}
return .object(object)
}
Expand All @@ -81,23 +78,23 @@ extension Dictionary: JSValueConvertible where Value == JSValueConvertible, Key
private let Array = JSObjectRef.global.Array.function!

extension Array where Element: JSValueConvertible {
public subscript(jsValue _: ()) -> JSValue {
JSValue(from: self as Swift.Array<JSValueConvertible>)
public func jsValue() -> JSValue {
Swift.Array<JSValueConvertible>.jsValue(self)()
}
}

extension Array: JSValueConvertible where Element == JSValueConvertible {
public subscript(jsValue _: ()) -> JSValue {
public func jsValue() -> JSValue {
let array = Array.new(count)
for (index, element) in enumerated() {
array[index] = JSValue(from: element)
array[index] = element.jsValue()
}
return .object(array)
}
}

extension RawJSValue: JSValueConvertible {
public subscript(jsValue _: ()) -> JSValue {
public func jsValue() -> JSValue {
switch kind {
case .invalid:
fatalError()
Expand Down Expand Up @@ -179,7 +176,7 @@ extension Array where Element == JSValueConvertible {
_ results: inout [RawJSValue], _ body: ([RawJSValue]) -> T
) -> T {
if index == values.count { return body(results) }
return JSValue(from: values[index]).withRawJSValue { (rawValue) -> T in
return values[index].jsValue().withRawJSValue { (rawValue) -> T in
results.append(rawValue)
return _withRawJSValues(values, index + 1, &results, body)
}
Expand Down