Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 48 additions & 33 deletions ts/fixtures/lang/elements/expected/spare.ts
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,8 @@ export function state$u32(v: rs.Vec<rs.u32>, out: rs.ByteVec): void {
*/
export function pointers$Option_u16(data: rs.ByteSlice, out: rs.ByteVec): void {
let _43!: rs.usize;
let _155!: rs.usize;
let _184!: rs.usize;
let _165!: rs.usize;
let _194!: rs.usize;
const ops: Ops.Ops = { _0Data: data.data, _0Start: data.start, _0Len: data.length };
let v: rs.Vec<rs.u16 | undefined> = rs.vecWithCapacity(rs.u8Rem(Ops.byte(ops), 12) as rs.usize, 4);
while (!(ops._0Len === 0)) {
Expand All @@ -215,9 +215,14 @@ export function pointers$Option_u16(data: rs.ByteSlice, out: rs.ByteVec): void {
const i: rs.usize = _43;
rs.ptrAdd(end, i).v = of$spare_Item_Option_u16(rs.u8WrappingAdd(n, i & 0xff));
}
if (k >= 2) {
const _54: rs.Slice<rs.u16 | undefined> = new rs.RawSlice(end, k).array(2);
rs.sliceSwap(_54, 0, 1);
put$spare_Item_Option_u16(_54.data[_54.start], out);
}
const moved: rs.Vec<rs.u16 | undefined> = rs.replaceIn(v, new rs.Vec());
for (const _61 of rs.sliceItems(rs.ptrSlice(rs.ptrAdd(end, -len), rs.usizeAdd(len, k)))) {
put$spare_Item_Option_u16(_61, out);
for (const _71 of rs.sliceItems(rs.ptrSlice(rs.ptrAdd(end, -len), rs.usizeAdd(len, k)))) {
put$spare_Item_Option_u16(_71, out);
}
rs.vecSetLen(moved, rs.usizeAdd(len, k), 4, (): rs.u16 | undefined => {
return (undefined as unknown) as rs.u16 | undefined;
Expand All @@ -237,11 +242,11 @@ export function pointers$Option_u16(data: rs.ByteSlice, out: rs.ByteVec): void {
if (_35 === 2) {
const iter3: rs.Iter<[rs.usize, rs.Place<rs.u16 | undefined>]> = rs.iterRev(rs.iterEnumerate(rs.iterSliceMut(rs.ptrSlice(rs.ptrAdd(rs.vecAsPtr(v, 4), len), k))));
while (true) {
const _98: [rs.usize, rs.Place<rs.u16 | undefined>] | rs.Done = iter3.next();
if (_98 === rs.DONE) {
const _108: [rs.usize, rs.Place<rs.u16 | undefined>] | rs.Done = iter3.next();
if (_108 === rs.DONE) {
break;
}
_98[1].v = of$spare_Item_Option_u16(rs.u8WrappingSub(n, _98[0] & 0xff));
_108[1].v = of$spare_Item_Option_u16(rs.u8WrappingSub(n, _108[0] & 0xff));
}
rs.vecSetLen(v, rs.usizeAdd(len, k), 4, (): rs.u16 | undefined => {
return (undefined as unknown) as rs.u16 | undefined;
Expand Down Expand Up @@ -269,8 +274,8 @@ export function pointers$Option_u16(data: rs.ByteSlice, out: rs.ByteVec): void {
const p2: rs.Place<rs.u16 | undefined> = rs.vecAsPtr(v, 4);
let iterStart2: rs.usize = at2;
const iterEnd2: rs.usize = end2;
while ((_155 = iterStart2++) < iterEnd2) {
put$spare_Item_Option_u16(rs.ptrAdd(p2, _155).v, out);
while ((_165 = iterStart2++) < iterEnd2) {
put$spare_Item_Option_u16(rs.ptrAdd(p2, _165).v, out);
}
rs.ptrCopy(rs.ptrAdd(p2, end2), rs.ptrAdd(p2, at2), rs.usizeSub(len, end2));
rs.vecSetLen(v, rs.usizeSub(len, rs.usizeSub(end2, at2)), 4, (): rs.u16 | undefined => {
Expand All @@ -287,8 +292,8 @@ export function pointers$Option_u16(data: rs.ByteSlice, out: rs.ByteVec): void {
let kept: rs.usize = 0;
let iterStart3: rs.usize = 0;
const iterEnd3: rs.usize = len;
while ((_184 = iterStart3++) < iterEnd3) {
const i4: rs.usize = _184;
while ((_194 = iterStart3++) < iterEnd3) {
const i4: rs.usize = _194;
const x: rs.u16 | undefined = rs.ptrAdd(p3, i4).v;
if (rs.usizeRem(rs.usizeAdd(i4, n as rs.usize), 3) !== 0) {
rs.ptrAdd(p3, kept).v = x;
Expand Down Expand Up @@ -321,8 +326,8 @@ export function pointers$Option_u16(data: rs.ByteSlice, out: rs.ByteVec): void {
*/
export function pointers$String(data: rs.ByteSlice, out: rs.ByteVec): void {
let _43!: rs.usize;
let _155!: rs.usize;
let _184!: rs.usize;
let _165!: rs.usize;
let _194!: rs.usize;
const ops: Ops.Ops = { _0Data: data.data, _0Start: data.start, _0Len: data.length };
let v: rs.Vec<rs.String> = rs.vecWithCapacity(rs.u8Rem(Ops.byte(ops), 12) as rs.usize, 12);
while (!(ops._0Len === 0)) {
Expand All @@ -342,9 +347,14 @@ export function pointers$String(data: rs.ByteSlice, out: rs.ByteVec): void {
const i: rs.usize = _43;
rs.ptrAdd(end, i).v = of$spare_Item_String(rs.u8WrappingAdd(n, i & 0xff));
}
if (k >= 2) {
const _54: rs.Slice<rs.String> = new rs.RawSlice(end, k).array(2);
rs.sliceSwap(_54, 0, 1);
put$spare_Item_String(_54.data[_54.start], out);
}
const moved: rs.Vec<rs.String> = rs.replaceIn(v, new rs.Vec());
for (const _61 of rs.sliceItems(rs.ptrSlice(rs.ptrAdd(end, -len), rs.usizeAdd(len, k)))) {
put$spare_Item_String(_61, out);
for (const _71 of rs.sliceItems(rs.ptrSlice(rs.ptrAdd(end, -len), rs.usizeAdd(len, k)))) {
put$spare_Item_String(_71, out);
}
rs.vecSetLen(moved, rs.usizeAdd(len, k), 12, (): rs.String => {
return (undefined as unknown) as rs.String;
Expand All @@ -364,11 +374,11 @@ export function pointers$String(data: rs.ByteSlice, out: rs.ByteVec): void {
if (_35 === 2) {
const iter3: rs.Iter<[rs.usize, rs.Place<rs.String>]> = rs.iterRev(rs.iterEnumerate(rs.iterSliceMut(rs.ptrSlice(rs.ptrAdd(rs.vecAsPtr(v, 12), len), k))));
while (true) {
const _98: [rs.usize, rs.Place<rs.String>] | rs.Done = iter3.next();
if (_98 === rs.DONE) {
const _108: [rs.usize, rs.Place<rs.String>] | rs.Done = iter3.next();
if (_108 === rs.DONE) {
break;
}
_98[1].v = of$spare_Item_String(rs.u8WrappingSub(n, _98[0] & 0xff));
_108[1].v = of$spare_Item_String(rs.u8WrappingSub(n, _108[0] & 0xff));
}
rs.vecSetLen(v, rs.usizeAdd(len, k), 12, (): rs.String => {
return (undefined as unknown) as rs.String;
Expand Down Expand Up @@ -396,8 +406,8 @@ export function pointers$String(data: rs.ByteSlice, out: rs.ByteVec): void {
const p2: rs.Place<rs.String> = rs.vecAsPtr(v, 12);
let iterStart2: rs.usize = at2;
const iterEnd2: rs.usize = end2;
while ((_155 = iterStart2++) < iterEnd2) {
put$spare_Item_String(rs.ptrAdd(p2, _155).v, out);
while ((_165 = iterStart2++) < iterEnd2) {
put$spare_Item_String(rs.ptrAdd(p2, _165).v, out);
}
rs.ptrCopy(rs.ptrAdd(p2, end2), rs.ptrAdd(p2, at2), rs.usizeSub(len, end2));
rs.vecSetLen(v, rs.usizeSub(len, rs.usizeSub(end2, at2)), 12, (): rs.String => {
Expand All @@ -414,8 +424,8 @@ export function pointers$String(data: rs.ByteSlice, out: rs.ByteVec): void {
let kept: rs.usize = 0;
let iterStart3: rs.usize = 0;
const iterEnd3: rs.usize = len;
while ((_184 = iterStart3++) < iterEnd3) {
const i4: rs.usize = _184;
while ((_194 = iterStart3++) < iterEnd3) {
const i4: rs.usize = _194;
const x: rs.String = rs.ptrAdd(p3, i4).v;
if (rs.usizeRem(rs.usizeAdd(i4, n as rs.usize), 3) !== 0) {
rs.ptrAdd(p3, kept).v = x;
Expand Down Expand Up @@ -448,8 +458,8 @@ export function pointers$String(data: rs.ByteSlice, out: rs.ByteVec): void {
*/
export function pointers$u32(data: rs.ByteSlice, out: rs.ByteVec): void {
let _43!: rs.usize;
let _155!: rs.usize;
let _184!: rs.usize;
let _165!: rs.usize;
let _194!: rs.usize;
const ops: Ops.Ops = { _0Data: data.data, _0Start: data.start, _0Len: data.length };
let v: rs.Vec<rs.u32> = rs.vecWithCapacity(rs.u8Rem(Ops.byte(ops), 12) as rs.usize, 4);
while (!(ops._0Len === 0)) {
Expand All @@ -469,9 +479,14 @@ export function pointers$u32(data: rs.ByteSlice, out: rs.ByteVec): void {
const i: rs.usize = _43;
rs.ptrAdd(end, i).v = of$spare_Item_u32(rs.u8WrappingAdd(n, i & 0xff));
}
if (k >= 2) {
const _54: rs.Slice<rs.u32> = new rs.RawSlice(end, k).array(2);
rs.sliceSwap(_54, 0, 1);
put$spare_Item_u32(_54.data[_54.start], out);
}
const moved: rs.Vec<rs.u32> = rs.replaceIn(v, new rs.Vec());
for (const _61 of rs.sliceItems(rs.ptrSlice(rs.ptrAdd(end, -len), rs.usizeAdd(len, k)))) {
put$spare_Item_u32(_61, out);
for (const _71 of rs.sliceItems(rs.ptrSlice(rs.ptrAdd(end, -len), rs.usizeAdd(len, k)))) {
put$spare_Item_u32(_71, out);
}
rs.vecSetLen(moved, rs.usizeAdd(len, k), 4, (): rs.u32 => {
return (undefined as unknown) as rs.u32;
Expand All @@ -491,11 +506,11 @@ export function pointers$u32(data: rs.ByteSlice, out: rs.ByteVec): void {
if (_35 === 2) {
const iter3: rs.Iter<[rs.usize, rs.Place<rs.u32>]> = rs.iterRev(rs.iterEnumerate(rs.iterSliceMut(rs.ptrSlice(rs.ptrAdd(rs.vecAsPtr(v, 4), len), k))));
while (true) {
const _98: [rs.usize, rs.Place<rs.u32>] | rs.Done = iter3.next();
if (_98 === rs.DONE) {
const _108: [rs.usize, rs.Place<rs.u32>] | rs.Done = iter3.next();
if (_108 === rs.DONE) {
break;
}
_98[1].v = of$spare_Item_u32(rs.u8WrappingSub(n, _98[0] & 0xff));
_108[1].v = of$spare_Item_u32(rs.u8WrappingSub(n, _108[0] & 0xff));
}
rs.vecSetLen(v, rs.usizeAdd(len, k), 4, (): rs.u32 => {
return (undefined as unknown) as rs.u32;
Expand Down Expand Up @@ -523,8 +538,8 @@ export function pointers$u32(data: rs.ByteSlice, out: rs.ByteVec): void {
const p2: rs.Place<rs.u32> = rs.vecAsPtr(v, 4);
let iterStart2: rs.usize = at2;
const iterEnd2: rs.usize = end2;
while ((_155 = iterStart2++) < iterEnd2) {
put$spare_Item_u32(rs.ptrAdd(p2, _155).v, out);
while ((_165 = iterStart2++) < iterEnd2) {
put$spare_Item_u32(rs.ptrAdd(p2, _165).v, out);
}
rs.ptrCopy(rs.ptrAdd(p2, end2), rs.ptrAdd(p2, at2), rs.usizeSub(len, end2));
rs.vecSetLen(v, rs.usizeSub(len, rs.usizeSub(end2, at2)), 4, (): rs.u32 => {
Expand All @@ -541,8 +556,8 @@ export function pointers$u32(data: rs.ByteSlice, out: rs.ByteVec): void {
let kept: rs.usize = 0;
let iterStart3: rs.usize = 0;
const iterEnd3: rs.usize = len;
while ((_184 = iterStart3++) < iterEnd3) {
const i4: rs.usize = _184;
while ((_194 = iterStart3++) < iterEnd3) {
const i4: rs.usize = _194;
const x: rs.u32 = rs.ptrAdd(p3, i4).v;
if (rs.usizeRem(rs.usizeAdd(i4, n as rs.usize), 3) !== 0) {
rs.ptrAdd(p3, kept).v = x;
Expand Down
6 changes: 6 additions & 0 deletions ts/fixtures/lang/elements/src/spare.rs
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,12 @@ fn pointers<T: Item>(data: &[u8], out: &mut Vec<u8>) {
for i in 0..k {
end.add(i).write(T::of(n.wrapping_add(i as u8)));
}
// The room's raw slice cast to an array, read and written through.
if k >= 2 {
let pair = &mut *(ptr::slice_from_raw_parts_mut(end, k) as *mut [T; 2]);
pair.swap(0, 1);
pair[0].put(out);
}
// Moved to another binding and back, which keeps its storage, read through
// the pointer from before the move.
let mut moved = std::mem::take(&mut v);
Expand Down
2 changes: 1 addition & 1 deletion ts/runtime/rs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,7 @@ export class RawSlice<T> {
array(n: number): Slice<T> {
if (ptrNowhere(this.ptr)) return this.ptr as never;
const at = elemOf(this.ptr);
return new Slice(at.array as T[], at.index, n);
return new Slice(sliceArray(at, n), at.index, n);
}

/**
Expand Down