[Coco] CC issue

Robert Gault robert.gault at att.net
Mon Nov 11 08:00:03 EST 2019


Walter,

I've been trying to make sense of your problem even thought it "is not meant to be logical". :)
Seems to me that your problem is not an issue with the C command modules but your syntax.

Try the following variations on what you posted.

main()
{
   int I;
   while(i++)
     i--;
  #asm
    clra
    clrb
  #endasm
  i=i + 1;
}

main()
{
int I;
while(i++)
  {i--;}
#asm
clra
clrb
#endasm
i=i + 1;
}

main()
{
int I;
while(i++)
  {
   i--;
  }
#asm
clra
clrb
#endasm
i=i + 1;
}

Do any of the above fail by including the #asm within the while loop?

Robert

Walter Zambotti 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
>
>


More information about the Coco mailing list