diff --git a/cli/src/generate/render.rs b/cli/src/generate/render.rs index 67cd2fbe..f82f0765 100644 --- a/cli/src/generate/render.rs +++ b/cli/src/generate/render.rs @@ -759,7 +759,7 @@ impl Generator { && state.terminal_entries.len() == 1 && *state.terminal_entries.iter().next().unwrap().0 == Symbol::end() { - add_line!(self, "[{}] = {{-1}},", i,); + add_line!(self, "[{}] = {{(TSStateId)(-1)}},", i,); } else if state.external_lex_state_id > 0 { add_line!( self, diff --git a/cli/src/wasm.rs b/cli/src/wasm.rs index 5ee2cec0..659c1cc1 100644 --- a/cli/src/wasm.rs +++ b/cli/src/wasm.rs @@ -59,7 +59,9 @@ pub fn compile_language_to_wasm(language_dir: &Path, force_docker: bool) -> Resu // Run `emcc` in a container using the `emscripten-slim` image command.args(&["trzeci/emscripten-slim", "emcc"]); } else { - return Error::err("You must have either emcc or docker on your PATH to run this command".to_string()); + return Error::err( + "You must have either emcc or docker on your PATH to run this command".to_string(), + ); } command.args(&[ @@ -81,31 +83,21 @@ pub fn compile_language_to_wasm(language_dir: &Path, force_docker: bool) -> Resu "src", ]); - // Find source files to pass to emscripten - let src_entries = fs::read_dir(&src_dir).map_err(Error::wrap(|| { - format!("Failed to read source directory {:?}", src_dir) - }))?; + let parser_c_path = src_dir.join("parser.c"); + let scanner_c_path = src_dir.join("scanner.c"); + let scanner_cc_path = src_dir.join("scanner.cc"); + let scanner_cpp_path = src_dir.join("scanner.cpp"); - for entry in src_entries { - let entry = entry?; - let file_name = entry.file_name(); - - // Do not compile the node.js binding file. - if file_name - .to_str() - .map_or(false, |s| s.starts_with("binding")) - { - continue; - } - - // Compile any .c, .cc, or .cpp files - if let Some(extension) = Path::new(&file_name).extension().and_then(|s| s.to_str()) { - if extension == "c" || extension == "cc" || extension == "cpp" { - command.arg(Path::new("src").join(entry.file_name())); - } - } + if scanner_cc_path.exists() { + command.arg("-xc++").arg(&scanner_cc_path); + } else if scanner_cpp_path.exists() { + command.arg("-xc++").arg(&scanner_cpp_path); + } else if scanner_c_path.exists() { + command.arg(&scanner_c_path); } + command.arg(&parser_c_path); + let output = command .output() .map_err(Error::wrap(|| "Failed to run emcc command"))?;