On Wed, 11 Jul 2007 23:49:34 -0700
Mark Glines (via RT) <[EMAIL PROTECTED]> wrote:
> The pmclass statement looks like:
> 
> pmclass Perl6Str
>     extends String
>     does string
>     dynpmc
>     group perl6_group
>     hll Perl6
>     maps String {
> 
> Interestingly, if I take all of the crud in this pmclass statement and
> stick them all on one line, like this:
> 
> pmclass Perl6Str extends String does string dynpmc group perl6_group
> hll Perl6 maps String {
> 
> ...The #line numbers do not change at all (get_string in the .c file
> is still #lined to 154), but now the get_string implementation in
> the .pmc file is also on line 154, so everything lines up.

I don't have a fix (yet), but here's a patch to add a couple of tests
for it.  One test makes sure it emits the right #line when a complex
pmclass statement is all on one line, and the second makes sure #line is
adjusted when pmclass *isn't* on the same line.

The first test succeeds, the second one fails.

Mark
=== t/tools/pmc2c.t
==================================================================
--- t/tools/pmc2c.t	(revision 21436)
+++ t/tools/pmc2c.t	(local)
@@ -28,7 +28,7 @@
 
 use Fatal qw{open close};
 use Test::More;
-use Parrot::Test tests => 11;
+use Parrot::Test tests => 13;
 use Parrot::Config;
 
 my $pmc2c = join $PConfig{slash}, qw(. tools build pmc2c.pl);
@@ -181,6 +181,28 @@
                 );
 END_C
 
+pmc2c_output_like( <<'END_PMC', <<'END_C', 'maps' );
+pmclass a hll dale maps Integer {
+    void init() {
+    }
+}
+END_PMC
+Parrot_a_init(Interp *interp, PMC *pmc)
+#line 2
+END_C
+
+pmc2c_output_like( <<'END_PMC', <<'END_C', 'maps' );
+pmclass a
+    hll dale
+    maps Integer {
+    void init() {
+    }
+}
+END_PMC
+Parrot_a_init(Interp *interp, PMC *pmc)
+#line 4
+END_C
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Reply via email to