Move ModuleDeclaration to public

This commit is contained in:
Guojie Luo 2022-04-27 16:35:47 +08:00
parent ac58094568
commit 76d7e98cec
4 changed files with 27 additions and 54 deletions

View File

@ -85,25 +85,7 @@ fn main_inner() -> Result<(), std::io::Error> {
let module_list = DescriptionList::codegen(json_tree);
for (mut module, syntax_table) in module_list {
for proc in module.processes() {
for inst in proc.all_insts() {
let v = proc.get_inst_result(inst);
let json = if v.is_some() {
syntax_table.values.get(&v.unwrap())
} else {
None
};
if json.is_some() {
trace!(
r#"inst "{}" from syntax node {}"#,
inst.dump(&proc),
json.unwrap()
);
}
}
}
for (mut module, _syntax_table) in module_list {
let pass_ctx = PassContext;
llhd::pass::GlobalCommonSubexprElim::run_on_module(&pass_ctx, &mut module);
//llhd::pass::InstSimplification::run_on_module(&pass_ctx, &mut module);

View File

@ -8,7 +8,6 @@ mod module_declaration;
mod net_variable_assignment;
mod nonblocking_assignment_statement;
mod number;
mod seq_block;
mod statement;
mod symbol_declaration;
mod tags;
@ -19,15 +18,14 @@ use case_statement::CaseStatement;
use conditional_statement::ConditionalStatement;
use context::{ModuleContext, SymbolInfo, SymbolKind, UnitContext};
use expression::Expression;
use module_declaration::ModuleDeclaration;
use net_variable_assignment::NetVariableAssignment;
use nonblocking_assignment_statement::NonblockingAssignmentStatement;
use number::Number;
use seq_block::SeqBlock;
use statement::Statement;
use symbol_declaration::SymbolDeclaration;
pub use context::SyntaxTable;
pub use description_list::DescriptionList;
pub use module_declaration::ModuleDeclaration;
pub use tags::Tag;
pub use tools::{CodeReporter, Tools};

View File

@ -1,30 +0,0 @@
use crate::cst::{ModuleContext, Statement, Tag, Tools};
use json::JsonValue;
use llhd::ir::Block;
pub struct SeqBlock {}
impl SeqBlock {
pub fn codegen<'a>(json: &'a JsonValue, context: &mut ModuleContext<'a>) -> Option<Block> {
let json_block_item_statement_list = {
let json_vec = Tools::match_tags(
vec![json],
vec![Tag::SEQ_BLOCK, Tag::BLOCK_ITEM_STATEMENT_LIST],
);
assert_eq!(json_vec.len(), 1);
json_vec[0]["children"].members()
};
let mut ret = None;
for json_statement in json_block_item_statement_list {
ret = Statement::codegen(json_statement, context);
assert!(
context.unit_ctx.data.is_none()
|| (context.unit_ctx.data.is_some() && ret.is_some()),
"FIXME: CST node '{}'",
json_statement
);
}
ret
}
}

View File

@ -1,6 +1,6 @@
use crate::cst::{
CaseStatement, ConditionalStatement, ModuleContext, NetVariableAssignment,
NonblockingAssignmentStatement, SeqBlock, Tag,
NonblockingAssignmentStatement, Tag, Tools,
};
use json::JsonValue;
use llhd::ir::Block;
@ -13,7 +13,7 @@ pub struct Statement {}
impl Statement {
pub fn codegen<'a>(json: &'a JsonValue, context: &mut ModuleContext<'a>) -> Option<Block> {
match json["tag"].as_str() {
Some(Tag::SEQ_BLOCK) => SeqBlock::codegen(json, context),
Some(Tag::SEQ_BLOCK) => Self::gen_seq_block(json, context),
Some(Tag::CONDITIONAL_STATEMENT) => ConditionalStatement::codegen(json, context),
Some(Tag::CASE_STATEMENT) => CaseStatement::codegen(json, context),
Some(Tag::NONBLOCKING_ASSIGNMENT_STATEMENT) => {
@ -23,4 +23,27 @@ impl Statement {
_ => panic!("unknown error at CST node '{}'", json),
}
}
fn gen_seq_block<'a>(json: &'a JsonValue, context: &mut ModuleContext<'a>) -> Option<Block> {
let json_block_item_statement_list = {
let json_vec = Tools::match_tags(
vec![json],
vec![Tag::SEQ_BLOCK, Tag::BLOCK_ITEM_STATEMENT_LIST],
);
assert_eq!(json_vec.len(), 1);
json_vec[0]["children"].members()
};
let mut ret = None;
for json_statement in json_block_item_statement_list {
ret = Self::codegen(json_statement, context);
assert!(
context.unit_ctx.data.is_none()
|| (context.unit_ctx.data.is_some() && ret.is_some()),
"FIXME: CST node '{}'",
json_statement
);
}
ret
}
}