On 09/05/2010 09:56 AM, Gabriel Dos Reis wrote:
>
> The errors are caused by mixing Lisp variables/instructions with Spad
> variables/instructions in way that the Spad compiler does not
> understand. This is a problem common to all AXIOM compilers; older
> versions may let it pass by, but only to lead to random `memory may be
> damaged' errors.
>
> For example, in sendCommand(), we have
>
> SETQ(tmpmathml$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp
> SETQ(tmpalgebra$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp
> SETQ(savemathml$Lisp, _$texOutputStream$Lisp)$Lisp
> SETQ(savealgebra$Lisp, _$algebraOutputStream$Lisp)$Lisp
>
>
> As currently written, the variables `tmpmathml', `tmpalgebra', etc.,
> appear to be intended to Lisp-level special variables, not Spad
> variables. However the Spad compiler does not know that. So it
> generates code that does not tell the Lisp compiler that they are
> special variables. The way we tell the Spad compiler that a Lisp
> variable is special, is that its name starts with a dollar --
> e.g. _$algebraOutputStream.
>
> On the other hand, I am not too sure you wanted `tmpmathml' or `tmpalgebra'
> to be Lisp-level special variables. So, my question is: are they
> reasons why you don't say
>
> tmpmathml := MAKE_-STRING_-OUTPUT_-STREAM()$Lisp
> tmpalgebra := MAKE_-STRING_-OUTPUT_-STREAM()$Lisp
> savemathml := _$texOutputStream$Lisp
> savealgebra := _$algebraOutputStream$Lisp
>
> -- Gaby
>
Hi Gaby,
I tried out your suggestions both ways, with Lisp variables and with
Spad variables, but still didn't get it to compile properly.
I have no idea what the problem is so I started stripping things out to
try and isolate the problem. I discovered that the first version below
compiles but the second doesn't:
)abbrev package SOCKLIB SockLib
SockLib(): Public == Private where
Public == Type with
handleInsert: () -> Integer
sendInsertFile: () -> String
Private == add
handleInsert() ==
retval:Integer := 0
SETQ(_$FILEINSERT,"test")
retval
sendInsertFile() ==
retval:String := "test"
fileInsert:String := _$FILEINSERT$Lisp
)abbrev package SOCKLIB SockLib
SockLib(): Public == Private where
Public == Type with
handleInsert: () -> Integer
sendInsertFile: () -> String
Private == add
handleInsert() ==
retval:Integer := 0
SETQ(_$FILEINSERT,"test")
retval
sendInsertFile() ==
retval:String := "test"
fileInsert:String := _$FILEINSERT$Lisp
retval
However if I replace 'sendInsertFile' with
sendInsertFile() ==
retval:String := "test"
fileInsert:String := _$FILEINSERT$Lisp
retval
then it does compile.
Arthur
------------------------------------------------------------------------------
This SF.net Dev2Dev email is sponsored by:
Show off your parallel programming skills.
Enter the Intel(R) Threading Challenge 2010.
http://p.sf.net/sfu/intel-thread-sfd
_______________________________________________
open-axiom-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/open-axiom-devel