# HG changeset patch # User unc0rr # Date 1392151815 -14400 # Node ID 4b4a043111f44cab2aafc72ebfc2d7c023d21874 # Parent a9d5098483903305c6963451aa5c73c929f42f89 - pas2c recognizes typecasts in initialization expressions - Forbid incompatible pointer types - Fixes and new functions to fpcrtl diff -r a9d509848390 -r 4b4a043111f4 hedgewars/pas2cRedo.pas --- a/hedgewars/pas2cRedo.pas Tue Feb 11 22:05:03 2014 +0400 +++ b/hedgewars/pas2cRedo.pas Wed Feb 12 00:50:15 2014 +0400 @@ -74,7 +74,7 @@ StrPas, FormatDateTime, copy, delete, str, PosS, trim, LowerCase : function : shortstring; pos : function : integer; StrToInt : function : integer; - SetLength, val, StrDispose, StrCopy : procedure; + SetLength, SetLengthA, val, StrDispose, StrCopy : procedure; _pchar, _pcharA, StrAlloc : function : PChar; pchar2str, astr2str : function : string; pchar2astr, str2astr : function : ansistring; diff -r a9d509848390 -r 4b4a043111f4 hedgewars/pas2cSystem.pas --- a/hedgewars/pas2cSystem.pas Tue Feb 11 22:05:03 2014 +0400 +++ b/hedgewars/pas2cSystem.pas Wed Feb 12 00:50:15 2014 +0400 @@ -40,6 +40,7 @@ char = char; PChar = ^char; PPChar = ^Pchar; + PWideChar = ^WideChar; PByte = ^Byte; PWord = ^Word; diff -r a9d509848390 -r 4b4a043111f4 hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Tue Feb 11 22:05:03 2014 +0400 +++ b/hedgewars/uGearsHandlersMess.pas Wed Feb 12 00:50:15 2014 +0400 @@ -882,7 +882,7 @@ end else allpx:= false end; - p:= @(p^[s^.pitch shr 2]) + p:= PLongWordArray(@(p^[s^.pitch shr 2])) end; // Why is this here. For one thing, there's no test on +1 being safe. diff -r a9d509848390 -r 4b4a043111f4 hedgewars/uLand.pas --- a/hedgewars/uLand.pas Tue Feb 11 22:05:03 2014 +0400 +++ b/hedgewars/uLand.pas Wed Feb 12 00:50:15 2014 +0400 @@ -420,7 +420,7 @@ else LandPixels[y div 2, x div 2]:= p^[x] or AMask; - p:= @(p^[Surface^.pitch div 4]); + p:= PLongwordArray(@(p^[Surface^.pitch div 4])); end; if SDL_MustLock(Surface) then @@ -595,7 +595,7 @@ begin for x:= 0 to Pred(tmpsurf^.w) do SetLand(Land[cpY + y, cpX + x], p^[x]); - p:= @(p^[tmpsurf^.pitch div 4]); + p:= PLongwordArray(@(p^[tmpsurf^.pitch div 4])); end; if SDL_MustLock(tmpsurf) then diff -r a9d509848390 -r 4b4a043111f4 hedgewars/uLandGraphics.pas --- a/hedgewars/uLandGraphics.pas Tue Feb 11 22:05:03 2014 +0400 +++ b/hedgewars/uLandGraphics.pas Wed Feb 12 00:50:15 2014 +0400 @@ -615,7 +615,7 @@ bpp:= Image^.format^.BytesPerPixel; TryDo(bpp = 4, 'It should be 32 bpp sprite', true); // Check that sprite fits free space -p:= @(PByteArray(Image^.pixels)^[ Image^.pitch * row * h + col * w * 4 ]); +p:= PByteArray(@(PByteArray(Image^.pixels)^[ Image^.pitch * row * h + col * w * 4 ])); case bpp of 4: for y:= 0 to Pred(h) do begin @@ -628,7 +628,7 @@ SDL_UnlockSurface(Image); exit; end; - p:= @(p^[Image^.pitch]); + p:= PByteArray(@(p^[Image^.pitch])); end; end; @@ -641,7 +641,7 @@ end; // Checked, now place -p:= @(PByteArray(Image^.pixels)^[ Image^.pitch * row * h + col * w * 4 ]); +p:= PByteArray(@(PByteArray(Image^.pixels)^[ Image^.pitch * row * h + col * w * 4 ])); case bpp of 4: for y:= 0 to Pred(h) do begin @@ -666,7 +666,7 @@ Land[cpY + y, cpX + x]:= lfObject or LandFlags; LandPixels[gY, gX]:= PLongword(@(p^[x * 4]))^ end; - p:= @(p^[Image^.pitch]); + p:= PByteArray(@(p^[Image^.pitch])); end; end; if SDL_MustLock(Image) then diff -r a9d509848390 -r 4b4a043111f4 hedgewars/uLandObjects.pas --- a/hedgewars/uLandObjects.pas Tue Feb 11 22:05:03 2014 +0400 +++ b/hedgewars/uLandObjects.pas Wed Feb 12 00:50:15 2014 +0400 @@ -130,7 +130,7 @@ if (Land[cpY + y, cpX + x] <= lfAllObjMask) and ((p^[x] and AMask) <> 0) then Land[cpY + y, cpX + x]:= lfObject or LandFlags end; - p:= @(p^[Image^.pitch shr 2]) + p:= PLongwordArray(@(p^[Image^.pitch shr 2])) end; if SDL_MustLock(Image) then @@ -170,8 +170,8 @@ if (Land[cpY + y, cpX + x] <= lfAllObjMask) or (Land[cpY + y, cpX + x] and lfObject <> 0) then SetLand(Land[cpY + y, cpX + x], mp^[x]); end; - p:= @(p^[Image^.pitch shr 2]); - mp:= @(mp^[Mask^.pitch shr 2]) + p:= PLongwordArray(@(p^[Image^.pitch shr 2])); + mp:= PLongwordArray(@(mp^[Mask^.pitch shr 2])) end; if SDL_MustLock(Image) then diff -r a9d509848390 -r 4b4a043111f4 hedgewars/uLandPainted.pas --- a/hedgewars/uLandPainted.pas Tue Feb 11 22:05:03 2014 +0400 +++ b/hedgewars/uLandPainted.pas Wed Feb 12 00:50:15 2014 +0400 @@ -33,6 +33,7 @@ X, Y: SmallInt; flags: byte; end; + PPointRec = ^PointRec; type PPointEntry = ^PointEntry; @@ -45,7 +46,7 @@ procedure chDraw(var s: shortstring); var rec: PointRec; - prec: ^PointRec; + prec: PPointRec; pe: PPointEntry; i, l: byte; begin @@ -53,7 +54,7 @@ l:= length(s); while i < l do begin - prec:= @s[i]; + prec:= PPointRec(@s[i]); rec:= prec^; rec.X:= SDLNet_Read16(@rec.X); rec.Y:= SDLNet_Read16(@rec.Y); diff -r a9d509848390 -r 4b4a043111f4 hedgewars/uLandTemplates.pas --- a/hedgewars/uLandTemplates.pas Tue Feb 11 22:05:03 2014 +0400 +++ b/hedgewars/uLandTemplates.pas Wed Feb 12 00:50:15 2014 +0400 @@ -1809,9 +1809,9 @@ //////////////////////////////////////////////////////////////////////// var EdgeTemplates: array[0..45] of TEdgeTemplate = ( - (BasePoints: @Template0Points; + (BasePoints: PPointArray(@Template0Points); BasePointsCount: Succ(High(Template0Points)); - FillPoints: @Template0FPoints; + FillPoints: PPointArray(@Template0FPoints); FillPointsCount: Succ(High(Template0FPoints)); BezierizeCount: 3; RandPassesCount: 8; @@ -1820,9 +1820,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template1Points; + (BasePoints: PPointArray(@Template1Points); BasePointsCount: Succ(High(Template1Points)); - FillPoints: @Template1FPoints; + FillPoints: PPointArray(@Template1FPoints); FillPointsCount: Succ(High(Template1FPoints)); BezierizeCount: 3; RandPassesCount: 7; @@ -1831,9 +1831,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template2Points; + (BasePoints: PPointArray(@Template2Points); BasePointsCount: Succ(High(Template2Points)); - FillPoints: @Template2FPoints; + FillPoints: PPointArray(@Template2FPoints); FillPointsCount: Succ(High(Template2FPoints)); BezierizeCount: 2; RandPassesCount: 6; @@ -1842,9 +1842,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template3Points; + (BasePoints: PPointArray(@Template3Points); BasePointsCount: Succ(High(Template3Points)); - FillPoints: @Template3FPoints; + FillPoints: PPointArray(@Template3FPoints); FillPointsCount: Succ(High(Template3FPoints)); BezierizeCount: 3; RandPassesCount: 4; @@ -1853,9 +1853,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template4Points; + (BasePoints: PPointArray(@Template4Points); BasePointsCount: Succ(High(Template4Points)); - FillPoints: @Template4FPoints; + FillPoints: PPointArray(@Template4FPoints); FillPointsCount: Succ(High(Template4FPoints)); BezierizeCount: 3; RandPassesCount: 4; @@ -1864,9 +1864,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template5Points; + (BasePoints: PPointArray(@Template5Points); BasePointsCount: Succ(High(Template5Points)); - FillPoints: @Template5FPoints; + FillPoints: PPointArray(@Template5FPoints); FillPointsCount: Succ(High(Template5FPoints)); BezierizeCount: 2; RandPassesCount: 8; @@ -1875,9 +1875,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template6Points; + (BasePoints: PPointArray(@Template6Points); BasePointsCount: Succ(High(Template6Points)); - FillPoints: @Template6FPoints; + FillPoints: PPointArray(@Template6FPoints); FillPointsCount: Succ(High(Template6FPoints)); BezierizeCount: 2; RandPassesCount: 5; @@ -1886,9 +1886,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template7Points; + (BasePoints: PPointArray(@Template7Points); BasePointsCount: Succ(High(Template7Points)); - FillPoints: @Template7FPoints; + FillPoints: PPointArray(@Template7FPoints); FillPointsCount: Succ(High(Template7FPoints)); BezierizeCount: 4; RandPassesCount: 4; @@ -1897,9 +1897,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template8Points; + (BasePoints: PPointArray(@Template8Points); BasePointsCount: Succ(High(Template8Points)); - FillPoints: @Template8FPoints; + FillPoints: PPointArray(@Template8FPoints); FillPointsCount: Succ(High(Template8FPoints)); BezierizeCount: 2; RandPassesCount: 7; @@ -1908,9 +1908,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template9Points; + (BasePoints: PPointArray(@Template9Points); BasePointsCount: Succ(High(Template9Points)); - FillPoints: @Template9FPoints; + FillPoints: PPointArray(@Template9FPoints); FillPointsCount: Succ(High(Template9FPoints)); BezierizeCount: 1; RandPassesCount: 5; @@ -1919,9 +1919,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template10Points; + (BasePoints: PPointArray(@Template10Points); BasePointsCount: Succ(High(Template10Points)); - FillPoints: @Template10FPoints; + FillPoints: PPointArray(@Template10FPoints); FillPointsCount: Succ(High(Template10FPoints)); BezierizeCount: 2; RandPassesCount: 6; @@ -1930,9 +1930,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template11Points; + (BasePoints: PPointArray(@Template11Points); BasePointsCount: Succ(High(Template11Points)); - FillPoints: @Template11FPoints; + FillPoints: PPointArray(@Template11FPoints); FillPointsCount: Succ(High(Template11FPoints)); BezierizeCount: 1; RandPassesCount: 8; @@ -1941,9 +1941,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template12Points; + (BasePoints: PPointArray(@Template12Points); BasePointsCount: Succ(High(Template12Points)); - FillPoints: @Template12FPoints; + FillPoints: PPointArray(@Template12FPoints); FillPointsCount: Succ(High(Template12FPoints)); BezierizeCount: 3; RandPassesCount: 8; @@ -1952,9 +1952,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template13Points; + (BasePoints: PPointArray(@Template13Points); BasePointsCount: Succ(High(Template13Points)); - FillPoints: @Template13FPoints; + FillPoints: PPointArray(@Template13FPoints); FillPointsCount: Succ(High(Template13FPoints)); BezierizeCount: 3; RandPassesCount: 5; @@ -1963,9 +1963,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template14Points; + (BasePoints: PPointArray(@Template14Points); BasePointsCount: Succ(High(Template14Points)); - FillPoints: @Template14FPoints; + FillPoints: PPointArray(@Template14FPoints); FillPointsCount: Succ(High(Template14FPoints)); BezierizeCount: 3; RandPassesCount: 7; @@ -1974,9 +1974,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template15Points; + (BasePoints: PPointArray(@Template15Points); BasePointsCount: Succ(High(Template15Points)); - FillPoints: @Template15FPoints; + FillPoints: PPointArray(@Template15FPoints); FillPointsCount: Succ(High(Template15FPoints)); BezierizeCount: 2; RandPassesCount: 6; @@ -1985,9 +1985,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template16Points; + (BasePoints: PPointArray(@Template16Points); BasePointsCount: Succ(High(Template16Points)); - FillPoints: @Template16FPoints; + FillPoints: PPointArray(@Template16FPoints); FillPointsCount: Succ(High(Template16FPoints)); BezierizeCount: 2; RandPassesCount: 6; @@ -1996,9 +1996,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template17Points; + (BasePoints: PPointArray(@Template17Points); BasePointsCount: Succ(High(Template17Points)); - FillPoints: @Template17FPoints; + FillPoints: PPointArray(@Template17FPoints); FillPointsCount: Succ(High(Template17FPoints)); BezierizeCount: 3; RandPassesCount: 7; @@ -2007,9 +2007,9 @@ hasGirders: true; MaxHedgeHogs: 18; ), - (BasePoints: @Template18Points; + (BasePoints: PPointArray(@Template18Points); BasePointsCount: Succ(High(Template18Points)); - FillPoints: @Template18FPoints; + FillPoints: PPointArray(@Template18FPoints); FillPointsCount: Succ(High(Template18FPoints)); BezierizeCount: 3; RandPassesCount: 8; @@ -2018,9 +2018,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template19Points; + (BasePoints: PPointArray(@Template19Points); BasePointsCount: Succ(High(Template19Points)); - FillPoints: @Template19FPoints; + FillPoints: PPointArray(@Template19FPoints); FillPointsCount: Succ(High(Template19FPoints)); BezierizeCount: 3; RandPassesCount: 7; @@ -2029,9 +2029,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template20Points; + (BasePoints: PPointArray(@Template20Points); BasePointsCount: Succ(High(Template20Points)); - FillPoints: @Template20FPoints; + FillPoints: PPointArray(@Template20FPoints); FillPointsCount: Succ(High(Template20FPoints)); BezierizeCount: 2; RandPassesCount: 6; @@ -2040,9 +2040,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template21Points; + (BasePoints: PPointArray(@Template21Points); BasePointsCount: Succ(High(Template21Points)); - FillPoints: @Template21FPoints; + FillPoints: PPointArray(@Template21FPoints); FillPointsCount: Succ(High(Template21FPoints)); BezierizeCount: 3; RandPassesCount: 4; @@ -2051,9 +2051,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template22Points; + (BasePoints: PPointArray(@Template22Points); BasePointsCount: Succ(High(Template22Points)); - FillPoints: @Template22FPoints; + FillPoints: PPointArray(@Template22FPoints); FillPointsCount: Succ(High(Template22FPoints)); BezierizeCount: 3; RandPassesCount: 4; @@ -2062,9 +2062,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template23Points; + (BasePoints: PPointArray(@Template23Points); BasePointsCount: Succ(High(Template23Points)); - FillPoints: @Template23FPoints; + FillPoints: PPointArray(@Template23FPoints); FillPointsCount: Succ(High(Template23FPoints)); BezierizeCount: 2; RandPassesCount: 8; @@ -2073,9 +2073,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template24Points; + (BasePoints: PPointArray(@Template24Points); BasePointsCount: Succ(High(Template24Points)); - FillPoints: @Template24FPoints; + FillPoints: PPointArray(@Template24FPoints); FillPointsCount: Succ(High(Template24FPoints)); BezierizeCount: 2; RandPassesCount: 5; @@ -2084,9 +2084,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template25Points; + (BasePoints: PPointArray(@Template25Points); BasePointsCount: Succ(High(Template25Points)); - FillPoints: @Template25FPoints; + FillPoints: PPointArray(@Template25FPoints); FillPointsCount: Succ(High(Template25FPoints)); BezierizeCount: 4; RandPassesCount: 4; @@ -2095,9 +2095,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template26Points; + (BasePoints: PPointArray(@Template26Points); BasePointsCount: Succ(High(Template26Points)); - FillPoints: @Template26FPoints; + FillPoints: PPointArray(@Template26FPoints); FillPointsCount: Succ(High(Template26FPoints)); BezierizeCount: 2; RandPassesCount: 7; @@ -2106,9 +2106,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template27Points; + (BasePoints: PPointArray(@Template27Points); BasePointsCount: Succ(High(Template27Points)); - FillPoints: @Template27FPoints; + FillPoints: PPointArray(@Template27FPoints); FillPointsCount: Succ(High(Template27FPoints)); BezierizeCount: 1; RandPassesCount: 5; @@ -2117,9 +2117,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template28Points; + (BasePoints: PPointArray(@Template28Points); BasePointsCount: Succ(High(Template28Points)); - FillPoints: @Template28FPoints; + FillPoints: PPointArray(@Template28FPoints); FillPointsCount: Succ(High(Template28FPoints)); BezierizeCount: 2; RandPassesCount: 6; @@ -2128,9 +2128,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template29Points; + (BasePoints: PPointArray(@Template29Points); BasePointsCount: Succ(High(Template29Points)); - FillPoints: @Template29FPoints; + FillPoints: PPointArray(@Template29FPoints); FillPointsCount: Succ(High(Template29FPoints)); BezierizeCount: 1; RandPassesCount: 8; @@ -2139,9 +2139,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template30Points; + (BasePoints: PPointArray(@Template30Points); BasePointsCount: Succ(High(Template30Points)); - FillPoints: @Template30FPoints; + FillPoints: PPointArray(@Template30FPoints); FillPointsCount: Succ(High(Template30FPoints)); BezierizeCount: 3; RandPassesCount: 8; @@ -2150,9 +2150,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template31Points; + (BasePoints: PPointArray(@Template31Points); BasePointsCount: Succ(High(Template31Points)); - FillPoints: @Template31FPoints; + FillPoints: PPointArray(@Template31FPoints); FillPointsCount: Succ(High(Template31FPoints)); BezierizeCount: 3; RandPassesCount: 5; @@ -2161,9 +2161,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template32Points; + (BasePoints: PPointArray(@Template32Points); BasePointsCount: Succ(High(Template32Points)); - FillPoints: @Template32FPoints; + FillPoints: PPointArray(@Template32FPoints); FillPointsCount: Succ(High(Template32FPoints)); BezierizeCount: 3; RandPassesCount: 7; @@ -2172,9 +2172,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template33Points; + (BasePoints: PPointArray(@Template33Points); BasePointsCount: Succ(High(Template33Points)); - FillPoints: @Template33FPoints; + FillPoints: PPointArray(@Template33FPoints); FillPointsCount: Succ(High(Template33FPoints)); BezierizeCount: 2; RandPassesCount: 6; @@ -2183,9 +2183,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template34Points; + (BasePoints: PPointArray(@Template34Points); BasePointsCount: Succ(High(Template34Points)); - FillPoints: @Template34FPoints; + FillPoints: PPointArray(@Template34FPoints); FillPointsCount: Succ(High(Template34FPoints)); BezierizeCount: 2; RandPassesCount: 6; @@ -2194,9 +2194,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template35Points; + (BasePoints: PPointArray(@Template35Points); BasePointsCount: Succ(High(Template35Points)); - FillPoints: @Template35FPoints; + FillPoints: PPointArray(@Template35FPoints); FillPointsCount: Succ(High(Template35FPoints)); BezierizeCount: 3; RandPassesCount: 7; @@ -2205,9 +2205,9 @@ hasGirders: true; MaxHedgeHogs: 36; ), - (BasePoints: @Template36Points; + (BasePoints: PPointArray(@Template36Points); BasePointsCount: Succ(High(Template36Points)); - FillPoints: @Template36FPoints; + FillPoints: PPointArray(@Template36FPoints); FillPointsCount: Succ(High(Template36FPoints)); BezierizeCount: 4; RandPassesCount: 12; @@ -2216,9 +2216,9 @@ hasGirders: false; MaxHedgeHogs: 32; ), - (BasePoints: @Template37Points; + (BasePoints: PPointArray(@Template37Points); BasePointsCount: Succ(High(Template37Points)); - FillPoints: @Template37FPoints; + FillPoints: PPointArray(@Template37FPoints); FillPointsCount: Succ(High(Template37FPoints)); BezierizeCount: 3; RandPassesCount: 3; @@ -2227,9 +2227,9 @@ hasGirders: true; MaxHedgeHogs: 48; ), - (BasePoints: @Template38Points; + (BasePoints: PPointArray(@Template38Points); BasePointsCount: Succ(High(Template38Points)); - FillPoints: @Template38FPoints; + FillPoints: PPointArray(@Template38FPoints); FillPointsCount: Succ(High(Template38FPoints)); BezierizeCount: 4; RandPassesCount: 4; @@ -2238,9 +2238,9 @@ hasGirders: true; MaxHedgeHogs: 48; ), - (BasePoints: @Template39Points; + (BasePoints: PPointArray(@Template39Points); BasePointsCount: Succ(High(Template39Points)); - FillPoints: @Template39FPoints; + FillPoints: PPointArray(@Template39FPoints); FillPointsCount: Succ(High(Template39FPoints)); BezierizeCount: 3; RandPassesCount: 3; @@ -2249,9 +2249,9 @@ hasGirders: false; MaxHedgeHogs: 8; ), - (BasePoints: @Template40Points; + (BasePoints: PPointArray(@Template40Points); BasePointsCount: Succ(High(Template40Points)); - FillPoints: @Template40FPoints; + FillPoints: PPointArray(@Template40FPoints); FillPointsCount: Succ(High(Template40FPoints)); BezierizeCount: 3; RandPassesCount: 3; @@ -2260,9 +2260,9 @@ hasGirders: false; MaxHedgeHogs: 8; ), - (BasePoints: @Template41Points; + (BasePoints: PPointArray(@Template41Points); BasePointsCount: Succ(High(Template41Points)); - FillPoints: @Template41FPoints; + FillPoints: PPointArray(@Template41FPoints); FillPointsCount: Succ(High(Template41FPoints)); BezierizeCount: 2; RandPassesCount: 9; @@ -2271,9 +2271,9 @@ hasGirders: true; MaxHedgeHogs: 48; ), - (BasePoints: @Template42Points; + (BasePoints: PPointArray(@Template42Points); BasePointsCount: Succ(High(Template42Points)); - FillPoints: @Template42FPoints; + FillPoints: PPointArray(@Template42FPoints); FillPointsCount: Succ(High(Template42FPoints)); BezierizeCount: 3; RandPassesCount: 3; @@ -2282,9 +2282,9 @@ hasGirders: false; MaxHedgeHogs: 8; ), - (BasePoints: @Template43Points; + (BasePoints: PPointArray(@Template43Points); BasePointsCount: Succ(High(Template43Points)); - FillPoints: @Template43FPoints; + FillPoints: PPointArray(@Template43FPoints); FillPointsCount: Succ(High(Template43FPoints)); BezierizeCount: 2; RandPassesCount: 9; @@ -2293,9 +2293,9 @@ hasGirders: true; MaxHedgeHogs: 48; ), - (BasePoints: @Template44Points; + (BasePoints: PPointArray(@Template44Points); BasePointsCount: Succ(High(Template44Points)); - FillPoints: @Template44FPoints; + FillPoints: PPointArray(@Template44FPoints); FillPointsCount: Succ(High(Template44FPoints)); BezierizeCount: 5; RandPassesCount: 3; @@ -2304,9 +2304,9 @@ hasGirders: false; MaxHedgeHogs: 48; ), - (BasePoints: @Template45Points; + (BasePoints: PPointArray(@Template45Points); BasePointsCount: Succ(High(Template45Points)); - FillPoints: @Template45FPoints; + FillPoints: PPointArray(@Template45FPoints); FillPointsCount: Succ(High(Template45FPoints)); BezierizeCount: 5; RandPassesCount: 7; diff -r a9d509848390 -r 4b4a043111f4 hedgewars/uScript.pas --- a/hedgewars/uScript.pas Tue Feb 11 22:05:03 2014 +0400 +++ b/hedgewars/uScript.pas Wed Feb 12 00:50:15 2014 +0400 @@ -209,7 +209,7 @@ begin if lua_gettop(L) = 1 then begin - t:= lua_tolstring(L,1,@c); + t:= lua_tolstring(L, 1, Psize_t(@c)); for i:= 1 to c do s[i]:= t[i-1]; s[0]:= char(c); diff -r a9d509848390 -r 4b4a043111f4 hedgewars/uStore.pas --- a/hedgewars/uStore.pas Tue Feb 11 22:05:03 2014 +0400 +++ b/hedgewars/uStore.pas Wed Feb 12 00:50:15 2014 +0400 @@ -1279,7 +1279,7 @@ while length(tmpdesc) > 0 do begin tmpline:= tmpdesc; - SplitByChar(tmpline, tmpdesc, '|'); + SplitByCharA(tmpline, tmpdesc, '|'); if length(tmpline) > 0 then begin TTF_SizeUTF8(Fontz[font].Handle, PChar(tmpline), @i, @j); @@ -1322,7 +1322,7 @@ while length(tmpdesc) > 0 do begin tmpline:= tmpdesc; - SplitByChar(tmpline, tmpdesc, '|'); + SplitByCharA(tmpline, tmpdesc, '|'); r2:= r; if length(tmpline) > 0 then begin @@ -1330,7 +1330,7 @@ // render highlighted caption (if there is a ':') tmpline2:= _S''; - SplitByChar(tmpline, tmpline2, ':'); + SplitByCharA(tmpline, tmpline2, ':'); if length(tmpline2) > 0 then begin tmpline:= tmpline + ':'; diff -r a9d509848390 -r 4b4a043111f4 hedgewars/uTextures.pas --- a/hedgewars/uTextures.pas Tue Feb 11 22:05:03 2014 +0400 +++ b/hedgewars/uTextures.pas Wed Feb 12 00:50:15 2014 +0400 @@ -119,7 +119,7 @@ tw:= (tw and $FF shl RShift) or (tw and $FF shl BShift) or (tw and $FF shl GShift) or (fromP4^[x] and AMask); fromP4^[x]:= tw; end; - fromP4:= @(fromP4^[Surf^.pitch div 4]) + fromP4:= PLongWordArray(@(fromP4^[Surf^.pitch div 4])) end; end; @@ -265,15 +265,15 @@ toP4^[x]:= fromP4^[x]; for x:= Surf^.w to Pred(tw) do toP4^[x]:= 0; - toP4:= @(toP4^[tw]); - fromP4:= @(fromP4^[Surf^.pitch div 4]) + toP4:= PLongWordArray(@(toP4^[tw])); + fromP4:= PLongWordArray(@(fromP4^[Surf^.pitch div 4])) end; for y:= Surf^.h to Pred(th) do begin for x:= 0 to Pred(tw) do toP4^[x]:= 0; - toP4:= @(toP4^[tw]) + toP4:= PLongWordArray(@(toP4^[tw])) end; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tw, th, 0, GL_RGBA, GL_UNSIGNED_BYTE, tmpp); diff -r a9d509848390 -r 4b4a043111f4 hedgewars/uUtils.pas --- a/hedgewars/uUtils.pas Tue Feb 11 22:05:03 2014 +0400 +++ b/hedgewars/uUtils.pas Wed Feb 12 00:50:15 2014 +0400 @@ -25,10 +25,7 @@ procedure SplitBySpace(var a, b: shortstring); procedure SplitByChar(var a, b: shortstring; c: char); - -{$IFNDEF PAS2C} -procedure SplitByChar(var a, b: ansistring; c: char); -{$ENDIF} +procedure SplitByCharA(var a, b: ansistring; c: char); function EnumToStr(const en : TGearType) : shortstring; overload; function EnumToStr(const en : TVisualGearType) : shortstring; overload; @@ -130,17 +127,22 @@ end; {$IFNDEF PAS2C} -procedure SplitByChar(var a, b: ansistring; c: char); +procedure SetLengthA(var s: ansistring; len: Longword); +begin + SetLength(s, len) +end; +{$ENDIF} + +procedure SplitByCharA(var a, b: ansistring; c: char); var i: LongInt; begin i:= Pos(c, a); if i > 0 then begin b:= copy(a, i + 1, Length(a) - i); - setlength(a, Pred(i)); + SetLengthA(a, Pred(i)); end else b:= ''; -end; { SplitByChar } -{$ENDIF} +end; { SplitByCharA } function EnumToStr(const en : TGearType) : shortstring; overload; begin @@ -311,7 +313,7 @@ begin CharArray[i - 1] := s[i]; end; -CharArray[Length(s)]:= #0; + CharArray[Length(s)]:= #0; Str2PChar:= @(CharArray[0]); end; @@ -377,7 +379,7 @@ {$ENDIF} exit; -l:= Utf8ToUnicode(@tmpstr, PChar(s), min(length(tmpstr), length(s)))-1; +l:= Utf8ToUnicode(PWideChar(@tmpstr), PChar(s), min(length(tmpstr), length(s)))-1; i:= 0; while i < l do diff -r a9d509848390 -r 4b4a043111f4 project_files/hwc/CMakeLists.txt --- a/project_files/hwc/CMakeLists.txt Tue Feb 11 22:05:03 2014 +0400 +++ b/project_files/hwc/CMakeLists.txt Wed Feb 12 00:50:15 2014 +0400 @@ -63,6 +63,7 @@ #compile the c files add_definitions(-DPAS2C) +add_definitions(-Werror=incompatible-pointer-types) add_executable(hwengine WIN32 ${engine_sources}) diff -r a9d509848390 -r 4b4a043111f4 project_files/hwc/rtl/misc.c --- a/project_files/hwc/rtl/misc.c Tue Feb 11 22:05:03 2014 +0400 +++ b/project_files/hwc/rtl/misc.c Wed Feb 12 00:50:15 2014 +0400 @@ -171,7 +171,7 @@ return result; } -astring fpcrtl_str2astr(string255 s) +astring fpcrtl_str2astr(const string255 s) { astring result; @@ -181,7 +181,7 @@ return result; } -string255 fpcrtl_astr2str(astring s) +string255 fpcrtl_astr2str(const astring s) { string255 result; @@ -193,7 +193,7 @@ char __pcharBuf[256]; -char* fpcrtl__pchar__vars(string255 * s) +char* fpcrtl__pchar__vars(const string255 * s) { memcpy(__pcharBuf, &s->s[1], s->len); __pcharBuf[s->len] = 0; diff -r a9d509848390 -r 4b4a043111f4 project_files/hwc/rtl/misc.h --- a/project_files/hwc/rtl/misc.h Tue Feb 11 22:05:03 2014 +0400 +++ b/project_files/hwc/rtl/misc.h Wed Feb 12 00:50:15 2014 +0400 @@ -50,12 +50,12 @@ #define fpcrtl__pchar(s) fpcrtl__pchar__vars(&(s)) #define fpcrtl__pcharA(s) fpcrtl__pcharA__vars(&(s)) -char* fpcrtl__pchar__vars(string255 * s); +char* fpcrtl__pchar__vars(const string255 * s); char* fpcrtl__pcharA__vars(astring * s); string255 fpcrtl_pchar2str(const char *s); astring fpcrtl_pchar2astr(const char *s); -astring fpcrtl_str2astr(string255 s); -string255 fpcrtl_astr2str(astring s); +astring fpcrtl_str2astr(const string255 s); +string255 fpcrtl_astr2str(const astring s); #define fpcrtl_TypeInfo sizeof // dummy #ifdef EMSCRIPTEN diff -r a9d509848390 -r 4b4a043111f4 project_files/hwc/rtl/pas2c.h --- a/project_files/hwc/rtl/pas2c.h Tue Feb 11 22:05:03 2014 +0400 +++ b/project_files/hwc/rtl/pas2c.h Wed Feb 12 00:50:15 2014 +0400 @@ -23,15 +23,15 @@ typedef union astring_ { struct { - unsigned char _dummy1; - string255 str255; + uint16_t len; }; struct { unsigned char _dummy2; unsigned char s[MAX_ANSISTRING_LENGTH + 1]; }; struct { - uint16_t len; + unsigned char _dummy1; + string255 str255; }; } astring; diff -r a9d509848390 -r 4b4a043111f4 project_files/hwc/rtl/system.c --- a/project_files/hwc/rtl/system.c Tue Feb 11 22:05:03 2014 +0400 +++ b/project_files/hwc/rtl/system.c Wed Feb 12 00:50:15 2014 +0400 @@ -66,20 +66,18 @@ count = s.len + 1 - index; } - memcpy(result.s + 1, s.s + index - 1, count); + memcpy(result.s + 1, s.s + index, count); result.len = count; return result; } -void fpcrtl_delete__vars(string255 *s, SizeInt index, SizeInt count) { +void __attribute__((overloadable)) fpcrtl_delete__vars(string255 *s, SizeInt index, SizeInt count) { // number of chars to be move int num_move; int new_length; - string255 temp = *s; - if (index < 1) { // in fpc, if index < 1, the string won't be modified return; @@ -90,7 +88,6 @@ } if (count > s->len - index + 1) { - s->str[index - 1] = 0; s->len = index - 1; return; } @@ -98,13 +95,41 @@ num_move = s->len - index + 1 - count; new_length = s->len - count; - memmove(s->str + index - 1, temp.str + index - 1 + count, num_move); + memmove(s->str + index - 1, s->str + index - 1 + count, num_move); s->str[new_length] = 0; s->len = new_length; } +void __attribute__((overloadable)) fpcrtl_delete__vars(astring *s, SizeInt index, SizeInt count) { + // number of chars to be move + int num_move; + int new_length; + + if (index < 1) { + // in fpc, if index < 1, the string won't be modified + return; + } + + if(index > s->len){ + return; + } + + if (count > s->len - index + 1) { + s->len = index - 1; + return; + } + + num_move = s->len - index + 1 - count; + new_length = s->len - count; + + memmove(s->s + index, s->s + index + count, num_move); + + s->len = new_length; + +} + string255 fpcrtl_floatToStr(double n) { string255 t; sprintf(t.str, "%f", n); @@ -127,7 +152,7 @@ Integer __attribute__((overloadable)) fpcrtl_pos(string255 substr, string255 str) { - char* p; + unsigned char* p; if (str.len == 0) { return 0; @@ -146,12 +171,20 @@ return 0; } - return strlen(str.str) - strlen(p) + 1; + return p - (unsigned char*)&str.s; +} + +Integer __attribute__((overloadable)) fpcrtl_pos(Char c, astring str) { + string255 t; + t.len = 1; + t.str[0] = c; + t.str[1] = 0; + return fpcrtl_pos(t, str); } Integer __attribute__((overloadable)) fpcrtl_pos(string255 substr, astring str) { - char* p; + unsigned char* p; if (str.len == 0) { return 0; @@ -170,7 +203,7 @@ return 0; } - return str.len - strlen(p) + 1; + return p - (unsigned char *)&str.s; } Integer fpcrtl_length(string255 s) { diff -r a9d509848390 -r 4b4a043111f4 project_files/hwc/rtl/system.h --- a/project_files/hwc/rtl/system.h Tue Feb 11 22:05:03 2014 +0400 +++ b/project_files/hwc/rtl/system.h Wed Feb 12 00:50:15 2014 +0400 @@ -30,7 +30,8 @@ * and the length of the string is adjusted. */ #define fpcrtl_delete(s, index, count) fpcrtl_delete__vars(&(s), index, count) -void fpcrtl_delete__vars(string255 *s, SizeInt index, SizeInt count); +void __attribute__((overloadable)) fpcrtl_delete__vars(string255 *s, SizeInt index, SizeInt count); +void __attribute__((overloadable)) fpcrtl_delete__vars(astring *s, SizeInt index, SizeInt count); string255 fpcrtl_floatToStr(double n); @@ -44,12 +45,15 @@ Integer __attribute__((overloadable)) fpcrtl_pos(Char c, string255 str); Integer __attribute__((overloadable)) fpcrtl_pos(string255 substr, string255 str); Integer __attribute__((overloadable)) fpcrtl_pos(string255 substr, astring str); +Integer __attribute__((overloadable)) fpcrtl_pos(Char c, astring str); Integer fpcrtl_length(string255 s); #define fpcrtl_Length fpcrtl_length Integer fpcrtl_lengthA(astring s); #define fpcrtl_LengthA fpcrtl_lengthA +#define fpcrtl_SetLengthA(s, l) do{(s).len = (l);}while(0) + #define fpcrtl_sqr(x) ((x) * (x)) #define fpcrtl_odd(x) ((x) % 2 != 0 ? true : false) diff -r a9d509848390 -r 4b4a043111f4 tools/pas2c/Pas2C.hs --- a/tools/pas2c/Pas2C.hs Tue Feb 11 22:05:03 2014 +0400 +++ b/tools/pas2c/Pas2C.hs Wed Feb 12 00:50:15 2014 +0400 @@ -699,6 +699,10 @@ initExpr2C' (BuiltInFunction "succ" [e]) = liftM (<> text " + 1") $ initExpr2C' e initExpr2C' (BuiltInFunction "pred" [e]) = liftM (<> text " - 1") $ initExpr2C' e initExpr2C' b@(BuiltInFunction _ _) = error $ show b +initExpr2C' (InitTypeCast t' i) = do + e <- initExpr2C i + t <- id2C IOLookup t' + return . parens $ parens t <> e initExpr2C' a = error $ "initExpr2C: don't know how to render " ++ show a diff -r a9d509848390 -r 4b4a043111f4 tools/pas2c/PascalParser.hs --- a/tools/pas2c/PascalParser.hs Tue Feb 11 22:05:03 2014 +0400 +++ b/tools/pas2c/PascalParser.hs Wed Feb 12 00:50:15 2014 +0400 @@ -629,7 +629,7 @@ , char' '$' >> many hexDigit >>= \h -> comments >> return (InitHexNumber h) , char' '@' >> initExpression >>= \c -> comments >> return (InitAddress c) , try $ string' "nil" >> return InitNull - , itypeCast + , try itypeCast , iD >>= return . InitReference ] @@ -681,10 +681,11 @@ ] itypeCast = do - t <- choice $ map (\s -> try $ caseInsensitiveString s >>= \i -> notFollowedBy alphaNum >> return i) knownTypes + --t <- choice $ map (\s -> try $ caseInsensitiveString s >>= \i -> notFollowedBy alphaNum >> return i) knownTypes + t <- iD i <- parens pas initExpression comments - return $ InitTypeCast (Identifier t BTUnknown) i + return $ InitTypeCast t i builtInFunction :: Parsec String u a -> Parsec String u (String, [a]) builtInFunction e = do