@@ -30,6 +30,7 @@ use std::ptr::null_mut;
30
30
struct JavaSwc4jAstFactory {
31
31
#[ allow( dead_code) ]
32
32
class : GlobalRef ,
33
+ method_create_big_int : JStaticMethodID ,
33
34
method_create_binding_ident : JStaticMethodID ,
34
35
method_create_block_stmt : JStaticMethodID ,
35
36
method_create_bool : JStaticMethodID ,
@@ -38,6 +39,8 @@ struct JavaSwc4jAstFactory {
38
39
method_create_expr_stmt : JStaticMethodID ,
39
40
method_create_ident : JStaticMethodID ,
40
41
method_create_module : JStaticMethodID ,
42
+ method_create_null : JStaticMethodID ,
43
+ method_create_number : JStaticMethodID ,
41
44
method_create_script : JStaticMethodID ,
42
45
method_create_str : JStaticMethodID ,
43
46
method_create_var_decl : JStaticMethodID ,
@@ -54,6 +57,13 @@ impl JavaSwc4jAstFactory {
54
57
let class = env
55
58
. new_global_ref ( class)
56
59
. expect ( "Couldn't globalize class Swc4jAstFactory" ) ;
60
+ let method_create_big_int = env
61
+ . get_static_method_id (
62
+ & class,
63
+ "createBigInt" ,
64
+ "(ILjava/lang/String;II)Lcom/caoccao/javet/swc4j/ast/expr/lit/Swc4jAstBigInt;" ,
65
+ )
66
+ . expect ( "Couldn't find method Swc4jAstFactory.createBigInt" ) ;
57
67
let method_create_binding_ident = env
58
68
. get_static_method_id (
59
69
& class,
@@ -110,6 +120,20 @@ impl JavaSwc4jAstFactory {
110
120
"(Ljava/util/List;Ljava/lang/String;II)Lcom/caoccao/javet/swc4j/ast/program/Swc4jAstModule;" ,
111
121
)
112
122
. expect ( "Couldn't find method Swc4jAstFactory.createModule" ) ;
123
+ let method_create_null = env
124
+ . get_static_method_id (
125
+ & class,
126
+ "createNull" ,
127
+ "(II)Lcom/caoccao/javet/swc4j/ast/expr/lit/Swc4jAstNull;" ,
128
+ )
129
+ . expect ( "Couldn't find method Swc4jAstFactory.createNull" ) ;
130
+ let method_create_number = env
131
+ . get_static_method_id (
132
+ & class,
133
+ "createNumber" ,
134
+ "(DLjava/lang/String;II)Lcom/caoccao/javet/swc4j/ast/expr/lit/Swc4jAstNumber;" ,
135
+ )
136
+ . expect ( "Couldn't find method Swc4jAstFactory.createNumber" ) ;
113
137
let method_create_script = env
114
138
. get_static_method_id (
115
139
& class,
@@ -140,6 +164,7 @@ impl JavaSwc4jAstFactory {
140
164
. expect ( "Couldn't find method Swc4jAstFactory.createVarDeclarator" ) ;
141
165
JavaSwc4jAstFactory {
142
166
class,
167
+ method_create_big_int,
143
168
method_create_binding_ident,
144
169
method_create_block_stmt,
145
170
method_create_bool,
@@ -148,13 +173,53 @@ impl JavaSwc4jAstFactory {
148
173
method_create_expr_stmt,
149
174
method_create_ident,
150
175
method_create_module,
176
+ method_create_null,
177
+ method_create_number,
151
178
method_create_script,
152
179
method_create_str,
153
180
method_create_var_decl,
154
181
method_create_var_declarator,
155
182
}
156
183
}
157
184
185
+ pub fn create_big_int< ' local , ' a > (
186
+ & self ,
187
+ env : & mut JNIEnv < ' local > ,
188
+ sign : i32 ,
189
+ raw : & Option < String > ,
190
+ range : & Range < usize > ,
191
+ ) -> JObject < ' a >
192
+ where
193
+ ' local : ' a ,
194
+ {
195
+ let sign = jvalue {
196
+ i : sign as i32 ,
197
+ } ;
198
+ let java_raw = match & raw {
199
+ Some ( raw) => converter:: string_to_jstring ( env, & raw ) ,
200
+ None => Default :: default ( ) ,
201
+ } ;
202
+ let raw = jvalue {
203
+ l : java_raw. as_raw ( ) ,
204
+ } ;
205
+ let start_position = jvalue { i : range. start as i32 } ;
206
+ let end_position = jvalue { i : range. end as i32 } ;
207
+ let return_value = unsafe {
208
+ env
209
+ . call_static_method_unchecked (
210
+ & self . class ,
211
+ self . method_create_big_int ,
212
+ ReturnType :: Object ,
213
+ & [ sign, raw, start_position, end_position] ,
214
+ )
215
+ . expect ( "Couldn't create Swc4jAstBigInt by create_big_int()" )
216
+ . l ( )
217
+ . expect ( "Couldn't convert Swc4jAstBigInt by create_big_int()" )
218
+ } ;
219
+ delete_local_ref ! ( env, java_raw) ;
220
+ return_value
221
+ }
222
+
158
223
pub fn create_binding_ident < ' local , ' a > (
159
224
& self ,
160
225
env : & mut JNIEnv < ' local > ,
@@ -393,6 +458,69 @@ impl JavaSwc4jAstFactory {
393
458
return_value
394
459
}
395
460
461
+ pub fn create_null < ' local , ' a > (
462
+ & self ,
463
+ env : & mut JNIEnv < ' local > ,
464
+ range : & Range < usize > ,
465
+ ) -> JObject < ' a >
466
+ where
467
+ ' local : ' a ,
468
+ {
469
+ let start_position = jvalue { i : range. start as i32 } ;
470
+ let end_position = jvalue { i : range. end as i32 } ;
471
+ let return_value = unsafe {
472
+ env
473
+ . call_static_method_unchecked (
474
+ & self . class ,
475
+ self . method_create_null ,
476
+ ReturnType :: Object ,
477
+ & [ start_position, end_position] ,
478
+ )
479
+ . expect ( "Couldn't create Swc4jAstNull by create_null()" )
480
+ . l ( )
481
+ . expect ( "Couldn't convert Swc4jAstNull by create_null()" )
482
+ } ;
483
+ return_value
484
+ }
485
+
486
+ pub fn create_number< ' local , ' a > (
487
+ & self ,
488
+ env : & mut JNIEnv < ' local > ,
489
+ value : f64 ,
490
+ raw : & Option < String > ,
491
+ range : & Range < usize > ,
492
+ ) -> JObject < ' a >
493
+ where
494
+ ' local : ' a ,
495
+ {
496
+ let value = jvalue {
497
+ d : value as f64 ,
498
+ } ;
499
+ let java_raw = match & raw {
500
+ Some ( raw) => converter:: string_to_jstring ( env, & raw ) ,
501
+ None => Default :: default ( ) ,
502
+ } ;
503
+ let raw = jvalue {
504
+ l : java_raw. as_raw ( ) ,
505
+ } ;
506
+ let start_position = jvalue { i : range. start as i32 } ;
507
+ let end_position = jvalue { i : range. end as i32 } ;
508
+ let return_value = unsafe {
509
+ env
510
+ . call_static_method_unchecked (
511
+ & self . class ,
512
+ self . method_create_number ,
513
+ ReturnType :: Object ,
514
+ & [ value, raw, start_position, end_position] ,
515
+ )
516
+ . expect ( "Couldn't create Swc4jAstNumber by create_number()" )
517
+ . l ( )
518
+ . expect ( "Couldn't convert Swc4jAstNumber by create_number()" )
519
+ } ;
520
+ delete_local_ref ! ( env, java_raw) ;
521
+ return_value
522
+ }
523
+
396
524
pub fn create_script < ' local , ' a > (
397
525
& self ,
398
526
env : & mut JNIEnv < ' local > ,
@@ -2115,6 +2243,17 @@ pub mod program {
2115
2243
2116
2244
use deno_ast:: swc:: ast:: * ;
2117
2245
2246
+ fn create_big_int < ' local , ' a > ( env : & mut JNIEnv < ' local > , map : & ByteToIndexMap , node : & BigInt ) -> JObject < ' a >
2247
+ where
2248
+ ' local : ' a ,
2249
+ {
2250
+ let java_ast_factory = unsafe { JAVA_AST_FACTORY . as_ref ( ) . unwrap ( ) } ;
2251
+ let range = map. get_range_by_span ( & node. span ) ;
2252
+ let sign = node. value . sign ( ) . get_id ( ) ;
2253
+ let raw = node. raw . as_ref ( ) . map ( |node| node. as_str ( ) . to_owned ( ) ) ;
2254
+ java_ast_factory. create_big_int ( env, sign, & raw , & range)
2255
+ }
2256
+
2118
2257
fn create_binding_ident < ' local , ' a > (
2119
2258
env : & mut JNIEnv < ' local > ,
2120
2259
map : & ByteToIndexMap ,
@@ -2236,6 +2375,9 @@ pub mod program {
2236
2375
match node {
2237
2376
Lit :: Str ( node) => create_str ( env, map, node) ,
2238
2377
Lit :: Bool ( node) => create_bool ( env, map, node) ,
2378
+ Lit :: Null ( node) => create_null ( env, map, node) ,
2379
+ Lit :: Num ( node) => create_number ( env, map, node) ,
2380
+ Lit :: BigInt ( node) => create_big_int ( env, map, node) ,
2239
2381
_ => Default :: default ( ) ,
2240
2382
// TODO
2241
2383
}
@@ -2270,6 +2412,26 @@ pub mod program {
2270
2412
}
2271
2413
}
2272
2414
2415
+ fn create_null < ' local , ' a > ( env : & mut JNIEnv < ' local > , map : & ByteToIndexMap , node : & Null ) -> JObject < ' a >
2416
+ where
2417
+ ' local : ' a ,
2418
+ {
2419
+ let java_ast_factory = unsafe { JAVA_AST_FACTORY . as_ref ( ) . unwrap ( ) } ;
2420
+ let range = map. get_range_by_span ( & node. span ) ;
2421
+ java_ast_factory. create_null ( env, & range)
2422
+ }
2423
+
2424
+ fn create_number < ' local , ' a > ( env : & mut JNIEnv < ' local > , map : & ByteToIndexMap , node : & Number ) -> JObject < ' a >
2425
+ where
2426
+ ' local : ' a ,
2427
+ {
2428
+ let java_ast_factory = unsafe { JAVA_AST_FACTORY . as_ref ( ) . unwrap ( ) } ;
2429
+ let range = map. get_range_by_span ( & node. span ) ;
2430
+ let value = node. value ;
2431
+ let raw = node. raw . as_ref ( ) . map ( |node| node. as_str ( ) . to_owned ( ) ) ;
2432
+ java_ast_factory. create_number ( env, value, & raw , & range)
2433
+ }
2434
+
2273
2435
fn create_pat < ' local , ' a > ( env : & mut JNIEnv < ' local > , map : & ByteToIndexMap , node : & Pat ) -> JObject < ' a >
2274
2436
where
2275
2437
' local : ' a ,
@@ -2338,7 +2500,7 @@ pub mod program {
2338
2500
{
2339
2501
let java_ast_factory = unsafe { JAVA_AST_FACTORY . as_ref ( ) . unwrap ( ) } ;
2340
2502
let range = map. get_range_by_span ( & node. span ) ;
2341
- let value = & node. value . as_str ( ) ;
2503
+ let value = node. value . as_str ( ) ;
2342
2504
let raw = node. raw . as_ref ( ) . map ( |node| node. as_str ( ) . to_owned ( ) ) ;
2343
2505
java_ast_factory. create_str ( env, value, & raw , & range)
2344
2506
}
0 commit comments