diff --git a/backend/src/codegen.rs b/backend/src/codegen.rs index 4065e4d..db507a1 100644 --- a/backend/src/codegen.rs +++ b/backend/src/codegen.rs @@ -13,7 +13,10 @@ pub trait Emit { } pub enum Statement { - Import, + Import { + names: Vec, + from: String, + }, Declaration { is_exported: bool, is_const: bool, @@ -179,7 +182,16 @@ impl Emit for Statement { } write!(w, "{}", "}").map_err(EmitError::WriterError) } - _ => todo!("Tehe"), + Statement::Import { names, from } => { + write!(w, "import {}", "{").map_err(EmitError::WriterError)?; + for (i, name) in names.iter().enumerate() { + write!(w, "{}", name).map_err(EmitError::WriterError)?; + if i + 1 != names.len() { + write!(w, ", ").map_err(EmitError::WriterError)?; + } + } + write!(w, "{} from {};", "}", from).map_err(EmitError::WriterError) + } } } } @@ -636,3 +648,25 @@ fn if_emit() { if_.emit(&mut res).unwrap(); assert_eq!(res, "if (true) {null} else {undefined}") } + +#[test] +fn empty_import_emit() { + let import = Statement::Import { + names: Vec::new(), + from: "x".to_owned(), + }; + let mut res = String::new(); + import.emit(&mut res).unwrap(); + assert_eq!(res, "import {} from x;") +} + +#[test] +fn import_emit() { + let import = Statement::Import { + names: vec!["x".to_owned(), "y".to_owned()], + from: "z".to_owned(), + }; + let mut res = String::new(); + import.emit(&mut res).unwrap(); + assert_eq!(res, "import {x, y} from z;") +}