aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/analyzer.js2
-rw-r--r--src/library.js16
-rw-r--r--src/parseTools.js27
-rw-r--r--src/preamble.js2
-rw-r--r--src/runtime.js3
5 files changed, 27 insertions, 23 deletions
diff --git a/src/analyzer.js b/src/analyzer.js
index 0cb1b160..b7660281 100644
--- a/src/analyzer.js
+++ b/src/analyzer.js
@@ -451,7 +451,7 @@ function analyzer(data) {
if (fat) {
QUANTUM_SIZE = 4;
}
- var ret = getNativeFieldSize(type, true);
+ var ret = getNativeTypeSize(type);
if (fat) {
QUANTUM_SIZE = 1;
}
diff --git a/src/library.js b/src/library.js
index bc4e0d15..eefa4d8a 100644
--- a/src/library.js
+++ b/src/library.js
@@ -2200,7 +2200,7 @@ LibraryManager.library = {
} else {
throw new Error('Unknown formatString argument type: ' + type);
}
- argIndex += Runtime.getNativeFieldSize(type, true);
+ argIndex += Runtime.getNativeFieldSize(type);
return Number(ret);
};
} else {
@@ -2653,7 +2653,7 @@ LibraryManager.library = {
} else {
{{{ makeSetValue('pos', '0', 'stream.position', 'i32') }}}
var state = (stream.eof ? 1 : 0) + (stream.error ? 2 : 0);
- {{{ makeSetValue('pos', Runtime.getNativeFieldSize('i32', true), 'state', 'i32') }}}
+ {{{ makeSetValue('pos', Runtime.getNativeTypeSize('i32'), 'state', 'i32') }}}
return 0;
}
} else {
@@ -2835,7 +2835,7 @@ LibraryManager.library = {
return -1;
} else {
FS.streams[stream].position = {{{ makeGetValue('pos', '0', 'i32') }}};
- var state = {{{ makeGetValue('pos', Runtime.getNativeFieldSize('i32', true), 'i32') }}};
+ var state = {{{ makeGetValue('pos', Runtime.getNativeTypeSize('i32'), 'i32') }}};
FS.streams[stream].eof = Boolean(state & 1);
FS.streams[stream].error = Boolean(state & 2);
return 0;
@@ -3308,7 +3308,7 @@ LibraryManager.library = {
__buildEnvironment__deps: ['__environ'],
__buildEnvironment: function(env) {
if (___environ === null) ___environ = allocate([0], "i8**", ALLOC_STATIC);
- var ptrSize = {{{ Runtime.getNativeFieldSize('i8*', true) }}};
+ var ptrSize = {{{ Runtime.getNativeTypeSize('i8*') }}};
var envPtr = {{{ makeGetValue('___environ', '0', 'i8**') }}};
// Clear old.
if (envPtr !== 0) {
@@ -3438,7 +3438,7 @@ LibraryManager.library = {
// int getloadavg(double loadavg[], int nelem);
// http://linux.die.net/man/3/getloadavg
var limit = Math.min(nelem, 3);
- var doubleSize = {{{ Runtime.getNativeFieldSize('double', true) }}};
+ var doubleSize = {{{ Runtime.getNativeTypeSize('double') }}};
for (var i = 0; i < limit; i++) {
{{{ makeSetValue('loadavg', 'i * doubleSize', '0.1', 'double') }}}
}
@@ -3772,7 +3772,7 @@ LibraryManager.library = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
];
- var i16size = {{{ Runtime.getNativeFieldSize('i16', true) }}};
+ var i16size = {{{ Runtime.getNativeTypeSize('i16') }}};
var arr = _malloc(values.length * i16size);
for (var i = 0; i < values.length; i++) {
{{{ makeSetValue('arr', 'i * i16size', 'values[i]', 'i16') }}}
@@ -3800,7 +3800,7 @@ LibraryManager.library = {
224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,
254,255
];
- var i32size = {{{ Runtime.getNativeFieldSize('i32', true) }}};
+ var i32size = {{{ Runtime.getNativeTypeSize('i32') }}};
var arr = _malloc(values.length * i32size);
for (var i = 0; i < values.length; i++) {
{{{ makeSetValue('arr', 'i * i32size', 'values[i]', 'i32') }}}
@@ -3827,7 +3827,7 @@ LibraryManager.library = {
205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,
235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
];
- var i32size = {{{ Runtime.getNativeFieldSize('i32', true) }}};
+ var i32size = {{{ Runtime.getNativeTypeSize('i32') }}};
var arr = _malloc(values.length * i32size);
for (var i = 0; i < values.length; i++) {
{{{ makeSetValue('arr', 'i * i32size', 'values[i]', 'i32') }}}
diff --git a/src/parseTools.js b/src/parseTools.js
index 2985ccb6..a2fa67a3 100644
--- a/src/parseTools.js
+++ b/src/parseTools.js
@@ -537,12 +537,9 @@ function getLabelIds(labels) {
return labels.map(function(label) { return label.ident });
}
-//! Returns the size of a field, as C/C++ would have it (in 32-bit,
-//! for now).
-//! @param field The field type, by name
-//! @param alone Whether this is inside a structure (so padding is
-//! used) or alone (line in char*, where no padding is done).
-function getNativeFieldSize(field, alone) {
+//! Returns the size of a type, as C/C++ would have it (in 32-bit, for now).
+//! @param type The type, by name.
+function getNativeTypeSize(type) {
if (QUANTUM_SIZE == 1) return 1;
var size = {
'_i1': 1,
@@ -552,14 +549,20 @@ function getNativeFieldSize(field, alone) {
'_i64': 8,
"_float": 4,
"_double": 8
- }['_'+field]; // add '_' since float&double confuse closure compiler as keys
- if (!size && field[field.length-1] == '*') {
+ }['_'+type]; // add '_' since float&double confuse Closure compiler as keys.
+ if (!size && type[type.length-1] == '*') {
size = QUANTUM_SIZE; // A pointer
}
- if (!alone) size = Math.max(size, QUANTUM_SIZE);
return size;
}
+//! Returns the size of a structure field, as C/C++ would have it (in 32-bit,
+//! for now).
+//! @param type The type, by name.
+function getNativeFieldSize(type) {
+ return Math.max(Runtime.getNativeTypeSize(type), QUANTUM_SIZE);
+}
+
function cleanLabel(label) {
if (label[0] == 'B') {
return label.substr(5);
@@ -572,7 +575,7 @@ function calcAllocatedSize(type) {
if (pointingLevels(type) == 0 && isStructType(type)) {
return Types.types[type].flatSize; // makeEmptyStruct(item.allocatedType).length;
} else {
- return getNativeFieldSize(type, true); // We can really get away with '1', though, at least on the stack...
+ return getNativeTypeSize(type); // We can really get away with '1', though, at least on the stack...
}
}
@@ -675,7 +678,7 @@ function getHeapOffset(offset, type) {
if (getNativeFieldSize(type) > 4) {
type = 'i32'; // XXX we emulate 64-bit values as 32
}
- return '((' + offset + ')>>' + (Math.log(getNativeFieldSize(type, true))/Math.LN2) + ')';
+ return '((' + offset + ')>>' + (Math.log(getNativeTypeSize(type))/Math.LN2) + ')';
}
}
@@ -975,7 +978,7 @@ function getGetElementPtrIndexes(item) {
if (isStructType(type)) {
indexes.push(getFastValue(Types.types[type].flatSize, '*', offset));
} else {
- indexes.push(getFastValue(getNativeFieldSize(type, true), '*', offset));
+ indexes.push(getFastValue(getNativeTypeSize(type), '*', offset));
}
}
item.params.slice(2, item.params.length).forEach(function(arg) {
diff --git a/src/preamble.js b/src/preamble.js
index fe6fc7ae..8feb43e9 100644
--- a/src/preamble.js
+++ b/src/preamble.js
@@ -376,7 +376,7 @@ function allocate(slab, types, allocator) {
#endif
setValue(ret+i, curr, type);
- i += Runtime.getNativeFieldSize(type, true);
+ i += Runtime.getNativeTypeSize(type);
}
return ret;
diff --git a/src/runtime.js b/src/runtime.js
index 9a6cbc50..ad3c973d 100644
--- a/src/runtime.js
+++ b/src/runtime.js
@@ -108,6 +108,7 @@ Runtime = {
},
getNativeFieldSize: getNativeFieldSize,
+ getNativeTypeSize: getNativeTypeSize,
dedup: dedup,
set: set,
@@ -123,7 +124,7 @@ Runtime = {
type.flatIndexes = type.fields.map(function(field) {
var size, alignSize;
if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
- size = Runtime.getNativeFieldSize(field, true); // pack char; char; in structs, also char[X]s.
+ size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s.
alignSize = size;
} else if (Runtime.isStructType(field)) {
size = Types.types[field].flatSize;