diff --git a/zap/src/config.rs b/zap/src/config.rs index 89ae3a30..0bcd0428 100644 --- a/zap/src/config.rs +++ b/zap/src/config.rs @@ -426,6 +426,10 @@ impl Range { None } } + + pub fn numty(&self) -> Option { + Some(NumTy::from_f64(self.min.unwrap_or(0.0), self.max?)) + } } impl Display for Range { diff --git a/zap/src/irgen/des.rs b/zap/src/irgen/des.rs index 47b16c2b..bad52256 100644 --- a/zap/src/irgen/des.rs +++ b/zap/src/irgen/des.rs @@ -101,7 +101,10 @@ impl Des<'_> { } else { let (len_name, len_expr) = self.add_occurrence("len"); - self.push_local(len_name.clone(), Some(self.readnumty(NumTy::U16))); + self.push_local( + len_name.clone(), + Some(self.readnumty(range.numty().unwrap_or(NumTy::U16))), + ); if self.checks { self.push_range_check(len_expr.clone(), *range); @@ -116,7 +119,10 @@ impl Des<'_> { self.push_read_copy(into, len.into()); } else { let (len_name, len_expr) = self.add_occurrence("len"); - self.push_local(len_name.clone(), Some(self.readnumty(NumTy::U16))); + self.push_local( + len_name.clone(), + Some(self.readnumty(range.numty().unwrap_or(NumTy::U16))), + ); if self.checks { self.push_range_check(len_expr.clone(), *range); @@ -143,7 +149,10 @@ impl Des<'_> { } else { let (len_name, len_expr) = self.add_occurrence("len"); - self.push_local(len_name.clone(), Some(self.readnumty(NumTy::U16))); + self.push_local( + len_name.clone(), + Some(self.readnumty(range.numty().unwrap_or(NumTy::U16))), + ); if self.checks { self.push_range_check(len_expr.clone(), *range); diff --git a/zap/src/irgen/ser.rs b/zap/src/irgen/ser.rs index 8abaa7aa..b2917e7e 100644 --- a/zap/src/irgen/ser.rs +++ b/zap/src/irgen/ser.rs @@ -110,7 +110,7 @@ impl Ser<'_> { self.push_range_check(len_expr.clone(), *range); } - self.push_writeu16(len_expr.clone()); + self.push_writenumty(len_expr.clone(), range.numty().unwrap_or(NumTy::U16)); self.push_writestring(from_expr, len_expr.clone()); } } @@ -133,7 +133,7 @@ impl Ser<'_> { self.push_range_check(len_expr.clone(), *range); } - self.push_writeu16(len_expr.clone()); + self.push_writenumty(len_expr.clone(), range.numty().unwrap_or(NumTy::U16)); self.push_write_copy(from_expr, len_name.as_str().into()) } } @@ -162,7 +162,7 @@ impl Ser<'_> { self.push_range_check(len_expr.clone(), *range); } - self.push_writeu16(len_expr.clone()); + self.push_writenumty(len_expr.clone(), range.numty().unwrap_or(NumTy::U16)); self.push_stmt(Stmt::NumFor { var: var_name.clone(),