3
0
mirror of https://github.com/pragma-/pbot.git synced 2024-10-01 17:16:39 +02:00

CGrammar: Fix handling 0 as conditional in for loop

This commit is contained in:
Pragmatic Software 2014-07-10 13:11:13 +00:00
parent 38b6edf656
commit bea4480cf3
2 changed files with 16 additions and 8 deletions

View File

@ -13,7 +13,7 @@ use warnings;
# These are set automatically by the build/commit script
use constant {
BUILD_NAME => "PBot",
BUILD_REVISION => 725,
BUILD_REVISION => 726,
BUILD_DATE => "2014-07-10",
};

View File

@ -220,7 +220,7 @@ compound_statement:
and $arg{context} ne 'case'
and $arg{context} ne 'function definition statement'
and $arg{context} ne 'function definition') {
$return .= "End $arg{context}.\n";
$return .= "End $arg{context}.";
}
1;
}
@ -259,14 +259,22 @@ iteration_statement:
$return .= "Prepare a loop by ^L$initialization, then ^L";
}
if ($expression) {
my $expression = ::istrue $expression;
$return .= "For as long as ^L$expression, ^L";
if (length $expression) {
if ($expression =~ /^(\d+)$/) {
if($expression == 0) {
$return .= "Repeatedly never ^L";
} else {
$return .= "Repeatedly ^L";
}
} else {
my $expression = ::istrue $expression;
$return .= "For as long as ^L$expression, ^L";
}
} else {
$return .= "Repeatedly ^L";
}
$return .= "$item{statement}.\n";
$return .= $item{statement};
if ($increment) {
$return =~ s/End for loop.$//;
@ -277,7 +285,7 @@ iteration_statement:
{
if ($item{expression} =~ /(^\d+$)/) {
if ($1 == 0) {
$return = "Never ^L";
$return = "Repeatedly never ^L";
} else {
$return = "Repeatedly ^L";
}
@ -375,7 +383,7 @@ expression_statement:
expression[context => "$arg{context}|statement"](?) ';'
{
my $expression = join('',@{$item[1]});
if (!$expression) {
if (not length $expression) {
if ($arg{context} eq 'label'
or $arg{context} eq 'for init'
or $arg{context} eq 'for conditional') {