[Coco] CC issue
Jeff Teunissen
deek at d2dc.net
Sat Nov 9 02:05:11 EST 2019
Sounds like it's actually two bugs, and both should be fairly simple.
Firstly, preprocessor statements that actually make it to the compiler
need to be considered new statements.
Secondly, the end of a block should complete a statement.
On Fri, Nov 8, 2019 at 12:52 AM Walter Zambotti <zambotti at iinet.net.au> wrote:
>
> I found a small issue in both c.pass1/2 and o c_comp.
>
>
>
> In the following demonstrative code (which is not meant to be logical):
>
>
>
> main()
>
> {
>
> int I;
>
> while(i++) { i--;}
>
> #asm
>
> clra
>
> clrb
>
> #endasm
>
> i = i + 1;
>
> }
>
>
>
> The asm code is incorrectly placed inside the while loop.
>
>
>
> This occurs because the compiler is looking for a semicolon after the loop
> block. Which of course is not required and is tolerated.
>
> However while it is looking for the semicolon if it comes across any
> comments it outputs them immediately doing so before it has
> finalised the output for the loop.
>
>
>
> This issue does effect program execution.
>
>
>
> The easy work around is to place an extraneous semicolon after the loop
> block like so:
>
>
>
> while(i++) { i--;};
>
> or
>
> while(i++) i++;;
>
>
>
> This forces the compiler to place the asm code after the loop as expected.
>
>
>
> This occurs for any statement block that contains exit logic such as:
>
>
>
> While, for, switch
>
>
>
> This also affects C lines added as comments to the assembly. The C comment
> lines appear out of context to their respective asm.
>
>
>
> This last issue does not effect program execution but makes it difficult to
> use the assembly listing to debug your code.
>
>
>
> I have traced through c.comp extensively and the fix would not be easy.
>
>
>
> I did however manage to add a fix to c.prep so that it outputs a semicolon
> before any asm code. This seems to fix the
> issue but would need extensive testing.
>
>
>
> Walter
>
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco
More information about the Coco
mailing list