|
64 | 64 | let value = parse_decimal::<D>(s, self.precision, self.scale)?;
|
65 | 65 | builder.append_value(value)
|
66 | 66 | }
|
| 67 | + TapeElement::I64(high) => match tape.get(*p + 1) { |
| 68 | + TapeElement::I32(low) => { |
| 69 | + let val = ((high as i64) << 32 | (low as u32) as i64).to_string(); |
| 70 | + let value = parse_decimal::<D>(&val, self.precision, self.scale)?; |
| 71 | + builder.append_value(value) |
| 72 | + } |
| 73 | + _ => unreachable!(), |
| 74 | + }, |
| 75 | + TapeElement::I32(val) => { |
| 76 | + let s = val.to_string(); |
| 77 | + let value = parse_decimal::<D>(&s, self.precision, self.scale)?; |
| 78 | + builder.append_value(value) |
| 79 | + } |
| 80 | + TapeElement::F64(high) => match tape.get(*p + 1) { |
| 81 | + TapeElement::F32(low) => { |
| 82 | + let val = f64::from_bits((high as u64) << 32 | low as u64).to_string(); |
| 83 | + let value = parse_decimal::<D>(&val, self.precision, self.scale)?; |
| 84 | + builder.append_value(value) |
| 85 | + } |
| 86 | + _ => unreachable!(), |
| 87 | + }, |
| 88 | + TapeElement::F32(val) => { |
| 89 | + let s = f32::from_bits(val).to_string(); |
| 90 | + let value = parse_decimal::<D>(&s, self.precision, self.scale)?; |
| 91 | + builder.append_value(value) |
| 92 | + } |
67 | 93 | _ => return Err(tape.error(*p, "decimal")),
|
68 | 94 | }
|
69 | 95 | }
|
|
0 commit comments