11import _CJavaScriptKit
22
33public protocol JSValueConvertible {
4- func jsValue( ) -> JSValue
4+ subscript ( jsValue _ : ( ) ) -> JSValue { get }
55}
66
77extension JSValue : JSValueConvertible {
8- public func jsValue( ) -> JSValue { self }
8+ public init ( from convertible: JSValueConvertible ) {
9+ self = convertible [ jsValue: ( ) ]
10+ }
11+ public subscript( jsValue _: ( ) ) -> JSValue { self }
912}
1013
1114extension Bool : JSValueConvertible {
12- public func jsValue( ) -> JSValue { . boolean( self ) }
15+ public subscript ( jsValue _ : ( ) ) -> JSValue { . boolean( self ) }
1316}
1417
1518extension Int : JSValueConvertible {
16- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
19+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
1720}
1821
1922extension Int8 : JSValueConvertible {
20- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
23+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
2124}
2225
2326extension Int16 : JSValueConvertible {
24- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
27+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
2528}
2629
2730extension Int32 : JSValueConvertible {
28- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
31+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
2932}
3033
3134extension UInt : JSValueConvertible {
32- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
35+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
3336}
3437
3538extension UInt8 : JSValueConvertible {
36- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
39+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
3740}
3841
3942extension UInt16 : JSValueConvertible {
40- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
43+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
4144}
4245
4346extension Float : JSValueConvertible {
44- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
47+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
4548}
4649
4750extension Double : JSValueConvertible {
48- public func jsValue( ) -> JSValue { . number( self ) }
51+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( self ) }
4952}
5053
5154extension String : JSValueConvertible {
52- public func jsValue( ) -> JSValue { . string( self ) }
55+ public subscript ( jsValue _ : ( ) ) -> JSValue { . string( self ) }
5356}
5457
5558extension JSObjectRef : JSValueConvertible {
@@ -60,16 +63,16 @@ extension JSObjectRef: JSValueConvertible {
6063private let Object = JSObjectRef . global. Object. function!
6164
6265extension Dictionary where Value: JSValueConvertible , Key == String {
63- public func jsValue( ) -> JSValue {
64- Swift . Dictionary < Key , JSValueConvertible > . jsValue ( self ) ( )
66+ public subscript ( jsValue _ : ( ) ) -> JSValue {
67+ JSValue ( from : self as Dictionary < Key , JSValueConvertible > )
6568 }
6669}
6770
6871extension Dictionary : JSValueConvertible where Value == JSValueConvertible , Key == String {
69- public func jsValue( ) -> JSValue {
72+ public subscript ( jsValue _ : ( ) ) -> JSValue {
7073 let object = Object . new ( )
7174 for (key, value) in self {
72- object [ key] = value . jsValue ( )
75+ object [ key] = JSValue ( from : value )
7376 }
7477 return . object( object)
7578 }
@@ -78,23 +81,23 @@ extension Dictionary: JSValueConvertible where Value == JSValueConvertible, Key
7881private let Array = JSObjectRef . global. Array. function!
7982
8083extension Array where Element: JSValueConvertible {
81- public func jsValue( ) -> JSValue {
82- Swift . Array < JSValueConvertible > . jsValue ( self ) ( )
84+ public subscript ( jsValue _ : ( ) ) -> JSValue {
85+ JSValue ( from : self as Swift . Array < JSValueConvertible > )
8386 }
8487}
8588
8689extension Array : JSValueConvertible where Element == JSValueConvertible {
87- public func jsValue( ) -> JSValue {
90+ public subscript ( jsValue _ : ( ) ) -> JSValue {
8891 let array = Array . new ( count)
8992 for (index, element) in enumerated ( ) {
90- array [ index] = element . jsValue ( )
93+ array [ index] = JSValue ( from : element )
9194 }
9295 return . object( array)
9396 }
9497}
9598
9699extension RawJSValue : JSValueConvertible {
97- public func jsValue( ) -> JSValue {
100+ public subscript ( jsValue _ : ( ) ) -> JSValue {
98101 switch kind {
99102 case . invalid:
100103 fatalError ( )
@@ -176,7 +179,7 @@ extension Array where Element == JSValueConvertible {
176179 _ results: inout [ RawJSValue ] , _ body: ( [ RawJSValue ] ) -> T
177180 ) -> T {
178181 if index == values. count { return body ( results) }
179- return values [ index] . jsValue ( ) . withRawJSValue { ( rawValue) -> T in
182+ return JSValue ( from : values [ index] ) . withRawJSValue { ( rawValue) -> T in
180183 results. append ( rawValue)
181184 return _withRawJSValues ( values, index + 1 , & results, body)
182185 }
0 commit comments