aboutsummaryrefslogtreecommitdiff
path: root/src/embind/embind.js
diff options
context:
space:
mode:
authorChad Austin <caustin@gmail.com>2014-03-24 00:54:18 -0700
committerChad Austin <chad@chadaustin.me>2014-03-28 23:56:41 -0700
commitfa3e4f460a86ee2e0212fe2471690f67b9b4280c (patch)
tree8f29ee37885f8249bd9bea84bf5dadc5acf99048 /src/embind/embind.js
parentbcb2da768ab5b559b1603b28e3f7b1a3e1b0b6fc (diff)
Make val::call<> compatible with asm.js
Diffstat (limited to 'src/embind/embind.js')
-rw-r--r--src/embind/embind.js11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/embind/embind.js b/src/embind/embind.js
index 4ef8646f..1fb9403f 100644
--- a/src/embind/embind.js
+++ b/src/embind/embind.js
@@ -164,6 +164,10 @@ var typeDependencies = {};
var registeredPointers = {};
function registerType(rawType, registeredInstance) {
+ if (!('varArgAdvance' in registeredInstance)) {
+ throw new TypeError('registerType registeredInstance requires varArgAdvance');
+ }
+
var name = registeredInstance.name;
if (!rawType) {
throwBindingError('type "' + name + '" must have a positive integer typeid pointer');
@@ -268,6 +272,7 @@ function __embind_register_void(rawType, name) {
name = readLatin1String(name);
registerType(rawType, {
name: name,
+ 'varArgAdvance': 0,
'fromWireType': function() {
return undefined;
},
@@ -432,8 +437,10 @@ function __embind_register_float(rawType, name, size) {
},
'varArgAdvance': 8,
'readValueFromPointer': function(pointer) {
- var heap = (shift === 2) ? HEAPF32 : HEAPF64;
- return this['fromWireType'](heap[pointer >> shift]);
+ // TODO: rename readValueFromPointer to
+ // readValueFromVarArg in clang/emscripten, it appears
+ // floats are passed in varargs via HEAPF64
+ return this['fromWireType'](HEAPF64[pointer >> 3]);
},
writeValueToPointer: function(value, pointer, _destructors) {
var heap = (shift === 2) ? HEAPF32 : HEAPF64;