Skip to content

Commit 4fb3523

Browse files
authored
Merge pull request #1332 from veryl-lang/keep_type_over_unary_op
Keep variable type through unary operation
2 parents fb33292 + fdc886e commit 4fb3523

File tree

1 file changed

+25
-13
lines changed

1 file changed

+25
-13
lines changed

crates/analyzer/src/evaluator.rs

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -319,11 +319,24 @@ impl Evaluated {
319319
) {
320320
self.value = EvaluatedValue::Unknown;
321321
if is_4state {
322-
self.r#type = EvaluatedType::Logic(EvaluatedTypeLogic {
323-
signed,
324-
width,
325-
array,
326-
});
322+
let new_type = match &self.r#type {
323+
EvaluatedType::Clock(x) => EvaluatedType::Clock(EvaluatedTypeClock {
324+
kind: x.kind,
325+
width,
326+
array,
327+
}),
328+
EvaluatedType::Reset(x) => EvaluatedType::Reset(EvaluatedTypeReset {
329+
kind: x.kind,
330+
width,
331+
array,
332+
}),
333+
_ => EvaluatedType::Logic(EvaluatedTypeLogic {
334+
signed,
335+
width,
336+
array,
337+
}),
338+
};
339+
self.r#type = new_type;
327340
} else {
328341
self.r#type = EvaluatedType::Bit(EvaluatedTypeBit {
329342
signed,
@@ -547,25 +560,24 @@ impl Evaluated {
547560

548561
let is_4state = left.is_4state();
549562

550-
let mut ret = match (left.get_value(), left.get_total_width()) {
563+
match (left.get_value(), left.get_total_width()) {
551564
(Some(value0), Some(width0)) => {
552565
let value = calc_value(value0);
553566
let width = calc_width(width0);
554567
if let Some(value) = value {
555-
Evaluated::create_fixed(value, false, vec![width], vec![])
568+
left.set_fixed(value, false, vec![width], vec![]);
556569
} else {
557-
Evaluated::create_variable(false, is_4state, vec![width], vec![])
570+
left.set_variable(false, is_4state, vec![width], vec![]);
558571
}
559572
}
560573
(_, Some(width0)) => {
561574
let width = calc_width(width0);
562-
Evaluated::create_variable(false, is_4state, vec![width], vec![])
575+
left.set_variable(false, is_4state, vec![width], vec![]);
563576
}
564-
_ => Evaluated::create_unknown(),
565-
};
577+
_ => left.set_unknown(),
578+
}
566579

567-
ret.errors.append(&mut left.errors);
568-
ret
580+
left
569581
}
570582

571583
fn pow(self, exp: Evaluated, context_width: Option<&usize>) -> Evaluated {

0 commit comments

Comments
 (0)