Newbie questions about Pliant

Newbie questions about Pliant

meta wrapping a meta

need to write a meta whose output is also a meta
Message posted by reitman on 2004/06/02 01:50:03
I want to rewrite,

  perl_new T arg1 arg2 ...

into expression involving "perl" meta,

  perl "T::new" "T" arg1 arg2 ...

Here is my attempt that crashes with a segmentation fault,

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

module "/pliant/language/compiler.pli"
module "/pliantx/language/perl.pli"
module "/pliantx/lexer/multiline_string.pli"


meta perl_new e
  var Link:Expression package_expr :> e:0
  var Str funcname

  if package_expr:is_pure_ident
    funcname := package_expr:ident + "::new"
  #else
  #  package_expr cast Str

  var Link:Expression funcname_expr :> expression constant funcname
  var Link:Expression package_str_expr :> expression constant package_expr:ident
  var Link:Expression newexpr
  if e:size > 0
    newexpr :> expression ident "perl" near e subexpressions funcname_expr package_str_expr (e 1 e:size)
  else
    newexpr :> expression ident "perl" near e subexpressions funcname_expr package_str_expr

  e compile_as newexpr

perl_eval {{ package T; sub new { my $class = shift; return bless {}, $class; } }}

gvar PerlScalar obj
#obj := perl_new T
perl_new T

#perl "T::new" "T"  # works

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

exception 11
----------------------------------------------------------------
actions stack is:
compile file:perl_new.pli (internals) 29 1
compile file:perl_new.pli (internals) 29 1
compile file:perl_new.pli (internals) 29 1
compile file:perl_new.pli (internals) 29 1
parse file:perl_new.pli (internals) 30 1
module file:perl_new.pli
----------------------------------------------------------------
processor stack content is:
. search (Str Str Int) +287
cast Str (ListingPosition) +117
. near  /pliant/language/compiler/expression/expression2.pli (internals) 118 1 /pliant/language/compiler/expression/expression2.pli (internals) 122 16
. near  /pliant/language/compiler/expression/expression2.pli (internals) 118 1 /pliant/language/compiler/expression/expression2.pli (internals) 125 1
. might_compile_as  /pliant/language/compiler/expression/expression2.pli (internals) 374 1 /pliant/language/compiler/expression/expression2.pli (internals) 377 3
. compile_as  /pliant/language/compiler/expression/expression2.pli (internals) 391 1 /pliant/language/compiler/expression/expression2.pli (internals) 394 14
perl_new  file:perl_new.pli (internals) 6 1 file:perl_new.pli (internals) 23 3
active_type_Meta +62
. evaluate (Expression) +147
. compile_step4 (Expression Address Int) +233
active_type_Ident +130
. evaluate (Expression) +147
. compile_step4 (Expression Address Int) +233
. compile_step3 (Expression) +18
. compile_step2 (Expression) +64
. compile (Expression) +19
  file:perl_new.pli (internals) 29 1
{} +38
active_type_Meta +62
. evaluate (Expression) +147
. compile_step4 (Expression Address Int) +233
active_type_Ident +130
. evaluate (Expression) +147
. compile_step4 (Expression Address Int) +233
. compile_step3 (Expression) +18
. compile_step2 (Expression) +64
. compile (Expression) +19
  file:perl_new.pli (internals) 29 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 134599684
----------------------------------------------------------------

What am I doing wrong ? 

Thanks,
Boris
Message posted by hubert.tonneau on 2004/06/02 06:59:15
This seems bogus to me:
e 1 e:size
Should be:
e 1 e:size-1
Message posted by reitman on 2004/06/03 09:41:08
thanks, that worked.