Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions zap/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,10 @@ impl Range {
None
}
}

pub fn numty(&self) -> Option<NumTy> {
Some(NumTy::from_f64(self.min.unwrap_or_default(), self.max?))
}
}

impl Display for Range {
Expand Down
15 changes: 12 additions & 3 deletions zap/src/irgen/des.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand Down
6 changes: 3 additions & 3 deletions zap/src/irgen/ser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
}
Expand All @@ -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())
}
}
Expand Down Expand Up @@ -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(),
Expand Down
Loading