summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorYves Orton <demerphq@gmail.com>2023-03-28 21:57:22 +0200
committerYves Orton <demerphq@gmail.com>2023-04-05 15:22:55 +0800
commit67d37c55ddffebbcbf4847408106334b9ad9a6bc (patch)
tree3ec4fed15f1eae09374bbfc4d97f27ced64155fd /t
parent0398b69bfddc8738a4788f056a79ba9e4d44fcfb (diff)
downloadperl-67d37c55ddffebbcbf4847408106334b9ad9a6bc.tar.gz
regen/HeaderParser.pm - improved expression formatting and wrapping
Karl complained about some of the wrapping logic we use for expressions. This tweaks the rules in a number of different ways in an attempt to produce more legible expressions. For instance if we have a complex expression with different parenthesized sub expressions, then try to put each sub expression on its own line. A previous patch ensures that we put shorter sub expressions first, and this patch builds on that to put each sub expression on its own line. We also use different logic to wrap the expressions, with the end result that each line should have the same number of defined() operations on it (with the exception of the last). We also try harder to line up logical operators and defined() functions.
Diffstat (limited to 't')
-rw-r--r--t/porting/header_parser.t127
1 files changed, 110 insertions, 17 deletions
diff --git a/t/porting/header_parser.t b/t/porting/header_parser.t
index a2a33b8371..6bbf33e6fb 100644
--- a/t/porting/header_parser.t
+++ b/t/porting/header_parser.t
@@ -26,7 +26,7 @@ sub show_text {
print STDERR $as_text=~s/^/" " x 8/mger;
}
-my $hp= HeaderParser->new;
+my $hp= HeaderParser->new();
$hp->parse_text(<<~'EOF');
#ifdef A
#ifdef B
@@ -129,8 +129,9 @@ is($lines_as_str,<<~'DUMP_EOF', "Simple data structure as expected") or show_tex
]
],
"flat" => "#endif",
+ "inner_lines" => 3,
"level" => 1,
- "line" => "# endif /* defined(B) */\n",
+ "line" => "# endif\n",
"n_lines" => 1,
"raw" => "#endif\n",
"source" => "(buffer)",
@@ -177,8 +178,9 @@ is($lines_as_str,<<~'DUMP_EOF', "Simple data structure as expected") or show_tex
]
],
"flat" => "#endif",
+ "inner_lines" => 7,
"level" => 0,
- "line" => "#endif /* defined(A) */\n",
+ "line" => "#endif\n",
"n_lines" => 1,
"raw" => "#endif\n",
"source" => "(buffer)",
@@ -218,10 +220,10 @@ is($normal,<<~'EOF',"Normalized text as expected");
# if defined(B)
# define AB
content 1
- # endif /* defined(B) */
+ # endif
content 2
# define A
- #endif /* defined(A) */
+ #endif
/*comment
line */
#define C /* this is
@@ -232,7 +234,7 @@ is($normal,<<~'EOF',"Normalized text as expected");
my @warn;
local $SIG{__WARN__}= sub { push @warn, $_[0]; warn $_[0] };
my $ok= eval {
- HeaderParser->new()->parse_text(<<~'EOF'); 1
+ HeaderParser->new(add_commented_expr_after=>0)->parse_text(<<~'EOF'); 1
#ifdef A
#ifdef B
#endif
@@ -247,7 +249,7 @@ is($normal,<<~'EOF',"Normalized text as expected");
my @warn;
local $SIG{__WARN__}= sub { push @warn, $_[0]; warn $_[0] };
my $ok= eval {
- HeaderParser->new()->parse_text(<<~'EOF'); 1
+ HeaderParser->new(add_commented_expr_after=>0)->parse_text(<<~'EOF'); 1
#ifdef A
#ifdef B
#elif C
@@ -262,7 +264,7 @@ is($normal,<<~'EOF',"Normalized text as expected");
my @warn;
local $SIG{__WARN__}= sub { push @warn, $_[0]; warn $_[0] };
my $ok= eval {
- HeaderParser->new()->parse_text(<<~'EOF'); 1
+ HeaderParser->new(add_commented_expr_after=>0)->parse_text(<<~'EOF'); 1
#if 1 * * 10 > 5
#elifdef C
EOF
@@ -277,7 +279,7 @@ is($normal,<<~'EOF',"Normalized text as expected");
"Expected token error") or warn $err;
}
{
- my $hp= HeaderParser->new(debug=>0);
+ my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0);
$hp->parse_text(<<~'EOF');
#ifdef A
@@ -308,7 +310,7 @@ is($normal,<<~'EOF',"Normalized text as expected");
EOF
}
{
- my $hp= HeaderParser->new(debug=>0);
+ my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0);
$hp->parse_text(<<~'EOF');
#if defined(A) && defined(B)
# if (defined(C) && defined(D))
@@ -338,7 +340,7 @@ is($normal,<<~'EOF',"Normalized text as expected");
EOF
}
{
- my $hp= HeaderParser->new(debug=>0);
+ my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0);
$hp->parse_text(<<~'EOF');
#if defined(A)
#define HAS_A
@@ -365,7 +367,7 @@ is($normal,<<~'EOF',"Normalized text as expected");
EOF
}
{
- my $hp= HeaderParser->new(debug=>0);
+ my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0);
$hp->parse_text(<<~'EOF');
#if defined(A)
#define HAS_A
@@ -399,7 +401,7 @@ is($normal,<<~'EOF',"Normalized text as expected");
EOF
}
{
- my $hp= HeaderParser->new(debug=>0);
+ my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0);
$hp->parse_text(<<~'EOF');
#if defined(A)
#define HAS_A
@@ -443,7 +445,7 @@ is($normal,<<~'EOF',"Normalized text as expected");
EOF
}
{
- my $hp= HeaderParser->new(debug=>0);
+ my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0);
$hp->parse_text(<<~'EOF');
#if !defined(A)
#define NOT_A1
@@ -469,7 +471,7 @@ is($normal,<<~'EOF',"Normalized text as expected");
EOF
}
{
- my $hp= HeaderParser->new(debug=>0);
+ my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0);
$hp->parse_text(<<~'EOF');
#if !!!(defined(A) && defined(B))
#define NOT_A_AND_B
@@ -491,7 +493,7 @@ is($normal,<<~'EOF',"Normalized text as expected");
EOF
}
{
- my $hp= HeaderParser->new(debug=>0);
+ my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0);
$hp->parse_text(<<~'EOF');
#if defined(A) && !!defined(A) && !!!!defined(A)
#define HAS_A
@@ -509,7 +511,7 @@ is($normal,<<~'EOF',"Normalized text as expected");
local $::TODO;
$::TODO= "Absorbtion not implemented yet";
# currently we don't handle absorbtion: (A && (A || B || C ...)) == A
- my $hp= HeaderParser->new(debug=>0);
+ my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0);
$hp->parse_text(<<~'EOF');
#if defined(X) && (defined(X) || defined(Y))
#define HAS_X
@@ -523,5 +525,96 @@ is($normal,<<~'EOF',"Normalized text as expected");
#endif /* defined(X) */
EOF
}
+{
+ my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0);
+ $hp->parse_text(<<~'EOF');
+ #if defined(A) && (defined(B) && defined(C))
+ #define HAS_A
+ #endif
+ EOF
+ my $grouped= $hp->group_content();
+ my $as_text= $hp->lines_as_str($grouped);
+ is($as_text,<<~'EOF',"expression flattening") or show_text($as_text);
+ #if defined(A) && defined(B) && defined(C)
+ # define HAS_A
+ #endif /* defined(A) && defined(B) && defined(C) */
+ EOF
+}
+{
+ my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>3);
+ $hp->parse_text(<<~'EOF');
+ #if defined(A)
+ #define HAS_A1
+ #define HAS_A2
+ #define HAS_A3
+ #endif
+ #if defined(B)
+ #define HAS_B1
+ #else
+ #define HAS_B1e
+ #define HAS_B2e
+ #define HAS_B3e
+ #endif
+ #if defined(C)
+ #if defined(D)
+ #define HAS_D1
+ #endif
+ #elif defined(CC)
+ #define HAS_CC1
+ #define HAS_CC2
+ #define HAS_CC3
+ #endif
+ EOF
+ my $grouped= $hp->group_content();
+ my $as_text= $hp->lines_as_str($grouped);
+ is($as_text,<<~'EOF',"auto-comments") or show_text($as_text);
+ #if defined(A)
+ # define HAS_A1
+ # define HAS_A2
+ # define HAS_A3
+ #endif /* defined(A) */
+ #if defined(B)
+ # define HAS_B1
+ #else
+ # define HAS_B1e
+ # define HAS_B2e
+ # define HAS_B3e
+ #endif /* !defined(B) */
+ #if defined(C)
+ # if defined(D)
+ # define HAS_D1
+ # endif
+ #elif defined(CC) /* && !defined(C) */
+ # define HAS_CC1
+ # define HAS_CC2
+ # define HAS_CC3
+ #endif /* !defined(C) && defined(CC) */
+ EOF
+}
+{
+ my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0);
+ $hp->parse_text(<<~'EOF');
+ #if defined(DEBUGGING) \
+ || (defined(USE_LOCALE) && ( defined(USE_THREADS) \
+ || defined(HAS_IGNORED_LOCALE_CATEGORIES)\
+ || defined(USE_POSIX_2008_LOCALE) \
+ || ! defined(LC_ALL)))
+ # define X
+ #endif
+ EOF
+ my $grouped= $hp->group_content();
+ my $as_text= $hp->lines_as_str($grouped);
+ is($as_text,<<~'EOF',"Karls example") or show_text($as_text);
+ #if defined(DEBUGGING) || \
+ ( defined(USE_LOCALE) && \
+ ( defined(HAS_IGNORED_LOCALE_CATEGORIES) || !defined(LC_ALL) || \
+ defined(USE_POSIX_2008_LOCALE) || defined(USE_THREADS) ) )
+ # define X
+ #endif /* defined(DEBUGGING) ||
+ ( defined(USE_LOCALE) &&
+ ( defined(HAS_IGNORED_LOCALE_CATEGORIES) || !defined(LC_ALL) ||
+ defined(USE_POSIX_2008_LOCALE) || defined(USE_THREADS) ) ) */
+ EOF
+}
done_testing();