Skip to content

Commit 57344e6

Browse files
committed
Refactor makeHEAPView to use getHeapOffset. NFC
The code for calculating the offsets was being duplicated here. Also, optimize getHeapOffset to avoid any shifting when size is 1.
1 parent 4b9a5f7 commit 57344e6

22 files changed

+50
-42
lines changed

src/parseTools.js

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -297,14 +297,17 @@ function getNativeTypeSize(type) {
297297

298298
function getHeapOffset(offset, type) {
299299
const sz = getNativeTypeSize(type);
300-
const shifts = Math.log(sz) / Math.LN2;
300+
if (sz == 1) {
301+
return offset;
302+
}
301303
if (MEMORY64 == 1) {
302-
return `((${offset})/${2 ** shifts})`;
303-
} else if (CAN_ADDRESS_2GB) {
304+
return `((${offset})/${sz})`;
305+
}
306+
const shifts = Math.log(sz) / Math.LN2;
307+
if (CAN_ADDRESS_2GB) {
304308
return `((${offset})>>>${shifts})`;
305-
} else {
306-
return `((${offset})>>${shifts})`;
307309
}
310+
return `((${offset})>>${shifts})`;
308311
}
309312

310313
function ensureDot(value) {
@@ -427,19 +430,24 @@ function makeSetValueImpl(ptr, pos, value, type) {
427430
}
428431

429432
function makeHEAPView(which, start, end) {
430-
const size = parseInt(which.replace('U', '').replace('F', '')) / 8;
431-
const shift = Math.log2(size);
432-
let mod = '';
433-
if (size != 1) {
434-
if (MEMORY64) {
435-
mod = '/' + size;
436-
} else if (CAN_ADDRESS_2GB) {
437-
mod = '>>>' + shift;
438-
} else {
439-
mod = '>>' + shift;
440-
}
441-
}
442-
return `HEAP${which}.subarray((${start})${mod}, (${end})${mod})`;
433+
// The makeHEAPView, for legacy reasons, takes a heap "suffix"
434+
// rather than the heap "type" that used by other APIs here.
435+
type = {
436+
'8': 'i8',
437+
'U8': 'u8',
438+
'16': 'i16',
439+
'U16': 'u16',
440+
'32': 'i32',
441+
'U32': 'u32',
442+
'64': 'i64',
443+
'U64': 'u64',
444+
'F32': 'float',
445+
'F64': 'double',
446+
}[which];
447+
const heap = getHeapForType(type);
448+
start = getHeapOffset(start, type);
449+
end = getHeapOffset(end, type);
450+
return `${heap}.subarray((${start}), ${end})`;
443451
}
444452

445453
// Given two values and an operation, returns the result of that operation.

test/code_size/embind_val_wasm.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"a.html": 673,
33
"a.html.gz": 431,
4-
"a.js": 7086,
5-
"a.js.gz": 3000,
4+
"a.js": 7080,
5+
"a.js.gz": 2999,
66
"a.wasm": 11433,
77
"a.wasm.gz": 5725,
8-
"total": 19192,
9-
"total_gz": 9156
8+
"total": 19186,
9+
"total_gz": 9155
1010
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
9959
1+
9953
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
24516
1+
24510
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
9944
1+
9939
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
24484
1+
24478
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
11032
1+
11034
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
28406
1+
28382
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
9925
1+
9921
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
24409
1+
24403
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
28407
1+
28383
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
9959
1+
9953
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
24516
1+
24510
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5250
1+
5245
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
12128
1+
12122
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2448
1+
2445
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5212
1+
5206
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2415
1+
2411
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5142
1+
5136
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
58128
1+
58100
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
31591
1+
31563
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
57039
1+
57011

0 commit comments

Comments
 (0)