1
+ import _CJavaScriptKit
2
+
1
3
public class JSObjectRef : Equatable {
2
4
let id : UInt32
3
- fileprivate init ( id: UInt32 ) {
5
+ init ( id: UInt32 ) {
4
6
self . id = id
5
7
}
6
8
public static func global( ) -> JSObjectRef {
@@ -19,7 +21,7 @@ public class JSObjectRef: Equatable {
19
21
public class JSFunctionRef : Equatable {
20
22
let id : UInt32
21
23
22
- fileprivate init ( id: UInt32 ) {
24
+ init ( id: UInt32 ) {
23
25
self . id = id
24
26
}
25
27
@@ -38,98 +40,6 @@ public enum JSValue: Equatable {
38
40
case function( JSFunctionRef )
39
41
}
40
42
41
- protocol JSValueConvertible {
42
- func jsValue( ) -> JSValue
43
- }
44
-
45
- extension Bool : JSValueConvertible {
46
- func jsValue( ) -> JSValue {
47
- . boolean( self )
48
- }
49
- }
50
-
51
- import _CJavaScriptKit
52
-
53
- struct RawJSValue {
54
- var kind : JavaScriptValueKind = JavaScriptValueKind_Invalid
55
- var payload1 : JavaScriptPayload = 0
56
- var payload2 : JavaScriptPayload = 0
57
- }
58
-
59
- extension RawJSValue : JSValueConvertible {
60
- func jsValue( ) -> JSValue {
61
- switch kind {
62
- case JavaScriptValueKind_Invalid:
63
- fatalError ( )
64
- case JavaScriptValueKind_Boolean:
65
- return . boolean( payload1 != 0 )
66
- case JavaScriptValueKind_Number:
67
- return . number( Int32 ( bitPattern: payload1) )
68
- case JavaScriptValueKind_String:
69
- // +1 for null terminator
70
- let buffer = malloc ( Int ( payload2 + 1 ) ) !. assumingMemoryBound ( to: UInt8 . self)
71
- defer { free ( buffer) }
72
- _load_string ( payload1 as JavaScriptValueId , buffer)
73
- buffer [ Int ( payload2) ] = 0
74
- let string = String ( decodingCString: UnsafePointer ( buffer) , as: UTF8 . self)
75
- return . string( string)
76
- case JavaScriptValueKind_Object:
77
- return . object( JSObjectRef ( id: payload1) )
78
- case JavaScriptValueKind_Null:
79
- return . null
80
- case JavaScriptValueKind_Undefined:
81
- return . undefined
82
- case JavaScriptValueKind_Function:
83
- return . function( JSFunctionRef ( id: payload1) )
84
- default :
85
- fatalError ( " unreachable " )
86
- }
87
- }
88
- }
89
-
90
- extension JSValue {
91
- func withRawJSValue< T> ( _ body: ( RawJSValue ) -> T ) -> T {
92
- let kind : JavaScriptValueKind
93
- let payload1 : JavaScriptPayload
94
- let payload2 : JavaScriptPayload
95
- switch self {
96
- case let . boolean( boolValue) :
97
- kind = JavaScriptValueKind_Boolean
98
- payload1 = boolValue ? 1 : 0
99
- payload2 = 0
100
- case let . number( numberValue) :
101
- kind = JavaScriptValueKind_Number
102
- payload1 = JavaScriptPayload ( bitPattern: numberValue)
103
- payload2 = 0
104
- case var . string( stringValue) :
105
- kind = JavaScriptValueKind_String
106
- return stringValue. withUTF8 { bufferPtr in
107
- let ptrValue = UInt32 ( UInt ( bitPattern: bufferPtr. baseAddress!) )
108
- let rawValue = RawJSValue ( kind: kind, payload1: ptrValue, payload2: JavaScriptPayload ( bufferPtr. count) )
109
- return body ( rawValue)
110
- }
111
- case let . object( ref) :
112
- kind = JavaScriptValueKind_Object
113
- payload1 = ref. id
114
- payload2 = 0
115
- case . null:
116
- kind = JavaScriptValueKind_Null
117
- payload1 = 0
118
- payload2 = 0
119
- case . undefined:
120
- kind = JavaScriptValueKind_Undefined
121
- payload1 = 0
122
- payload2 = 0
123
- case let . function( functionRef) :
124
- kind = JavaScriptValueKind_Function
125
- payload1 = functionRef. id
126
- payload2 = 0
127
- }
128
- let rawValue = RawJSValue ( kind: kind, payload1: payload1, payload2: payload2)
129
- return body ( rawValue)
130
- }
131
- }
132
-
133
43
public func getJSValue( this: JSObjectRef , name: String ) -> JSValue {
134
44
var rawValue = RawJSValue ( )
135
45
_get_prop ( this. id, name, Int32 ( name. count) ,
@@ -162,33 +72,3 @@ public func setJSValue(this: JSObjectRef, index: Int32, value: JSValue) {
162
72
}
163
73
}
164
74
165
-
166
- #if Xcode
167
- func _set_prop(
168
- _ _this: JavaScriptValueId ,
169
- _ prop: UnsafePointer < Int8 > ! , _ length: Int32 ,
170
- _ kind: JavaScriptValueKind ,
171
- _ payload1: JavaScriptPayload ,
172
- _ payload2: JavaScriptPayload ) { fatalError ( ) }
173
- func _get_prop(
174
- _ _this: JavaScriptValueId ,
175
- _ prop: UnsafePointer < Int8 > ! , _ length: Int32 ,
176
- _ kind: UnsafeMutablePointer < JavaScriptValueKind > ! ,
177
- _ payload1: UnsafeMutablePointer < JavaScriptPayload > ! ,
178
- _ payload2: UnsafeMutablePointer < JavaScriptPayload > ! ) { fatalError ( ) }
179
- func _set_subscript(
180
- _ _this: JavaScriptValueId ,
181
- _ index: Int32 ,
182
- _ kind: JavaScriptValueKind ,
183
- _ payload1: JavaScriptPayload ,
184
- _ payload2: JavaScriptPayload ) { fatalError ( ) }
185
- func _get_subscript(
186
- _ _this: JavaScriptValueId ,
187
- _ index: Int32 ,
188
- _ kind: UnsafeMutablePointer < JavaScriptValueKind > ! ,
189
- _ payload1: UnsafeMutablePointer < JavaScriptPayload > ! ,
190
- _ payload2: UnsafeMutablePointer < JavaScriptPayload > ! ) { fatalError ( ) }
191
- func _load_string(
192
- _ ref: JavaScriptValueId ,
193
- _ buffer: UnsafeMutablePointer < UInt8 > ! ) { fatalError ( ) }
194
- #endif
0 commit comments