refactor(vm): cleanup, trait docs, reenable interpreter tests

This commit is contained in:
Rachel Powers
2024-05-27 22:12:06 -07:00
parent dae6be9f4a
commit 1843bdbfce
33 changed files with 50351 additions and 51177 deletions

View File

@@ -52,7 +52,7 @@ pub fn generate(
let enums_files = enums::generate(&pedia, &enums, workspace)?;
eprintln!("Formatting generated files...");
for file in &enums_files {
prepend_generated_comment_and_format(file)?;
prepend_generated_comment_and_format(file, "enums")?;
}
return Ok(());
}
@@ -61,18 +61,18 @@ pub fn generate(
eprintln!("generating database...");
let database_files = database::generate_database(&pedia, &enums, workspace)?;
generated_files.extend(database_files);
generated_files.extend(database_files.into_iter().map(|path| (path, "database")));
}
if modules.contains(&"instructions") {
eprintln!("generating instructions...");
let inst_files = instructions::generate_instructions(&pedia, workspace)?;
generated_files.extend(inst_files);
generated_files.extend(inst_files.into_iter().map(|path| (path, "instructions")));
}
eprintln!("Formatting generated files...");
for file in &generated_files {
prepend_generated_comment_and_format(file)?;
for (file, module) in &generated_files {
prepend_generated_comment_and_format(file, module)?;
}
Ok(())
}
@@ -98,29 +98,33 @@ fn format_rust(content: impl ToTokens) -> color_eyre::Result<String> {
Ok(prettyplease::unparse(&content))
}
fn prepend_generated_comment_and_format(file_path: &std::path::Path) -> color_eyre::Result<()> {
fn prepend_generated_comment_and_format(file_path: &std::path::Path, module: &str) -> color_eyre::Result<()> {
use std::io::Write;
let tmp_path = file_path.with_extension("rs.tmp");
{
let mut tmp = std::fs::File::create(&tmp_path)?;
let src = syn::parse_file(&std::fs::read_to_string(file_path)?)?;
let formated = format_rust(quote::quote! {
// =================================================
// !! <-----> DO NOT MODIFY <-----> !!
//
// This module was automatically generated by an
// xtask
//
// run `cargo xtask generate` from the workspace
// to regenerate
//
// =================================================
let formated = format_rust(src)?;
#src
})?;
write!(&mut tmp, "{formated}")?;
write!(&mut tmp, "\
// =================================================\n\
// !! <-----> DO NOT MODIFY <-----> !!\n\
//\n\
// This module was automatically generated by an\n\
// xtask\n\
//\n\
// run\n\
//\n\
// `cargo xtask generate -m {module}` \n\
//\n\
// from the workspace to regenerate\n\
//\n\
// =================================================\n\
\n\
{formated}\
"
)?;
}
std::fs::remove_file(file_path)?;
std::fs::rename(&tmp_path, file_path)?;

View File

@@ -229,9 +229,9 @@ fn write_prefab_map<T: std::io::Write>(
writer,
"{}",
quote! {
use crate::enums::script_enums::*;
use crate::enums::basic_enums::*;
use crate::enums::{MemoryAccess, ConnectionType, ConnectionRole};
use crate::enums::script::*;
use crate::enums::basic::*;
use crate::enums::{MemoryAccess, ConnectionType, ConnectionRole, MachineTier};
use crate::templates::*;
}
)?;
@@ -241,10 +241,7 @@ fn write_prefab_map<T: std::io::Write>(
let hash = prefab.prefab().prefab_hash;
let obj = syn::parse_str::<syn::Expr>(&uneval::to_string(prefab)?)?;
let entry = quote! {
(
#hash,
#obj.into(),
)
map.insert(#hash, #obj.into());
};
Ok(entry)
})
@@ -255,9 +252,9 @@ fn write_prefab_map<T: std::io::Write>(
quote! {
pub fn build_prefab_database() -> std::collections::BTreeMap<i32, crate::templates::ObjectTemplate> {
#[allow(clippy::unreadable_literal)]
std::collections::BTreeMap::from([
#(#entries),*
])
let mut map: std::collections::BTreeMap<i32, crate::templates::ObjectTemplate> = std::collections::BTreeMap::new();
#(#entries)*
map
}
},
)?;

View File

@@ -433,8 +433,7 @@ where
"{}",
quote! {
#[derive(#(#derives),*)]
#[cfg_attr(feature = "tsify", derive(Tsify))]
#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))]
#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))]
#additional_strum
#[repr(#repr)]
pub enum #name {

View File

@@ -13,7 +13,8 @@ pub fn generate_instructions(
.join("ic10emu")
.join("src")
.join("vm")
.join("instructions");
.join("instructions")
.join("codegen");
if !instructions_path.exists() {
std::fs::create_dir(&instructions_path)?;
}
@@ -84,8 +85,7 @@ fn write_instructions_enum<T: std::io::Write>(
"{}",
quote::quote! {#[derive(Debug, Display, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Serialize, Deserialize)]
#[derive(EnumIter, EnumString, EnumProperty, FromRepr)]
#[cfg_attr(feature = "tsify", derive(Tsify))]
#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))]
#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))]
#[strum(use_phf, serialize_all = "lowercase")]
#[serde(rename_all = "lowercase")]
pub enum InstructionOp {