@@ -79,6 +79,7 @@ enum DeclType {
79
79
fn_ // fn ...
80
80
struct_ // struct ...
81
81
interface_ // interface ...
82
+ stmt_ // statement
82
83
}
83
84
84
85
fn new_repl (folder string ) Repl {
@@ -240,42 +241,44 @@ fn (r &Repl) current_source_code(should_add_temp_lines bool, not_add_print bool)
240
241
return all_lines.join ('\n ' )
241
242
}
242
243
243
- fn (r &Repl) insert_source_code (typ DeclType, line string ) string {
244
+ fn (r &Repl) insert_source_code (typ DeclType, lines [] string ) string {
244
245
mut all_lines := r.import_to_source_code ()
245
246
246
247
if vstartup != '' {
247
- mut lines := r.vstartup_lines.filter (! it .starts_with ('print' ))
248
- all_lines << lines
248
+ all_lines << r.vstartup_lines.filter (! it .starts_with ('print' ))
249
249
}
250
250
all_lines << r.includes
251
251
if typ == .include_ {
252
- all_lines << line
252
+ all_lines << lines
253
253
}
254
254
all_lines << r.types
255
255
if typ == .type_ {
256
- all_lines << line
256
+ all_lines << lines
257
257
}
258
258
all_lines << r.enums
259
259
if typ == .enum_ {
260
- all_lines << line
260
+ all_lines << lines
261
261
}
262
262
all_lines << r.consts
263
263
if typ == .const_ {
264
- all_lines << line
264
+ all_lines << lines
265
265
}
266
266
all_lines << r.structs
267
267
if typ == .struct_ {
268
- all_lines << line
268
+ all_lines << lines
269
269
}
270
270
all_lines << r.interfaces
271
271
if typ == .interface_ {
272
- all_lines << line
272
+ all_lines << lines
273
273
}
274
274
all_lines << r.functions
275
275
if typ == .fn_ {
276
- all_lines << line
276
+ all_lines << lines
277
277
}
278
278
all_lines << r.lines
279
+ if typ == .stmt_ {
280
+ all_lines << lines
281
+ }
279
282
return all_lines.join ('\n ' )
280
283
}
281
284
@@ -472,17 +475,7 @@ fn run_repl(workdir string, vrepl_prefix string) int {
472
475
473
476
if r.checks () {
474
477
for rline in r.line.split ('\n ' ) {
475
- if r.in_func || was_func {
476
- r.functions << rline
477
- } else if r.in_struct || was_struct {
478
- r.structs << rline
479
- } else if r.in_enum || was_enum {
480
- r.enums << rline
481
- } else if r.in_interface || was_interface {
482
- r.interfaces << rline
483
- } else {
484
- r.temp_lines << rline
485
- }
478
+ r.temp_lines << rline
486
479
}
487
480
if r.indent > 0 {
488
481
continue
@@ -597,30 +590,52 @@ fn run_repl(workdir string, vrepl_prefix string) int {
597
590
if mod ! in r.modules {
598
591
temp_source_code = '${r.line} \n ' + r.current_source_code (false , true )
599
592
}
593
+ } else if r.line.len == 0 {
594
+ if was_func {
595
+ temp_source_code = r.insert_source_code (DeclType.fn_, r.temp_lines)
596
+ } else if was_struct {
597
+ temp_source_code = r.insert_source_code (DeclType.struct_, r.temp_lines)
598
+ } else if was_enum {
599
+ temp_source_code = r.insert_source_code (DeclType.enum_, r.temp_lines)
600
+ } else if was_interface {
601
+ temp_source_code = r.insert_source_code (DeclType.interface_, r.temp_lines)
602
+ } else {
603
+ temp_source_code = r.insert_source_code (DeclType.stmt_, r.temp_lines)
604
+ }
600
605
} else if starts_with_include {
601
- temp_source_code = r.insert_source_code (DeclType.include_, r.line)
606
+ temp_source_code = r.insert_source_code (DeclType.include_, [ r.line] )
602
607
} else if starts_with_fn {
603
- temp_source_code = r.insert_source_code (DeclType.fn_, r.line)
608
+ temp_source_code = r.insert_source_code (DeclType.fn_, [ r.line] )
604
609
} else if starts_with_const {
605
- temp_source_code = r.insert_source_code (DeclType.const_, r.line)
610
+ temp_source_code = r.insert_source_code (DeclType.const_, [ r.line] )
606
611
} else if starts_with_enum {
607
- temp_source_code = r.insert_source_code (DeclType.enum_, r.line)
612
+ temp_source_code = r.insert_source_code (DeclType.enum_, [ r.line] )
608
613
} else if starts_with_struct {
609
- temp_source_code = r.insert_source_code (DeclType.struct_, r.line)
614
+ temp_source_code = r.insert_source_code (DeclType.struct_, [ r.line] )
610
615
} else if starts_with_interface {
611
- temp_source_code = r.insert_source_code (DeclType.interface_, r.line)
616
+ temp_source_code = r.insert_source_code (DeclType.interface_, [ r.line] )
612
617
} else if starts_with_type {
613
- temp_source_code = r.insert_source_code (DeclType.type_, r.line)
618
+ temp_source_code = r.insert_source_code (DeclType.type_, [ r.line] )
614
619
} else {
615
620
temp_source_code = r.current_source_code (true , false ) + '\n ${r.line} \n '
616
621
}
617
622
os.write_file (temp_file, temp_source_code) or { panic (err) }
618
623
s := repl_run_vfile (temp_file) or { return 1 }
619
624
if s.exit_code == 0 {
620
- r.lines << r.temp_lines
621
- r.temp_lines.clear ()
622
625
if starts_with_import {
623
626
r.parse_import (r.line)
627
+ } else if r.line.len == 0 {
628
+ if was_func {
629
+ r.functions << r.temp_lines
630
+ } else if was_struct {
631
+ r.structs << r.temp_lines
632
+ } else if was_enum {
633
+ r.enums << r.temp_lines
634
+ } else if was_interface {
635
+ r.interfaces << r.temp_lines
636
+ } else {
637
+ r.lines << r.temp_lines
638
+ }
624
639
} else if starts_with_include {
625
640
r.includes << r.line
626
641
} else if starts_with_fn {
@@ -638,9 +653,8 @@ fn run_repl(workdir string, vrepl_prefix string) int {
638
653
} else {
639
654
r.lines << r.line
640
655
}
641
- } else {
642
- r.temp_lines.clear ()
643
656
}
657
+ r.temp_lines.clear ()
644
658
if r.is_pin {
645
659
r.pin ()
646
660
println ('' )
0 commit comments