From 35a40b49305ffa4b30168cdc0794568d3d328a2b Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Fri, 22 Jun 2018 06:35:27 -0400 Subject: [PATCH 1/2] Commentary --- src/V3Ast.h | 2 +- src/V3AstNodes.h | 6 +++--- src/V3Const.cpp | 2 +- src/V3Gate.cpp | 2 +- src/V3Param.cpp | 2 +- src/V3Slice.cpp | 2 +- src/verilog.y | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/V3Ast.h b/src/V3Ast.h index d45b354f3..17be153ac 100644 --- a/src/V3Ast.h +++ b/src/V3Ast.h @@ -167,7 +167,7 @@ class AstEdgeType { public: // REMEMBER to edit the strings below too enum en { - // These must be in general -> most specific order, as we sort by it in V3Const::visit AstSenTre + // These must be in general -> most specific order, as we sort by it in V3Const::visit AstSenTree ET_ILLEGAL, // Involving a variable ET_ANYEDGE, // Default for sensitivities; rip them out diff --git a/src/V3AstNodes.h b/src/V3AstNodes.h index ce562eb82..8a4543f72 100644 --- a/src/V3AstNodes.h +++ b/src/V3AstNodes.h @@ -399,7 +399,7 @@ private: return rhs.m_keyword == m_keyword && rhs.m_nrange == m_nrange; } } m; - // See also in AstNodeDtype: m_width, m_widthMin, m_numeric(issigned) + // See also in AstNodeDType: m_width, m_widthMin, m_numeric(issigned) public: AstBasicDType(FileLine* fl, AstBasicDTypeKwd kwd, VSignedState signst=signedst_NOSIGN) : AstNodeDType(fl) { @@ -670,7 +670,7 @@ public: class AstMemberDType : public AstNodeDType { // A member of a struct/union - // PARENT: AstClassDType + // PARENT: AstNodeClassDType private: AstNodeDType* m_refDTypep; // Elements of this type (after widthing) string m_name; // Name of variable @@ -1949,7 +1949,7 @@ public: }; class AstDot : public AstNode { - // A dot separating paths in an AstXRef, AstFuncRef or AstTaskRef + // A dot separating paths in an AstVarXRef, AstFuncRef or AstTaskRef // These are eliminated in the link stage public: AstDot(FileLine* fl, AstNode* lhsp, AstNode* rhsp) diff --git a/src/V3Const.cpp b/src/V3Const.cpp index 8d451d422..af3b20ee2 100644 --- a/src/V3Const.cpp +++ b/src/V3Const.cpp @@ -1607,7 +1607,7 @@ private: } // virtual void visit(AstCvtPackString* nodep) { - // Not constant propagated (for today) because AstMath::isOpaque is set + // Not constant propagated (for today) because AstNodeMath::isOpaque is set // Someday if lower is constant, convert to quoted "string". bool onlySenItemInSenTree(AstNodeSenItem* nodep) { diff --git a/src/V3Gate.cpp b/src/V3Gate.cpp index 5d6f045d1..6bd4cc76b 100644 --- a/src/V3Gate.cpp +++ b/src/V3Gate.cpp @@ -312,7 +312,7 @@ private: // {statement}Node::user1p -> GateLogicVertex* for this statement // AstVarScope::user2 -> bool: Signal used in SenItem in *this* always statement // AstVar::user2 -> bool: Warned about SYNCASYNCNET - // AstVarNodeRef::user2 -> bool: ConcatOffset visited + // AstNodeVarRef::user2 -> bool: ConcatOffset visited AstUser1InUse m_inuser1; AstUser2InUse m_inuser2; diff --git a/src/V3Param.cpp b/src/V3Param.cpp index a41f966d7..c9b341d84 100644 --- a/src/V3Param.cpp +++ b/src/V3Param.cpp @@ -32,7 +32,7 @@ // For interface Parent's we have the AstIfaceRefDType::cellp() // pointing to this module. If that parent cell's interface // module gets parameterized, AstIfaceRefDType::cloneRelink -// will update AstIfaceRefDType::cellp(), and AstLinkDot will +// will update AstIfaceRefDType::cellp(), and V3LinkDot will // see the new interface. // // However if a submodule's AstIfaceRefDType::ifacep() points diff --git a/src/V3Slice.cpp b/src/V3Slice.cpp index 0bba50c9f..75bcafced 100644 --- a/src/V3Slice.cpp +++ b/src/V3Slice.cpp @@ -55,7 +55,7 @@ class SliceVisitor : public AstNVisitor { // NODE STATE // Cleared on netlist // AstNodeAssign::user1() -> bool. True if find is complete - // AstUniop::user1() -> bool. True if find is complete + // AstNodeUniop::user1() -> bool. True if find is complete // AstArraySel::user1p() -> AstVarRef. The VarRef that the final ArraySel points to AstUser1InUse m_inuser1; diff --git a/src/verilog.y b/src/verilog.y index ef5a1174e..ef29751f4 100644 --- a/src/verilog.y +++ b/src/verilog.y @@ -1893,7 +1893,7 @@ genvar_iteration: // ==IEEE: genvar_iteration | varRefBase yP_SRIGHTEQ expr { $$ = new AstAssign($2,$1,new AstShiftR ($2,$1->cloneTree(true),$3)); } | varRefBase yP_SSRIGHTEQ expr { $$ = new AstAssign($2,$1,new AstShiftRS($2,$1->cloneTree(true),$3)); } // // inc_or_dec_operator - // When support ++ as a real AST type, maybe AstWhile::precondsp() becomes generic AstMathStmt? + // When support ++ as a real AST type, maybe AstWhile::precondsp() becomes generic AstNodeMathStmt? | yP_PLUSPLUS varRefBase { $$ = new AstAssign($1,$2,new AstAdd ($1,$2->cloneTree(true),new AstConst($1,V3Number($1,"'b1")))); } | yP_MINUSMINUS varRefBase { $$ = new AstAssign($1,$2,new AstSub ($1,$2->cloneTree(true),new AstConst($1,V3Number($1,"'b1")))); } | varRefBase yP_PLUSPLUS { $$ = new AstAssign($2,$1,new AstAdd ($2,$1->cloneTree(true),new AstConst($2,V3Number($2,"'b1")))); } From 2b56acb39a61e63f04528d2219f1582b27a2fc3c Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Fri, 22 Jun 2018 07:09:21 -0400 Subject: [PATCH 2/2] Add git_untabify utility --- nodist/git_untabify | 177 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100755 nodist/git_untabify diff --git a/nodist/git_untabify b/nodist/git_untabify new file mode 100755 index 000000000..4fc5927a9 --- /dev/null +++ b/nodist/git_untabify @@ -0,0 +1,177 @@ +#!/usr/bin/perl -w +# See copyright, etc in below POD section. +###################################################################### + +use Getopt::Long; +#use Data::Dumper; $Data::Dumper::Indent=1; $Data::Dumper::Sortkeys=1; #Debug +use IO::File; +use IO::Dir; +use Pod::Usage; +use strict; +use vars qw ($Debug); + +our $VERSION = '0.001'; + +#====================================================================== +# main + +autoflush STDOUT 1; +autoflush STDERR 1; +Getopt::Long::config ("no_auto_abbrev"); +if (! GetOptions ( + "debug" => sub { $Debug = 1; }, + "help" => sub { print "Version $VERSION\n"; + pod2usage(-verbose=>2, -exitval => 2, output=>\*STDOUT, -noperldoc=>1); }, + "version" => sub { print "Version $VERSION\n"; exit(0); }, + "<>" => sub { die "%Error: Unknown parameter: $_[0]\n"; }, + )) { + die "%Error: Bad usage, try 'git_untabify --help'\n"; +} + +read_patch(); + +####################################################################### + +sub read_patch { + my $filename = undef; + my $lineno = 0; + my $editlines = {}; + while (defined(my $line = )) { + if ($line =~ m!^\+\+\+ b/(.*)!) { + edit_file($filename, $editlines); + $filename = $1; + $lineno = 0; + $editlines = {}; + print "FILE $filename\n" if $Debug; + } + elsif ($line =~ m!^@@ -?[0-9]+,?[0-9]* \+?([0-9]+)!) { + $lineno = $1 - 1; + print " LINE $1 $line" if $Debug; + } + elsif ($line =~ m!^ !) { + ++$lineno; + } + elsif ($line =~ m!^\+!) { + ++$lineno; + if ($line =~ m!\t!) { + print " $lineno: $line" if $Debug; + $editlines->{$lineno} = 1; + } + } + } + edit_file($filename, $editlines); +} + +sub edit_file { + my $filename = shift; + my $editlines = shift; + + return if (scalar keys(%$editlines) < 1); + if (ignore($filename)) { + print "%Warning: Ignoring $filename\n"; + return; + } + print "Edit $filename ",join(",",sort(keys %$editlines)),"\n"; + + my $lineno = 0; + my @out; + { + my $fh = IO::File->new("<$filename") or die "%Error: $! $filename\n"; + while (defined(my $line = $fh->getline)) { + ++$lineno; + if ($editlines->{$lineno}) { + print $line; + push @out, untabify($line); + } else { + push @out, $line; + } + } + $fh->close; + } + { + my $fh = IO::File->new(">${filename}.untab") or die "%Error: $! ${filename}.untab,"; + $fh->print(join('',@out)); + $fh->close; + + my ($dev,$ino,$mode) = stat($filename); + chmod $mode, "${filename}.untab"; + } + + rename("${filename}.untab", $filename) or die "%Error: $! ${filename}.untab,"; +} + +sub ignore { + my $filename = shift; + return 1 if ($filename =~ /(Makefile|\.mk)/); + return 1 if ($filename =~ /\.(y|l|out|vcd)$/); + # + return 0 if ($filename =~ /\.(sv|v|vh|svh|h|vc|cpp|pl)$/); + return 0; +} + +sub untabify { + my $line = shift; + my $out = ""; + my $col = 0; + foreach my $c (split //, $line) { + if ($c eq "\t") { + my $destcol = int(($col+8)/8)*8; + while ($col < $destcol) { ++$col; $out .= " "; } + } else { + $out .= $c; + $col++; + } + } + return $out; +} + +####################################################################### +__END__ + +=pod + +=head1 NAME + +git_untabify - Pipe a git diff report and untabify differences + +=head1 SYNOPSIS + + git diff a..b | git_untabify + +=head1 DESCRIPTION + +Take a patch file, and edit the files in the destination patch list to +untabify the related patch lines. + +=head1 ARGUMENTS + +=over 4 + +=item --help + +Displays this message and program version and exits. + +=item --version + +Displays program version and exits. + +=back + +=head1 DISTRIBUTION + +Copyright 2005-2018 by Wilson Snyder. Verilator is free software; you can +redistribute it and/or modify it under the terms of either the GNU Lesser +General Public License Version 3 or the Perl Artistic License Version 2.0. + +=head1 AUTHORS + +Wilson Snyder + +=head1 SEE ALSO + +=cut + +###################################################################### +### Local Variables: +### compile-command: "./git_untabify " +### End: