@@ -6,8 +6,9 @@ use crate::build::{
6
6
build_array_expression, build_assign_expresison, build_binary_expression,
7
7
build_block_statement, build_break_expression, build_cast_expression,
8
8
build_const_block_expression, build_contract, build_eblock_expression, build_enum_custom_type,
9
- build_identifier, build_member_access_expression, build_method_call_expression,
10
- build_reference_expression, build_struct_custom_type,
9
+ build_for_loop_expression, build_identifier, build_if_expression,
10
+ build_member_access_expression, build_method_call_expression, build_reference_expression,
11
+ build_struct_custom_type,
11
12
} ;
12
13
use crate :: custom_type:: Type ;
13
14
use crate :: errors:: SDKErr ;
@@ -322,10 +323,11 @@ impl Codebase<OpenState> {
322
323
break_expr
323
324
}
324
325
syn:: Expr :: Block ( block_expr) => {
326
+ let id = Uuid :: new_v4 ( ) . as_u128 ( ) ;
325
327
let block_statement = build_block_statement ( self , & block_expr. block ) ;
326
- self . add_node ( NodeKind :: Statement ( block_statement. clone ( ) ) , parent_id ) ;
328
+ self . add_node ( NodeKind :: Statement ( block_statement. clone ( ) ) , id ) ;
327
329
let block = match block_statement {
328
- Statement :: Block ( block) => build_eblock_expression ( & block) ,
330
+ Statement :: Block ( block) => build_eblock_expression ( & block, id ) ,
329
331
_ => Expression :: Empty ,
330
332
} ;
331
333
self . add_node (
@@ -396,7 +398,7 @@ impl Codebase<OpenState> {
396
398
let block_statement = build_block_statement ( self , & expr_const. block ) ;
397
399
self . add_node ( NodeKind :: Statement ( block_statement. clone ( ) ) , id) ;
398
400
let const_block = match block_statement {
399
- Statement :: Block ( block) => build_const_block_expression ( & block) ,
401
+ Statement :: Block ( block) => build_const_block_expression ( & block, id ) ,
400
402
_ => Expression :: Empty ,
401
403
} ;
402
404
self . add_node (
@@ -416,6 +418,22 @@ impl Codebase<OpenState> {
416
418
) ;
417
419
cont_expr
418
420
}
421
+ syn:: Expr :: ForLoop ( expr_forloop) => {
422
+ let id = Uuid :: new_v4 ( ) . as_u128 ( ) ;
423
+ let block_statement = build_block_statement ( self , & expr_forloop. body ) ;
424
+ self . add_node ( NodeKind :: Statement ( block_statement. clone ( ) ) , id) ;
425
+ let for_loop = match block_statement {
426
+ Statement :: Block ( block) => {
427
+ build_for_loop_expression ( self , expr_forloop, & block, id)
428
+ }
429
+ _ => Expression :: Empty ,
430
+ } ;
431
+ self . add_node (
432
+ NodeKind :: Statement ( Statement :: Expression ( for_loop. clone ( ) ) ) ,
433
+ parent_id,
434
+ ) ;
435
+ for_loop
436
+ }
419
437
syn:: Expr :: Field ( field_expr) => {
420
438
let reference = build_member_access_expression ( self , field_expr, is_tried) ;
421
439
self . add_node (
@@ -424,6 +442,22 @@ impl Codebase<OpenState> {
424
442
) ;
425
443
reference
426
444
}
445
+ syn:: Expr :: If ( expr_if) => {
446
+ let id = Uuid :: new_v4 ( ) . as_u128 ( ) ;
447
+ let then_block = build_block_statement ( self , & expr_if. then_branch ) ;
448
+ self . add_node ( NodeKind :: Statement ( then_block. clone ( ) ) , id) ;
449
+ match then_block {
450
+ Statement :: Block ( block) => {
451
+ let if_expr = build_if_expression ( self , expr_if, block. clone ( ) , id) ;
452
+ self . add_node (
453
+ NodeKind :: Statement ( Statement :: Expression ( if_expr. clone ( ) ) ) ,
454
+ parent_id,
455
+ ) ;
456
+ if_expr
457
+ }
458
+ _ => Expression :: Empty ,
459
+ }
460
+ }
427
461
syn:: Expr :: Try ( expr_try) => self . build_expression ( & expr_try. expr , parent_id, true ) ,
428
462
syn:: Expr :: MethodCall ( method_call) => {
429
463
let method_call = build_method_call_expression ( self , method_call, is_tried) ;
0 commit comments