Newbie questions about Pliant

Newbie questions about Pliant

pliant internal bug? can't declare function result as arg_w

I'm a newbie. I ran pliant on a simple test and got this:

pliant internal bug: unsatisfied assertion
assertion is e->result==null || (e->access&(Access_read|Access_write))!=0
in file /pliant/pliant/install/../language/compiler/expression/expression.c at line 289
Message posted by maybe Micky on 2001/10/03 11:03:56
This code produces the assertion:

-------- start of test code -->

function func -> v
  arg_w Int v
  v := 1

gvar Int e
e := func
console e

<-- end of test code ---------

In the process of isolating the problem, I've found the obvious bypass to 
this problem (define v as arg, rather than arg_w). 
Still, the error message seems to indicate a pliant bug. Is this the case?

I ran this under Win98, pliant R64.

I've tried pasting the full compiler output, but when I did, "Preview the new debate" stopped working...
Message posted by maybe Hubert Tonneau on 2001/10/03 11:25:09
'arg_w' has no meaning for a result.
A result can be 'arg' 'arg_R' 'arg_RW' or 'arg_C'. Nothing else.
Also I agree that Pliant should provide a better error message.

> I've tried pasting the full compiler output, but when I did, "Preview the new debate" stopped working...

Can also be a brower related problem (some cannot handle very long URLs).
Message posted by maybe Micky on 2001/10/03 13:25:00
First, thanks for the quick reply.

A few more questions, though:

1. You say that arg_w is "meaningless" when it comes to function result values. 
Is that because there is no input value for the optimizer to disregard?
If this is the reason, then wouldn't it be preferable for the compiler to 
convert the definition to arg_RW?

2. I ran this line in the win89 command prompt:
pliant 'precompile test.dump' test.pli

with test.pli being the program from the previous message.

I got a message box telling me that pliant has performed an illegal 
operation:

PLIANT caused an invalid page fault in
module <unknown> at 0000:00000001.

3. I tried using the log function from the module /pliant/math/functions.pli:

Failed to compile os_libc_filename   ()
compile /pliant/math/functions.pli (internals) 5 32
compile /pliant/math/functions.pli (internals) 5 24
compile /pliant/math/functions.pli (internals) 5 24
compile /pliant/math/functions.pli (internals) 5 1
compile /pliant/math/functions.pli (internals) 5 1
compile /pliant/math/functions.pli (internals) 5 1
compile /pliant/math/functions.pli (internals) 5 1
parse /pliant/math/functions.pli (internals) 8 1
module /pliant/math/functions.pli
compile file:test_log.pli (internals) 1 1
compile file:test_log.pli (internals) 1 1
compile file:test_log.pli (internals) 1 1
compile file:test_log.pli (internals) 1 1
parse file:test_log.pli (internals) 4 1
module file:test_log.pli
------------------------------------------------------
:processor stack content is
error_notify_fatal (ErrorID Str) +14
error_report +61
error_renotify (ErrorID Address Str) +39
compile (Expression) +124 

(etc)

I gather that pliant can't find libc. I've installed cygwin on my machine, 
so I should have a copy of libc available somewhere. How can I tell pliant
where to find it?

Thanks again.
Message posted by maybe Hubert Tonneau on 2001/10/03 20:51:44
When a result is 'arg', it has the same meaning of an argument with 'arg_w':
the value will be modified when the function returns, and the value will
not depend on the previous value of the data.
Message posted by maybe Hubert Tonneau on 2001/10/03 21:00:19
There is no need for cygwin to run Pliant on Win32: Pliant is self contained.

I think somebody told me in what well known win32 DLL the math functions
are, but I can't remember the detail, and it looks like I forgot to make
the change.
Message posted by maybe Hubert Tonneau on 2001/10/03 21:07:17
The correct code for /pliant/math/functions.pli should be something like:

module "/pliant/language/os.pli"
module "/pliant/language/compiler.pli"
module "/pliant/language/generator.pli"

if os_api="win32"
  constant math_library "kenel32.dll"
else
  constant math_library (replace os_libc_filename "libc" "libm")


public
  constant pi 3.141592653589793238462

...

but you have to check (or find) the correct DLL.
Message posted by maybe Micky Latowicki on 2001/10/05 11:03:43
I did as you said. It works. The DLL I used was msvcrt.dll, which appears to 
be the microsoft libc implementation.

if os_api="win32"
  constant math_library "msvcrt.dll"
else
  constant math_library (replace os_libc_filename "libc" "libm")