|
|
Author: bernhard
Date: Fri Jul 11 12:08:05 2008
New Revision: 29303
Modified:
trunk/languages/pipp/src/pct/quote_expression.pir
trunk/languages/pipp/t/php/strings.t
Log:
[Pipp PCT] Avoid infinite loop for curly string interpolation,
but break some tests.
Modified: trunk/languages/pipp/src/pct/quote_expression.pir
==============================================================================
--- trunk/languages/pipp/src/pct/quote_expression.pir (original)
+++ trunk/languages/pipp/src/pct/quote_expression.pir Fri Jul 11 12:08:05 2008
@@ -291,10 +291,13 @@
.local string literal
literal = ''
-
scan_loop:
if pos > lastpos goto fail
$S0 = substr target, pos, stoplen
+ #_dumper( target, pos, $S0 )
+ #_dumper( pos )
+ #_dumper( $S0 )
+ #_dumper( stop )
if $S0 == stop goto succeed
goto scan_loop_1
$I0 = is_cclass .CCLASS_WHITESPACE, target, pos
@@ -306,7 +309,9 @@
.local string litchar
litchar = substr target, pos, 1
## if we've reached an escape char, we're done
+ if litchar == '{' goto add_litchar
$I0 = index escapes, litchar
+ #_dumper( escapes )
if $I0 >= 0 goto succeed
## if this isn't an interpolation, add the char
unless optq goto add_litchar
Modified: trunk/languages/pipp/t/php/strings.t
==============================================================================
--- trunk/languages/pipp/t/php/strings.t (original)
+++ trunk/languages/pipp/t/php/strings.t Fri Jul 11 12:08:05 2008
@@ -18,7 +18,7 @@
use lib "$FindBin::Bin/../../lib";
# core Perl modules
-use Test::More tests => 8;
+use Test::More tests => 10;
# Parrot modules
use Parrot::Test;
@@ -99,7 +99,16 @@
VAR1 VAR2
END_EXPECTED
-language_output_is( 'Pipp', <<'END_CODE', <<'END_EXPECTED', 'string
interpolation, complex syntax' );
+language_output_is( 'Pipp', <<'END_CODE', <<'END_EXPECTED', 'curly string
interpolation, one var' );
+<?php
+$var1 = "VAR1";
+echo "{$var1}\n";
+?>
+END_CODE
+VAR1
+END_EXPECTED
+
+language_output_is( 'Pipp', <<'END_CODE', <<'END_EXPECTED', 'curly string
interpolation, two vars', todo => 'broken' );
<?php
$var1 = "VAR1";
$var2 = "VAR2";
@@ -109,8 +118,6 @@
VAR1 VAR2
END_EXPECTED
-=for comment
-
language_output_is( 'Pipp', <<'END_CODE', <<'END_EXPECTED', 'print a pair of
curlies' );
<?php
echo "curlies: {}\n";
@@ -119,8 +126,6 @@
curlies: {}
END_EXPECTED
-=cut
-
language_output_is( 'Pipp', <<'END_CODE', <<'END_EXPECTED', 'single quotes and
backslash' );
<?php
|
|