Add ModuleContext

This commit is contained in:
Guojie Luo 2022-02-15 21:57:53 +08:00
parent 92c19776cc
commit 1f827c176f
5 changed files with 1275 additions and 1295 deletions

View File

@ -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(),
}
}
}

View File

@ -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;

View File

@ -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