Add ModuleContext
This commit is contained in:
parent
92c19776cc
commit
1f827c176f
|
@ -1,7 +1,28 @@
|
|||
pub struct Context {}
|
||||
use llhd::ir::Arg;
|
||||
use std::collections::HashMap;
|
||||
|
||||
impl Context {
|
||||
pub struct ModuleContext {
|
||||
pub arg_info: HashMap<Arg, ArgInfo>,
|
||||
}
|
||||
|
||||
pub struct ArgInfo {
|
||||
pub name: String,
|
||||
pub width: usize,
|
||||
}
|
||||
|
||||
impl ModuleContext {
|
||||
pub fn new() -> Self {
|
||||
Self {}
|
||||
Self {
|
||||
arg_info: HashMap::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ArgInfo {
|
||||
pub fn new(name: &String, width: &usize) -> Self {
|
||||
Self {
|
||||
name: name.to_string(),
|
||||
width: width.clone(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ pub mod module_declaration;
|
|||
pub mod tags;
|
||||
pub mod tools;
|
||||
|
||||
pub use context::Context;
|
||||
pub use context::{ArgInfo, ModuleContext};
|
||||
pub use description_list::DescriptionList;
|
||||
pub use module_declaration::ModuleDeclaration;
|
||||
pub use tags::Tag;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use crate::cst::{Tag, Tools};
|
||||
use crate::cst::{ArgInfo, ModuleContext, Tag, Tools};
|
||||
use json::JsonValue;
|
||||
use llhd::ir::{InstBuilder, Module, Signature, UnitBuilder, UnitData, UnitKind, UnitName};
|
||||
use llhd::ty::{int_ty, signal_ty};
|
||||
|
@ -37,14 +37,22 @@ impl ModuleDeclaration {
|
|||
let input_info = &Self::get_port_info(json_ports, Tag::INPUT);
|
||||
let output_info = &Self::get_port_info(json_ports, Tag::OUTPUT);
|
||||
|
||||
let mut module_context = ModuleContext::new(); // TO-DO: context for nested analysis
|
||||
|
||||
let mut arg_table = HashMap::new();
|
||||
for (name, width) in input_info {
|
||||
let arg = entity_signature.add_input(signal_ty(int_ty(width.clone())));
|
||||
arg_table.insert(arg, name.to_string());
|
||||
module_context
|
||||
.arg_info
|
||||
.insert(arg, ArgInfo::new(name, width));
|
||||
}
|
||||
for (name, width) in output_info {
|
||||
let arg = entity_signature.add_output(signal_ty(int_ty(width.clone())));
|
||||
arg_table.insert(arg, name.to_string());
|
||||
module_context
|
||||
.arg_info
|
||||
.insert(arg, ArgInfo::new(name, width));
|
||||
}
|
||||
|
||||
let mut entity_data = UnitData::new(UnitKind::Entity, entity_name, entity_signature);
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue