Skip to content

Commit 1becb5a

Browse files
authored
Embind: name functions in non-dynamic mode too (#20498)
1 parent d581c72 commit 1becb5a

File tree

4 files changed

+18
-22
lines changed

4 files changed

+18
-22
lines changed

src/embind/embind.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,7 @@ var LibraryEmbind = {
759759
// (hand-written JS code) -> (autogenerated JS invoker) -> (template-generated C++ invoker) -> (target C++ function)
760760
// craftInvokerFunction generates the JS invoker function for each function exposed to JS through embind.
761761
$craftInvokerFunction__deps: [
762-
'$makeLegalFunctionName', '$runDestructors', '$throwBindingError',
762+
'$createNamedFunction', '$runDestructors', '$throwBindingError',
763763
#if DYNAMIC_EXECUTION
764764
'$newFunc',
765765
#endif
@@ -814,7 +814,7 @@ var LibraryEmbind = {
814814
var argsWired = new Array(expectedArgCount);
815815
var invokerFuncArgs = [];
816816
var destructors = [];
817-
return function() {
817+
var invokerFn = function() {
818818
if (arguments.length !== expectedArgCount) {
819819
throwBindingError(`function ${humanName} called with ${arguments.length} arguments, expected ${expectedArgCount}`);
820820
}
@@ -878,7 +878,7 @@ var LibraryEmbind = {
878878
}
879879

880880
var invokerFnBody = `
881-
return function ${makeLegalFunctionName(humanName)}(${argsList}) {
881+
return function (${argsList}) {
882882
if (arguments.length !== ${argCount - 2}) {
883883
throwBindingError('function ${humanName} called with ' + arguments.length + ' arguments, expected ${argCount - 2}');
884884
}`;
@@ -962,8 +962,9 @@ var LibraryEmbind = {
962962

963963
args1.push(invokerFnBody);
964964

965-
return newFunc(Function, args1).apply(null, args2);
965+
var invokerFn = newFunc(Function, args1).apply(null, args2);
966966
#endif
967+
return createNamedFunction(humanName, invokerFn);
967968
},
968969

969970
$embind__requireFunction__deps: ['$readLatin1String', '$throwBindingError'
@@ -1835,7 +1836,7 @@ var LibraryEmbind = {
18351836
basePrototype = ClassHandle.prototype;
18361837
}
18371838

1838-
var constructor = createNamedFunction(legalFunctionName, function() {
1839+
var constructor = createNamedFunction(name, function() {
18391840
if (Object.getPrototypeOf(this) !== instancePrototype) {
18401841
throw new BindingError("Use 'new' to construct " + name);
18411842
}

src/embind/embind_ts.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,7 @@ var LibraryEmbind = {
604604
$makeLegalFunctionName: () => assert(false, 'stub function should not be called'),
605605
$newFunc: () => assert(false, 'stub function should not be called'),
606606
$runDestructors: () => assert(false, 'stub function should not be called'),
607+
$createNamedFunction: () => assert(false, 'stub function should not be called'),
607608
};
608609

609610
extraLibraryFuncs.push('$embindEmitTypes');

src/embind/emval.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ var LibraryEmVal = {
315315

316316
_emval_get_method_caller__deps: [
317317
'$emval_addMethodCaller', '$emval_lookupTypes',
318-
'$makeLegalFunctionName',
318+
'$createNamedFunction',
319319
'$reflectConstruct', '$emval_returnValue',
320320
#if DYNAMIC_EXECUTION
321321
'$newFunc',
@@ -343,10 +343,8 @@ var LibraryEmVal = {
343343
return emval_returnValue(retType, destructorsRef, rv);
344344
};
345345
#else
346-
var signatureName = retType.name + "_$" + types.map(t => t.name).join("_") + "$";
347-
var functionName = makeLegalFunctionName("methodCaller_" + signatureName);
348346
var functionBody =
349-
`return function ${functionName}(obj, func, destructorsRef, args) {\n`;
347+
`return function (obj, func, destructorsRef, args) {\n`;
350348

351349
var offset = 0;
352350
var argsList = []; // 'obj?, arg0, arg1, arg2, ... , argN'
@@ -384,7 +382,8 @@ var LibraryEmVal = {
384382
params.push(functionBody);
385383
var invokerFunction = newFunc(Function, params).apply(null, args);
386384
#endif
387-
return emval_addMethodCaller(invokerFunction);
385+
var functionName = `methodCaller<(${types.map(t => t.name).join(', ')}) => ${retType.name}>`;
386+
return emval_addMethodCaller(createNamedFunction(functionName, invokerFunction));
388387
},
389388

390389
_emval_call_method__deps: ['$getStringOrSymbol', '$emval_methodCallers', '$Emval'],

test/embind/embind.test.js

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ module({
441441
var e = cm.emval_test_take_and_return_std_string((new Int8Array([65, 66, 67, 68])).buffer);
442442
assert.equal('ABCD', e);
443443
});
444-
444+
445445
test("can pass Uint8Array to std::basic_string<unsigned char>", function() {
446446
var e = cm.emval_test_take_and_return_std_basic_string_unsigned_char(new Uint8Array([65, 66, 67, 68]));
447447
assert.equal('ABCD', e);
@@ -475,7 +475,7 @@ module({
475475
var e = cm.emval_test_take_and_return_std_string(string);
476476
assert.equal(string, e);
477477
});
478-
478+
479479
var utf16TestString = String.fromCharCode(10) +
480480
String.fromCharCode(1234) +
481481
String.fromCharCode(2345) +
@@ -517,12 +517,12 @@ module({
517517
cm.force_memory_growth();
518518
assert.equal("get_literal_wstring", cm.get_literal_wstring());
519519
});
520-
520+
521521
test("can access a literal u16string after a memory growth", function() {
522522
cm.force_memory_growth();
523523
assert.equal("get_literal_u16string", cm.get_literal_u16string());
524524
});
525-
525+
526526
test("can access a literal u32string after a memory growth", function() {
527527
cm.force_memory_growth();
528528
assert.equal("get_literal_u32string", cm.get_literal_u32string());
@@ -2078,7 +2078,7 @@ module({
20782078
assert.equal(10, instance.property);
20792079
instance.delete();
20802080
});
2081-
2081+
20822082
test("pass derived object to c++", function() {
20832083
var Implementation = cm.AbstractClass.extend("Implementation", {
20842084
abstractMethod: function() {
@@ -2516,13 +2516,8 @@ module({
25162516
BaseFixture.extend("function names", function() {
25172517
assert.equal('ValHolder', cm.ValHolder.name);
25182518

2519-
if (!cm.getCompilerSetting('DYNAMIC_EXECUTION')) {
2520-
assert.equal('', cm.ValHolder.prototype.setVal.name);
2521-
assert.equal('', cm.ValHolder.makeConst.name);
2522-
} else {
2523-
assert.equal('ValHolder$setVal', cm.ValHolder.prototype.setVal.name);
2524-
assert.equal('ValHolder$makeConst', cm.ValHolder.makeConst.name);
2525-
}
2519+
assert.equal('ValHolder.setVal', cm.ValHolder.prototype.setVal.name);
2520+
assert.equal('ValHolder.makeConst', cm.ValHolder.makeConst.name);
25262521
});
25272522

25282523
BaseFixture.extend("constants", function() {

0 commit comments

Comments
 (0)