Update SyntaxTable again

This commit is contained in:
Guojie Luo 2022-04-28 20:42:47 +08:00
parent afd3edfe79
commit 1dde3554d1
5 changed files with 24 additions and 10 deletions

View File

@ -163,8 +163,7 @@ impl AlwaysStatement {
let value = builder.arg_value(*arg);
context
.syntax_table
.values
.insert((builder.unit().id(), value), json);
.insert_value(builder.unit().id(), value, json);
builder.set_name(value, name.clone());
arg_value_to_raw_name.insert(value, name.clone());
raw_name_to_value.insert(name.clone(), value);

View File

@ -34,8 +34,8 @@ pub struct UnitContext {
pub struct SyntaxTable<'a> {
pub root: &'a JsonValue,
pub values: HashMap<(UnitId, Value), &'a JsonValue>,
pub insts: HashMap<(UnitId, Inst), &'a JsonValue>,
pub values: HashMap<UnitId, HashMap<Value, &'a JsonValue>>,
pub insts: HashMap<UnitId, HashMap<Inst, &'a JsonValue>>,
}
pub struct SymbolInfo {
@ -145,6 +145,24 @@ impl<'a> SyntaxTable<'a> {
insts: HashMap::new(),
}
}
pub fn insert_value(&mut self, unit_id: UnitId, value: Value, json: &'a JsonValue) {
if !self.values.contains_key(&unit_id) {
self.values.insert(unit_id, HashMap::new());
}
if let Some(x) = self.values.get_mut(&unit_id) {
(*x).insert(value, json);
}
}
pub fn insert_inst(&mut self, unit_id: UnitId, inst: Inst, json: &'a JsonValue) {
if !self.insts.contains_key(&unit_id) {
self.insts.insert(unit_id, HashMap::new());
}
if let Some(x) = self.insts.get_mut(&unit_id) {
(*x).insert(inst, json);
}
}
}
impl SymbolInfo {

View File

@ -220,8 +220,7 @@ impl Expression {
if value.is_some() {
context
.syntax_table
.values
.insert((builder.unit().id(), value.unwrap()), json);
.insert_value(builder.unit().id(), value.unwrap(), json);
}
value
} else {

View File

@ -88,8 +88,7 @@ impl NetVariableAssignment {
);
context
.syntax_table
.insts
.insert((builder.unit().id(), inst), json);
.insert_inst(builder.unit().id(), inst, json);
if unit_ctx.raw_name_to_shadow.contains_key(lvalue_name) {
warn!("TODO: double check");
builder.ins().st(

View File

@ -70,8 +70,7 @@ impl NonblockingAssignmentStatement {
);
context
.syntax_table
.insts
.insert((builder.unit().id(), inst), json);
.insert_inst(builder.unit().id(), inst, json);
Some(bb_head)
} else {