mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-29 20:34:44 +00:00
Automatically display evaluation results in REPL
This commit is contained in:
parent
78e30b3867
commit
beb0965cde
3 changed files with 14 additions and 5 deletions
|
@ -34,6 +34,10 @@ pub enum Input {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Input {
|
impl Input {
|
||||||
|
pub fn is_repl(&self) -> bool {
|
||||||
|
matches!(self, Input::REPL)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn enclosed_name(&self) -> &str {
|
pub fn enclosed_name(&self) -> &str {
|
||||||
match self {
|
match self {
|
||||||
Self::File(filename) => &filename[..],
|
Self::File(filename) => &filename[..],
|
||||||
|
|
|
@ -69,7 +69,7 @@ fn convert_to_python_name(name: Str) -> Str {
|
||||||
"import" => Str::ever("__import__"),
|
"import" => Str::ever("__import__"),
|
||||||
"input!" => Str::ever("input"),
|
"input!" => Str::ever("input"),
|
||||||
"log" => Str::ever("print"), // TODO: log != print (prints after executing)
|
"log" => Str::ever("print"), // TODO: log != print (prints after executing)
|
||||||
"p!" | "print!" => Str::ever("print"),
|
"print!" => Str::ever("print"),
|
||||||
"py" | "pyimport" => Str::ever("__import__"),
|
"py" | "pyimport" => Str::ever("__import__"),
|
||||||
"quit" | "exit" => Str::ever("quit"),
|
"quit" | "exit" => Str::ever("quit"),
|
||||||
_ => name,
|
_ => name,
|
||||||
|
@ -1223,6 +1223,9 @@ impl CodeGenerator {
|
||||||
"<module>",
|
"<module>",
|
||||||
1,
|
1,
|
||||||
));
|
));
|
||||||
|
if self.input().is_repl() {
|
||||||
|
self.emit_load_name_instr(Str::ever("print")).unwrap();
|
||||||
|
}
|
||||||
for expr in hir.module.into_iter() {
|
for expr in hir.module.into_iter() {
|
||||||
self.codegen_expr(expr);
|
self.codegen_expr(expr);
|
||||||
// TODO: discard
|
// TODO: discard
|
||||||
|
@ -1231,6 +1234,11 @@ impl CodeGenerator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.cancel_pop_top(); // 最後の値は戻り値として取っておく
|
self.cancel_pop_top(); // 最後の値は戻り値として取っておく
|
||||||
|
if self.input().is_repl() {
|
||||||
|
self.write_instr(CALL_FUNCTION);
|
||||||
|
self.write_arg(1 as u8);
|
||||||
|
self.stack_dec();
|
||||||
|
}
|
||||||
if self.cur_block().stack_len == 0 {
|
if self.cur_block().stack_len == 0 {
|
||||||
self.emit_load_const(ValueObj::None);
|
self.emit_load_const(ValueObj::None);
|
||||||
} else if self.cur_block().stack_len > 1 {
|
} else if self.cur_block().stack_len > 1 {
|
||||||
|
@ -1243,7 +1251,7 @@ impl CodeGenerator {
|
||||||
block_id,
|
block_id,
|
||||||
fn_name_full!(),
|
fn_name_full!(),
|
||||||
));
|
));
|
||||||
self.crash("error in codegen_module: invalid stack size");
|
self.crash("error in codegen: invalid stack size");
|
||||||
}
|
}
|
||||||
self.write_instr(RETURN_VALUE);
|
self.write_instr(RETURN_VALUE);
|
||||||
self.write_arg(0u8);
|
self.write_arg(0u8);
|
||||||
|
|
|
@ -577,9 +577,6 @@ impl Context {
|
||||||
],
|
],
|
||||||
NoneType,
|
NoneType,
|
||||||
);
|
);
|
||||||
if cfg!(feature = "debug") {
|
|
||||||
self.register_impl("p!", t_print.clone(), Const, Private);
|
|
||||||
}
|
|
||||||
self.register_impl("print!", t_print, Const, Private);
|
self.register_impl("print!", t_print, Const, Private);
|
||||||
self.register_impl("input!", t_input, Const, Private);
|
self.register_impl("input!", t_input, Const, Private);
|
||||||
self.register_impl("if!", t_if, Const, Private);
|
self.register_impl("if!", t_if, Const, Private);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue