2288 #endif // DEFINE_ENUM
2289 #ifdef DEFINE_METHODS
2423 "IFNONE_PATH_ASSIGN",
2455 "expression width change",
2462 "logical left shift",
2463 "logical right shift",
2464 "arithmetic left shift",
2465 "arithmetic right shift",
2472 "instance reference",
2475 "call to enable a systask",
2476 "call to a timing task",
2477 "call to a function",
2478 "dimensioned reference (array/bit select)",
2480 "reference to variable",
2481 "reference to parameter",
2482 "reference to port",
2483 "reference to a forward declared variable",
2484 "reference to a genvar",
2485 "reference to a enum",
2486 "reference to a type",
2488 "variable declaration",
2489 "parameter declaration",
2490 "specify parameter declaration",
2492 "genvar declaration",
2495 "vector decl range specification",
2497 "vector subrange with ascending index select",
2498 "vector subrange with descending index select",
2499 "convert real to integer",
2500 "convert integer to real",
2501 "replication operator",
2502 "concatenation operator",
2504 "bitwise complement",
2507 "logical complement",
2509 "greater than or equal",
2511 "less than or equal",
2524 "condition expression operator",
2527 "always latch block",
2528 "always flip-flop block",
2529 "always combinational logic block",
2533 "procedural assignment",
2534 "generate intialize assignment",
2535 "procedural assignment with add",
2536 "procedural assignment with subtract",
2537 "procedural assignment with mul",
2538 "procedural assignment with div",
2539 "procedural assignment with mod",
2540 "procedural assignment with bitwise and",
2541 "procedural assignment with bitwise or",
2542 "procedural assignment with bitwise xor",
2543 "procedural assignment with left shift",
2544 "procedural assignment with right shift",
2545 "procedural assignment with left arithmetic shift",
2546 "procedural assignment with right arithmetic shift",
2548 "release statement",
2549 "nonblocking assignment",
2550 "positive event qualifier",
2551 "negative event qualifier",
2555 "min/typ/max expression",
2557 "forever statement",
2566 "continious assignment",
2569 "function definition",
2570 "module definition",
2571 "package definition",
2575 "external reference",
2577 "defparam statement",
2579 "path assignment statement",
2580 "ifnone path assignment statement",
2582 "procedural assignment",
2583 "deassign statement",
2584 "disable statement",
2585 "attribute specification",
2586 "structural if statement",
2587 "structural for statement",
2588 "structural case statement",
2592 "sentinal at end of port list",
2593 "expression represented by a macro",
2594 "enum specification",
2595 "member reference (structure, class or external",
2604 #endif // DEFINE_METHODS
2607 #ifdef DEFINE_CONSTRUCTOR
2674 n->
Arg<
char*>(0) = a0;
2689 n->
Arg<
char*>(0) = a0;
2703 n->
Arg<
const char*>(0) = a0;
2718 n->
Arg<
const char*>(0) = a0;
2732 n->
Arg<
const char*>(0) = a0;
2747 n->
Arg<
const char*>(0) = a0;
2761 n->
Arg<
const char*>(0) = a0;
2776 n->
Arg<
const char*>(0) = a0;
3777 n->
Arg<CEnum*>(0) = a0;
3792 n->
Arg<CEnum*>(0) = a0;
3806 n->
Arg<CTypedef*>(0) = a0;
3821 n->
Arg<CTypedef*>(0) = a0;
4017 n->
Arg<CTypedef*>(0) = a0;
4032 n->
Arg<CTypedef*>(0) = a0;
5304 n->
Arg<
bool>(0) = a0;
5323 n->
Arg<
bool>(0) = a0;
6575 n->
Arg<CPackage*>(0) = a0;
6590 n->
Arg<CPackage*>(0) = a0;
6792 n->
Arg<
int>(0) = a0;
6794 n->
Arg<
int>(2) = a2;
6795 n->
Arg<
int>(3) = a3;
6797 n->
Arg<
int>(5) = a5;
6819 n->
Arg<
int>(0) = a0;
6821 n->
Arg<
int>(2) = a2;
6822 n->
Arg<
int>(3) = a3;
6824 n->
Arg<
int>(5) = a5;
7227 n->
Arg<
char*>(0) = a0;
7242 n->
Arg<
char*>(0) = a0;
7282 n->
Arg<
const char*>(0) = a0;
7299 n->
Arg<
const char*>(0) = a0;
7551 #endif // DEFINE_CONSTUCTOR
7561 #ifdef DEFINE_METHODS
8287 return Arg<CEnum*>(0)->GetExpression()->IsVolatile();
8355 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsVolatile() : TRUE;
8429 return Array::WidthConstant(Arg<CNode*>(0),Arg<CNode*>(1));
8515 return Member::WidthConstant(Arg<CNode*>(0),Arg<CSymbol*>(1));
8585 return Array::WidthVolatile(Arg<CNode*>(0),Arg<CNode*>(1));
8671 return Member::WidthVolatile(Arg<CNode*>(0),Arg<CSymbol*>(1));
8834 return Array::WidthExp(Arg<CNode*>(0),Arg<CNode*>(1));
8900 return Arg<CNode*>(1);
8906 return Arg<CNode*>(1);
9092 return Member::WidthExp(Arg<CNode*>(0),Arg<CSymbol*>(1));
9183 return Array::WidthEvaluateable(Arg<CNode*>(0),Arg<CNode*>(1));
9269 return Member::WidthEvaluateable(Arg<CNode*>(0),Arg<CSymbol*>(1));
9299 return !Arg<CVector*>(0)->HasXZ();
9303 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9305 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9307 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9309 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9311 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9313 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9315 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9317 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9319 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9321 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9323 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9325 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9327 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9329 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9331 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9333 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9335 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9341 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9345 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() ==
eINT);
9347 return Arg<CDecl*>(0)->GetDataType()->GetTwoState() ||
9353 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() ==
eINTEGER);
9359 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() ==
eINT);
9365 return Arg<CEnum*>(0)->GetExpression()->IsNonX( integerIsNonX, exclude );
9371 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9373 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9375 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9377 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9379 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9381 return Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9383 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9385 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9387 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9389 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9391 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9393 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9395 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9397 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9399 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9401 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9403 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9405 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9407 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9409 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9411 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9413 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9415 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9417 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9419 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9421 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9423 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9425 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9427 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(2)->
IsNonX( integerIsNonX, exclude );
9429 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9431 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9433 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9435 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(2)->
IsNonX( integerIsNonX, exclude );
9439 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsNonX(integerIsNonX, exclude) : FALSE;
9441 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9443 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9445 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9447 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9449 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9451 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9937 n->fixedWidth = fixedWidth;
9939 n->attributes = attributes->
Clone(heap);
9941 for(
int i = 0; i <
ArgCount(); i++ ) {
9942 if( ((nodeMask>>i)&1) && Arg<CNode*>(i) ) {
9945 void* tmp = Arg<void*>(i);
9946 n->
Arg<
void*>(i) = tmp;
9962 if( !(*func)(
this, data ) ) {
10046 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->
PreVisit1( func, data );
10050 if(Arg<CGate*>(0)) Arg<CGate*>(0)->
PreVisit1( func, data );
10085 if(Arg<CNet*>(0)) Arg<CNet*>(0)->
PreVisit1( func, data );
10089 if(Arg<CVar*>(0)) Arg<CVar*>(0)->
PreVisit1( func, data );
10093 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PreVisit1( func, data );
10097 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PreVisit1( func, data );
10101 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->
PreVisit1( func, data );
10105 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->
PreVisit1( func, data );
10109 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->
PreVisit1( func, data );
10224 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->
PreVisit1( func, data );
10228 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->
PreVisit1( func, data );
10340 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->
PreVisit1( func, data );
10344 if(Arg<CModule*>(0)) Arg<CModule*>(0)->
PreVisit1( func, data );
10348 if(Arg<CPackage*>(0)) Arg<CPackage*>(0)->
PreVisit1( func, data );
10364 if(Arg<CPort*>(0)) Arg<CPort*>(0)->
PreVisit1( func, data );
10392 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->
PreVisit1( func, data );
10448 for(
int i = 0; i <
ArgCount(); i++ ) {
10449 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i)->PreVisit1( func, data );
10461 if( !(*func)( n, data ) ) {
10487 switch(
GetOp() ) {
10562 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->
PostVisit1( func, data );
10566 if(Arg<CGate*>(0)) Arg<CGate*>(0)->
PostVisit1( func, data );
10609 if(Arg<CNet*>(0)) Arg<CNet*>(0)->
PostVisit1( func, data );
10613 if(Arg<CVar*>(0)) Arg<CVar*>(0)->
PostVisit1( func, data );
10617 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostVisit1( func, data );
10621 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostVisit1( func, data );
10625 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->
PostVisit1( func, data );
10629 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->
PostVisit1( func, data );
10633 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->
PostVisit1( func, data );
10748 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->
PostVisit1( func, data );
10752 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->
PostVisit1( func, data );
10864 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->
PostVisit1( func, data );
10868 if(Arg<CModule*>(0)) Arg<CModule*>(0)->
PostVisit1( func, data );
10872 if(Arg<CPackage*>(0)) Arg<CPackage*>(0)->
PostVisit1( func, data );
10888 if(Arg<CPort*>(0)) Arg<CPort*>(0)->
PostVisit1( func, data );
10916 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->
PostVisit1( func, data );
10972 for(
int i = 0; i <
ArgCount(); i++ ) {
10973 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i)->PostVisit1( func, data );
10976 std::stack<CNode*> visitLog;
10994 while( !visitLog.empty() ) {
10995 CNode* top = visitLog.top();
10997 (*func)(top->
Arg<
CNode*>(1),data);
11003 (*func)(
this, data );
11020 switch(
GetOp() ) {
11095 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->
PostSubVisit1( func, data );
11099 if(Arg<CGate*>(0)) Arg<CGate*>(0)->
PostSubVisit1( func, data );
11142 if(Arg<CNet*>(0)) Arg<CNet*>(0)->
PostSubVisit1( func, data );
11146 if(Arg<CVar*>(0)) Arg<CVar*>(0)->
PostSubVisit1( func, data );
11150 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostSubVisit1( func, data );
11154 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostSubVisit1( func, data );
11158 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->
PostSubVisit1( func, data );
11162 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->
PostSubVisit1( func, data );
11166 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->
PostSubVisit1( func, data );
11281 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->
PostSubVisit1( func, data );
11285 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->
PostSubVisit1( func, data );
11397 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->
PostSubVisit1( func, data );
11401 if(Arg<CModule*>(0)) Arg<CModule*>(0)->
PostSubVisit1( func, data );
11405 if(Arg<CPackage*>(0)) Arg<CPackage*>(0)->
PostSubVisit1( func, data );
11421 if(Arg<CPort*>(0)) Arg<CPort*>(0)->
PostSubVisit1( func, data );
11449 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->
PostSubVisit1( func, data );
11505 for(
int i = 0; i <
ArgCount(); i++ ) {
11506 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i) = Arg<CNode*>(i)->
PostSubVisit1( func, data );
11509 std::stack<CNode*> visitLog;
11528 while( !visitLog.empty() ) {
11529 CNode* top = visitLog.top();
11537 return (*func)(
this, data );
11550 unsigned result =
GetOp();
11552 switch(
GetOp() ) {
11558 result ^= Arg<CVector*>(0)->
Hash();
11562 result ^= strlen(Arg<char*>(0));
11566 result ^= strlen(Arg<char*>(0));
11570 result ^= strlen(Arg<char*>(0));
11574 result ^= strlen(Arg<char*>(0));
11632 result ^= Arg<unsigned long>(0);
11636 result ^= Arg<unsigned long>(0);
11640 result ^= Arg<unsigned long>(0);
11644 result ^= Arg<unsigned long>(0);
11648 result ^= Arg<unsigned long>(0);
11652 result ^= Arg<unsigned long>(0);
11653 result ^= Arg<unsigned long>(2);
11660 result ^= Arg<unsigned long>(0);
11664 result ^= Arg<unsigned long>(0);
11668 result ^= Arg<unsigned long>(0);
11672 result ^= Arg<unsigned long>(0);
11676 result ^= Arg<unsigned long>(0);
11680 result ^= Arg<unsigned long>(0);
11684 result ^= Arg<unsigned long>(0);
11688 result ^= Arg<unsigned long>(0);
11692 result ^= Arg<unsigned long>(0);
11696 result ^= Arg<unsigned long>(0);
11700 result ^= Arg<unsigned long>(0);
11704 result ^= Arg<unsigned long>(0);
11708 result ^= Arg<unsigned long>(0);
11712 result ^= Arg<unsigned long>(0);
11716 result ^= Arg<unsigned long>(0);
11831 result ^= Arg<unsigned long>(0);
11835 result ^= Arg<unsigned long>(0);
11842 result ^= Arg<bool>(0);
11897 result ^= (
unsigned long)Arg<Edge_t>(1);
11940 result ^= Arg<unsigned long>(0);
11944 result ^= Arg<unsigned long>(0);
11948 result ^= Arg<unsigned long>(0);
11952 result ^= Arg<unsigned long>(0);
11956 result ^= Arg<unsigned long>(0);
11960 result ^= Arg<unsigned long>(0);
11973 result ^= Arg<unsigned long>(0);
11977 result ^= Arg<unsigned long>(0);
11984 result ^= Arg<int>(0);
11985 result ^= Arg<int>(2);
11986 result ^= Arg<int>(3);
11987 result ^= Arg<int>(5);
12006 result ^= Arg<unsigned long>(0);
12010 result ^= Arg<unsigned long>(0);
12029 result ^= strlen(Arg<char*>(0));
12036 result ^= strlen(Arg<char*>(0));
12040 result ^= Arg<unsigned long>(0);
12044 result ^= Arg<unsigned long>(1);
12066 for(
int i = 0; i <
ArgCount(); i++ ) {
12067 if( !((nodeMask>>i)&1) ) result ^= Arg<CNode*>(i)->Hash();
12095 if( a == NULL || b == NULL ) {
12106 switch( a->
GetOp() ) {
12116 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12120 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12124 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12128 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12514 if( !(a->
Arg<CPackage*>(0)==b->
Arg<CPackage*>(0)) ) {
return FALSE; }
12538 if( !(a->
Arg<
int>(0)==b->
Arg<
int>(0)) ) {
return FALSE; }
12539 if( !(a->
Arg<
int>(2)==b->
Arg<
int>(2)) ) {
return FALSE; }
12540 if( !(a->
Arg<
int>(3)==b->
Arg<
int>(3)) ) {
return FALSE; }
12541 if( !(a->
Arg<
int>(5)==b->
Arg<
int>(5)) ) {
return FALSE; }
12583 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12590 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12620 for(
int i = 0; i < a->
ArgCount(); i++ ) {
12621 if( !((nodeMask>>i)&1) &&
12638 return Arg<CParam*>(0)->GetExpression()->IsEvaluateable();
12640 return Arg<CParam*>(0)->GetExpression()->IsEvaluateable();
12642 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsEvaluateable() : FALSE;
12800 for(
int i = 0; i <
ArgCount(); i++ ) {
12801 if( !Arg<CNode*>(i)->IsEvaluateable() )
return FALSE;
12816 void CNode::_EvalVector(
CVector& v )
12823 {
CVector vi(Arg<CNode*>(1)->width); vi.Signed(Arg<CNode*>(1)->type==
eS);v.
Signed(type==
eS); Arg<CNode*>(1)->_EvalVector(vi); vi.SetWidth(width);vi.Signed(type==
eS); v = vi;};
12826 EVAL_VECTOR_BINARY(
Sub);
12829 EVAL_VECTOR_BINARY(
Mul);
12832 EVAL_VECTOR_BINARY(
Div);
12835 EVAL_VECTOR_BINARY(
Pow);
12838 EVAL_VECTOR_BINARY(
Add);
12841 EVAL_VECTOR_BINARY_SELF_RIGHT(Lsh);
12844 EVAL_VECTOR_BINARY_SELF_RIGHT(Rsh);
12847 EVAL_VECTOR_BINARY_SELF_RIGHT(Lsha);
12850 EVAL_VECTOR_BINARY_SELF_RIGHT(Rsha);
12853 EVAL_VECTOR_BINARY(Mod);
12856 EVAL_VECTOR_BINARY(Or);
12859 EVAL_VECTOR_BINARY(And);
12862 EVAL_VECTOR_BINARY(Xor);
12865 EVAL_VECTOR_BINARY(Xnor);
12871 EVAL_VECTOR_PARAM_REF();
12874 EVAL_VECTOR_ENUM_REF();
12877 v.
LoadReal( Arg<CNode*>(0)->_EvalReal() );
12880 EVAL_VECTOR_BINARY(Rep);
12883 EVAL_VECTOR_BINARY(Cat);
12886 {
CVector vv(Arg<CNode*>(0)->width); Arg<CNode*>(0)->_EvalVector(vv); v = vv;};
12889 EVAL_VECTOR_UNARY(Com);
12892 EVAL_VECTOR_UNARY(
Neg);
12895 EVAL_VECTOR_UNARY(
Plus);
12898 EVAL_VECTOR_UNARY(Not);
12901 EVAL_RELATIONAL(Gt);
12904 EVAL_RELATIONAL(Ge);
12907 EVAL_RELATIONAL(Lt);
12910 EVAL_RELATIONAL(Le);
12913 EVAL_VECTOR_BINARY(Land);
12916 EVAL_VECTOR_BINARY(Lor);
12919 EVAL_RELATIONAL(Ceq);
12922 EVAL_RELATIONAL(Cne);
12925 EVAL_RELATIONAL(Eq);
12928 EVAL_RELATIONAL(Ne);
12931 EVAL_VECTOR_UNARY_SELF(Rand);
12934 EVAL_VECTOR_UNARY_SELF(Rnand);
12937 EVAL_VECTOR_UNARY_SELF(Ror);
12940 EVAL_VECTOR_UNARY_SELF(Rnor);
12943 EVAL_VECTOR_UNARY_SELF(Rxor);
12946 EVAL_VECTOR_UNARY_SELF(Rxnor);
12949 EVAL_VECTOR_HOOK();
12968 double CNode::_EvalReal()
12973 d =
s2d(Arg<char*>(0));
12976 EVAL_REAL_BINARY(
Sub);
12979 EVAL_REAL_BINARY(
Mul);
12982 EVAL_REAL_BINARY(
Div);
12985 EVAL_REAL_BINARY(
Pow);
12988 EVAL_REAL_BINARY(
Add);
12994 EVAL_REAL_PARAM_REF();
12997 EVAL_REAL_ENUM_REF();
13000 {
CVector v(Arg<CNode*>(0)->width); v.
Signed(Arg<CNode*>(0)->type ==
eS); Arg<CNode*>(0)->_EvalVector(v); d = v.
GetReal(); };
13003 EVAL_REAL_UNARY(
Neg);
13006 EVAL_REAL_UNARY(
Plus);
13024 int CNode::ConditionalWiden()
13026 switch(
GetOp() ) {
13184 unsigned CNode::NodeMask()
13186 switch(
GetOp() ) {
13506 int CNode::WidthFixed()
13508 switch(
GetOp() ) {
13510 return NodeMask()==0;
13514 return NodeMask()==0;
13516 return NodeMask()==0;
13518 return NodeMask()==0;
13520 return NodeMask()==0;
13522 return NodeMask()==0;
13524 return NodeMask()==0;
13526 return NodeMask()==0;
13528 return NodeMask()==0;
13530 return NodeMask()==0;
13532 return NodeMask()==0;
13534 return NodeMask()==0;
13536 return NodeMask()==0;
13538 return NodeMask()==0;
13540 return NodeMask()==0;
13542 return NodeMask()==0;
13544 return NodeMask()==0;
13546 return NodeMask()==0;
13548 return NodeMask()==0;
13550 return NodeMask()==0;
13552 return NodeMask()==0;
13554 return NodeMask()==0;
13556 return NodeMask()==0;
13558 return NodeMask()==0;
13560 return NodeMask()==0;
13562 return NodeMask()==0;
13564 return NodeMask()==0;
13566 return NodeMask()==0;
13570 return NodeMask()==0;
13572 return NodeMask()==0;
13574 return NodeMask()==0;
13576 return NodeMask()==0;
13582 return NodeMask()==0;
13584 return NodeMask()==0;
13586 return NodeMask()==0;
13588 return NodeMask()==0;
13590 return NodeMask()==0;
13592 return NodeMask()==0;
13628 return NodeMask()==0;
13630 return NodeMask()==0;
13632 return NodeMask()==0;
13634 return NodeMask()==0;
13636 return NodeMask()==0;
13638 return NodeMask()==0;
13642 return NodeMask()==0;
13644 return NodeMask()==0;
13646 return NodeMask()==0;
13648 return NodeMask()==0;
13650 return NodeMask()==0;
13652 return NodeMask()==0;
13654 return NodeMask()==0;
13670 void CNode::_LabelBits(
CNode* n,
void* arg )
13678 if( labelCacheEnabled && (evalCount == 0 || !evalHeap.
IsOwner(n)) ) {
13679 if( labelCache.find(n) != labelCache.end() ) {
13688 unsigned nodeMask = n->NodeMask();
13689 int conditionalWiden = n->ConditionalWiden();
13691 switch( n->
GetOp() ) {
13703 if( !suppressErrorMessages ) {
13706 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13708 if( !suppressErrorMessages ) {
13725 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13736 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13747 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13758 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13769 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13808 if( !suppressErrorMessages ) {
13811 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13813 if( !suppressErrorMessages ) {
13825 if( !suppressErrorMessages ) {
13828 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13830 if( !suppressErrorMessages ) {
13842 if( !suppressErrorMessages ) {
13845 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13847 if( !suppressErrorMessages ) {
13859 if( !suppressErrorMessages ) {
13862 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13864 if( !suppressErrorMessages ) {
13874 if( !suppressErrorMessages ) {
13877 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13879 if( !suppressErrorMessages ) {
13891 if( !suppressErrorMessages ) {
13894 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13896 if( !suppressErrorMessages ) {
13945 if( !suppressErrorMessages ) {
13948 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13950 if( !suppressErrorMessages ) {
13960 if( !suppressErrorMessages ) {
13963 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13965 if( !suppressErrorMessages ) {
13975 if( !suppressErrorMessages ) {
13985 if( !suppressErrorMessages ) {
14005 if( !suppressErrorMessages ) {
14008 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14010 if( !suppressErrorMessages ) {
14020 if( !suppressErrorMessages ) {
14023 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14025 if( !suppressErrorMessages ) {
14035 if( !suppressErrorMessages ) {
14045 if( !suppressErrorMessages ) {
14048 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14055 n->type = n->
Arg<
CNode*>(0)->type;
14058 n->type = n->
Arg<
CNode*>(0)->type;
14098 if( !suppressErrorMessages ) {
14101 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14103 if( !suppressErrorMessages ) {
14113 if( !suppressErrorMessages ) {
14116 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14118 if( !suppressErrorMessages ) {
14138 if( !suppressErrorMessages ) {
14148 if( !suppressErrorMessages ) {
14158 if( !suppressErrorMessages ) {
14168 if( !suppressErrorMessages ) {
14178 if( !suppressErrorMessages ) {
14188 if( !suppressErrorMessages ) {
14198 }
else if( n->
Arg<
CNode*>(2)->type ==
eR ) {
14224 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14226 }
else if( n->
Arg<
CNode*>(2)->type ==
eR ) {
14243 n->type = n->
Arg<
CNode*>(1)->type;
14251 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14260 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14269 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14278 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14296 switch( n->type ) {
14307 switch( n->
GetOp() ) {
14333 n->width = n->
Arg<
CNode*>(0)->width;
14339 n->width = n->
Arg<
CNode*>(0)->width;
14342 n->width = n->
Arg<
CNode*>(0)->width;
14345 n->width = n->
Arg<
CNode*>(0)->width;
14348 n->width = n->
Arg<
CNode*>(0)->width;
14426 n->width = n->
Arg<
CNode*>(0)->width;
14429 n->width = n->
Arg<
CNode*>(0)->width;
14432 n->width = n->
Arg<
CNode*>(0)->width;
14435 n->width = n->
Arg<
CNode*>(0)->width;
14501 n->width = n->
Arg<
CNode*>(1)->width;
14507 n->width = n->
Arg<
CNode*>(0)->width;
14510 n->width = n->
Arg<
CNode*>(0)->width;
14513 n->width = n->
Arg<
CNode*>(0)->width;
14516 n->width = n->
Arg<
CNode*>(0)->width;
14527 int operandWidth = -1;
14528 for(
int i = 0; i < n->
ArgCount(); i++ ) {
14529 if( ((nodeMask>>i)&1) && n->
Arg<
CNode*>(i) ) {
14530 int widthFixed = n->
Arg<
CNode*>(i)->WidthFixed() ||
14533 if( n->ConditionalWiden() && !widthFixed ) {
14534 n->FixedWidth( 0 );
14536 }
else if( !widthFixed ) {
14537 n->FixedWidth( 0 );
14541 if( operandWidth != w ) {
14542 if( operandWidth >= 0 ) {
14543 n->FixedWidth( 0 );
14551 if( !conditionalWiden && nodeMask != 0 ) {
14552 n->FixedWidth( 0 );
14568 int calculateMax = 0;
14570 int conditionalWiden = ConditionalWiden();
14571 unsigned nodeMask = NodeMask();
14572 unsigned scalarMask = 0;
14573 unsigned selfDeterminedMask = 0;
14574 switch(
GetOp() ) {
14595 selfDeterminedMask = nodeMask;
14599 selfDeterminedMask = nodeMask;
14615 selfDeterminedMask = 1<<1;
14622 selfDeterminedMask = 1<<1;
14626 selfDeterminedMask = 1<<1;
14630 selfDeterminedMask = 1<<1;
14634 selfDeterminedMask = 1<<1;
14665 selfDeterminedMask = nodeMask;
14672 selfDeterminedMask = nodeMask;
14676 selfDeterminedMask = 1<<1;
14728 selfDeterminedMask = nodeMask;
14732 selfDeterminedMask = nodeMask;
14736 selfDeterminedMask = nodeMask;
14740 selfDeterminedMask = nodeMask;
14744 selfDeterminedMask = nodeMask;
14748 selfDeterminedMask = nodeMask;
14752 selfDeterminedMask = nodeMask;
14756 selfDeterminedMask = nodeMask;
14760 selfDeterminedMask = nodeMask;
14817 selfDeterminedMask = nodeMask;
14821 selfDeterminedMask = nodeMask;
14825 selfDeterminedMask = nodeMask;
14829 selfDeterminedMask = nodeMask;
14833 selfDeterminedMask = nodeMask;
14837 selfDeterminedMask = nodeMask;
15073 selfDeterminedMask = nodeMask;
15081 unsigned realMask = 0;
15082 unsigned forceRealMask = 0;
15083 int widthsDiffer = 0;
15084 int originalWidth = width;
15085 for(
int i = 0; i <
ArgCount(); i++ ) {
15086 if( ((nodeMask>>i)&1) && Arg<CNode*>(i)->type ==
eR ) {
15089 if( ((nodeMask>>i)&1) &&
15090 Arg<CNode*>(i)->type !=
eR &&
15092 Arg<CNode*>(i)->width != width) ) {
15100 if( newType ==
eU && newWidth == 0 ) {
15107 }
else if( (newType ==
eB || newType ==
eS || newType ==
eU) &&
15108 (type ==
eB || type ==
eS) ) {
15109 if( newWidth > width ) {
15112 if( newType ==
eU ) {
15117 MASSERT( newType !=
eR || newWidth == 0 );
15118 MASSERT( newType !=
eE || newWidth == 0 );
15125 forceRealMask = (~realMask & nodeMask);
15132 int convertWidth = conditionalWiden && FixedWidth();
15133 if( convertWidth ) {
15134 width = originalWidth;
15136 if( newType ==
eB && type ==
eS ) {
15142 int cWidth = width;
15144 if( calculateMax ) {
15148 int foundUnsigned = 0;
15149 for(
int i = 0; i <
ArgCount(); i++ ) {
15150 if( (nodeMask>>i)&1 ) {
15151 switch( Arg<CNode*>(i)->type ) {
15159 if( Arg<CNode*>(i)->width > max ) {
15160 max = Arg<CNode*>(i)->width;
15167 }
else if( foundUnsigned ) {
15178 for(
int i = 0; i <
ArgCount(); i++ ) {
15179 if( (nodeMask>>i)&1 ) {
15180 if( (scalarMask>>i)&1 ) {
15181 if( Arg<CNode*>(i)->type ==
eR ) {
15183 Arg<CNode*>(i) =
cNE( Arg<CNode*>(i),
cREAL(0), &loc );
15184 Arg<CNode*>(i)->LabelBits();
15185 }
else if( type ==
eR ) {
15188 Arg<CNode*>(i) =
cCNE( Arg<CNode*>(i),
cINT32(0), &loc );
15189 Arg<CNode*>(i)->LabelBits();
15191 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0,
eU );
15192 }
else if( (forceRealMask>>i)&1 ) {
15193 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0,
eR );
15194 }
else if( (selfDeterminedMask>>i)&1 ) {
15195 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0,
eU );
15197 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( cWidth, cType );
15207 if( newType !=
eR && convertWidth ) {
15209 nn->width = newWidth;
15213 if( newType ==
eR && (type ==
eB || type ==
eS) ) {
15219 }
else if( (newType ==
eB || newType ==
eS) && type ==
eR ) {
15221 nn->width = newWidth;
15222 nn->type = newType;
15235 switch(
GetOp() ) {
15237 fprintf( f,
"%s",
"???" );
15240 fprintf( f,
"%s", Arg<CVector*>(0)->GetVString() );
15243 fprintf( f,
"%s", (
char*)Arg<char*>(0) );
15246 fprintf( f,
"%s", (
char*)Arg<char*>(0) );
15249 fprintf( f,
"%s",
"" );
15250 Arg<CNode*>(0)->
Dump( f );
15251 fprintf( f,
"%s",
"," );
15252 Arg<CNode*>(1)->
Dump( f );
15253 fprintf( f,
"%s",
"" );
15256 fprintf( f,
"%s",
"WIDTH(" );
15257 fprintf( f,
"%s", type==
eS ?
"S" :
"U" );
15258 fprintf( f,
"%s",
"," );
15259 fprintf( f,
"%ld", width );
15260 fprintf( f,
"%s",
"," );
15261 Arg<CNode*>(0)->
Dump( f );
15262 fprintf( f,
"%s",
"," );
15263 Arg<CNode*>(1)->
Dump( f );
15264 fprintf( f,
"%s",
")" );
15267 fprintf( f,
"%s",
"(" );
15268 Arg<CNode*>(0)->
Dump( f );
15269 fprintf( f,
"%s",
")-(" );
15270 Arg<CNode*>(1)->
Dump( f );
15271 fprintf( f,
"%s",
")" );
15274 fprintf( f,
"%s",
"(" );
15275 Arg<CNode*>(0)->
Dump( f );
15276 fprintf( f,
"%s",
")*(" );
15277 Arg<CNode*>(1)->
Dump( f );
15278 fprintf( f,
"%s",
")" );
15281 fprintf( f,
"%s",
"(" );
15282 Arg<CNode*>(0)->
Dump( f );
15283 fprintf( f,
"%s",
")/(" );
15284 Arg<CNode*>(1)->
Dump( f );
15285 fprintf( f,
"%s",
")" );
15288 fprintf( f,
"%s",
"(" );
15289 Arg<CNode*>(0)->
Dump( f );
15290 fprintf( f,
"%s",
")**(" );
15291 Arg<CNode*>(1)->
Dump( f );
15292 fprintf( f,
"%s",
")" );
15295 fprintf( f,
"%s",
"(" );
15296 Arg<CNode*>(0)->
Dump( f );
15297 fprintf( f,
"%s",
")+(" );
15298 Arg<CNode*>(1)->
Dump( f );
15299 fprintf( f,
"%s",
")" );
15302 fprintf( f,
"%s",
"(" );
15303 Arg<CNode*>(0)->
Dump( f );
15304 fprintf( f,
"%s",
")<<(" );
15305 Arg<CNode*>(1)->
Dump( f );
15306 fprintf( f,
"%s",
")" );
15309 fprintf( f,
"%s",
"(" );
15310 Arg<CNode*>(0)->
Dump( f );
15311 fprintf( f,
"%s",
")>>(" );
15312 Arg<CNode*>(1)->
Dump( f );
15313 fprintf( f,
"%s",
")" );
15316 fprintf( f,
"%s",
"(" );
15317 Arg<CNode*>(0)->
Dump( f );
15318 fprintf( f,
"%s",
")<<<(" );
15319 Arg<CNode*>(1)->
Dump( f );
15320 fprintf( f,
"%s",
")" );
15323 fprintf( f,
"%s",
"(" );
15324 Arg<CNode*>(0)->
Dump( f );
15325 fprintf( f,
"%s",
")>>>(" );
15326 Arg<CNode*>(1)->
Dump( f );
15327 fprintf( f,
"%s",
")" );
15330 fprintf( f,
"%s",
"(" );
15331 Arg<CNode*>(0)->
Dump( f );
15332 fprintf( f,
"%s",
")%%(" );
15333 Arg<CNode*>(1)->
Dump( f );
15334 fprintf( f,
"%s",
")" );
15337 fprintf( f,
"%s",
"(" );
15338 Arg<CNode*>(0)->
Dump( f );
15339 fprintf( f,
"%s",
")|(" );
15340 Arg<CNode*>(1)->
Dump( f );
15341 fprintf( f,
"%s",
")" );
15344 fprintf( f,
"%s",
"(" );
15345 Arg<CNode*>(0)->
Dump( f );
15346 fprintf( f,
"%s",
")&(" );
15347 Arg<CNode*>(1)->
Dump( f );
15348 fprintf( f,
"%s",
")" );
15351 fprintf( f,
"%s",
"(" );
15352 Arg<CNode*>(0)->
Dump( f );
15353 fprintf( f,
"%s",
")&&&(" );
15354 Arg<CNode*>(1)->
Dump( f );
15355 fprintf( f,
"%s",
")" );
15358 fprintf( f,
"%s",
"(" );
15359 Arg<CNode*>(0)->
Dump( f );
15360 fprintf( f,
"%s",
")^(" );
15361 Arg<CNode*>(1)->
Dump( f );
15362 fprintf( f,
"%s",
")" );
15365 fprintf( f,
"%s",
"(" );
15366 Arg<CNode*>(0)->
Dump( f );
15367 fprintf( f,
"%s",
")~^(" );
15368 Arg<CNode*>(1)->
Dump( f );
15369 fprintf( f,
"%s",
")" );
15372 fprintf( f,
"%s",
"" );
15373 fprintf( f,
"%s", Arg<CSymbol*>(0)->GetName() );
15374 fprintf( f,
"%s",
"(" );
15375 Arg<CNode*>(1)->
Dump( f );
15376 fprintf( f,
"%s",
")" );
15379 fprintf( f,
"%s",
"" );
15380 Arg<CNode*>(0)->
Dump( f );
15381 fprintf( f,
"%s",
"[" );
15382 Arg<CNode*>(1)->
Dump( f );
15383 fprintf( f,
"%s",
"]" );
15386 fprintf( f,
"%s", Arg<CNet*>(0)->GetName() );
15389 fprintf( f,
"%s", Arg<CVar*>(0)->GetName() );
15392 fprintf( f,
"%s", Arg<CParam*>(0)->GetName() );
15395 fprintf( f,
"%s", Arg<CPort*>(0)->GetName() );
15398 fprintf( f,
"%s", Arg<CFref*>(0)->GetName() );
15401 fprintf( f,
"%s", Arg<CGenvar*>(0)->GetName() );
15404 fprintf( f,
"%s", Arg<CEnum*>(0)->GetName() );
15407 fprintf( f,
"%s", Arg<CTypedef*>(0)->GetName() );
15410 fprintf( f,
"%s",
"VarDecl" );
15413 fprintf( f,
"%s",
"(" );
15414 Arg<CNode*>(0)->
Dump( f );
15415 fprintf( f,
"%s",
"," );
15416 Arg<CNode*>(1)->
Dump( f );
15417 fprintf( f,
"%s",
")" );
15420 fprintf( f,
"%s",
"" );
15421 Arg<CNode*>(0)->
Dump( f );
15422 fprintf( f,
"%s",
":" );
15423 Arg<CNode*>(1)->
Dump( f );
15424 fprintf( f,
"%s",
"" );
15427 fprintf( f,
"%s",
"" );
15428 Arg<CNode*>(0)->
Dump( f );
15429 fprintf( f,
"%s",
":" );
15430 Arg<CNode*>(1)->
Dump( f );
15431 fprintf( f,
"%s",
"" );
15434 fprintf( f,
"%s",
"" );
15435 Arg<CNode*>(0)->
Dump( f );
15436 fprintf( f,
"%s",
"+:" );
15437 Arg<CNode*>(1)->
Dump( f );
15438 fprintf( f,
"%s",
"" );
15441 fprintf( f,
"%s",
"" );
15442 Arg<CNode*>(0)->
Dump( f );
15443 fprintf( f,
"%s",
"-:" );
15444 Arg<CNode*>(1)->
Dump( f );
15445 fprintf( f,
"%s",
"" );
15448 fprintf( f,
"%s",
"CVRI(" );
15449 Arg<CNode*>(0)->
Dump( f );
15450 fprintf( f,
"%s",
")" );
15453 fprintf( f,
"%s",
"CVIR(" );
15454 Arg<CNode*>(0)->
Dump( f );
15455 fprintf( f,
"%s",
")" );
15458 fprintf( f,
"%s",
"{" );
15459 Arg<CNode*>(0)->
Dump( f );
15460 fprintf( f,
"%s",
"{" );
15461 Arg<CNode*>(1)->
Dump( f );
15462 fprintf( f,
"%s",
"}}" );
15465 fprintf( f,
"%s",
"{" );
15466 Arg<CNode*>(0)->
Dump( f );
15467 fprintf( f,
"%s",
"," );
15468 Arg<CNode*>(1)->
Dump( f );
15469 fprintf( f,
"%s",
"}" );
15472 fprintf( f,
"%s",
"{" );
15473 Arg<CNode*>(0)->
Dump( f );
15474 fprintf( f,
"%s",
"}" );
15477 fprintf( f,
"%s",
"~(" );
15478 Arg<CNode*>(0)->
Dump( f );
15479 fprintf( f,
"%s",
")" );
15482 fprintf( f,
"%s",
"-(" );
15483 Arg<CNode*>(0)->
Dump( f );
15484 fprintf( f,
"%s",
")" );
15487 fprintf( f,
"%s",
"+(" );
15488 Arg<CNode*>(0)->
Dump( f );
15489 fprintf( f,
"%s",
")" );
15492 fprintf( f,
"%s",
"!(" );
15493 Arg<CNode*>(0)->
Dump( f );
15494 fprintf( f,
"%s",
")" );
15497 fprintf( f,
"%s",
"(" );
15498 Arg<CNode*>(0)->
Dump( f );
15499 fprintf( f,
"%s",
")>(" );
15500 Arg<CNode*>(1)->
Dump( f );
15501 fprintf( f,
"%s",
")" );
15504 fprintf( f,
"%s",
"(" );
15505 Arg<CNode*>(0)->
Dump( f );
15506 fprintf( f,
"%s",
")>=(" );
15507 Arg<CNode*>(1)->
Dump( f );
15508 fprintf( f,
"%s",
")" );
15511 fprintf( f,
"%s",
"(" );
15512 Arg<CNode*>(0)->
Dump( f );
15513 fprintf( f,
"%s",
")<(" );
15514 Arg<CNode*>(1)->
Dump( f );
15515 fprintf( f,
"%s",
")" );
15518 fprintf( f,
"%s",
"(" );
15519 Arg<CNode*>(0)->
Dump( f );
15520 fprintf( f,
"%s",
")<=(" );
15521 Arg<CNode*>(1)->
Dump( f );
15522 fprintf( f,
"%s",
")" );
15525 fprintf( f,
"%s",
"(" );
15526 Arg<CNode*>(0)->
Dump( f );
15527 fprintf( f,
"%s",
")&&(" );
15528 Arg<CNode*>(1)->
Dump( f );
15529 fprintf( f,
"%s",
")" );
15532 fprintf( f,
"%s",
"(" );
15533 Arg<CNode*>(0)->
Dump( f );
15534 fprintf( f,
"%s",
")||(" );
15535 Arg<CNode*>(1)->
Dump( f );
15536 fprintf( f,
"%s",
")" );
15539 fprintf( f,
"%s",
"(" );
15540 Arg<CNode*>(0)->
Dump( f );
15541 fprintf( f,
"%s",
")===(" );
15542 Arg<CNode*>(1)->
Dump( f );
15543 fprintf( f,
"%s",
")" );
15546 fprintf( f,
"%s",
"(" );
15547 Arg<CNode*>(0)->
Dump( f );
15548 fprintf( f,
"%s",
")!==(" );
15549 Arg<CNode*>(1)->
Dump( f );
15550 fprintf( f,
"%s",
")" );
15553 fprintf( f,
"%s",
"(" );
15554 Arg<CNode*>(0)->
Dump( f );
15555 fprintf( f,
"%s",
")==(" );
15556 Arg<CNode*>(1)->
Dump( f );
15557 fprintf( f,
"%s",
")" );
15560 fprintf( f,
"%s",
"(" );
15561 Arg<CNode*>(0)->
Dump( f );
15562 fprintf( f,
"%s",
")!=(" );
15563 Arg<CNode*>(1)->
Dump( f );
15564 fprintf( f,
"%s",
")" );
15567 fprintf( f,
"%s",
"&(" );
15568 Arg<CNode*>(0)->
Dump( f );
15569 fprintf( f,
"%s",
")" );
15572 fprintf( f,
"%s",
"~&(" );
15573 Arg<CNode*>(0)->
Dump( f );
15574 fprintf( f,
"%s",
")" );
15577 fprintf( f,
"%s",
"|(" );
15578 Arg<CNode*>(0)->
Dump( f );
15579 fprintf( f,
"%s",
")" );
15582 fprintf( f,
"%s",
"~|(" );
15583 Arg<CNode*>(0)->
Dump( f );
15584 fprintf( f,
"%s",
")" );
15587 fprintf( f,
"%s",
"^(" );
15588 Arg<CNode*>(0)->
Dump( f );
15589 fprintf( f,
"%s",
")" );
15592 fprintf( f,
"%s",
"~^(" );
15593 Arg<CNode*>(0)->
Dump( f );
15594 fprintf( f,
"%s",
")" );
15597 fprintf( f,
"%s",
"(" );
15598 Arg<CNode*>(0)->
Dump( f );
15599 fprintf( f,
"%s",
")?(" );
15600 Arg<CNode*>(1)->
Dump( f );
15601 fprintf( f,
"%s",
"):(" );
15602 Arg<CNode*>(2)->
Dump( f );
15603 fprintf( f,
"%s",
")" );
15606 fprintf( f,
"%s",
"INIT(*)" );
15609 fprintf( f,
"%s",
"POSEDGE(" );
15610 Arg<CNode*>(0)->
Dump( f );
15611 fprintf( f,
"%s",
")" );
15614 fprintf( f,
"%s",
"NEGEDGE(" );
15615 Arg<CNode*>(0)->
Dump( f );
15616 fprintf( f,
"%s",
")" );
15619 fprintf( f,
"%s",
"EDGE(" );
15620 Arg<CNode*>(0)->
Dump( f );
15621 fprintf( f,
"%s",
")" );
15624 fprintf( f,
"%s",
"(" );
15625 Arg<CNode*>(0)->
Dump( f );
15626 fprintf( f,
"%s",
":" );
15627 Arg<CNode*>(1)->
Dump( f );
15628 fprintf( f,
"%s",
":" );
15629 Arg<CNode*>(2)->
Dump( f );
15630 fprintf( f,
"%s",
")" );
15633 fprintf( f,
"%s",
"MODULE_DEF" );
15636 fprintf( f,
"%s",
"PACKAGE_DEF" );
15639 fprintf( f,
"%s",
"" );
15640 fprintf( f,
"%s", (
const char*)Arg<const char*>(0) );
15641 fprintf( f,
"%s",
"<" );
15642 Arg<CNode*>(1)->
Dump( f );
15643 fprintf( f,
"%s",
">" );
15646 fprintf( f,
"%s",
"" );
15647 Arg<CNode*>(0)->
Dump( f );
15648 fprintf( f,
"%s",
"." );
15649 fprintf( f,
"%s", Arg<CSymbol*>(1)->GetName() );
15650 fprintf( f,
"%s",
"" );
15653 fprintf( f,
"%s",
"++(" );
15654 Arg<CNode*>(0)->
Dump( f );
15655 fprintf( f,
"%s",
")" );
15658 fprintf( f,
"%s",
"(" );
15659 Arg<CNode*>(0)->
Dump( f );
15660 fprintf( f,
"%s",
")++" );
15663 fprintf( f,
"%s",
"--(" );
15664 Arg<CNode*>(0)->
Dump( f );
15665 fprintf( f,
"%s",
")" );
15668 fprintf( f,
"%s",
"(" );
15669 Arg<CNode*>(0)->
Dump( f );
15670 fprintf( f,
"%s",
")--" );
15673 fprintf( f,
"%s",
"CAST(" );
15674 Arg<CNode*>(0)->
Dump( f );
15675 fprintf( f,
"%s",
"," );
15676 Arg<CNode*>(1)->
Dump( f );
15677 fprintf( f,
"%s",
")" );
15761 #endif // DEFINE_METHODS
15763 #ifdef DEFINE_TEST_HARNESS
15766 for(
int i = 0; i < 153; ++i ) {
15768 if( n->
Precedence() != n->Precedence_1() ) {
15774 #endif // DEFINE_TEST_HARNESS
CNode * cDIV(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for DIV divide.
Definition: cnode_def.h:2945
Declaration object for nets.
Definition: cnet.h:46
CNode * cSUB(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for SUB subtract.
Definition: cnode_def.h:2879
static NodeType_t Type(CSymbol *symbol, CNode *args)
Determine type of systask.
Definition: systask.h:134
nonblocking assignment
Definition: cnode_def.h:1721
int declaration
Definition: cdatatype.h:52
CNode * cEDGE(CNode *a0, Edge_t a1, Coord_t *loc=NULL)
Node construction shortcut for EDGE edge qualifier.
Definition: cnode_def.h:5938
int HasAttribute(const char *name, CNode *n=NULL, int init=1)
Determine if node has the given attribute.
Definition: cnode.cc:412
CNode * cROR(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ROR reduction or.
Definition: cnode_def.h:4865
CNode * cFOREVER(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for FOREVER forever statement.
Definition: cnode_def.h:6110
real constant
Definition: cnode_def.h:654
CNode * cMOD_ASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for MOD_ASSIGN procedural assignment with mod.
Definition: cnode_def.h:5486
CNode * cDEASSIGN(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for DEASSIGN deassign statement.
Definition: cnode_def.h:6968
CNode * cMUL_ASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for MUL_ASSIGN procedural assignment with mul.
Definition: cnode_def.h:5412
preincrement
Definition: cnode_def.h:2243
CNode * cASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for ASSIGN procedural assignment.
Definition: cnode_def.h:5264
vector subrange with ascending index select
Definition: cnode_def.h:1152
force statement
Definition: cnode_def.h:1699
condition expression operator
Definition: cnode_def.h:1437
arithmetic right shift
Definition: cnode_def.h:814
CNode * cCASSIGN(StrengthPair_t *a0, CNode *a1, CNode *a2, CNode *a3, Coord_t *loc=NULL)
Node construction shortcut for CASSIGN continious assignment.
Definition: cnode_def.h:6414
procedural assignment with mul
Definition: cnode_def.h:1580
CNode * cSUB_ASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for SUB_ASSIGN procedural assignment with subtract.
Definition: cnode_def.h:5375
sentinal at end of port list
Definition: cnode_def.h:2189
CNode * cPARAM_DECL(CParam *a0, Coord_t *loc=NULL)
Node construction shortcut for PARAM_DECL parameter declaration.
Definition: cnode_def.h:3898
static int WidthVolatile(CSymbol *symbol, CNode *args)
Determine if width of systask variable is volatile.
Definition: systask.h:100
CNode * cDELAY(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for DELAY delay statement.
Definition: cnode_def.h:6004
reduction xnor
Definition: cnode_def.h:1425
case not equal
Definition: cnode_def.h:1343
CNode * cMOD(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for MOD modulus.
Definition: cnode_def.h:3176
CNode * cWAIT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for WAIT wait statement.
Definition: cnode_def.h:6206
no operation
Definition: cnode_def.h:715
Declaration object for genvars.
Definition: cgenvar.h:46
reduction nand
Definition: cnode_def.h:1385
CNode * cELIST(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ELIST expression list.
Definition: cnode_def.h:2788
undefined
Definition: cdatatype.h:100
error node
Definition: cnode_def.h:634
CNode * cPORT_REF(CPortDir *a0, Coord_t *loc=NULL)
Node construction shortcut for PORT_REF reference to port.
Definition: cnode_def.h:3687
signed bit vector, includes integer
Definition: cdatatype.h:102
gate instance
Definition: cnode_def.h:900
procedural assignment with right shift
Definition: cnode_def.h:1664
static int WidthConstant(CSymbol *symbol, CNode *args)
Determine if width of systask variable is constant.
Definition: systask.h:82
Gate declaration object.
Definition: cgate.h:42
repeat control
Definition: cnode_def.h:1973
exponent
Definition: cnode_def.h:759
CNode * cFUNCTION_CALL(CSymbol *a0, CNode *a1, CScope *a2, Coord_t *loc=NULL)
Node construction shortcut for FUNCTION_CALL call to a function.
Definition: cnode_def.h:3532
static NodeType_t Type(CSymbol *symbol)
Determine type of external variable.
Definition: external.h:81
static int WidthVolatile(CSymbol *symbol)
Determine if width of external variable is volatile.
Definition: external.h:69
CNode * cCOMMENT(const char *a0, Coord_t *loc=NULL)
Node construction shortcut for COMMENT comment.
Definition: cnode_def.h:2700
statement block
Definition: cnode_def.h:1509
disable statement
Definition: cnode_def.h:2104
static int WidthEvaluateable(CSymbol *symbol, CNode *args, CBlock *block)
Determine if width of function is evaluateable.
procedural assignment with bitwise xor
Definition: cnode_def.h:1640
vector decl range specification
Definition: cnode_def.h:1130
case equal
Definition: cnode_def.h:1332
CNode * cREAL(double number)
Short cut for creating RCONSTANT node with a given double value.
Definition: cnode.h:808
negative event qualifier
Definition: cnode_def.h:1741
import item
Definition: cnode_def.h:1932
CNode * cDIV_ASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for DIV_ASSIGN procedural assignment with div.
Definition: cnode_def.h:5449
initial block
Definition: cnode_def.h:1447
CNode * cPREDEC(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for PREDEC predecrement.
Definition: cnode_def.h:7468
CNode * cGIF(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for GIF structural if statement.
Definition: cnode_def.h:7057
CNode * cFWD_REF(CFref *a0, Coord_t *loc=NULL)
Node construction shortcut for FWD_REF reference to a forward declared variable.
Definition: cnode_def.h:3716
int IsEvaluateable()
Checks to see if expression tree can be evaluated.
Definition: cnode_def.h:12632
bitwise and
Definition: cnode_def.h:847
CNode * cCAT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CAT concatenation operator.
Definition: cnode_def.h:4300
postincrement
Definition: cnode_def.h:2253
void Add(double *r, double *a, double *b)
Definition: cnode.h:673
CNode * cRXOR(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RXOR reduction xor.
Definition: cnode_def.h:4923
Declaration object for specify blocks.
Definition: cspecify.h:47
CNode * cARG(CSymbol *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ARG port connection.
Definition: cnode_def.h:6453
CNode * cMAX_N(CNode *first,...)
Definition: cnode.h:1257
CNode * cAND(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for AND bitwise and.
Definition: cnode_def.h:3242
instance reference
Definition: cnode_def.h:890
CNode * cTABLE_SYMBOL(char *a0, Coord_t *loc=NULL)
Node construction shortcut for TABLE_SYMBOL udp table symbol.
Definition: cnode_def.h:7224
CNode * cPOSEDGE(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for POSEDGE positive event qualifier.
Definition: cnode_def.h:5879
not equal
Definition: cnode_def.h:1365
CNode * cRSHA_ASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for RSHA_ASSIGN procedural assignment with right arithmetic shift...
Definition: cnode_def.h:5745
CNode * cNOT(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for NOT logical complement.
Definition: cnode_def.h:4448
CNode * cRETURN(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RETURN return.
Definition: cnode_def.h:7381
void Neg(double *r, double *a)
Definition: cnode.h:693
CNode * cCEQ(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CEQ case equal.
Definition: cnode_def.h:4676
list of nodes
Definition: cnode_def.h:1119
greater than or equal
Definition: cnode_def.h:1277
CNode * cEQ(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for EQ equal.
Definition: cnode_def.h:4742
vector constant
Definition: cnode_def.h:644
procedural assignment
Definition: cnode_def.h:1532
Coord_t * GetCoord()
Get node's file coordinates.
Definition: cnode.h:303
CNode * cNET_DECL(CNet *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for NET_DECL net declaration.
Definition: cnode_def.h:3833
wait statement
Definition: cnode_def.h:1841
CNode * cMUL_N(CNode *first,...)
Definition: cnode.h:1291
CNode * cIFNONE_PATH_ASSIGN(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for IFNONE_PATH_ASSIGN ifnone path assignment statement.
Definition: cnode_def.h:6874
static CObstack * CurrentHeap()
Gets pointer to current heap allocator.
Definition: cnode.h:228
CNode * cEVOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for EVOR event or.
Definition: cnode_def.h:5971
int IsConstant()
Checks expression tree to see if it is constant.
Definition: cnode_def.h:8057
CNode * GetWidthExp(void)
Create expression representing width of expression.
Definition: cnode_def.h:8695
reduction xor
Definition: cnode_def.h:1415
case item
Definition: cnode_def.h:1898
delay control
Definition: cnode_def.h:1983
CNode * cRAND(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RAND reduction and.
Definition: cnode_def.h:4807
void SetWidth(INT32 newWidth)
Set width of vector in bits.
CNode * cNBASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for NBASSIGN nonblocking assignment.
Definition: cnode_def.h:5844
CNode * cNEG(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for NEG negation.
Definition: cnode_def.h:4390
virtual INT32 GetWidth(void)
Get width of declaration.
Definition: cgenvar.h:70
CNode * cOR_ASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for OR_ASSIGN procedural assignment with bitwise or.
Definition: cnode_def.h:5560
reduction nor
Definition: cnode_def.h:1405
CNode * cGT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for GT greater than.
Definition: cnode_def.h:4478
CNode * cCVRI(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for CVRI convert real to integer.
Definition: cnode_def.h:4208
void PostVisit1(void(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node after children have been visited.
Definition: cnode_def.h:10480
port connection
Definition: cnode_def.h:1922
long INT32
Short cut for signed 32 bit integer.
Definition: glue.h:38
arithmetic left shift
Definition: cnode_def.h:803
CNode * cDISABLE(CSymbol *a0, Coord_t *loc=NULL)
Node construction shortcut for DISABLE disable statement.
Definition: cnode_def.h:6997
CNode * cREPEAT_CONTROL(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for REPEAT_CONTROL repeat control.
Definition: cnode_def.h:6602
variable declaration
Definition: cnode_def.h:1058
int IsVolatile(void)
Checks to see if expression tree is volatile.
Definition: cnode_def.h:8219
CNode * cLSHA_ASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for LSHA_ASSIGN procedural assignment with left arithmetic shift...
Definition: cnode_def.h:5708
path statement
Definition: cnode_def.h:2040
int Precedence()
Get the precedence of the operator represented by the node.
Definition: cnode_def.h:7889
genvar declaration
Definition: cnode_def.h:1098
CNode_sp< T > Arg(int index)
Get a node's operand.
Definition: cnode.h:540
Edge_t
Edge values.
Definition: cnode.h:72
CNode * cFOR(CNode *a0, CNode *a1, CNode *a2, CNode *a3, Coord_t *loc=NULL)
Node construction shortcut for FOR for statement.
Definition: cnode_def.h:6241
CNode * cRSH(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for RSH logical right shift.
Definition: cnode_def.h:3077
reference to port
Definition: cnode_def.h:996
CNode * cFUNCTION_DEF(CFunction *a0, Coord_t *loc=NULL)
Node construction shortcut for FUNCTION_DEF function definition.
Definition: cnode_def.h:6514
convert integer to real
Definition: cnode_def.h:1183
logical and
Definition: cnode_def.h:1310
reduction or
Definition: cnode_def.h:1395
less than or equal
Definition: cnode_def.h:1299
edge qualifier
Definition: cnode_def.h:1752
reduction and
Definition: cnode_def.h:1375
bitwise or
Definition: cnode_def.h:836
CNode * cSLICE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for SLICE vector subrange.
Definition: cnode_def.h:4110
virtual INT32 GetWidth(void)
Evaluate packed width of declaration.
CNode * cLE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LE less than or equal.
Definition: cnode_def.h:4577
reference to a forward declared variable
Definition: cnode_def.h:1006
static double EvalReal(CSymbol *symbol, CNode *args, CBlock *block)
Evaluate function as a real and return result.
CNode * cPSLICE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for PSLICE vector subrange with ascending index select.
Definition: cnode_def.h:4143
CNode * cSPECPARAM_DECL(CParam *a0, Coord_t *loc=NULL)
Node construction shortcut for SPECPARAM_DECL specify parameter declaration.
Definition: cnode_def.h:3927
void CNodeTestHarness()
Definition: cnode_def.h:15764
comment
Definition: cnode_def.h:664
static NodeType_t Type(CSymbol *symbol, CNode *args, CBlock *block)
Determine if type of result of function.
CNode * cWHILE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for WHILE while statement.
Definition: cnode_def.h:6173
CNode * cADD_ASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for ADD_ASSIGN procedural assignment with add.
Definition: cnode_def.h:5338
bitwise xor
Definition: cnode_def.h:869
CNode * cCAST(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CAST data type change.
Definition: cnode_def.h:7527
procedural assignment with div
Definition: cnode_def.h:1592
procedural assignment with add
Definition: cnode_def.h:1556
INT32 EvalINT32()
Evaluates expression tree and returns value as a 32 bit integer.
Definition: cnode.cc:308
CNode * cHOOK(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for HOOK condition expression operator.
Definition: cnode_def.h:4983
concatenation operator
Definition: cnode_def.h:1205
static void EvalVector(CVector &v, CSymbol *symbol, CNode *args, CBlock *block)
Evaluate function as a vector and return result.
procedural assignment with left shift
Definition: cnode_def.h:1652
port declaration
Definition: cnode_def.h:1088
CNode * cPACKAGE_DEF(CPackage *a0, Coord_t *loc=NULL)
Node construction shortcut for PACKAGE_DEF package definition.
Definition: cnode_def.h:6572
reference to a genvar
Definition: cnode_def.h:1016
CNode * cGFOR(CNode *a0, CNode *a1, CNode *a2, CNode *a3, Coord_t *loc=NULL)
Node construction shortcut for GFOR structural for statement.
Definition: cnode_def.h:7095
static int WidthEvaluateable(CSymbol *symbol, CNode *args)
Determine if width of systask can be evaluated.
Definition: systask.h:117
CNode * cPATH_ASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for PATH_ASSIGN path assignment statement.
Definition: cnode_def.h:6838
CNode * cATTRIBUTE(CAttr *a0, Coord_t *loc=NULL)
Node construction shortcut for ATTRIBUTE attribute specification.
Definition: cnode_def.h:7026
CNode * cTABLE_ENTRY(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for TABLE_ENTRY udp table entry.
Definition: cnode_def.h:7195
convert real to integer
Definition: cnode_def.h:1173
int ArgCount(void)
Get the number of operands for the node.
Definition: cnode_def.h:7567
CNode * cGENVAR_DECL(CGenvar *a0, Coord_t *loc=NULL)
Node construction shortcut for GENVAR_DECL genvar declaration.
Definition: cnode_def.h:3985
CNode * cALWAYS(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS always block.
Definition: cnode_def.h:5047
CNode * cERROR(Coord_t *loc=NULL)
Node construction shortcut for ERROR error node.
Definition: cnode_def.h:2616
CNode * cCASEX(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CASEX casex statement.
Definition: cnode_def.h:6313
unsigned bit vector
Definition: cdatatype.h:104
CNode * cSYSTASK_CALL(CSymbol *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for SYSTASK_CALL call to enable a systask.
Definition: cnode_def.h:3465
static int Width(CSymbol *symbol, CNode *args, CBlock *block)
Get width of function.
CNode * cTYPE_REF(CTypedef *a0, Coord_t *loc=NULL)
Node construction shortcut for TYPE_REF reference to a type.
Definition: cnode_def.h:3803
CNode * cALWAYS_COMB(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS_COMB always combinational logic block.
Definition: cnode_def.h:5134
Pair of strengths.
Definition: cnode.h:108
Structure to hold file coordinates.
Definition: cdecl.h:47
Holder for character strings.
Definition: csymbol.h:44
attribute specification
Definition: cnode_def.h:2114
CNode * cRANGE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for RANGE vector decl range specification.
Definition: cnode_def.h:4077
event statement
Definition: cnode_def.h:1498
Declaration object for module/function/task ports.
Definition: cport.h:44
generate intialize assignment
Definition: cnode_def.h:1544
divide
Definition: cnode_def.h:748
static int WidthConstant(CSymbol *symbol)
Determine if width of external variable is constant.
Definition: external.h:62
Forward reference declaration.
Definition: cfref.h:51
Bulk object allocation object.
Definition: cobstack.h:46
CNode * cABSDIFFPLUS1_N(CNode *first,...)
Definition: cnode.h:1307
delay statement
Definition: cnode_def.h:1774
negation
Definition: cnode_def.h:1235
logical right shift
Definition: cnode_def.h:792
casez statement
Definition: cnode_def.h:1887
unary concat
Definition: cnode_def.h:1215
call to a task
Definition: cnode_def.h:911
reference to net
Definition: cnode_def.h:966
void LoadReal(double d)
Load vector with integer part of real value.
int error
Definition: cnode_def.h:13667
int IsOwner(void *ptr)
Determine if pointer was allocated from this obstack.
Definition: cnode_def.h:13665
CNode * cPRAGMA(const char *a0, Coord_t *loc=NULL)
Node construction shortcut for PRAGMA program pragma.
Definition: cnode_def.h:2758
CNode * cFORCE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for FORCE force statement.
Definition: cnode_def.h:5781
CNode * cEXTERNAL_REF(CSymbol *a0, Coord_t *loc=NULL)
Node construction shortcut for EXTERNAL_REF external reference.
Definition: cnode_def.h:6692
vrq comment
Definition: cnode_def.h:674
CNode * cLAND(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LAND logical and.
Definition: cnode_def.h:4610
CNode * cRSHA(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for RSHA arithmetic right shift.
Definition: cnode_def.h:3143
equal
Definition: cnode_def.h:1354
unary plus
Definition: cnode_def.h:1245
Primary data structure representing parse tree nodes.
Definition: cnode.h:188
CNode * cPASSIGN(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for PASSIGN procedural assignment.
Definition: cnode_def.h:6936
CNode * cANDANDAND(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ANDANDAND triple and.
Definition: cnode_def.h:3275
CNode * cNET_REF(CNet *a0, Coord_t *loc=NULL)
Node construction shortcut for NET_REF reference to net.
Definition: cnode_def.h:3600
integer declaration
Definition: cdatatype.h:50
NodeOp_t
Parse tree opcodes.
Definition: cnode_def.h:625
CNode * cGASSIGN(bool a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for GASSIGN generate intialize assignment.
Definition: cnode_def.h:5301
void info(struct Coord_t *location, const char *format,...)
This routine should not be used by plugins.
program pragma
Definition: cnode_def.h:684
CNode * cTRIGGER(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for TRIGGER event trigger.
Definition: cnode_def.h:6906
return
Definition: cnode_def.h:2233
CNode * cCNE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CNE case not equal.
Definition: cnode_def.h:4709
CNode * cVAR_REF(CVar *a0, Coord_t *loc=NULL)
Node construction shortcut for VAR_REF reference to variable.
Definition: cnode_def.h:3629
CNode * cCOM(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for COM bitwise complement.
Definition: cnode_def.h:4361
positive event qualifier
Definition: cnode_def.h:1731
CNode * cWIDTH(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for WIDTH expression width change.
Definition: cnode_def.h:2821
CNode * cEVENT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for EVENT event statement.
Definition: cnode_def.h:5164
defparam statement
Definition: cnode_def.h:2024
int IsNonX(int integerIsNonX=0, char *exclude=NULL)
Checks expression tree to see if expression can result in an X or Z.
Definition: cnode_def.h:9293
Declaration object for module and gate instances.
Definition: cinstance.h:45
expression list
Definition: cnode_def.h:695
void EvalVector(CVector &v)
Evaluates expression tree evaluated in unconstrainted context.
Definition: cnode.cc:360
udp table symbol
Definition: cnode_def.h:2180
CNode * cEVENT_CONTROL(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for EVENT_CONTROL event control.
Definition: cnode_def.h:6663
multiply
Definition: cnode_def.h:737
CNode * cMSLICE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for MSLICE vector subrange with descending index select.
Definition: cnode_def.h:4176
call to a function
Definition: cnode_def.h:945
CNode * cARRAY(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ARRAY dimensioned reference (array/bit select)
Definition: cnode_def.h:3568
CNode * cVRQ(const char *a0, Coord_t *loc=NULL)
Node construction shortcut for VRQ vrq comment.
Definition: cnode_def.h:2729
void error(struct Coord_t *location, const char *format,...)
This routine should not be used by plugins.
CNode * cPOSTINC(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for POSTINC postincrement.
Definition: cnode_def.h:7439
parameter declaration
Definition: cnode_def.h:1068
void Pow(double *r, double *a, double *b)
Definition: cnode.h:703
less than
Definition: cnode_def.h:1288
CNode * cALWAYS_FF(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS_FF always flip-flop block.
Definition: cnode_def.h:5105
CNode * cCASEITEM(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CASEITEM case item.
Definition: cnode_def.h:6379
replication operator
Definition: cnode_def.h:1194
CNode(Coord_t *aLoc, NodeOp_t aOp)
Constructor for parse node.
Definition: cnode.cc:240
member reference (structure, class or external
Definition: cnode_def.h:2223
CNode * cINIT(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for INIT initial block.
Definition: cnode_def.h:5018
void SetAttributes(CNode *attr)
Attach attributes to operation.
Definition: cnode.h:510
CNode * cPORTLIST_END(Coord_t *loc=NULL)
Node construction shortcut for PORTLIST_END sentinal at end of port list.
Definition: cnode_def.h:7252
package definition
Definition: cnode_def.h:1962
bitwise xnor
Definition: cnode_def.h:880
CNode * cMEMBER(CNode *a0, CSymbol *a1, Coord_t *loc=NULL)
Node construction shortcut for MEMBER member reference (structure, class or external.
Definition: cnode_def.h:7349
CNode * cALWAYS_LATCH(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS_LATCH always latch block.
Definition: cnode_def.h:5076
event control
Definition: cnode_def.h:1993
event or
Definition: cnode_def.h:1763
const char * nodeOpDescription[]
Definition: cnode_def.h:2447
CNode * PostSubVisit1(CNode *(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node after children have been visited.
Definition: cnode_def.h:11013
procedural assignment with bitwise and
Definition: cnode_def.h:1616
CNode * cPOSTDEC(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for POSTDEC postdecrement.
Definition: cnode_def.h:7497
udp table
Definition: cnode_def.h:2160
for statement
Definition: cnode_def.h:1854
triple and
Definition: cnode_def.h:858
void Div(double *r, double *a, double *b)
Definition: cnode.h:688
CNode * cXOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for XOR bitwise xor.
Definition: cnode_def.h:3308
event trigger
Definition: cnode_def.h:2073
structural if statement
Definition: cnode_def.h:2126
reference to a enum
Definition: cnode_def.h:1026
int Equivalent(CNode *a, CNode *b)
Definition: cnode_def.h:12084
static int Evaluateable(CSymbol *symbol, CNode *args, CBlock *block)
Determine if function can be evaluated.
CNode * cNEGEDGE(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for NEGEDGE negative event qualifier.
Definition: cnode_def.h:5908
postdecrement
Definition: cnode_def.h:2273
module definition
Definition: cnode_def.h:1952
void Sub(double *r, double *a, double *b)
Definition: cnode.h:678
subtract
Definition: cnode_def.h:726
CNode * cRNAND(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RNAND reduction nand.
Definition: cnode_def.h:4836
specify parameter declaration
Definition: cnode_def.h:1078
forever statement
Definition: cnode_def.h:1808
CNode * cRELEASE(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RELEASE release statement.
Definition: cnode_def.h:5813
Declaration object for variables.
Definition: cvar.h:50
external reference
Definition: cnode_def.h:2003
Declaration object for parameters.
Definition: cparam.h:46
CNode * cRNOR(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RNOR reduction nor.
Definition: cnode_def.h:4894
CNode * cMTM(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for MTM min/typ/max expression.
Definition: cnode_def.h:6038
while statement
Definition: cnode_def.h:1830
CNode * cENUM_REF(CEnum *a0, Coord_t *loc=NULL)
Node construction shortcut for ENUM_REF reference to a enum.
Definition: cnode_def.h:3774
CNode * cTABLE(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for TABLE udp table.
Definition: cnode_def.h:7166
CNode * cPOW(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for POW exponent.
Definition: cnode_def.h:2978
CNode * cREPEAT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for REPEAT repeat statement.
Definition: cnode_def.h:6140
CNode * cOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for OR bitwise or.
Definition: cnode_def.h:3209
Declaration object for holding lists of verilog attributes and their corresponding expressions...
Definition: cattr.h:50
procedural assignment with right arithmetic shift
Definition: cnode_def.h:1688
CNode * cINT32(INT32 i)
Short cut for creating VCONSTANT node with a given integer value.
Definition: cnode.h:789
int suppressErrorMessages
Definition: cnode_def.h:13666
function definition
Definition: cnode_def.h:1942
CNode * cNE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for NE not equal.
Definition: cnode_def.h:4775
static CNode * WidthExp(CSymbol *symbol, CNode *args, CBlock *block)
Get width of function as an expression.
double GetReal()
Get vector value as a real.
enum specification
Definition: cnode_def.h:2212
CNode * cGATE_REF(CGate *a0, Coord_t *loc=NULL)
Node construction shortcut for GATE_REF gate instance.
Definition: cnode_def.h:3402
CNode * cPATH(int a0, CNode *a1, int a2, int a3, CNode *a4, int a5, CNode *a6, Coord_t *loc=NULL)
Node construction shortcut for PATH path statement.
Definition: cnode_def.h:6789
int IsWidthEvaluateable(void)
Evaluates if expression width can be evaluated.
Definition: cnode_def.h:9135
CNode * cRCONSTANT(char *a0, Coord_t *loc=NULL)
Node construction shortcut for RCONSTANT real constant.
Definition: cnode_def.h:2671
static int Width(CSymbol *symbol)
Get width of external variable.
Definition: external.h:49
static CNode * WidthExp(CSymbol *symbol, CNode *args)
Get width of systask as an expression.
Definition: systask.h:64
CNode * cVAR_DECL(CVar *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for VAR_DECL variable declaration.
Definition: cnode_def.h:3866
event - have width 0
Definition: cdatatype.h:103
CNode * cPORT_DEF(CPort *a0, Coord_t *loc=NULL)
Node construction shortcut for PORT_DEF port definition.
Definition: cnode_def.h:6721
Bit vector class for implementing 4 state verilog signed and unsigned arithmetic. ...
Definition: cvector.h:58
CNode * cGE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for GE greater than or equal.
Definition: cnode_def.h:4511
void PreVisit1(int(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node before children have been visited.
Definition: cnode_def.h:9960
procedural assignment with mod
Definition: cnode_def.h:1604
CNode * cIMPORT(CSymbol *a0, Coord_t *loc=NULL)
Node construction shortcut for IMPORT import item.
Definition: cnode_def.h:6485
static int Width(CSymbol *symbol, CNode *args)
Get width of systask.
Definition: systask.h:48
INT32 GetWidth(void)
Evaluate width of expression.
Definition: cnode.h:485
call to a timing task
Definition: cnode_def.h:933
CNode * cLT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LT less than.
Definition: cnode_def.h:4544
release statement
Definition: cnode_def.h:1709
void Mul(double *r, double *a, double *b)
Definition: cnode.h:683
CNode * cLSH_ASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for LSH_ASSIGN procedural assignment with left shift.
Definition: cnode_def.h:5634
structural case statement
Definition: cnode_def.h:2150
int IsWidthConstant(void)
Evaluates if expression width is constant.
Definition: cnode_def.h:8381
CNode * cREP(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for REP replication operator.
Definition: cnode_def.h:4267
CNode * cDELAY_CONTROL(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for DELAY_CONTROL delay control.
Definition: cnode_def.h:6634
CNode * cNOP(Coord_t *loc=NULL)
Node construction shortcut for NOP no operation.
Definition: cnode_def.h:2852
NodeType_t GetNodeType(void)
Get node expression type.
Definition: cnode.h:531
always block
Definition: cnode_def.h:1457
reference to a type
Definition: cnode_def.h:1036
udp table entry
Definition: cnode_def.h:2170
void Plus(double *r, double *a)
Definition: cnode.h:698
CNode * cCASEZ(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CASEZ casez statement.
Definition: cnode_def.h:6346
INT32 GetWidth(void)
Get vector bit width.
static int WidthConstant(CSymbol *symbol, CNode *args, CBlock *block)
Determine if width of function is constant.
path assignment statement
Definition: cnode_def.h:2052
CNode * cCASE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CASE case statement.
Definition: cnode_def.h:6280
int Signed() const
Get signed attribute.
Definition: cvector.h:178
vector subrange
Definition: cnode_def.h:1141
real - have width 0
Definition: cdatatype.h:101
CNode * cBLOCK_REF(CBlock *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for BLOCK_REF statement block.
Definition: cnode_def.h:5197
Declaration object for functions and tasks.
Definition: cfunction.h:50
port definition
Definition: cnode_def.h:2013
static int WidthEvaluateable(CSymbol *symbol)
Determine if width of external variable can be evaluated.
Definition: external.h:75
CNode * cLIST(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LIST list of nodes.
Definition: cnode_def.h:4044
always flip-flop block
Definition: cnode_def.h:1477
call to enable a systask
Definition: cnode_def.h:922
procedural assignment
Definition: cnode_def.h:2084
CNode * cGCASE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for GCASE structural case statement.
Definition: cnode_def.h:7134
procedural assignment with bitwise or
Definition: cnode_def.h:1628
unsigned Hash()
Calculate hash of tree.
Definition: cnode_def.h:11548
CNode * cTIMING_CALL(CSymbol *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for TIMING_CALL call to a timing task.
Definition: cnode_def.h:3498
CNode * cRXNOR(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RXNOR reduction xnor.
Definition: cnode_def.h:4952
structural for statement
Definition: cnode_def.h:2139
logical complement
Definition: cnode_def.h:1255
Declaration object for input/output/inout statements.
Definition: cportdir.h:45
CNode * cMAX(CNode *n1, CNode *n2)
Short cut for creating a expression tree that calculates the maximum of two expressions.
Definition: cnode.h:886
CNode * cXNOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for XNOR bitwise xnor.
Definition: cnode_def.h:3341
casex statement
Definition: cnode_def.h:1876
always latch block
Definition: cnode_def.h:1467
CNode * cADD_N(CNode *first,...)
Definition: cnode.h:1275
CNode * cMACRO_EXPR(const char *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for MACRO_EXPR expression represented by a macro.
Definition: cnode_def.h:7279
addition
Definition: cnode_def.h:770
repeat statement
Definition: cnode_def.h:1819
expression represented by a macro
Definition: cnode_def.h:2200
deassign statement
Definition: cnode_def.h:2094
NodeType_t
Expression node type.
Definition: cdatatype.h:99
CNode * cIF(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for IF if statement.
Definition: cnode_def.h:6075
CNode * cSPECIFY_REF(CSpecify *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for SPECIFY_REF specify block.
Definition: cnode_def.h:5230
data type change
Definition: cnode_def.h:2284
procedural assignment with subtract
Definition: cnode_def.h:1568
CNode * cRSH_ASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for RSH_ASSIGN procedural assignment with right shift. ...
Definition: cnode_def.h:5671
CNode * GetAttributes()
Get attributes attached to operation.
Definition: cnode.h:505
CNode * cADD(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ADD addition.
Definition: cnode_def.h:3011
const char * nodeOpName[]
Definition: cnode_def.h:2290
predecrement
Definition: cnode_def.h:2263
CNode * cDEFPARAM(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for DEFPARAM defparam statement.
Definition: cnode_def.h:6751
dimensioned reference (array/bit select)
Definition: cnode_def.h:956
CNode * cPORT_DECL(CPortDir *a0, Coord_t *loc=NULL)
Node construction shortcut for PORT_DECL port declaration.
Definition: cnode_def.h:3956
CNode * cLOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LOR logical or.
Definition: cnode_def.h:4643
CNode * cENUM_SPEC(CSymbol *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for ENUM_SPEC enum specification.
Definition: cnode_def.h:7313
NodeOp_t GetOp()
Return node's operation type.
Definition: cnode.h:308
CNode * cLSH(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LSH logical left shift.
Definition: cnode_def.h:3044
int IsWidthVolatile(void)
Evaluates if expression width is volatile.
Definition: cnode_def.h:8537
type declaration
Definition: cnode_def.h:1108
CNode * cVCONSTANT(CVector *a0, Coord_t *loc=NULL)
Node construction shortcut for VCONSTANT vector constant.
Definition: cnode_def.h:2642
void Dump(FILE *f)
Print a compact representation of the parse tree.
Definition: cnode_def.h:15233
logical left shift
Definition: cnode_def.h:781
Declaration class for block constructs.
Definition: cblock.h:52
CNode * cUCAT(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for UCAT unary concat.
Definition: cnode_def.h:4332
virtual INT32 GetWidth(void) const
Evaluate packed width of declaration.
Definition: cdecl.h:263
static CNode * WidthExp(CSymbol *symbol)
Get width of external variable as an expression.
Definition: external.h:55
continious assignment
Definition: cnode_def.h:1911
CNode * cTYPEDEF_DECL(CTypedef *a0, Coord_t *loc=NULL)
Node construction shortcut for TYPEDEF_DECL type declaration.
Definition: cnode_def.h:4014
int cABSDIFFPLUS1(int a1, int a2)
Definition: cnode.h:1345
vector subrange with descending index select
Definition: cnode_def.h:1163
bitwise complement
Definition: cnode_def.h:1225
reference to parameter
Definition: cnode_def.h:986
always combinational logic block
Definition: cnode_def.h:1487
double EvalReal(void)
Evaluates expression tree evaluated in a real context.
Definition: cnode.cc:391
case statement
Definition: cnode_def.h:1865
CNode * cLSHA(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LSHA arithmetic left shift.
Definition: cnode_def.h:3110
CNode * cPARAM_REF(CParam *a0, Coord_t *loc=NULL)
Node construction shortcut for PARAM_REF reference to parameter.
Definition: cnode_def.h:3658
greater than
Definition: cnode_def.h:1266
CNode * cMODULE_DEF(CModule *a0, Coord_t *loc=NULL)
Node construction shortcut for MODULE_DEF module definition.
Definition: cnode_def.h:6543
specify block
Definition: cnode_def.h:1520
static int WidthVolatile(CSymbol *symbol, CNode *args, CBlock *block)
Determine if width of function is volatile.
CNode * cPREINC(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for PREINC preincrement.
Definition: cnode_def.h:7410
CNode * cPLUS(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for PLUS unary plus.
Definition: cnode_def.h:4419
modulus
Definition: cnode_def.h:825
ifnone path assignment statement
Definition: cnode_def.h:2063
net declaration
Definition: cnode_def.h:1047
expression width change
Definition: cnode_def.h:706
CNode * cINSTANCE_REF(CInstance *a0, Coord_t *loc=NULL)
Node construction shortcut for INSTANCE_REF instance reference.
Definition: cnode_def.h:3373
CNode * cTASK_ENABLE(CSymbol *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for TASK_ENABLE call to a task.
Definition: cnode_def.h:3432
CNode * cGENVAR_REF(CGenvar *a0, Coord_t *loc=NULL)
Node construction shortcut for GENVAR_REF reference to a genvar.
Definition: cnode_def.h:3745
CNode * cMUL(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for MUL multiply.
Definition: cnode_def.h:2912
virtual INT32 GetWidth(void)
Evaluate packed width of declaration.
procedural assignment with left arithmetic shift
Definition: cnode_def.h:1676
double s2d(char *s)
Convert char string to double.
Definition: cnode.h:1084
if statement
Definition: cnode_def.h:1798
reference to variable
Definition: cnode_def.h:976
CNode * cAND_ASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for AND_ASSIGN procedural assignment with bitwise and. ...
Definition: cnode_def.h:5523
CNode * cCVIR(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for CVIR convert integer to real.
Definition: cnode_def.h:4237
CNode * cXOR_ASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for XOR_ASSIGN procedural assignment with bitwise xor. ...
Definition: cnode_def.h:5597
CNode * Clone(CObstack *heap=stack)
Replicate tree.
Definition: cnode_def.h:9464
min/typ/max expression
Definition: cnode_def.h:1786
logical or
Definition: cnode_def.h:1321