AssemblyScript / assemblyscript

A TypeScript-like language for WebAssembly.
https://www.assemblyscript.org
Apache License 2.0
16.6k stars 650 forks source link

ERROR TS2454: Variable is used before being assigned. #2838

Closed ultraviolet-jordan closed 3 months ago

ultraviolet-jordan commented 3 months ago

Bug description

I have updated my package version from 0.27.23 to 0.27.26.

There is now a compiling issue where: ERROR TS2454: Variable 'zj' is used before being assigned.

Steps to reproduce

Here is the code block:

let zn: i32 = gMinlen;
let zvec: i32;
let zj: u8;
for (zvec = getBits(gMinlen, state); zvec > unchecked(gLimit[zn]); zvec = (zvec << 1) | zj) {
    zn++;
    zj = getBit(state);
}

The fix is simple like:

let zn: i32 = gMinlen;
let zvec: i32;
let zj: u8 = 0; // <=== FIX
for (zvec = getBits(gMinlen, state); zvec > unchecked(gLimit[zn]); zvec = (zvec << 1) | zj) {
    zn++;
    zj = getBit(state);
}

I do not know if this is intended or not, here is valid Java code for example:

int zn = gMinlen;
int zvec;
byte zj;
for (zvec = getBits(gMinlen, s); zvec > gLimit[zn]; zvec = zvec << 1 | zj) {
    zn++;
    zj = getBit(s);
}

Just wanted to report just in case. ty

AssemblyScript version

0.27.26

CountBleck commented 3 months ago

This looks like a regression from #2826...sorry!