All files / src/shared/lib/debugger variables.ts

92.3% Statements 12/13
88.88% Branches 16/18
100% Functions 3/3
90.9% Lines 10/11

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43                            1x         2x   2x 4x 4x       4x 4x 4x 4x   7x                    
type DebuggerVariable = {
  name?: string;
  symbol: string;
  length?: number;
  offset?: number;
};
 
export type DebuggerVariableRow<T extends DebuggerVariable> = T & {
  arrayIndex: number;
  displayName: string;
  displaySymbol: string;
  value: number | undefined;
};
 
export const expandDebuggerVariables = <T extends DebuggerVariable>(
  variableSymbols: string[],
  variableDataBySymbol: Record<string, T>,
  variablesData: number[],
): DebuggerVariableRow<T>[] => {
  let fallbackOffset = 0;
 
  return variableSymbols.flatMap((symbol) => {
    const variable = variableDataBySymbol[symbol];
    Iif (!variable) {
      return [];
    }
 
    const length = Math.max(1, Math.floor(variable.length ?? 1));
    const offset = variable.offset ?? fallbackOffset;
    fallbackOffset = Math.max(fallbackOffset, offset + length);
    const name = variable.name ?? variable.symbol;
 
    return Array.from({ length }, (_, arrayIndex) => ({
      ...variable,
      arrayIndex,
      displayName: length > 1 ? `${name}[${arrayIndex}]` : name,
      displaySymbol:
        length > 1 ? `${variable.symbol}[${arrayIndex}]` : variable.symbol,
      value: variablesData[offset + arrayIndex],
    }));
  });
};