Skip to content

Sanitize function argument names #512

@jpnurmi

Description

@jpnurmi

Function names are sanitized to avoid conflicts with reserved Dart keywords, but function argument names are not. For example:

// test.h
void var(void *in);

While the function is renamed to var_1, the conflicting in argument name is kept as is, which results to a parsing error:

$ dart pub run ffigen
Running in Directory: '/home/jpnurmi/Temp/test_ffigen'
  WARNING : Prefer adding Key 'name' to your config.
  WARNING : Prefer adding Key 'description' to your config.
Input Headers: [test.h]
  WARNING : Resolved name conflict: Declaration 'var' and has been renamed to 'var_1'.
  SEVERE  : Could not format because the source could not be parsed:

line 14, column 25 of test.dart: Expected an identifier.
   ╷
14 │   ffi.Pointer<ffi.Void> in,
   │                         ^^
   ╵
line 30, column 25 of test.dart: Expected an identifier.
   ╷
30 │   ffi.Pointer<ffi.Void> in,
   │                         ^^
   ╵
line 26, column 25 of test.dart: Expected an identifier.
   ╷
26 │   ffi.Pointer<ffi.Void> in,
   │                         ^^
   ╵
line 18, column 5 of test.dart: Expected an identifier.
   ╷
18 │     in,
   │     ^^
   ╵

Finished, Bindings generated in /home/jpnurmi/Temp/test_ffigen/test.dart

test.dart:

/// AUTO GENERATED FILE, DO NOT EDIT.
/// 
/// Generated by `package:ffigen`.
import 'dart:ffi' as ffi;

class NativeLibrary{
/// Holds the Dynamic library.
final ffi.DynamicLibrary _dylib;

/// The symbols are looked up in [dynamicLibrary].
NativeLibrary(ffi.DynamicLibrary dynamicLibrary): _dylib = dynamicLibrary;

void var_1(
  ffi.Pointer<ffi.Void> in,
) {
_var_1 ??= _dylib.lookupFunction<_c_var_1,_dart_var_1>('var');
  return _var_1(
    in,
  );
}
_dart_var_1 _var_1;

}

typedef _c_var_1 = ffi.Void Function(
  ffi.Pointer<ffi.Void> in,
);

typedef _dart_var_1 = void Function(
  ffi.Pointer<ffi.Void> in,
);

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions