mirror of
https://github.com/verilator/verilator.git
synced 2025-04-25 10:06:54 +00:00
Fix auto-indentation of AstCStmts - again
This commit is contained in:
parent
1da07a3b86
commit
2f2f416bea
@ -2939,9 +2939,14 @@ struct AstPslBool : public AstNode {
|
|||||||
// Text based nodes
|
// Text based nodes
|
||||||
|
|
||||||
struct AstText : public AstNodeText {
|
struct AstText : public AstNodeText {
|
||||||
AstText(FileLine* fl, const string& textp)
|
private:
|
||||||
: AstNodeText(fl, textp) {}
|
bool m_tracking; // When emit, it's ok to parse the string to do indentation
|
||||||
|
public:
|
||||||
|
AstText(FileLine* fl, const string& textp, bool tracking=false)
|
||||||
|
: AstNodeText(fl, textp), m_tracking(tracking) {}
|
||||||
ASTNODE_NODE_FUNCS(Text, TEXT)
|
ASTNODE_NODE_FUNCS(Text, TEXT)
|
||||||
|
void tracking(bool flag) { m_tracking = flag; }
|
||||||
|
bool tracking() const { return m_tracking; }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AstScCtor : public AstNodeText {
|
struct AstScCtor : public AstNodeText {
|
||||||
@ -3208,22 +3213,25 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct AstCMath : public AstNodeMath {
|
struct AstCMath : public AstNodeMath {
|
||||||
|
private:
|
||||||
|
bool m_cleanOut;
|
||||||
|
public:
|
||||||
// Emit C textual math function (like AstUCFunc)
|
// Emit C textual math function (like AstUCFunc)
|
||||||
AstCMath(FileLine* fl, AstNode* exprsp)
|
AstCMath(FileLine* fl, AstNode* exprsp)
|
||||||
: AstNodeMath(fl) {
|
: AstNodeMath(fl), m_cleanOut(true) {
|
||||||
addOp1p(exprsp);
|
addOp1p(exprsp);
|
||||||
widthSignedFrom(exprsp);
|
widthSignedFrom(exprsp);
|
||||||
}
|
}
|
||||||
AstCMath(FileLine* fl, const string& textStmt, int setwidth)
|
AstCMath(FileLine* fl, const string& textStmt, int setwidth, bool cleanOut=true)
|
||||||
: AstNodeMath(fl) {
|
: AstNodeMath(fl), m_cleanOut(cleanOut) {
|
||||||
addNOp1p(new AstText(fl, textStmt));
|
addNOp1p(new AstText(fl, textStmt, true));
|
||||||
if (setwidth) { width(setwidth,setwidth); }
|
if (setwidth) { width(setwidth,setwidth); }
|
||||||
}
|
}
|
||||||
ASTNODE_NODE_FUNCS(CMath, CMATH)
|
ASTNODE_NODE_FUNCS(CMath, CMATH)
|
||||||
AstNode* bodysp() const { return op1p()->castNode(); } // op1= expressions to print
|
AstNode* bodysp() const { return op1p()->castNode(); } // op1= expressions to print
|
||||||
virtual bool isGateOptimizable() const { return false; }
|
virtual bool isGateOptimizable() const { return false; }
|
||||||
virtual bool isPredictOptimizable() const { return false; }
|
virtual bool isPredictOptimizable() const { return false; }
|
||||||
virtual bool cleanOut() { return true; }
|
virtual bool cleanOut() { return m_cleanOut; }
|
||||||
virtual string emitVerilog() { V3ERROR_NA; return ""; } // Implemented specially
|
virtual string emitVerilog() { V3ERROR_NA; return ""; } // Implemented specially
|
||||||
virtual string emitC() { V3ERROR_NA; return ""; }
|
virtual string emitC() { V3ERROR_NA; return ""; }
|
||||||
virtual V3Hash sameHash() const { return V3Hash(); }
|
virtual V3Hash sameHash() const { return V3Hash(); }
|
||||||
@ -3239,7 +3247,7 @@ struct AstCStmt : public AstNodeStmt {
|
|||||||
}
|
}
|
||||||
AstCStmt(FileLine* fl, const string& textStmt)
|
AstCStmt(FileLine* fl, const string& textStmt)
|
||||||
: AstNodeStmt(fl) {
|
: AstNodeStmt(fl) {
|
||||||
addNOp1p(new AstText(fl, textStmt));
|
addNOp1p(new AstText(fl, textStmt, true));
|
||||||
}
|
}
|
||||||
ASTNODE_NODE_FUNCS(CStmt, CSTMT)
|
ASTNODE_NODE_FUNCS(CStmt, CSTMT)
|
||||||
AstNode* bodysp() const { return op1p()->castNode(); } // op1= expressions to print
|
AstNode* bodysp() const { return op1p()->castNode(); } // op1= expressions to print
|
||||||
|
@ -232,9 +232,8 @@ private:
|
|||||||
funcp->slow(true);
|
funcp->slow(true);
|
||||||
funcp->isStatic(false);
|
funcp->isStatic(false);
|
||||||
funcp->entryPoint(true);
|
funcp->entryPoint(true);
|
||||||
funcp->addInitsp(
|
funcp->addInitsp(new AstCStmt(nodep->fileline(),
|
||||||
new AstCStmt(nodep->fileline(),
|
EmitCBaseVisitor::symClassVar()+" = this->__VlSymsp;\n"));
|
||||||
" "+EmitCBaseVisitor::symClassVar()+" = this->__VlSymsp;\n"));
|
|
||||||
funcp->addInitsp(new AstCStmt(nodep->fileline(), EmitCBaseVisitor::symTopAssign()+"\n"));
|
funcp->addInitsp(new AstCStmt(nodep->fileline(), EmitCBaseVisitor::symTopAssign()+"\n"));
|
||||||
m_scopep->addActivep(funcp);
|
m_scopep->addActivep(funcp);
|
||||||
m_finalFuncp = funcp;
|
m_finalFuncp = funcp;
|
||||||
|
@ -121,7 +121,7 @@ private:
|
|||||||
newfuncp->isStatic(false);
|
newfuncp->isStatic(false);
|
||||||
newfuncp->addInitsp(
|
newfuncp->addInitsp(
|
||||||
new AstCStmt(newfuncp->fileline(),
|
new AstCStmt(newfuncp->fileline(),
|
||||||
" "+EmitCBaseVisitor::symClassVar()+" = this->__VlSymsp;\n"));
|
EmitCBaseVisitor::symClassVar()+" = this->__VlSymsp;\n"));
|
||||||
newfuncp->addInitsp(new AstCStmt(newfuncp->fileline(), EmitCBaseVisitor::symTopAssign()+"\n"));
|
newfuncp->addInitsp(new AstCStmt(newfuncp->fileline(), EmitCBaseVisitor::symTopAssign()+"\n"));
|
||||||
topFuncp->addNextHere(newfuncp);
|
topFuncp->addNextHere(newfuncp);
|
||||||
// In the body, call each function if it matches the given scope
|
// In the body, call each function if it matches the given scope
|
||||||
@ -224,7 +224,7 @@ private:
|
|||||||
if (m_needThis) {
|
if (m_needThis) {
|
||||||
nodep->v3fatalSrc("old code");
|
nodep->v3fatalSrc("old code");
|
||||||
// Really we should have more node types for backend optimization of this stuff
|
// Really we should have more node types for backend optimization of this stuff
|
||||||
string text = " "+v3Global.opt.modPrefix() + "_" + m_modp->name()
|
string text = v3Global.opt.modPrefix() + "_" + m_modp->name()
|
||||||
+"* thisp = &("+m_scopep->nameVlSym()+");\n";
|
+"* thisp = &("+m_scopep->nameVlSym()+");\n";
|
||||||
nodep->addInitsp(new AstCStmt(nodep->fileline(), text));
|
nodep->addInitsp(new AstCStmt(nodep->fileline(), text));
|
||||||
}
|
}
|
||||||
|
@ -412,7 +412,11 @@ public:
|
|||||||
puts(",\"\");\n");
|
puts(",\"\");\n");
|
||||||
}
|
}
|
||||||
virtual void visit(AstText* nodep, AstNUser*) {
|
virtual void visit(AstText* nodep, AstNUser*) {
|
||||||
ofp()->putsNoTracking(nodep->text());
|
if (nodep->tracking()) {
|
||||||
|
puts(nodep->text());
|
||||||
|
} else {
|
||||||
|
ofp()->putsNoTracking(nodep->text());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
virtual void visit(AstCStmt* nodep, AstNUser*) {
|
virtual void visit(AstCStmt* nodep, AstNUser*) {
|
||||||
putbs("");
|
putbs("");
|
||||||
|
@ -136,6 +136,12 @@ class LifeBlock {
|
|||||||
LifeBlock* m_aboveLifep; // Upper life, or NULL
|
LifeBlock* m_aboveLifep; // Upper life, or NULL
|
||||||
LifeState* m_statep; // Current global state
|
LifeState* m_statep; // Current global state
|
||||||
|
|
||||||
|
static int debug() {
|
||||||
|
static int level = -1;
|
||||||
|
if (VL_UNLIKELY(level < 0)) level = v3Global.opt.debugSrcLevel(__FILE__);
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
LifeBlock(LifeBlock* aboveLifep, LifeState* statep) {
|
LifeBlock(LifeBlock* aboveLifep, LifeState* statep) {
|
||||||
m_aboveLifep = aboveLifep; // Null if top
|
m_aboveLifep = aboveLifep; // Null if top
|
||||||
|
@ -285,7 +285,8 @@ void process () {
|
|||||||
|
|
||||||
// Push constants across variables and remove redundant assignments
|
// Push constants across variables and remove redundant assignments
|
||||||
V3Const::constifyAll(v3Global.rootp());
|
V3Const::constifyAll(v3Global.rootp());
|
||||||
//v3Global.rootp()->dumpTreeFile(v3Global.debugFilename("const.tree"));
|
v3Global.rootp()->dumpTreeFile(v3Global.debugFilename("const.tree"));
|
||||||
|
|
||||||
if (v3Global.opt.oLife()) {
|
if (v3Global.opt.oLife()) {
|
||||||
V3Life::lifeAll(v3Global.rootp());
|
V3Life::lifeAll(v3Global.rootp());
|
||||||
v3Global.rootp()->dumpTreeFile(v3Global.debugFilename("life.tree"));
|
v3Global.rootp()->dumpTreeFile(v3Global.debugFilename("life.tree"));
|
||||||
|
@ -356,7 +356,9 @@ sub read_status {
|
|||||||
use vars qw($VAR1);
|
use vars qw($VAR1);
|
||||||
local $VAR1;
|
local $VAR1;
|
||||||
require $filename or die "%Error: $! $filename,";
|
require $filename or die "%Error: $! $filename,";
|
||||||
%{$self} = %{$VAR1};
|
if ($VAR1) {
|
||||||
|
%{$self} = %{$VAR1};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user