Skip to content

Invalid TypeScript code for constructor tag with trailing _ #58

@i582

Description

@i582

Description

throwarg#F2CC_ n:uint11 = THROWARG;

Generated TS (invalid number 0xF2CC_):

// ...

export function loadTHROWARG(slice: Slice): THROWARG {
    if (((slice.remainingBits >= 20) && (slice.preloadUint(20) == 0xF2CC_))) {
        slice.loadUint(20);
        let n: number = slice.loadUint(11);
        return {
            kind: 'THROWARG',
            n: n,
        }

    }
    throw new Error('Expected one of "THROWARG" in loading "THROWARG", but data does not satisfy any constructor');
}

export function storeTHROWARG(tHROWARG: THROWARG): (builder: Builder) => void {
    return ((builder: Builder) => {
        builder.storeUint(0xF2CC_, 20);
        builder.storeUint(tHROWARG.n, 11);
    })

}

Generated C++, OK (via tlbc):

// ...

int THROWARG::check_tag(const vm::CellSlice& cs) const {
  return cs.prefetch_ulong(13) == 0x1e59 ? throwarg : -1;
}

bool THROWARG::validate_skip(int* ops, vm::CellSlice& cs, bool weak) const {
  return cs.fetch_ulong(13) == 0x1e59
      && cs.advance(11);
}

bool THROWARG::unpack(vm::CellSlice& cs, THROWARG::Record& data) const {
  return cs.fetch_ulong(13) == 0x1e59
      && cs.fetch_uint_to(11, data.n);
}

bool THROWARG::unpack_throwarg(vm::CellSlice& cs, int& n) const {
  return cs.fetch_ulong(13) == 0x1e59
      && cs.fetch_uint_to(11, n);
}

bool THROWARG::cell_unpack(Ref<vm::Cell> cell_ref, THROWARG::Record& data) const {
  if (cell_ref.is_null()) { return false; }
  auto cs = load_cell_slice(std::move(cell_ref));
  return unpack(cs, data) && cs.empty_ext();
}

bool THROWARG::cell_unpack_throwarg(Ref<vm::Cell> cell_ref, int& n) const {
  if (cell_ref.is_null()) { return false; }
  auto cs = load_cell_slice(std::move(cell_ref));
  return unpack_throwarg(cs, n) && cs.empty_ext();
}

Steps to Reproduce

  1. Run npx tlb report.tlb
  2. Run tlbc report.tlb

Environment

No response

Logs or Screenshots

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions