[Ecls-list] Problem with the compiler

Juan Jose Garcia Ripoll jlr at mpq.mpg.de
Thu Apr 28 07:59:48 UTC 2005

Goffioul Michael wrote:

>I was trying to compile Maxima under ECL and got stuck when compiling one of the
>file (commac.lisp). My compiler (MSVC) refuses to compile the generated code for
>that file. For example, this generated piece of code does not compile:
>/*      closure CLOSURE                                               */
>static cl_object LC1(cl_narg narg, cl_object env0, ...)
>        cl_object value0;
>        {cl_object scan=env0; 
>        CLV1= &CAR(scan);                         /*  TAGBODY                                      */ scan=CDR(scan);
>        CLV0= &CAR(scan);}int i=0;
>        cl_object V1;
>        cl_va_list args; cl_va_start(args,env0,narg,0);
>        V1=cl_grab_rest_args(args);
>        *CLV0= V1;
>        cl_go(*CLV1,MAKE_FIXNUM(0));
>It complains when finding the expression "int i=0". Here, there might be 3 issues:
>- There probably should be a new-line and/or ';' after the closing brace (at least under
>  MSVC).
Not really.

>- Is it C-compliant to declare variables after a {}-block?
This is the real problem. The code that you show contains two separable 
- The first block is reponsible for scanning the closure data and 
storing it in local variables for later use.
- The second block grabs the &rest arguments forming a list, which is 
used later on.
- The variable "i" is a counter which is used when parsing &optional 
It seems that, instead of being in a block itself, the closure scanning 
phase should surround with braces all code that comes afterwards.
I'll look into that.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: jlr.vcf
Type: text/x-vcard
Size: 361 bytes
Desc: not available
URL: <https://mailman.common-lisp.net/pipermail/ecl-devel/attachments/20050428/245bf7f8/attachment.vcf>

More information about the ecl-devel mailing list