erg icon indicating copy to clipboard operation
erg copied to clipboard

Crash with file input

Open mtshiba opened this issue 3 years ago • 4 comments

Reproducible command:

> cargo run --features debug examples/helloworld.er

Error log:

compiler\erg_compiler\compile.rs:160: [DEBUG] the compiling process has started.
compiler\erg_parser\parse.rs:325: [DEBUG] the parsing process has started.
compiler\erg_parser\parse.rs:326: token stream: [Symbol print!, StrLit "Hello, world!", Newline \n, Symbol print!, StrLit "こんにちは、世界!", Newline \n, Symbol print!, StrLit "Γειά σου Κόσμε!", Newline \n, Symbol print!, StrLit "!مرحبا بالعالم", Newline \n, Newline \n, Symbol greeting, Equal =, StrLit "Hello", Newline \n, Symbol print!, StrLit "{greeting}, world!", Newline \n, EOF ]
compiler\erg_parser\parse.rs:358: [DEBUG] entered try_reduce_module, cur: Symbol print!
compiler\erg_parser\parse.rs:1254: [DEBUG] entered try_reduce_expr, cur: Symbol print!
compiler\erg_parser\parse.rs:1397: [DEBUG] entered try_reduce_lhs, cur: Symbol print!
compiler\erg_parser\parse.rs:1433: [DEBUG] entered try_reduce_call_or_acc, cur: Symbol print!
compiler\erg_parser\parse.rs:604: [DEBUG] entered try_reduce_acc, cur: Symbol print!
compiler\erg_parser\parse.rs:1068: [DEBUG] entered opt_reduce_args, cur: StrLit "Hello, world!"
compiler\erg_parser\parse.rs:1097: [DEBUG] entered try_reduce_args, cur: StrLit "Hello, world!"
compiler\erg_parser\parse.rs:1195: [DEBUG] entered try_reduce_arg, cur: StrLit "Hello, world!"
compiler\erg_parser\parse.rs:1254: [DEBUG] entered try_reduce_expr, cur: StrLit "Hello, world!"
compiler\erg_parser\parse.rs:1397: [DEBUG] entered try_reduce_lhs, cur: StrLit "Hello, world!"
compiler\erg_parser\parse.rs:1493: [DEBUG] entered try_reduce_lit, cur: StrLit "Hello, world!"
compiler\erg_parser\parse.rs:1254: [DEBUG] entered try_reduce_expr, cur: Symbol print!
compiler\erg_parser\parse.rs:1397: [DEBUG] entered try_reduce_lhs, cur: Symbol print!
compiler\erg_parser\parse.rs:1433: [DEBUG] entered try_reduce_call_or_acc, cur: Symbol print!
compiler\erg_parser\parse.rs:604: [DEBUG] entered try_reduce_acc, cur: Symbol print!
compiler\erg_parser\parse.rs:1068: [DEBUG] entered opt_reduce_args, cur: StrLit "こんにちは、世界!"
compiler\erg_parser\parse.rs:1097: [DEBUG] entered try_reduce_args, cur: StrLit "こんにちは、世界!"
compiler\erg_parser\parse.rs:1195: [DEBUG] entered try_reduce_arg, cur: StrLit "こんにちは、世界!"
compiler\erg_parser\parse.rs:1254: [DEBUG] entered try_reduce_expr, cur: StrLit "こんにちは、世界!"
compiler\erg_parser\parse.rs:1397: [DEBUG] entered try_reduce_lhs, cur: StrLit "こんにちは、世界!"
compiler\erg_parser\parse.rs:1493: [DEBUG] entered try_reduce_lit, cur: StrLit "こんにちは、世界!"
compiler\erg_parser\parse.rs:1254: [DEBUG] entered try_reduce_expr, cur: Symbol print!
compiler\erg_parser\parse.rs:1397: [DEBUG] entered try_reduce_lhs, cur: Symbol print!
compiler\erg_parser\parse.rs:1433: [DEBUG] entered try_reduce_call_or_acc, cur: Symbol print!
compiler\erg_parser\parse.rs:604: [DEBUG] entered try_reduce_acc, cur: Symbol print!
compiler\erg_parser\parse.rs:1068: [DEBUG] entered opt_reduce_args, cur: StrLit "Γειά σου Κόσμε!"
compiler\erg_parser\parse.rs:1097: [DEBUG] entered try_reduce_args, cur: StrLit "Γειά σου Κόσμε!"
compiler\erg_parser\parse.rs:1195: [DEBUG] entered try_reduce_arg, cur: StrLit "Γειά σου Κόσμε!"
compiler\erg_parser\parse.rs:1254: [DEBUG] entered try_reduce_expr, cur: StrLit "Γειά σου Κόσμε!"
compiler\erg_parser\parse.rs:1397: [DEBUG] entered try_reduce_lhs, cur: StrLit "Γειά σου Κόσμε!"
compiler\erg_parser\parse.rs:1493: [DEBUG] entered try_reduce_lit, cur: StrLit "Γειά σου Κόσμε!"
compiler\erg_parser\parse.rs:1254: [DEBUG] entered try_reduce_expr, cur: Symbol print!
compiler\erg_parser\parse.rs:1397: [DEBUG] entered try_reduce_lhs, cur: Symbol print!
compiler\erg_parser\parse.rs:1433: [DEBUG] entered try_reduce_call_or_acc, cur: Symbol print!
compiler\erg_parser\parse.rs:604: [DEBUG] entered try_reduce_acc, cur: Symbol print!
compiler\erg_parser\parse.rs:1068: [DEBUG] entered opt_reduce_args, cur: StrLit "!مرحبا بالعالم"
compiler\erg_parser\parse.rs:1097: [DEBUG] entered try_reduce_args, cur: StrLit "!مرحبا بالعالم"
compiler\erg_parser\parse.rs:1195: [DEBUG] entered try_reduce_arg, cur: StrLit "!مرحبا بالعالم"
compiler\erg_parser\parse.rs:1254: [DEBUG] entered try_reduce_expr, cur: StrLit "!مرحبا بالعالم"
compiler\erg_parser\parse.rs:1397: [DEBUG] entered try_reduce_lhs, cur: StrLit "!مرحبا بالعالم"
compiler\erg_parser\parse.rs:1493: [DEBUG] entered try_reduce_lit, cur: StrLit "!مرحبا بالعالم"
compiler\erg_parser\parse.rs:1254: [DEBUG] entered try_reduce_expr, cur: Symbol greeting
compiler\erg_parser\parse.rs:472: [DEBUG] entered try_reduce_decl, cur: Symbol greeting
compiler\erg_parser\parse.rs:1484: [DEBUG] entered try_reduce_name, cur: Symbol greeting
compiler\erg_parser\parse.rs:684: [DEBUG] entered opt_reduce_params, cur: Equal =
compiler\erg_parser\parse.rs:386: [DEBUG] entered try_reduce_block, cur: StrLit "Hello"
compiler\erg_parser\parse.rs:1254: [DEBUG] entered try_reduce_expr, cur: StrLit "Hello"
compiler\erg_parser\parse.rs:1397: [DEBUG] entered try_reduce_lhs, cur: StrLit "Hello"
compiler\erg_parser\parse.rs:1493: [DEBUG] entered try_reduce_lit, cur: StrLit "Hello"
compiler\erg_parser\parse.rs:1254: [DEBUG] entered try_reduce_expr, cur: Symbol print!
compiler\erg_parser\parse.rs:1397: [DEBUG] entered try_reduce_lhs, cur: Symbol print!
compiler\erg_parser\parse.rs:1433: [DEBUG] entered try_reduce_call_or_acc, cur: Symbol print!
compiler\erg_parser\parse.rs:604: [DEBUG] entered try_reduce_acc, cur: Symbol print!
compiler\erg_parser\parse.rs:1068: [DEBUG] entered opt_reduce_args, cur: StrLit "{greeting}, world!"
compiler\erg_parser\parse.rs:1097: [DEBUG] entered try_reduce_args, cur: StrLit "{greeting}, world!"
compiler\erg_parser\parse.rs:1195: [DEBUG] entered try_reduce_arg, cur: StrLit "{greeting}, world!"
compiler\erg_parser\parse.rs:1254: [DEBUG] entered try_reduce_expr, cur: StrLit "{greeting}, world!"
compiler\erg_parser\parse.rs:1397: [DEBUG] entered try_reduce_lhs, cur: StrLit "{greeting}, world!"
compiler\erg_parser\parse.rs:1493: [DEBUG] entered try_reduce_lit, cur: StrLit "{greeting}, world!"
compiler\erg_parser\parse.rs:340: [DEBUG] the parsing process has completed.
compiler\erg_parser\parse.rs:341: AST:
(print!):
    StrLit "Hello, world!"
(print!):
    StrLit "こんにちは、世界!"
(print!):
    StrLit "Γειά σου Κόσμε!"
(print!):
    StrLit "!مرحبا بالعالم"
greeting =
    StrLit "Hello"
(print!):
    StrLit "{greeting}, world!"
compiler\erg_parser\parse.rs:342: [DEBUG] the desugaring process has started.
compiler\erg_parser\parse.rs:345: AST (desugared):
(print!):
    StrLit "Hello, world!"
(print!):
    StrLit "こんにちは、世界!"
(print!):
    StrLit "Γειά σου Κόσμε!"
(print!):
    StrLit "!مرحبا بالعالم"
greeting =
    StrLit "Hello"
(print!):
    StrLit "{greeting}, world!"
compiler\erg_parser\parse.rs:346: [DEBUG] the desugaring process has completed.
compiler\erg_compiler\lower.rs:387: [DEBUG] the type-checking process has started.
compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:163: [DEBUG] entered lower_call(print!(...))
compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:110: [DEBUG] entered lower_acc(print!)
compiler\erg_compiler\context.rs:3052: Found:
callee: print!
found: (objs: ...Ref(Obj)) => None
compiler\erg_compiler\context.rs:3054: Instantiated:
instance: (objs: ...Ref(Obj)) => None
pos_args: (StrLit "Hello, world!")
kw_args: ()
compiler\erg_compiler\context.rs:3060: Substituted:
instance: (objs: ...Ref(Obj)) => None
compiler\erg_compiler\context.rs:3062: Derefed:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3064: Params Evaluated:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3066: Derefed (2):
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3068: Propagated:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:163: [DEBUG] entered lower_call(print!(...))
compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:110: [DEBUG] entered lower_acc(print!)
compiler\erg_compiler\context.rs:3052: Found:
callee: print!
found: (objs: ...Ref(Obj)) => None
compiler\erg_compiler\context.rs:3054: Instantiated:
instance: (objs: ...Ref(Obj)) => None
pos_args: (StrLit "こんにちは、世界!")
kw_args: ()
compiler\erg_compiler\context.rs:3060: Substituted:
instance: (objs: ...Ref(Obj)) => None
compiler\erg_compiler\context.rs:3062: Derefed:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3064: Params Evaluated:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3066: Derefed (2):
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3068: Propagated:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:163: [DEBUG] entered lower_call(print!(...))
compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:110: [DEBUG] entered lower_acc(print!)
compiler\erg_compiler\context.rs:3052: Found:
callee: print!
found: (objs: ...Ref(Obj)) => None
compiler\erg_compiler\context.rs:3054: Instantiated:
instance: (objs: ...Ref(Obj)) => None
pos_args: (StrLit "Γειά σου Κόσμε!")
kw_args: ()
compiler\erg_compiler\context.rs:3060: Substituted:
instance: (objs: ...Ref(Obj)) => None
compiler\erg_compiler\context.rs:3062: Derefed:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3064: Params Evaluated:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3066: Derefed (2):
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3068: Propagated:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:163: [DEBUG] entered lower_call(print!(...))
compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:110: [DEBUG] entered lower_acc(print!)
compiler\erg_compiler\context.rs:3052: Found:
callee: print!
found: (objs: ...Ref(Obj)) => None
compiler\erg_compiler\context.rs:3054: Instantiated:
instance: (objs: ...Ref(Obj)) => None
pos_args: (StrLit "!مرحبا بالعالم")
kw_args: ()
compiler\erg_compiler\context.rs:3060: Substituted:
instance: (objs: ...Ref(Obj)) => None
compiler\erg_compiler\context.rs:3062: Derefed:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3064: Params Evaluated:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3066: Derefed (2):
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3068: Propagated:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:255: [DEBUG] entered lower_def(greeting)
compiler\erg_compiler\context.rs:3942: grow: current namespace: <module>::greeting
compiler\erg_compiler\lower.rs:273: [DEBUG] entered lower_var_def(greeting)
compiler\erg_compiler\lower.rs:377: [DEBUG] entered lower_block
compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\context.rs:3961: pop: current namespace: <module>
compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:163: [DEBUG] entered lower_call(print!(...))
compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:362: [DEBUG] entered lower_expr
compiler\erg_compiler\lower.rs:110: [DEBUG] entered lower_acc(print!)
compiler\erg_compiler\context.rs:3052: Found:
callee: print!
found: (objs: ...Ref(Obj)) => None
compiler\erg_compiler\context.rs:3054: Instantiated:
instance: (objs: ...Ref(Obj)) => None
pos_args: (StrLit "{greeting}, world!")
kw_args: ()
compiler\erg_compiler\context.rs:3060: Substituted:
instance: (objs: ...Ref(Obj)) => None
compiler\erg_compiler\context.rs:3062: Derefed:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3064: Params Evaluated:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3066: Derefed (2):
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\context.rs:3068: Propagated:
res: (objs: ...Ref(Obj)) => None

compiler\erg_compiler\lower.rs:405: [DEBUG] lower() has completed, found errors: 0
compiler\erg_compiler\lower.rs:411: HIR:
(print!): (objs: ...Ref(Obj)) => None:
    StrLit "Hello, world!"
(print!): (objs: ...Ref(Obj)) => None:
    StrLit "こんにちは、世界!"
(print!): (objs: ...Ref(Obj)) => None:
    StrLit "Γειά σου Κόσμε!"
(print!): (objs: ...Ref(Obj)) => None:
    StrLit "!مرحبا بالعالم"
greeting (: {%v16: Str | %v16 == "Hello"}) =
    StrLit "Hello"
(print!): (objs: ...Ref(Obj)) => None:
    StrLit "{greeting}, world!"
compiler\erg_compiler\lower.rs:412: [DEBUG] the type-checking process has completed.
compiler\erg_compiler\effectcheck.rs:43: [DEBUG] the side-effect checking process has started.
compiler\erg_compiler\effectcheck.rs:69: [DEBUG] the side-effect checking process has completed, found errors: 0
compiler\erg_compiler\ownercheck.rs:59: [DEBUG] the ownership checking process has started.
compiler\erg_compiler\ownercheck.rs:66: [DEBUG] the ownership checking process has completed, found errors: 0
compiler\erg_compiler\codegen.rs:1217: [DEBUG] the code-generating process has started.
compiler\erg_compiler\codegen.rs:1280: [DEBUG] the code-generating process has completed.
compiler\erg_compiler\compile.rs:195: code object:
Disassembly of <code object <module> at 0xfe1c6fd6b8, file "examples/helloworld.er", line 1>:
Name:              <module>
FileName:          examples/helloworld.er
Argument count:    0
Positional-only arguments: 0
Kw-only arguments: 0
Number of locals:  0
Stack size:        2
Flags:             NoFree
Constants:
   0: "Hello, world!"
   1: "こんにちは、世界!"
   2: "Γειά σου Κόσμε!"
   3: "!مرحبا بالعالم"
   4: "Hello"
   5: "{greeting}, world!"
Names:
   0: print
   1: print
   2: print
   3: print
   4: greeting
   5: print
lnotab: [8, 1, 8, 1, 8, 1, 8, 2, 4, 1]
1:
              0 LOAD_NAME                0 (print)
              2 LOAD_CONST               0 ("Hello, world!")
              4 CALL_FUNCTION            1
              6 POP_TOP
2:
              8 LOAD_NAME                1 (print)
             10 LOAD_CONST               1 ("こんにちは、世界!")
             12 CALL_FUNCTION            1
             14 POP_TOP
3:
             16 LOAD_NAME                2 (print)
             18 LOAD_CONST               2 ("Γειά σου Κόσμε!")
             20 CALL_FUNCTION            1
             22 POP_TOP
4:
             24 LOAD_NAME                3 (print)
             26 LOAD_CONST               3 ("!مرحبا بالعالم")
             28 CALL_FUNCTION            1
             30 POP_TOP
6:
             32 LOAD_CONST               4 ("Hello")
             34 STORE_NAME               4 (greeting)
7:
             36 LOAD_NAME                5 (print)
             38 LOAD_CONST               5 ("{greeting}, world!")
             40 CALL_FUNCTION            1
             42 RETURN_VALUE


compiler\erg_compiler\compile.rs:196: [DEBUG] the compiling process has completed, found errors: 0
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src\dummy.rs:88:50
stack backtrace:
   0: std::panicking::begin_panic_handler
             at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library\std\src\panicking.rs:584
   1: core::panicking::panic_fmt
             at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library\core\src\panicking.rs:142
   2: core::panicking::panic
             at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library\core\src\panicking.rs:48
   3: enum$<core::option::Option<ref_mut$<std::net::tcp::TcpStream> >, 1, 18446744073709551615, Some>::unwrap<ref_mut$<std::net::tcp::TcpStream> >
             at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f\library\core\src\option.rs:775
   4: erg::dummy::impl$0::eval
             at .\src\dummy.rs:88
   5: erg_common::traits::Runnable::run<erg::dummy::DummyVM>
             at .\compiler\erg_common\traits.rs:333
   6: erg::main
             at .\src\main.rs:31
   7: core::ops::function::FnOnce::call_once<void (*)(),tuple$<> >
             at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f\library\core\src\ops\function.rs:248
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
error: process didn't exit successfully: `target\debug\erg.exe examples/helloworld.er` (exit code: 101)

mtshiba avatar Aug 16 '22 15:08 mtshiba

DummyVM implements Runnable trait, which calls eval method. This is a method that reads each line for the REPL and is not intended to execute the file. A new method, exec, needs to be defined in Runnable.

mtshiba avatar Aug 16 '22 15:08 mtshiba

I can work on this 👍

sstadick avatar Aug 16 '22 15:08 sstadick

Looks like this was actually fixed in https://github.com/erg-lang/erg/commit/c79fcd5dbeb6d0b4308ec72fff3f7c9611746309

sstadick avatar Aug 16 '22 16:08 sstadick

Compiler, Lexer and Parser don't implement exec yet. It just calls todo!(). These are probably easy implementations, so I'll leave it as a good-first-issue.

mtshiba avatar Aug 16 '22 16:08 mtshiba