[Fix] BitPos can be negative

This commit is contained in:
Maik Klein 2018-08-20 09:55:41 +02:00
parent 8521f01488
commit e546fbbb5d
2 changed files with 1958 additions and 2043 deletions

File diff suppressed because it is too large Load diff

View file

@ -810,12 +810,13 @@ pub fn generate_extension_constants<'a>(
offset, offset,
extends, extends,
extnumber, extnumber,
.. dir: positive,
} => { } => {
let ext_base = 1_000_000_000; let ext_base = 1_000_000_000;
let ext_block_size = 1000; let ext_block_size = 1000;
let extnumber = extnumber.unwrap_or_else(|| extension_number); let extnumber = extnumber.unwrap_or_else(|| extension_number);
let value = ext_base + (extnumber - 1) * ext_block_size + offset; let value = ext_base + (extnumber - 1) * ext_block_size + offset;
let value = if *positive { value } else { -value };
Some((Constant::Number(value as i32), Some(extends.clone()))) Some((Constant::Number(value as i32), Some(extends.clone())))
} }
_ => None, _ => None,