Skip to content

Commit ef9f5ac

Browse files
committed
[embind] Minor refactor to use more modern JS features
1 parent 145b146 commit ef9f5ac

File tree

3 files changed

+33
-30
lines changed

3 files changed

+33
-30
lines changed

src/embind/embind.js

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ var LibraryEmbind = {
101101
proto[methodName] = function(...args) {
102102
// TODO This check can be removed in -O3 level "unsafe" optimizations.
103103
if (!proto[methodName].overloadTable.hasOwnProperty(args.length)) {
104-
throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`);
104+
throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`);
105105
}
106106
return proto[methodName].overloadTable[args.length].apply(this, args);
107107
};
@@ -953,7 +953,7 @@ var LibraryEmbind = {
953953
throwUnboundTypeError(`Cannot call ${name} due to unbound types`, argTypes);
954954
}, argCount - 1);
955955

956-
whenDependentTypesAreResolved([], argTypes, function(argTypes) {
956+
whenDependentTypesAreResolved([], argTypes, (argTypes) => {
957957
var invokerArgsArray = [argTypes[0] /* return value */, null /* no class 'this'*/].concat(argTypes.slice(1) /* actual params */);
958958
replacePublicSymbol(name, craftInvokerFunction(name, invokerArgsArray, null /* no class 'this'*/, rawInvoker, fn, isAsync), argCount - 1);
959959
return [];
@@ -1015,7 +1015,7 @@ var LibraryEmbind = {
10151015
var rawConstructor = reg.rawConstructor;
10161016
var rawDestructor = reg.rawDestructor;
10171017

1018-
whenDependentTypesAreResolved([rawTupleType], elementTypes, function(elementTypes) {
1018+
whenDependentTypesAreResolved([rawTupleType], elementTypes, (elementTypes) => {
10191019
elements.forEach((elt, i) => {
10201020
var getterReturnType = elementTypes[i];
10211021
var getter = elt.getter;
@@ -1753,7 +1753,7 @@ var LibraryEmbind = {
17531753
whenDependentTypesAreResolved(
17541754
[rawType, rawPointerType, rawConstPointerType],
17551755
baseClassRawType ? [baseClassRawType] : [],
1756-
function(base) {
1756+
(base) => {
17571757
base = base[0];
17581758

17591759
var baseClass;
@@ -1851,7 +1851,7 @@ var LibraryEmbind = {
18511851
var args = [rawConstructor];
18521852
var destructors = [];
18531853

1854-
whenDependentTypesAreResolved([], [rawClassType], function(classType) {
1854+
whenDependentTypesAreResolved([], [rawClassType], (classType) => {
18551855
classType = classType[0];
18561856
var humanName = `constructor ${classType.name}`;
18571857

@@ -1938,7 +1938,7 @@ var LibraryEmbind = {
19381938
methodName = getFunctionName(methodName);
19391939
rawInvoker = embind__requireFunction(invokerSignature, rawInvoker);
19401940

1941-
whenDependentTypesAreResolved([], [rawClassType], function(classType) {
1941+
whenDependentTypesAreResolved([], [rawClassType], (classType) => {
19421942
classType = classType[0];
19431943
var humanName = `${classType.name}.${methodName}`;
19441944

@@ -1969,11 +1969,13 @@ var LibraryEmbind = {
19691969
proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler;
19701970
}
19711971

1972-
whenDependentTypesAreResolved([], rawArgTypes, function(argTypes) {
1972+
whenDependentTypesAreResolved([], rawArgTypes, (argTypes) => {
19731973
var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context, isAsync);
19741974

1975-
// Replace the initial unbound-handler-stub function with the appropriate member function, now that all types
1976-
// are resolved. If multiple overloads are registered for this function, the function goes into an overload table.
1975+
// Replace the initial unbound-handler-stub function with the
1976+
// appropriate member function, now that all types are resolved. If
1977+
// multiple overloads are registered for this function, the function
1978+
// goes into an overload table.
19771979
if (undefined === proto[methodName].overloadTable) {
19781980
// Set argCount in case an overload is registered later
19791981
memberFunction.argCount = argCount - 2;
@@ -2005,7 +2007,7 @@ var LibraryEmbind = {
20052007
fieldName = readLatin1String(fieldName);
20062008
getter = embind__requireFunction(getterSignature, getter);
20072009

2008-
whenDependentTypesAreResolved([], [classType], function(classType) {
2010+
whenDependentTypesAreResolved([], [classType], (classType) => {
20092011
classType = classType[0];
20102012
var humanName = `${classType.name}.${fieldName}`;
20112013
var desc = {
@@ -2026,7 +2028,7 @@ var LibraryEmbind = {
20262028
whenDependentTypesAreResolved(
20272029
[],
20282030
(setter ? [getterReturnType, setterArgumentType] : [getterReturnType]),
2029-
function(types) {
2031+
(types) => {
20302032
var getterReturnType = types[0];
20312033
var desc = {
20322034
get() {
@@ -2071,7 +2073,7 @@ var LibraryEmbind = {
20712073
methodName = readLatin1String(methodName);
20722074
methodName = getFunctionName(methodName);
20732075
rawInvoker = embind__requireFunction(invokerSignature, rawInvoker);
2074-
whenDependentTypesAreResolved([], [rawClassType], function(classType) {
2076+
whenDependentTypesAreResolved([], [rawClassType], (classType) => {
20752077
classType = classType[0];
20762078
var humanName = `${classType.name}.${methodName}`;
20772079

@@ -2095,7 +2097,7 @@ var LibraryEmbind = {
20952097
proto[methodName].overloadTable[argCount-1] = unboundTypesHandler;
20962098
}
20972099

2098-
whenDependentTypesAreResolved([], rawArgTypes, function(argTypes) {
2100+
whenDependentTypesAreResolved([], rawArgTypes, (argTypes) => {
20992101
// Replace the initial unbound-types-handler stub with the proper
21002102
// function. If multiple overloads are registered, the function handlers
21012103
// go into an overload table.
@@ -2138,7 +2140,7 @@ var LibraryEmbind = {
21382140
fieldName = readLatin1String(fieldName);
21392141
getter = embind__requireFunction(getterSignature, getter);
21402142

2141-
whenDependentTypesAreResolved([], [rawClassType], function(classType) {
2143+
whenDependentTypesAreResolved([], [rawClassType], (classType) => {
21422144
classType = classType[0];
21432145
var humanName = `${classType.name}.${fieldName}`;
21442146
var desc = {
@@ -2160,7 +2162,7 @@ var LibraryEmbind = {
21602162

21612163
Object.defineProperty(classType.registeredClass.constructor, fieldName, desc);
21622164

2163-
whenDependentTypesAreResolved([], [rawFieldType], function(fieldType) {
2165+
whenDependentTypesAreResolved([], [rawFieldType], (fieldType) => {
21642166
fieldType = fieldType[0];
21652167
var desc = {
21662168
get() {
@@ -2282,7 +2284,7 @@ var LibraryEmbind = {
22822284
rawShare = embind__requireFunction(shareSignature, rawShare);
22832285
rawDestructor = embind__requireFunction(destructorSignature, rawDestructor);
22842286

2285-
whenDependentTypesAreResolved([rawType], [rawPointeeType], function(pointeeType) {
2287+
whenDependentTypesAreResolved([rawType], [rawPointeeType], (pointeeType) => {
22862288
pointeeType = pointeeType[0];
22872289

22882290
var registeredPointer = new RegisteredPointer(name,
@@ -2342,7 +2344,7 @@ var LibraryEmbind = {
23422344
_embind_register_constant__deps: ['$readLatin1String', '$whenDependentTypesAreResolved'],
23432345
_embind_register_constant: (name, type, value) => {
23442346
name = readLatin1String(name);
2345-
whenDependentTypesAreResolved([], [type], function(type) {
2347+
whenDependentTypesAreResolved([], [type], (type) => {
23462348
type = type[0];
23472349
Module[name] = type['fromWireType'](value);
23482350
return [];

src/embind/embind_shared.js

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,9 @@ var LibraryEmbindShared = {
153153
$heap32VectorToArray: (count, firstElement) => {
154154
var array = [];
155155
for (var i = 0; i < count; i++) {
156-
// TODO(https://github.com/emscripten-core/emscripten/issues/17310):
157-
// Find a way to hoist the `>> 2` or `>> 3` out of this loop.
158-
array.push({{{ makeGetValue('firstElement', `i * ${POINTER_SIZE}`, '*') }}});
156+
// TODO(https://github.com/emscripten-core/emscripten/issues/17310):
157+
// Find a way to hoist the `>> 2` or `>> 3` out of this loop.
158+
array.push({{{ makeGetValue('firstElement', `i * ${POINTER_SIZE}`, '*') }}});
159159
}
160160
return array;
161161
},
@@ -165,14 +165,16 @@ var LibraryEmbindShared = {
165165
$requireRegisteredType: (rawType, humanName) => {
166166
var impl = registeredTypes[rawType];
167167
if (undefined === impl) {
168-
throwBindingError(humanName + " has unknown type " + getTypeName(rawType));
168+
throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`);
169169
}
170170
return impl;
171171
},
172172

173173
$usesDestructorStack(argTypes) {
174-
for (var i = 1; i < argTypes.length; ++i) { // Skip return value at index 0 - it's not deleted here.
175-
if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) { // The type does not define a destructor function - must use dynamic stack
174+
// Skip return value at index 0 - it's not deleted here.
175+
for (var i = 1; i < argTypes.length; ++i) {
176+
// The type does not define a destructor function - must use dynamic stack
177+
if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) {
176178
return true;
177179
}
178180
}
@@ -252,11 +254,12 @@ var LibraryEmbindShared = {
252254
invokerFnBody +=
253255
(returns || isAsync ? "var rv = ":"") + "invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";
254256

257+
var returnVal = returns ? "rv" : "";
255258
#if ASYNCIFY == 1
256259
args1.push("Asyncify");
257260
#endif
258261
#if ASYNCIFY
259-
invokerFnBody += "function onDone(" + (returns ? "rv" : "") + ") {\n";
262+
invokerFnBody += `function onDone(${returnVal}) {\n`;
260263
#endif
261264

262265
if (needsDestructorStack) {
@@ -265,8 +268,8 @@ var LibraryEmbindShared = {
265268
for (var i = isClassMethodFunc?1:2; i < argTypes.length; ++i) { // Skip return value at index 0 - it's not deleted here. Also skip class type if not a method.
266269
var paramName = (i === 1 ? "thisWired" : ("arg"+(i - 2)+"Wired"));
267270
if (argTypes[i].destructorFunction !== null) {
268-
invokerFnBody += paramName+"_dtor("+paramName+");\n";
269-
args1.push(paramName+"_dtor");
271+
invokerFnBody += `${paramName}_dtor(${paramName});\n`;
272+
args1.push(`${paramName}_dtor`);
270273
}
271274
}
272275
}
@@ -288,7 +291,7 @@ var LibraryEmbindShared = {
288291
invokerFnBody += "return Asyncify.currData ? Asyncify.whenDone().then(onDone) : onDone(" + (returns ? "rv" : "") +");\n"
289292
#elif ASYNCIFY == 2
290293
invokerFnBody += "}\n";
291-
invokerFnBody += "return " + (isAsync ? "rv.then(onDone)" : "onDone(" + (returns ? "rv" : "") + ")") + ";";
294+
invokerFnBody += "return " + (isAsync ? "rv.then(onDone)" : `onDone(${returnVal})` + ";";
292295
#endif
293296

294297
invokerFnBody += "}\n";

src/library_ccall.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,6 @@ addToLibrary({
143143
return getCFunc(ident);
144144
}
145145
#endif
146-
return function() {
147-
return ccall(ident, returnType, argTypes, arguments, opts);
148-
}
146+
return (...args) => ccall(ident, returnType, argTypes, args, opts);
149147
},
150148
});

0 commit comments

Comments
 (0)