# New Ticket Created by  Markus Laker 
# Please include the string:  [perl #61744]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=61744 >


Hello,

I'm attempting to compile Parrot and Perl 6 for the first time using gcc 4.1.2 
on Linux.  I've checked out revision 34399 form svn.  Parrot compiles 
successfully, but languages/perl6 fails like this:


m...@edward:~/parrot/languages/perl6$ make
cd src/pmc && /usr/bin/perl /home/msl/parrot/tools/build/dynpmc.pl generate 
perl6str objectref perl6scalar mutablevar perl6multisub
cd src/pmc && /usr/bin/perl /home/msl/parrot/tools/build/dynpmc.pl compile 
perl6str objectref perl6scalar mutablevar perl6multisub
cd src/pmc && /usr/bin/perl /home/msl/parrot/tools/build/dynpmc.pl linklibs 
perl6str objectref perl6scalar mutablevar perl6multisub
cd src/pmc && /usr/bin/perl /home/msl/parrot/tools/build/dynpmc.pl 
copy --destination=/home/msl/parrot/runtime/parrot/dynext perl6str objectref 
perl6scalar mutablevar perl6multisub
../../parrot  -o perl6.pbc perl6.pir
error:imcc:syntax error, unexpected VAR, expecting '(' ('var')
        in file 'src/builtins/op.pir' line 434
        included from 'src/gen_builtins.pir' line 25
        included from 'perl6.pir' line 1
make: *** [perl6.pbc] Error 1
m...@edward:~/parrot/languages/perl6$


The line in question is the `rebless_subclass' instruction two paragraphs 
before the end of this function:


.sub 'infix:does'
    .param pmc var
    .param pmc role
    .param pmc init_value      :optional
    .param int have_init_value :opt_flag

    # Get the class of the variable we're adding roles to.
    .local pmc p6meta, parrot_class
    parrot_class = class var

    # Derive a new class that does the role(s) specified.
    .local pmc derived
    derived = new 'Class'
    addparent derived, parrot_class
    $I0 = isa role, 'Role'
    if $I0 goto one_role
    $I0 = isa role, 'List'
    if $I0 goto many_roles
    'die'("'does' expects a role or a list of roles")

  one_role:
    '!keyword_does'(derived, role)
    goto added_roles

  many_roles:
    .local pmc role_it, cur_role
    role_it = iter role
  roles_loop:
    unless role_it goto roles_loop_end
    cur_role = shift role_it
    '!keyword_does'(derived, cur_role)
    goto roles_loop
  roles_loop_end:
  added_roles:

    # Register proto-object.
    .local pmc p6meta, proto
    p6meta = get_hll_global ['Perl6Object'], '$!P6META'
    proto = var.'WHAT'()
    p6meta.'register'(derived, 'protoobject'=>proto)

    # Instantiate the class to make it form itself.
    $P0 = new derived

    # Re-bless the object into the subclass.
    rebless_subclass var, derived

    # If we were given something to initialize with, do so.
    unless have_init_value goto no_init
    .local pmc attrs
    .local string attr_name
    attrs = inspect role, "attributes"
    attrs = attrs.'keys'()
    $I0 = elements attrs
    if $I0 != 1 goto attr_error
    attr_name = attrs[0]
    attr_name = substr attr_name, 2 # lop of sigil and twigil
    $P0 = var.attr_name()
    assign $P0, init_value
  no_init:

    # We're done - return.
    .return (var)


I'm not familiar enough with Parrot to correct the syntax.  However, if I 
comment out the line, I get a clean build.  Will I lose any more than the 
C<does> keyword?

Thanks and regards,

Markus

Reply via email to