Skip to content

Commit eb961b9

Browse files
committed
Remove empty record types
SDL's API contains a lot of opaque data types, where the user is given a pointer and is expected to never dereference it. Until now, we used empty records to denote such types, and then defined pointer types to said empty records. This commit removes all(*) the opaque types and instead declares pointer types using the "type Pointer" notation. This makes it clear that the user is expected not to use the "raw" types, only pointer types, while maintaining type safety. Check the discussion in the link below for more details about the rationale behind this change. #63 (*) units/sdl2_net.pas still contains some empty records. However, that file is very messy right now and needs a proper rewrite.
1 parent ce2065a commit eb961b9

13 files changed

+17
-35
lines changed

units/sdl2_mixer.pas

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,7 @@ TMix_Chunk = record
166166

167167
{* The internal format for a music chunk interpreted via mikmod *}
168168
PPMix_Music = ^PMix_Music;
169-
PMix_Music = ^TMix_Music;
170-
TMix_Music = record end;
169+
PMix_Music = type Pointer;
171170

172171
{* Open the mixer with a certain audio format *}
173172
function Mix_OpenAudio(frequency: cint; format: cuint16; channels: cint; chunksize: cint): cint cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_OpenAudio' {$ENDIF} {$ENDIF};
@@ -241,7 +240,7 @@ function Mix_HasMusicDecoder(const name: PAnsiChar): TSDL_Bool cdecl;
241240
{* Find out the music format of a mixer music, or the currently playing
242241
music, if 'music' is NULL.
243242
*}
244-
function Mix_GetMusicType(music: TMix_Music): TMix_MusicType cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GetMusicType' {$ENDIF} {$ENDIF};
243+
function Mix_GetMusicType(music: PMix_Music): TMix_MusicType cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GetMusicType' {$ENDIF} {$ENDIF};
245244

246245
{* Set a function that is called after all mixing is performed.
247246
This can be used to provide real-time visual display of the audio stream

units/sdl2_ttf.pas

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,7 @@ procedure TTF_ByteSwappedUNICODE(swapped: TSDL_bool); cdecl;
175175
{* The internal structure containing font information *}
176176
type
177177
PPTTF_Font = ^PTTF_Font;
178-
PTTF_Font = ^TTTF_Font;
179-
TTTF_Font = record end; //todo?
178+
PTTF_Font = type Pointer;
180179

181180
{*
182181
* Initialize SDL_ttf.

units/sdlaudio.inc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -942,8 +942,7 @@ function SDL_ConvertAudio(cvt: PSDL_AudioCVT): cint; cdecl;
942942
}
943943
{ this is opaque to the outside world. }
944944
type
945-
PSDL_AudioStream = ^TSDL_AudioStream;
946-
TSDL_AudioStream = record end;
945+
PSDL_AudioStream = type Pointer;
947946

948947
{*
949948
* Create a new audio stream.

units/sdlgamecontroller.inc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515
{* The gamecontroller structure used to identify an SDL game controller *}
1616
type
1717
PPSDL_GameController = ^PSDL_GameController;
18-
PSDL_GameController = ^TSDL_GameController;
19-
TSDL_GameController = record end;
18+
PSDL_GameController = type Pointer;
2019

2120
PPSDL_GameControllerType = ^PSDL_GameControllerType;
2221
PSDL_GameControllerType = ^TSDL_GameControllerType;

units/sdlhaptic.inc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,7 @@
9393
*}
9494
type
9595
PPSDL_Haptic = ^PSDL_Haptic;
96-
PSDL_Haptic = ^TSDL_Haptic;
97-
TSDL_Haptic = record end;
96+
PSDL_Haptic = type Pointer;
9897

9998
{**
10099
* Haptic features

units/sdlhidapi.inc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ type
4242
(**
4343
* \brief A handle representing an open HID device.
4444
*)
45-
PSDL_hid_device = ^TSDL_hid_device;
46-
TSDL_hid_device = record end; // opaque struct
45+
PSDL_hid_device = type Pointer;
4746

4847
PSDL_hid_device_info = ^TSDL_hid_device_info;
4948

units/sdljoystick.inc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@
3030
type
3131
{* The joystick structure used to identify an SDL joystick *}
3232
PPSDL_Joystick = ^PSDL_Joystick;
33-
PSDL_Joystick = ^TSDL_Joystick;
34-
TSDL_Joystick = record end;
33+
PSDL_Joystick = type Pointer;
3534

3635
{* A structure that encodes the stable unique id for a joystick device *}
3736
PPSDL_JoystickGUID = ^PSDL_JoystickGUID;

units/sdlrenderer.inc

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,17 +91,13 @@ type
9191
*}
9292

9393
PPSDL_Renderer = ^PSDL_Renderer;
94-
PSDL_Renderer = ^TSDL_Renderer;
95-
TSDL_Renderer = record
96-
end;
94+
PSDL_Renderer = type Pointer;
9795

9896
{**
9997
* An efficient driver-specific representation of pixel data
10098
*}
10199
PPSDL_Texture = ^PSDL_Texture;
102-
PSDL_Texture = ^TSDL_Texture;
103-
TSDL_Texture = record
104-
end;
100+
PSDL_Texture = type Pointer;
105101

106102
{* Function prototypes *}
107103

units/sdlsensor.inc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
*}
1111
type
1212
PPSDL_Sensor = ^PSDL_Sensor;
13-
PSDL_Sensor = ^TSDL_Sensor;
14-
TSDL_Sensor = record end;
13+
PSDL_Sensor = type Pointer;
1514

1615
{**
1716
* This is a unique ID for a sensor for the time it is connected to the system,

units/sdlstdinc.inc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -685,8 +685,7 @@ const
685685
SDL_ICONV_EINVAL = csize_t(-4);
686686

687687
type
688-
TSDL_iconv = record end;
689-
PSDL_iconv = ^TSDL_iconv;
688+
PSDL_iconv = type Pointer;
690689

691690
function SDL_iconv_open(Const tocode, fromcode: PAnsiChar): PSDL_iconv; cdecl;
692691
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_iconv_open' {$ENDIF} {$ENDIF};

0 commit comments

Comments
 (0)