File tree Expand file tree Collapse file tree 4 files changed +47
-10
lines changed
test/JavaScriptKitExec/Sources/JavaScriptKitExec Expand file tree Collapse file tree 4 files changed +47
-10
lines changed Original file line number Diff line number Diff line change @@ -21,6 +21,8 @@ public enum JSValue: Equatable {
2121 case string( String )
2222 case number( Int32 )
2323 case object( JSObjectRef )
24+ case null
25+ case undefined
2426}
2527
2628protocol JSValueConvertible {
@@ -60,6 +62,10 @@ extension RawJSValue: JSValueConvertible {
6062 return . string( string)
6163 case JavaScriptValueKind_Object:
6264 return . object( JSObjectRef ( id: payload1) )
65+ case JavaScriptValueKind_Null:
66+ return . null
67+ case JavaScriptValueKind_Undefined:
68+ return . undefined
6369 default :
6470 fatalError ( " unreachable " )
6571 }
@@ -91,6 +97,14 @@ extension JSValue {
9197 kind = JavaScriptValueKind_Object
9298 payload1 = ref. id
9399 payload2 = 0
100+ case . null:
101+ kind = JavaScriptValueKind_Null
102+ payload1 = 0
103+ payload2 = 0
104+ case . undefined:
105+ kind = JavaScriptValueKind_Undefined
106+ payload1 = 0
107+ payload2 = 0
94108 }
95109 let rawValue = RawJSValue ( kind: kind, payload1: payload1, payload2: payload2)
96110 return body ( rawValue)
Original file line number Diff line number Diff line change 66typedef unsigned int JavaScriptValueId ;
77
88typedef enum {
9- JavaScriptValueKind_Invalid = -1 ,
10- JavaScriptValueKind_Boolean = 0 ,
11- JavaScriptValueKind_String = 1 ,
12- JavaScriptValueKind_Number = 2 ,
13- JavaScriptValueKind_Object = 3 ,
14- JavaScriptValueKind_Null = 4 ,
15- JavaScriptValueKind_Function = 5 ,
9+ JavaScriptValueKind_Invalid = -1 ,
10+ JavaScriptValueKind_Boolean = 0 ,
11+ JavaScriptValueKind_String = 1 ,
12+ JavaScriptValueKind_Number = 2 ,
13+ JavaScriptValueKind_Object = 3 ,
14+ JavaScriptValueKind_Null = 4 ,
15+ JavaScriptValueKind_Undefined = 5 ,
16+ JavaScriptValueKind_Function = 6 ,
1617} JavaScriptValueKind ;
1718
1819typedef unsigned JavaScriptPayload ;
Original file line number Diff line number Diff line change @@ -16,8 +16,8 @@ enum JavaScriptValueKind {
1616 String = 1 ,
1717 Number = 2 ,
1818 Object = 3 ,
19- Array = 4 ,
20- Null = 5 ,
19+ Null = 4 ,
20+ Undefined = 5 ,
2121 Function = 6 ,
2222}
2323
@@ -101,12 +101,25 @@ export class SwiftRuntime {
101101 case JavaScriptValueKind . Object : {
102102 return this . _heapValues [ payload1 ]
103103 }
104+ case JavaScriptValueKind . Null : {
105+ return null
106+ }
107+ case JavaScriptValueKind . Undefined : {
108+ return undefined
109+ }
104110 default :
105111 throw new Error ( `Type kind "${ kind } " is not supported` )
106112 }
107113 }
108114
109115 const encodeValue = ( value : any ) => {
116+ if ( value === null ) {
117+ return {
118+ kind : JavaScriptValueKind . Null ,
119+ payload1 : 0 ,
120+ payload2 : 0 ,
121+ }
122+ }
110123 switch ( typeof value ) {
111124 case "boolean" : {
112125 return {
@@ -129,6 +142,13 @@ export class SwiftRuntime {
129142 payload2 : value . length ,
130143 }
131144 }
145+ case "undefined" : {
146+ return {
147+ kind : JavaScriptValueKind . Undefined ,
148+ payload1 : 0 ,
149+ payload2 : 0 ,
150+ }
151+ }
132152 case "object" : {
133153 return {
134154 kind : JavaScriptValueKind . Object ,
Original file line number Diff line number Diff line change @@ -9,12 +9,14 @@ Literal_Conversion: do {
99 . number( 0 ) ,
1010 . number( . max) ,
1111 . number( . min) ,
12+ . null,
13+ . undefined,
1214 ]
1315 for (index, input) in inputs. enumerated ( ) {
1416 let prop = " prop_ \( index) "
1517 setJSValue ( this: global, name: prop, value: input)
1618 let got = getJSValue ( this: global, name: prop)
17- try expectEqual ( input , got )
19+ try expectEqual ( got , input )
1820 }
1921} catch {
2022 print ( error)
You can’t perform that action at this time.
0 commit comments