[fpc-devel] googleapiconv issues

Michael Van Canneyt michael at freepascal.org
Fri Jan 6 08:13:27 CET 2023



On Thu, 5 Jan 2023, Wayne Sherman via fpc-devel wrote:

> The google api binding generator "googleapiconv" is generating empty
> files for the api pascal bindings and it also causes access violations
> randomly.  I have not found the issue with AVs yet, but I found out
> why it is creating empty source code files.
>
> restcodegen.pp TRestCodeGenerator was refactored in 2018 to use pascodegen:
>    - TRestCodeGenerator = Class(TComponent)
>    + TRestCodeGenerator = Class(TPascalCodeGenerator)
>
> ref:  https://gitlab.com/freepascal.org/fpc/source/-/commit/d7fa0b19988f753873f498b9424dcf82ba1b271e#b4a1b63d04b721fa6db35bc226d44a63a21fda40
>
> Before the refactoring, TRestCodeGenerator.SaveToStream used to call
> "Execute;" if the source code string list was empty:
>    procedure TRestCodeGenerator.SaveToStream(const AStream : TStream);
>    begin
>      if (FSource.Count=0) then
>        Execute;
>      FSource.SaveToStream(AStream)
>    end;
>
> ref:  https://gitlab.com/freepascal.org/fpc/source/-/blob/0eddef3d093c53fca0526b7bc558ffeef42a79df/packages/fcl-web/src/base/restcodegen.pp#L186
>
> Now "Execute;" is not being called and no code is generated because
> pascodegen.pp "TPascalCodeGenerator.SaveToStream" looks like this:
>    procedure TPascalCodeGenerator.SaveToStream(const AStream : TStream);
>    begin
>      FSource.SaveToStream(AStream)
>    end;
>
> ref:  https://gitlab.com/freepascal.org/fpc/source/-/blob/main/packages/fcl-base/src/pascodegen.pp#L255
>
> Two options to fix this are:
> 1)  Add the "FSource" check and "Execute;" statements to
> TPascalCodeGenerator.SaveToStream
>  or
> 2) Add "Execute;" to TGoogleAPIConverter.DoConversion
> (googleapiconv.pp) before it calls "SaveToStream" here:
> https://gitlab.com/freepascal.org/fpc/source/-/blob/main/packages/googleapi/generator/googleapiconv.pp#L575

The latter. I must have missed the above when refactoring :/

>
> Question:  Do you prefer I discuss issues like this here on the
> mailing list or instead open a bug report and discuss in the bug
> report?

Both are fine for me.

But maybe it makes more sense to use a bugreport, 
since that's where eventually a patch/merge request will have to end up ?

Michael.


More information about the fpc-devel mailing list