Newbie questions about Pliant

Newbie questions about Pliant

copy,cast and accessrights question

How do I get this short code to do what I want ?
Message posted by maybe Boris Reitman on 2003/12/02 20:02:11
Hi,

Here's the behaviour that I want,

a get_rep := b

should be processed by having 'b' first converte into type A_rep,
and then a copy occurs between two A_rep types.

Can someone please fix this code ?
Thanks,
Boris

=============

module "/pliant/language/unsafe.pli"
type A
  field Int a

type A_rep
  field Pointer:A a
  field Int tmp

type B
  field Int b

method a get_rep -> a_rep
  arg A a
  arg_rw A_rep a_rep
  a_rep a :> a

function 'cast B A_rep' b -> a_rep
  arg B b
  arg A_rep a_rep
  implicit
  a_rep tmp := b:b

function copy src dst
  arg A_rep src
  arg_w A_rep dst
  dst:a a := src:tmp

gvar A a
gvar B b
b b := 10
a get_rep := b

console "a = " a:a eol

==============

Failed to compile :=   (A_rep   'b')
  compile file:t.pli (internals) 31 11
compile file:t.pli (internals) 31 1
compile file:t.pli (internals) 31 1
parse file:t.pli (internals) 33 1
module file:t.pli
----------------------------------------------------------------
actions stack is:
parse file:t.pli (internals) 33 1
module file:t.pli
----------------------------------------------------------------
processor stack content is:
error_notify_fatal (ErrorID Str) +14
error_report +61
error_renotify (ErrorID Address Str) +41
. compile (Expression) +125
  file:t.pli (internals) 31 1
parser_tag_record  /pliant/language/type/misc/tag.pli (internals) 182 1
. execute (ParserContext) +39
parser_filter_execute +240
pliant internal parse_one_token function (ParserContext) +391
compile_text (List Module) +230
pliant_load_module (Str Module Int Module) +920
??? at 134599668
----------------------------------------------------------------

Message posted by hubert.tonneau on 2003/12/02 22:32:10
> method a get_rep -> a_rep
>   arg A a
>   arg_rw A_rep a_rep
>   a_rep a :> a

This is not valid: a function shall not return a read write argument.

As a result, Pliant will refuse to compile 'a get_rep := b' because 'a get_rep'
is read only.