-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
mad pascal optimizes indexing wrong #128
Comments
in the latest version of MP, there is an error message when trying to use the modifier ABSOLUTE for a string array
compiler has no way of instantiating such an array with valid pointers to strings |
ok, but how to do it else? what i want would be at $e482 a space of 15 chars (+1 for the string length) that the user can fill (gang name is typed in at start of the game). |
{$define basicoff}
{$define romoff}
type TGang = record
name: string[15];
logo: string[15];
end;
var
fp_Gang: array[0..2] of ^TGang absolute $e482;
gang0, gang1, gang2 : TGang;
begin
gang0.name := 'string1';
gang1.name := 'string1';
gang2.name := 'string2';
gang0.logo := 'red';
gang1.logo := 'white';
gang2.logo := 'black';
fp_Gang[2] := @gang2;
fp_Gang[1] := @gang1;
fp_Gang[0] := @gang0;
writeln(Pstring(fp_Gang[2].name));
writeln(Pstring(fp_Gang[1]));
writeln(Pstring(fp_Gang[2].logo));
writeln(Pstring(fp_Gang[1].logo));
repeat until false;
end. |
thanks to both of you! |
|
but that was not the initial problem. in the code above weaponnames are a usual array of strings, not fixed to an absolute address. the fp_weapon was absolute, but its an array of byte. yet, it seemed to me that mad pascal confused the indexing. as said i will check this later and reopen if need be. |
I'll check it I remember that I had a similar problem in previous versions (2-3 years ago) and I wrote a workaround then. I also had a problem when I was trying to calculate an index inside array brackets (the problematic array was nested within another array), and the solution was to make this calculation one step earlier |
@aydindemircioglu I wrote some simple examples considering your case and got the correct result, please provide full example of your code. |
thanks, as said, might be due to my older version. the code is embedded in a long procedure, i have to take my time to get a minimal example. for now i will then close this issue, and will reopen it if i am able to reproduce with the minimal example. |
i think mad pascal again over-optimizes incorrectly, i do not have a minimal example at hand,
but my code is like this:
this results that the weapon names from player from gang 1 (=0,1,2,3) are OK, but weapon names from players from the other side (with index 16, 17, 18) show the wrong string, possibly because mad-pascal tries to optimize something incorrectly?
this is resolved by just introducing a new byte z like this.
(i know introducing this byte z is better than writing s SHL 4 + i all the times, but this is debug stadium, optimization will be done later).
am using mad pascal 1.7.0 still, not sure if this was fixed already.
The text was updated successfully, but these errors were encountered: