Move ModuleDeclaration to public
This commit is contained in:
parent
ac58094568
commit
76d7e98cec
|
@ -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);
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue