Discussion:
[perl #61744] error:imcc:syntax error, unexpected VAR, expecting '(' ('var')
(too old to reply)
Markus Laker
2008-12-26 22:41:49 UTC
Permalink
# 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:


***@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
***@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
Kjstol
2008-12-27 10:07:36 UTC
Permalink
Hi,
it seems to me this syntax error message indicates that it doesn't know the
opcode 'rebless_subclass'. The parser expects a '(', which indicates that it
wants to parse rebless_subclass as a sub name.

Haven't built parrot in 10 days myself now, so can't tell why it's not
working and whether it should. I expect other people will be able to tell
you that. Just wanted to clarify the syntax error.

kjs



On Fri, Dec 26, 2008 at 11:41 PM, via RT Markus Laker <
Post by Markus Laker
# 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
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
The line in question is the `rebless_subclass' instruction two paragraphs
.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")
'!keyword_does'(derived, role)
goto added_roles
.local pmc role_it, cur_role
role_it = iter role
unless role_it goto roles_loop_end
cur_role = shift role_it
'!keyword_does'(derived, cur_role)
goto roles_loop
# 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
# 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
Loading...