Skip to content

Commit dd7125d

Browse files
authored
[ffigen] Fix a naming conflict in function internal variables (#2787)
1 parent d2504b3 commit dd7125d

File tree

8 files changed

+25
-4
lines changed

8 files changed

+25
-4
lines changed

pkgs/ffigen/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
`Declarations.includeMemberSet`, `Declarations.useOriginalName`,
1010
`Declarations.renameWithMap`, `Declarations.useMemberOriginalName`, and
1111
`Declarations.renameMemberWithMap`.
12+
- Fix [a bug](https://github.com/dart-lang/native/issues/2760) in the internal
13+
variables generated by function bindings.
1214

1315
## 20.0.0
1416

pkgs/ffigen/lib/src/code_generator/func.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ class Func extends LookUpBinding with HasLocalScope {
110110
functionType.getFfiDartType(context, writeArgumentNames: false);
111111
final needsWrapper = !functionType.sameDartAndFfiDartType && !isInternal;
112112

113-
final funcVarName = localScope.addPrivate('_$name');
113+
final funcVarName = context.rootScope.addPrivate('_$name');
114114
final ffiReturnType = functionType.returnType.getFfiDartType(context);
115115
final ffiArgDeclString = functionType.dartTypeParameters
116116
.map((p) => '${p.type.getFfiDartType(context)} ${p.name},\n')
@@ -182,7 +182,7 @@ $dartReturnType $enclosingFuncName($dartArgDeclString) => $funcImplCall;
182182
);
183183
}
184184
} else {
185-
final funcPointerName = localScope.addPrivate('_${name}Ptr');
185+
final funcPointerName = context.rootScope.addPrivate('_${name}Ptr');
186186
final isLeafString = isLeaf ? 'isLeaf:true' : '';
187187

188188
// Write enclosing function.

pkgs/ffigen/test/native_objc_test/method_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ void main() {
3737
'objc_test.dylib',
3838
),
3939
);
40-
// verifySetupFile(dylib);
40+
verifySetupFile(dylib);
4141
DynamicLibrary.open(dylib.absolute.path);
4242
testInstance = MethodInterface();
43-
// generateBindingsForCoverage('method');
43+
generateBindingsForCoverage('method');
4444
});
4545

4646
group('Instance methods', () {

pkgs/ffigen/test/native_objc_test/static_func_config.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ output: 'static_func_bindings.dart'
55
exclude-all-by-default: true
66
functions:
77
include:
8+
- foo
9+
- fooPtr
810
- staticFuncOfObject
911
- staticFuncOfNullableObject
1012
- staticFuncOfBlock

pkgs/ffigen/test/native_objc_test/static_func_native_config.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ exclude-all-by-default: true
66
ffi-native:
77
functions:
88
include:
9+
- foo
10+
- fooPtr
911
- staticFuncOfObject
1012
- staticFuncOfNullableObject
1113
- staticFuncOfBlock

pkgs/ffigen/test/native_objc_test/static_func_native_test.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,5 +192,11 @@ void main() {
192192
expect(counter.value, 0);
193193
calloc.free(counter);
194194
}, skip: !canDoGC);
195+
196+
test('Internal variable conflict resolution', () {
197+
// Regression test for https://github.com/dart-lang/native/issues/2760
198+
expect(foo(123), 1230);
199+
expect(fooPtr(123), 12300);
200+
});
195201
});
196202
}

pkgs/ffigen/test/native_objc_test/static_func_test.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,5 +194,11 @@ void main() {
194194
expect(counter.value, 0);
195195
calloc.free(counter);
196196
}, skip: !canDoGC);
197+
198+
test('Internal variable conflict resolution', () {
199+
// Regression test for https://github.com/dart-lang/native/issues/2760
200+
expect(lib.foo(123), 1230);
201+
expect(lib.fooPtr(123), 12300);
202+
});
197203
});
198204
}

pkgs/ffigen/test/native_objc_test/static_func_test.m

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,6 @@ - (void)dealloc {
5858
if (counter != nil) --*counter;
5959
}
6060
@end
61+
62+
int foo(int x) { return 10 * x; }
63+
int fooPtr(int x) { return 100 * x; }

0 commit comments

Comments
 (0)