diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/analyzer.js | 2 | ||||
-rw-r--r-- | src/library.js | 16 | ||||
-rw-r--r-- | src/parseTools.js | 27 | ||||
-rw-r--r-- | src/preamble.js | 2 | ||||
-rw-r--r-- | src/runtime.js | 3 |
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; |