diff options
author | Chad Austin <chad@chadaustin.me> | 2012-11-01 18:27:21 -0700 |
---|---|---|
committer | Jukka Jylänki <jujjyl@gmail.com> | 2013-04-12 14:21:31 +0300 |
commit | 8a4997cf16605a7811f32a30116356b9bc0e912e (patch) | |
tree | 158d34aad01ca12755018e754dd0c56eb9e104c4 | |
parent | eb5226e16cca6df5c4c889213150970dc9c6d5c3 (diff) |
Kill some duplication
-rw-r--r-- | src/embind/embind.js | 40 |
1 files changed, 14 insertions, 26 deletions
diff --git a/src/embind/embind.js b/src/embind/embind.js index ef1851e1..43238f07 100644 --- a/src/embind/embind.js +++ b/src/embind/embind.js @@ -165,15 +165,10 @@ function runDestructors(destructors) { } } -function __embind_register_function(name, returnType, argCount, argTypes, invoker, fn) { - name = Pointer_stringify(name); - returnType = requireRegisteredType(returnType, "Function " + name + " return value"); - invoker = FUNCTION_TABLE[invoker]; - argTypes = requireArgumentTypes(argCount, argTypes, name); - - exposePublicSymbol(name, function() { +function makeInvoker(name, returnType, argCount, argTypes, invoker, fn) { + return function() { if (arguments.length !== argCount) { - throw new BindingError('emscripten binding function ' + name + ' called with ' + arguments.length + ' arguments, expected ' + argCount); + throw new BindingError('function ' + name + ' called with ' + arguments.length + ' arguments, expected ' + argCount); } var destructors = []; var args = new Array(argCount + 1); @@ -184,7 +179,16 @@ function __embind_register_function(name, returnType, argCount, argTypes, invoke var rv = returnType.fromWireType(invoker.apply(null, args)); runDestructors(destructors); return rv; - }); + } +} + +function __embind_register_function(name, returnType, argCount, argTypes, invoker, fn) { + name = Pointer_stringify(name); + returnType = requireRegisteredType(returnType, "Function " + name + " return value"); + invoker = FUNCTION_TABLE[invoker]; + argTypes = requireArgumentTypes(argCount, argTypes, name); + + exposePublicSymbol(name, makeInvoker(name, returnType, argCount, argTypes, invoker, fn)); } function __embind_register_tuple(tupleType, name, constructor, destructor) { @@ -576,23 +580,7 @@ function __embind_register_class_classmethod( argTypes = requireArgumentTypes(argCount, argTypes, 'classmethod ' + humanName); invoker = FUNCTION_TABLE[invoker]; - classType.constructor[methodName] = function() { - if (arguments.length !== argCount) { - throw new BindingError('emscripten binding class method ' + humanName + ' called with ' + arguments.length + ' arguments, expected ' + argCount); - } - - var destructors = []; - var args = new Array(argCount + 1); - args[0] = fn; - for (var i = 0; i < argCount; ++i) { - args[i + 1] = argTypes[i].toWireType(destructors, arguments[i]); - } - - var rv = returnType.fromWireType(invoker.apply(null, args)); - runDestructors(destructors); - return rv; - }; -} + classType.constructor[methodName] = makeInvoker(humanName, returnType, argCount, argTypes, invoker, fn);} function __embind_register_class_field( classType, |