aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Austin <chad@chadaustin.me>2012-11-01 18:27:21 -0700
committerJukka Jylänki <jujjyl@gmail.com>2013-04-12 14:21:31 +0300
commit8a4997cf16605a7811f32a30116356b9bc0e912e (patch)
tree158d34aad01ca12755018e754dd0c56eb9e104c4
parenteb5226e16cca6df5c4c889213150970dc9c6d5c3 (diff)
Kill some duplication
-rw-r--r--src/embind/embind.js40
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,