2324 #endif // DEFINE_ENUM
2325 #ifdef DEFINE_METHODS
2459 "IFNONE_PATH_ASSIGN",
2481 "ASSIGNMENT_PATTERN",
2493 "expression width change",
2500 "logical left shift",
2501 "logical right shift",
2502 "arithmetic left shift",
2503 "arithmetic right shift",
2510 "instance reference",
2513 "call to enable a systask",
2514 "call to a timing task",
2515 "call to a function",
2516 "dimensioned reference (array/bit select)",
2518 "reference to variable",
2519 "reference to parameter",
2520 "reference to port",
2521 "reference to a forward declared variable",
2522 "reference to a genvar",
2523 "reference to a enum",
2524 "reference to a type",
2526 "variable declaration",
2527 "parameter declaration",
2528 "specify parameter declaration",
2530 "genvar declaration",
2533 "vector decl range specification",
2535 "vector subrange with ascending index select",
2536 "vector subrange with descending index select",
2537 "convert real to integer",
2538 "convert integer to real",
2539 "replication operator",
2540 "concatenation operator",
2542 "bitwise complement",
2545 "logical complement",
2547 "greater than or equal",
2549 "less than or equal",
2562 "condition expression operator",
2565 "always latch block",
2566 "always flip-flop block",
2567 "always combinational logic block",
2571 "procedural assignment",
2572 "generate intialize assignment",
2573 "procedural assignment with add",
2574 "procedural assignment with subtract",
2575 "procedural assignment with mul",
2576 "procedural assignment with div",
2577 "procedural assignment with mod",
2578 "procedural assignment with bitwise and",
2579 "procedural assignment with bitwise or",
2580 "procedural assignment with bitwise xor",
2581 "procedural assignment with left shift",
2582 "procedural assignment with right shift",
2583 "procedural assignment with left arithmetic shift",
2584 "procedural assignment with right arithmetic shift",
2586 "release statement",
2587 "nonblocking assignment",
2588 "positive event qualifier",
2589 "negative event qualifier",
2593 "min/typ/max expression",
2595 "forever statement",
2604 "continious assignment",
2607 "function definition",
2608 "module definition",
2609 "package definition",
2613 "external reference",
2615 "defparam statement",
2617 "path assignment statement",
2618 "ifnone path assignment statement",
2620 "procedural assignment",
2621 "deassign statement",
2622 "disable statement",
2623 "attribute specification",
2624 "structural if statement",
2625 "structural for statement",
2626 "structural case statement",
2630 "sentinal at end of port list",
2631 "expression represented by a macro",
2632 "enum specification",
2633 "member reference (structure, class or external",
2640 "assignment_pattern",
2644 #endif // DEFINE_METHODS
2647 #ifdef DEFINE_CONSTRUCTOR
2714 n->
Arg<
char*>(0) = a0;
2729 n->
Arg<
char*>(0) = a0;
2743 n->
Arg<
const char*>(0) = a0;
2758 n->
Arg<
const char*>(0) = a0;
2772 n->
Arg<
const char*>(0) = a0;
2787 n->
Arg<
const char*>(0) = a0;
2802 n->
Arg<
const char*>(0) = a0;
2803 n->
Arg<
int>(1) = a1;
2819 n->
Arg<
const char*>(0) = a0;
2820 n->
Arg<
int>(1) = a1;
3821 n->
Arg<CEnum*>(0) = a0;
3836 n->
Arg<CEnum*>(0) = a0;
3850 n->
Arg<CTypedef*>(0) = a0;
3865 n->
Arg<CTypedef*>(0) = a0;
4061 n->
Arg<CTypedef*>(0) = a0;
4076 n->
Arg<CTypedef*>(0) = a0;
5247 n->
Arg<
bool>(2) = a2;
5266 n->
Arg<
bool>(2) = a2;
5352 n->
Arg<
bool>(0) = a0;
5371 n->
Arg<
bool>(0) = a0;
6639 n->
Arg<CPackage*>(0) = a0;
6654 n->
Arg<CPackage*>(0) = a0;
6856 n->
Arg<
int>(0) = a0;
6858 n->
Arg<
int>(2) = a2;
6859 n->
Arg<
int>(3) = a3;
6861 n->
Arg<
int>(5) = a5;
6883 n->
Arg<
int>(0) = a0;
6885 n->
Arg<
int>(2) = a2;
6886 n->
Arg<
int>(3) = a3;
6888 n->
Arg<
int>(5) = a5;
7291 n->
Arg<
char*>(0) = a0;
7306 n->
Arg<
char*>(0) = a0;
7346 n->
Arg<
const char*>(0) = a0;
7363 n->
Arg<
const char*>(0) = a0;
7669 #endif // DEFINE_CONSTUCTOR
7679 #ifdef DEFINE_METHODS
8417 return Arg<CEnum*>(0)->GetExpression()->IsVolatile();
8485 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsVolatile() : TRUE;
8563 return Array::WidthConstant(Arg<CNode*>(0),Arg<CNode*>(1));
8649 return Member::WidthConstant(Arg<CNode*>(0),Arg<CSymbol*>(1));
8723 return Array::WidthVolatile(Arg<CNode*>(0),Arg<CNode*>(1));
8809 return Member::WidthVolatile(Arg<CNode*>(0),Arg<CSymbol*>(1));
8976 return Array::WidthExp(Arg<CNode*>(0),Arg<CNode*>(1));
9042 return Arg<CNode*>(1);
9048 return Arg<CNode*>(1);
9234 return Member::WidthExp(Arg<CNode*>(0),Arg<CSymbol*>(1));
9337 return Array::WidthEvaluateable(Arg<CNode*>(0),Arg<CNode*>(1));
9423 return Member::WidthEvaluateable(Arg<CNode*>(0),Arg<CSymbol*>(1));
9457 return !Arg<CVector*>(0)->HasXZ();
9461 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9463 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9465 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9467 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9469 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9471 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9473 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9475 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9477 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9479 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9481 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9483 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9485 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9487 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9489 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9491 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9493 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9499 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9503 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() ==
eINT);
9505 return Arg<CDecl*>(0)->GetDataType()->GetTwoState() ||
9511 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() ==
eINTEGER);
9517 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() ==
eINT);
9523 return Arg<CEnum*>(0)->GetExpression()->IsNonX( integerIsNonX, exclude );
9529 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9531 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9533 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9535 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9537 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9539 return Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9541 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9543 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9545 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9547 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9549 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9551 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9553 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9555 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9557 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9559 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9561 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9563 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9565 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9567 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9569 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9571 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9573 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9575 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9577 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9579 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9581 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9583 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9585 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(2)->
IsNonX( integerIsNonX, exclude );
9587 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9589 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9591 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9593 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(2)->
IsNonX( integerIsNonX, exclude );
9597 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsNonX(integerIsNonX, exclude) : FALSE;
9599 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9601 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9603 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9605 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9607 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9609 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9611 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
10105 n->fixedWidth = fixedWidth;
10107 n->attributes = attributes->
Clone(heap);
10109 for(
int i = 0; i <
ArgCount(); i++ ) {
10110 if( ((nodeMask>>i)&1) && Arg<CNode*>(i) ) {
10113 void* tmp = Arg<void*>(i);
10114 n->
Arg<
void*>(i) = tmp;
10130 if( !(*func)(
this, data ) ) {
10139 switch(
GetOp() ) {
10214 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->
PreVisit1( func, data );
10218 if(Arg<CGate*>(0)) Arg<CGate*>(0)->
PreVisit1( func, data );
10253 if(Arg<CNet*>(0)) Arg<CNet*>(0)->
PreVisit1( func, data );
10257 if(Arg<CVar*>(0)) Arg<CVar*>(0)->
PreVisit1( func, data );
10261 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PreVisit1( func, data );
10265 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PreVisit1( func, data );
10269 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->
PreVisit1( func, data );
10273 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->
PreVisit1( func, data );
10277 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->
PreVisit1( func, data );
10392 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->
PreVisit1( func, data );
10396 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->
PreVisit1( func, data );
10508 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->
PreVisit1( func, data );
10512 if(Arg<CModule*>(0)) Arg<CModule*>(0)->
PreVisit1( func, data );
10516 if(Arg<CPackage*>(0)) Arg<CPackage*>(0)->
PreVisit1( func, data );
10532 if(Arg<CPort*>(0)) Arg<CPort*>(0)->
PreVisit1( func, data );
10560 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->
PreVisit1( func, data );
10622 for(
int i = 0; i <
ArgCount(); i++ ) {
10623 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i)->PreVisit1( func, data );
10635 if( !(*func)( n, data ) ) {
10661 switch(
GetOp() ) {
10736 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->
PostVisit1( func, data );
10740 if(Arg<CGate*>(0)) Arg<CGate*>(0)->
PostVisit1( func, data );
10783 if(Arg<CNet*>(0)) Arg<CNet*>(0)->
PostVisit1( func, data );
10787 if(Arg<CVar*>(0)) Arg<CVar*>(0)->
PostVisit1( func, data );
10791 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostVisit1( func, data );
10795 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostVisit1( func, data );
10799 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->
PostVisit1( func, data );
10803 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->
PostVisit1( func, data );
10807 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->
PostVisit1( func, data );
10922 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->
PostVisit1( func, data );
10926 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->
PostVisit1( func, data );
11038 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->
PostVisit1( func, data );
11042 if(Arg<CModule*>(0)) Arg<CModule*>(0)->
PostVisit1( func, data );
11046 if(Arg<CPackage*>(0)) Arg<CPackage*>(0)->
PostVisit1( func, data );
11062 if(Arg<CPort*>(0)) Arg<CPort*>(0)->
PostVisit1( func, data );
11090 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->
PostVisit1( func, data );
11152 for(
int i = 0; i <
ArgCount(); i++ ) {
11153 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i)->PostVisit1( func, data );
11156 std::stack<CNode*> visitLog;
11174 while( !visitLog.empty() ) {
11175 CNode* top = visitLog.top();
11177 (*func)(top->
Arg<
CNode*>(1),data);
11183 (*func)(
this, data );
11200 switch(
GetOp() ) {
11275 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->
PostSubVisit1( func, data );
11279 if(Arg<CGate*>(0)) Arg<CGate*>(0)->
PostSubVisit1( func, data );
11322 if(Arg<CNet*>(0)) Arg<CNet*>(0)->
PostSubVisit1( func, data );
11326 if(Arg<CVar*>(0)) Arg<CVar*>(0)->
PostSubVisit1( func, data );
11330 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostSubVisit1( func, data );
11334 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostSubVisit1( func, data );
11338 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->
PostSubVisit1( func, data );
11342 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->
PostSubVisit1( func, data );
11346 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->
PostSubVisit1( func, data );
11461 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->
PostSubVisit1( func, data );
11465 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->
PostSubVisit1( func, data );
11577 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->
PostSubVisit1( func, data );
11581 if(Arg<CModule*>(0)) Arg<CModule*>(0)->
PostSubVisit1( func, data );
11585 if(Arg<CPackage*>(0)) Arg<CPackage*>(0)->
PostSubVisit1( func, data );
11601 if(Arg<CPort*>(0)) Arg<CPort*>(0)->
PostSubVisit1( func, data );
11629 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->
PostSubVisit1( func, data );
11691 for(
int i = 0; i <
ArgCount(); i++ ) {
11692 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i) = Arg<CNode*>(i)->
PostSubVisit1( func, data );
11695 std::stack<CNode*> visitLog;
11714 while( !visitLog.empty() ) {
11715 CNode* top = visitLog.top();
11723 return (*func)(
this, data );
11736 unsigned result =
GetOp();
11738 switch(
GetOp() ) {
11744 result ^= Arg<CVector*>(0)->
Hash();
11748 result ^= strlen(Arg<char*>(0));
11752 result ^= strlen(Arg<char*>(0));
11756 result ^= strlen(Arg<char*>(0));
11760 result ^= strlen(Arg<char*>(0));
11761 result ^= Arg<int>(1);
11819 result ^= Arg<unsigned long>(0);
11823 result ^= Arg<unsigned long>(0);
11827 result ^= Arg<unsigned long>(0);
11831 result ^= Arg<unsigned long>(0);
11835 result ^= Arg<unsigned long>(0);
11839 result ^= Arg<unsigned long>(0);
11840 result ^= Arg<unsigned long>(2);
11847 result ^= Arg<unsigned long>(0);
11851 result ^= Arg<unsigned long>(0);
11855 result ^= Arg<unsigned long>(0);
11859 result ^= Arg<unsigned long>(0);
11863 result ^= Arg<unsigned long>(0);
11867 result ^= Arg<unsigned long>(0);
11871 result ^= Arg<unsigned long>(0);
11875 result ^= Arg<unsigned long>(0);
11879 result ^= Arg<unsigned long>(0);
11883 result ^= Arg<unsigned long>(0);
11887 result ^= Arg<unsigned long>(0);
11891 result ^= Arg<unsigned long>(0);
11895 result ^= Arg<unsigned long>(0);
11899 result ^= Arg<unsigned long>(0);
11903 result ^= Arg<unsigned long>(0);
12018 result ^= Arg<unsigned long>(0);
12019 result ^= Arg<bool>(2);
12023 result ^= Arg<unsigned long>(0);
12030 result ^= Arg<bool>(0);
12085 result ^= (
unsigned long)Arg<Edge_t>(1);
12098 result ^= Arg<unsigned long>(3);
12117 result ^= Arg<unsigned long>(2);
12121 result ^= Arg<unsigned long>(2);
12125 result ^= Arg<unsigned long>(2);
12132 result ^= Arg<unsigned long>(0);
12136 result ^= Arg<unsigned long>(0);
12140 result ^= Arg<unsigned long>(0);
12144 result ^= Arg<unsigned long>(0);
12148 result ^= Arg<unsigned long>(0);
12152 result ^= Arg<unsigned long>(0);
12165 result ^= Arg<unsigned long>(0);
12169 result ^= Arg<unsigned long>(0);
12176 result ^= Arg<int>(0);
12177 result ^= Arg<int>(2);
12178 result ^= Arg<int>(3);
12179 result ^= Arg<int>(5);
12198 result ^= Arg<unsigned long>(0);
12202 result ^= Arg<unsigned long>(0);
12221 result ^= strlen(Arg<char*>(0));
12228 result ^= strlen(Arg<char*>(0));
12232 result ^= Arg<unsigned long>(0);
12236 result ^= Arg<unsigned long>(1);
12264 for(
int i = 0; i <
ArgCount(); i++ ) {
12265 if( !((nodeMask>>i)&1) && Arg<CNode*>(i) ) result ^= Arg<CNode*>(i)->
Hash();
12293 if( a == NULL || b == NULL ) {
12304 switch( a->
GetOp() ) {
12314 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12318 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12322 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12326 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12327 if( !(a->
Arg<
int>(1)==b->
Arg<
int>(1)) ) {
return FALSE; }
12718 if( !(a->
Arg<CPackage*>(0)==b->
Arg<CPackage*>(0)) ) {
return FALSE; }
12742 if( !(a->
Arg<
int>(0)==b->
Arg<
int>(0)) ) {
return FALSE; }
12743 if( !(a->
Arg<
int>(2)==b->
Arg<
int>(2)) ) {
return FALSE; }
12744 if( !(a->
Arg<
int>(3)==b->
Arg<
int>(3)) ) {
return FALSE; }
12745 if( !(a->
Arg<
int>(5)==b->
Arg<
int>(5)) ) {
return FALSE; }
12787 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12794 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12830 for(
int i = 0; i < a->
ArgCount(); i++ ) {
12831 if( !((nodeMask>>i)&1) &&
12848 return Arg<CParam*>(0)->GetExpression()->IsEvaluateable();
12850 return Arg<CParam*>(0)->GetExpression()->IsEvaluateable();
12852 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsEvaluateable() : FALSE;
13012 for(
int i = 0; i <
ArgCount(); i++ ) {
13013 if( !Arg<CNode*>(i)->IsEvaluateable() )
return FALSE;
13028 void CNode::_EvalVector(
CVector& v )
13035 {
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;};
13038 EVAL_VECTOR_BINARY(
Sub);
13041 EVAL_VECTOR_BINARY(
Mul);
13044 EVAL_VECTOR_BINARY(
Div);
13047 EVAL_VECTOR_BINARY(
Pow);
13050 EVAL_VECTOR_BINARY(
Add);
13053 EVAL_VECTOR_BINARY_SELF_RIGHT(Lsh);
13056 EVAL_VECTOR_BINARY_SELF_RIGHT(Rsh);
13059 EVAL_VECTOR_BINARY_SELF_RIGHT(Lsha);
13062 EVAL_VECTOR_BINARY_SELF_RIGHT(Rsha);
13065 EVAL_VECTOR_BINARY(Mod);
13068 EVAL_VECTOR_BINARY(Or);
13071 EVAL_VECTOR_BINARY(And);
13074 EVAL_VECTOR_BINARY(Xor);
13077 EVAL_VECTOR_BINARY(Xnor);
13083 EVAL_VECTOR_PARAM_REF();
13086 EVAL_VECTOR_ENUM_REF();
13089 v.
LoadReal( Arg<CNode*>(0)->_EvalReal() );
13092 EVAL_VECTOR_BINARY(Rep);
13095 EVAL_VECTOR_BINARY(Cat);
13098 {
CVector vv(Arg<CNode*>(0)->width); Arg<CNode*>(0)->_EvalVector(vv); v = vv;};
13101 EVAL_VECTOR_UNARY(Com);
13104 EVAL_VECTOR_UNARY(
Neg);
13107 EVAL_VECTOR_UNARY(
Plus);
13110 EVAL_VECTOR_UNARY(Not);
13113 EVAL_RELATIONAL(Gt);
13116 EVAL_RELATIONAL(Ge);
13119 EVAL_RELATIONAL(Lt);
13122 EVAL_RELATIONAL(Le);
13125 EVAL_VECTOR_BINARY(Land);
13128 EVAL_VECTOR_BINARY(Lor);
13131 EVAL_RELATIONAL(Ceq);
13134 EVAL_RELATIONAL(Cne);
13137 EVAL_RELATIONAL(Eq);
13140 EVAL_RELATIONAL(Ne);
13143 EVAL_VECTOR_UNARY_SELF(Rand);
13146 EVAL_VECTOR_UNARY_SELF(Rnand);
13149 EVAL_VECTOR_UNARY_SELF(Ror);
13152 EVAL_VECTOR_UNARY_SELF(Rnor);
13155 EVAL_VECTOR_UNARY_SELF(Rxor);
13158 EVAL_VECTOR_UNARY_SELF(Rxnor);
13161 EVAL_VECTOR_HOOK();
13180 double CNode::_EvalReal()
13185 d =
s2d(Arg<char*>(0));
13188 EVAL_REAL_BINARY(
Sub);
13191 EVAL_REAL_BINARY(
Mul);
13194 EVAL_REAL_BINARY(
Div);
13197 EVAL_REAL_BINARY(
Pow);
13200 EVAL_REAL_BINARY(
Add);
13206 EVAL_REAL_PARAM_REF();
13209 EVAL_REAL_ENUM_REF();
13212 {
CVector v(Arg<CNode*>(0)->width); v.
Signed(Arg<CNode*>(0)->type ==
eS); Arg<CNode*>(0)->_EvalVector(v); d = v.
GetReal(); };
13215 EVAL_REAL_UNARY(
Neg);
13218 EVAL_REAL_UNARY(
Plus);
13236 int CNode::ConditionalWiden()
13238 switch(
GetOp() ) {
13400 unsigned CNode::NodeMask()
13402 switch(
GetOp() ) {
13726 int CNode::WidthFixed()
13728 switch(
GetOp() ) {
13730 return NodeMask()==0;
13734 return NodeMask()==0;
13736 return NodeMask()==0;
13738 return NodeMask()==0;
13740 return NodeMask()==0;
13742 return NodeMask()==0;
13744 return NodeMask()==0;
13746 return NodeMask()==0;
13748 return NodeMask()==0;
13750 return NodeMask()==0;
13752 return NodeMask()==0;
13754 return NodeMask()==0;
13756 return NodeMask()==0;
13758 return NodeMask()==0;
13760 return NodeMask()==0;
13762 return NodeMask()==0;
13764 return NodeMask()==0;
13766 return NodeMask()==0;
13768 return NodeMask()==0;
13770 return NodeMask()==0;
13772 return NodeMask()==0;
13774 return NodeMask()==0;
13776 return NodeMask()==0;
13778 return NodeMask()==0;
13780 return NodeMask()==0;
13782 return NodeMask()==0;
13784 return NodeMask()==0;
13786 return NodeMask()==0;
13790 return NodeMask()==0;
13792 return NodeMask()==0;
13794 return NodeMask()==0;
13796 return NodeMask()==0;
13802 return NodeMask()==0;
13804 return NodeMask()==0;
13806 return NodeMask()==0;
13808 return NodeMask()==0;
13810 return NodeMask()==0;
13812 return NodeMask()==0;
13848 return NodeMask()==0;
13850 return NodeMask()==0;
13852 return NodeMask()==0;
13854 return NodeMask()==0;
13856 return NodeMask()==0;
13858 return NodeMask()==0;
13862 return NodeMask()==0;
13864 return NodeMask()==0;
13866 return NodeMask()==0;
13868 return NodeMask()==0;
13870 return NodeMask()==0;
13872 return NodeMask()==0;
13874 return NodeMask()==0;
13894 void CNode::_LabelBits(
CNode* n,
void* arg )
13902 if( labelCacheEnabled && (evalCount == 0 || !evalHeap.
IsOwner(n)) ) {
13903 if( labelCache.find(n) != labelCache.end() ) {
13912 unsigned nodeMask = n->NodeMask();
13913 int conditionalWiden = n->ConditionalWiden();
13915 switch( n->
GetOp() ) {
13927 if( !suppressErrorMessages ) {
13930 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13932 if( !suppressErrorMessages ) {
13949 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13960 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13971 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13982 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13993 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14032 if( !suppressErrorMessages ) {
14035 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14037 if( !suppressErrorMessages ) {
14049 if( !suppressErrorMessages ) {
14052 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14054 if( !suppressErrorMessages ) {
14066 if( !suppressErrorMessages ) {
14069 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14071 if( !suppressErrorMessages ) {
14083 if( !suppressErrorMessages ) {
14086 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14088 if( !suppressErrorMessages ) {
14098 if( !suppressErrorMessages ) {
14101 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14103 if( !suppressErrorMessages ) {
14115 if( !suppressErrorMessages ) {
14118 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14120 if( !suppressErrorMessages ) {
14169 if( !suppressErrorMessages ) {
14172 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14174 if( !suppressErrorMessages ) {
14184 if( !suppressErrorMessages ) {
14187 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14189 if( !suppressErrorMessages ) {
14199 if( !suppressErrorMessages ) {
14209 if( !suppressErrorMessages ) {
14229 if( !suppressErrorMessages ) {
14232 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14234 if( !suppressErrorMessages ) {
14244 if( !suppressErrorMessages ) {
14247 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14249 if( !suppressErrorMessages ) {
14259 if( !suppressErrorMessages ) {
14269 if( !suppressErrorMessages ) {
14272 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14279 n->type = n->
Arg<
CNode*>(0)->type;
14282 n->type = n->
Arg<
CNode*>(0)->type;
14322 if( !suppressErrorMessages ) {
14325 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14327 if( !suppressErrorMessages ) {
14337 if( !suppressErrorMessages ) {
14340 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14342 if( !suppressErrorMessages ) {
14362 if( !suppressErrorMessages ) {
14372 if( !suppressErrorMessages ) {
14382 if( !suppressErrorMessages ) {
14392 if( !suppressErrorMessages ) {
14402 if( !suppressErrorMessages ) {
14412 if( !suppressErrorMessages ) {
14422 }
else if( n->
Arg<
CNode*>(2)->type ==
eR ) {
14448 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14450 }
else if( n->
Arg<
CNode*>(2)->type ==
eR ) {
14467 n->type = n->
Arg<
CNode*>(1)->type;
14475 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14484 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14493 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14502 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14514 n->type = n->
Arg<
CNode*>(0)->type;
14528 switch( n->type ) {
14539 switch( n->
GetOp() ) {
14565 n->width = n->
Arg<
CNode*>(0)->width;
14571 n->width = n->
Arg<
CNode*>(0)->width;
14574 n->width = n->
Arg<
CNode*>(0)->width;
14577 n->width = n->
Arg<
CNode*>(0)->width;
14580 n->width = n->
Arg<
CNode*>(0)->width;
14658 n->width = n->
Arg<
CNode*>(0)->width;
14661 n->width = n->
Arg<
CNode*>(0)->width;
14664 n->width = n->
Arg<
CNode*>(0)->width;
14667 n->width = n->
Arg<
CNode*>(0)->width;
14733 n->width = n->
Arg<
CNode*>(1)->width;
14739 n->width = n->
Arg<
CNode*>(0)->width;
14742 n->width = n->
Arg<
CNode*>(0)->width;
14745 n->width = n->
Arg<
CNode*>(0)->width;
14748 n->width = n->
Arg<
CNode*>(0)->width;
14751 n->width = n->
Arg<
CNode*>(0)->width;
14765 int operandWidth = -1;
14766 for(
int i = 0; i < n->
ArgCount(); i++ ) {
14767 if( ((nodeMask>>i)&1) && n->
Arg<
CNode*>(i) ) {
14768 int widthFixed = n->
Arg<
CNode*>(i)->WidthFixed() ||
14771 if( n->ConditionalWiden() && !widthFixed ) {
14772 n->FixedWidth( 0 );
14774 }
else if( !widthFixed ) {
14775 n->FixedWidth( 0 );
14779 if( operandWidth != w ) {
14780 if( operandWidth >= 0 ) {
14781 n->FixedWidth( 0 );
14789 if( !conditionalWiden && nodeMask != 0 ) {
14790 n->FixedWidth( 0 );
14806 int calculateMax = 0;
14808 int conditionalWiden = ConditionalWiden();
14809 unsigned nodeMask = NodeMask();
14810 unsigned scalarMask = 0;
14811 unsigned selfDeterminedMask = 0;
14812 switch(
GetOp() ) {
14833 selfDeterminedMask = nodeMask;
14837 selfDeterminedMask = nodeMask;
14853 selfDeterminedMask = 1<<1;
14860 selfDeterminedMask = 1<<1;
14864 selfDeterminedMask = 1<<1;
14868 selfDeterminedMask = 1<<1;
14872 selfDeterminedMask = 1<<1;
14903 selfDeterminedMask = nodeMask;
14910 selfDeterminedMask = nodeMask;
14914 selfDeterminedMask = 1<<1;
14966 selfDeterminedMask = nodeMask;
14970 selfDeterminedMask = nodeMask;
14974 selfDeterminedMask = nodeMask;
14978 selfDeterminedMask = nodeMask;
14982 selfDeterminedMask = nodeMask;
14986 selfDeterminedMask = nodeMask;
14990 selfDeterminedMask = nodeMask;
14994 selfDeterminedMask = nodeMask;
14998 selfDeterminedMask = nodeMask;
15055 selfDeterminedMask = nodeMask;
15059 selfDeterminedMask = nodeMask;
15063 selfDeterminedMask = nodeMask;
15067 selfDeterminedMask = nodeMask;
15071 selfDeterminedMask = nodeMask;
15075 selfDeterminedMask = nodeMask;
15311 selfDeterminedMask = nodeMask;
15315 selfDeterminedMask = nodeMask;
15319 selfDeterminedMask = nodeMask;
15327 unsigned realMask = 0;
15328 unsigned forceRealMask = 0;
15329 int widthsDiffer = 0;
15330 int originalWidth = width;
15331 for(
int i = 0; i <
ArgCount(); i++ ) {
15332 if( ((nodeMask>>i)&1) && Arg<CNode*>(i)->type ==
eR ) {
15335 if( ((nodeMask>>i)&1) &&
15336 Arg<CNode*>(i)->type !=
eR &&
15338 Arg<CNode*>(i)->width != width) ) {
15346 if( newType ==
eU && newWidth == 0 ) {
15353 }
else if( (newType ==
eB || newType ==
eS || newType ==
eU) &&
15354 (type ==
eB || type ==
eS) ) {
15355 if( newWidth > width ) {
15358 if( newType ==
eU ) {
15363 MASSERT( newType !=
eR || newWidth == 0 );
15364 MASSERT( newType !=
eE || newWidth == 0 );
15371 forceRealMask = (~realMask & nodeMask);
15378 int convertWidth = conditionalWiden && FixedWidth();
15379 if( convertWidth ) {
15380 width = originalWidth;
15382 if( newType ==
eB && type ==
eS ) {
15388 int cWidth = width;
15390 if( calculateMax ) {
15394 int foundUnsigned = 0;
15395 for(
int i = 0; i <
ArgCount(); i++ ) {
15396 if( (nodeMask>>i)&1 ) {
15397 switch( Arg<CNode*>(i)->type ) {
15405 if( Arg<CNode*>(i)->width > max ) {
15406 max = Arg<CNode*>(i)->width;
15413 }
else if( foundUnsigned ) {
15424 for(
int i = 0; i <
ArgCount(); i++ ) {
15425 if( (nodeMask>>i)&1 ) {
15426 if( (scalarMask>>i)&1 ) {
15427 if( Arg<CNode*>(i)->type ==
eR ) {
15429 Arg<CNode*>(i) =
cNE( Arg<CNode*>(i),
cREAL(0), &loc );
15430 Arg<CNode*>(i)->LabelBits();
15431 }
else if( type ==
eR ) {
15434 Arg<CNode*>(i) =
cCNE( Arg<CNode*>(i),
cINT32(0), &loc );
15435 Arg<CNode*>(i)->LabelBits();
15437 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0,
eU );
15438 }
else if( (forceRealMask>>i)&1 ) {
15439 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0,
eR );
15440 }
else if( (selfDeterminedMask>>i)&1 ) {
15441 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0,
eU );
15443 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( cWidth, cType );
15453 if( newType !=
eR && convertWidth ) {
15455 nn->width = newWidth;
15459 if( newType ==
eR && (type ==
eB || type ==
eS) ) {
15465 }
else if( (newType ==
eB || newType ==
eS) && type ==
eR ) {
15467 nn->width = newWidth;
15468 nn->type = newType;
15481 switch(
GetOp() ) {
15483 fprintf( f,
"%s",
"???" );
15486 fprintf( f,
"%s", Arg<CVector*>(0)->GetVString() );
15489 fprintf( f,
"%s", (
char*)Arg<char*>(0) );
15492 fprintf( f,
"%s", (
char*)Arg<char*>(0) );
15495 fprintf( f,
"%s",
"" );
15496 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15497 fprintf( f,
"%s",
"," );
15498 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15499 fprintf( f,
"%s",
"" );
15502 fprintf( f,
"%s",
"WIDTH(" );
15503 fprintf( f,
"%s", type==
eS ?
"S" :
"U" );
15504 fprintf( f,
"%s",
"," );
15505 fprintf( f,
"%ld", width );
15506 fprintf( f,
"%s",
"," );
15507 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15508 fprintf( f,
"%s",
"," );
15509 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15510 fprintf( f,
"%s",
")" );
15513 fprintf( f,
"%s",
"(" );
15514 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15515 fprintf( f,
"%s",
")-(" );
15516 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15517 fprintf( f,
"%s",
")" );
15520 fprintf( f,
"%s",
"(" );
15521 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15522 fprintf( f,
"%s",
")*(" );
15523 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15524 fprintf( f,
"%s",
")" );
15527 fprintf( f,
"%s",
"(" );
15528 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15529 fprintf( f,
"%s",
")/(" );
15530 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15531 fprintf( f,
"%s",
")" );
15534 fprintf( f,
"%s",
"(" );
15535 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15536 fprintf( f,
"%s",
")**(" );
15537 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15538 fprintf( f,
"%s",
")" );
15541 fprintf( f,
"%s",
"(" );
15542 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15543 fprintf( f,
"%s",
")+(" );
15544 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15545 fprintf( f,
"%s",
")" );
15548 fprintf( f,
"%s",
"(" );
15549 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15550 fprintf( f,
"%s",
")<<(" );
15551 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15552 fprintf( f,
"%s",
")" );
15555 fprintf( f,
"%s",
"(" );
15556 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15557 fprintf( f,
"%s",
")>>(" );
15558 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15559 fprintf( f,
"%s",
")" );
15562 fprintf( f,
"%s",
"(" );
15563 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15564 fprintf( f,
"%s",
")<<<(" );
15565 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15566 fprintf( f,
"%s",
")" );
15569 fprintf( f,
"%s",
"(" );
15570 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15571 fprintf( f,
"%s",
")>>>(" );
15572 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15573 fprintf( f,
"%s",
")" );
15576 fprintf( f,
"%s",
"(" );
15577 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15578 fprintf( f,
"%s",
")%%(" );
15579 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15580 fprintf( f,
"%s",
")" );
15583 fprintf( f,
"%s",
"(" );
15584 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15585 fprintf( f,
"%s",
")|(" );
15586 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15587 fprintf( f,
"%s",
")" );
15590 fprintf( f,
"%s",
"(" );
15591 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15592 fprintf( f,
"%s",
")&(" );
15593 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15594 fprintf( f,
"%s",
")" );
15597 fprintf( f,
"%s",
"(" );
15598 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15599 fprintf( f,
"%s",
")&&&(" );
15600 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15601 fprintf( f,
"%s",
")" );
15604 fprintf( f,
"%s",
"(" );
15605 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15606 fprintf( f,
"%s",
")^(" );
15607 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15608 fprintf( f,
"%s",
")" );
15611 fprintf( f,
"%s",
"(" );
15612 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15613 fprintf( f,
"%s",
")~^(" );
15614 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15615 fprintf( f,
"%s",
")" );
15618 fprintf( f,
"%s",
"" );
15619 fprintf( f,
"%s", Arg<CSymbol*>(0)->GetName() );
15620 fprintf( f,
"%s",
"(" );
15621 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15622 fprintf( f,
"%s",
")" );
15625 fprintf( f,
"%s",
"" );
15626 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15627 fprintf( f,
"%s",
"[" );
15628 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15629 fprintf( f,
"%s",
"]" );
15632 fprintf( f,
"%s", Arg<CNet*>(0)->GetName() );
15635 fprintf( f,
"%s", Arg<CVar*>(0)->GetName() );
15638 fprintf( f,
"%s", Arg<CParam*>(0)->GetName() );
15641 fprintf( f,
"%s", Arg<CPort*>(0)->GetName() );
15644 fprintf( f,
"%s", Arg<CFref*>(0)->GetName() );
15647 fprintf( f,
"%s", Arg<CGenvar*>(0)->GetName() );
15650 fprintf( f,
"%s", Arg<CEnum*>(0)->GetName() );
15653 fprintf( f,
"%s", Arg<CTypedef*>(0)->GetName() );
15656 fprintf( f,
"%s",
"VarDecl" );
15659 fprintf( f,
"%s",
"(" );
15660 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15661 fprintf( f,
"%s",
"," );
15662 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15663 fprintf( f,
"%s",
")" );
15666 fprintf( f,
"%s",
"" );
15667 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15668 fprintf( f,
"%s",
":" );
15669 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15670 fprintf( f,
"%s",
"" );
15673 fprintf( f,
"%s",
"" );
15674 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15675 fprintf( f,
"%s",
":" );
15676 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15677 fprintf( f,
"%s",
"" );
15680 fprintf( f,
"%s",
"" );
15681 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15682 fprintf( f,
"%s",
"+:" );
15683 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15684 fprintf( f,
"%s",
"" );
15687 fprintf( f,
"%s",
"" );
15688 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15689 fprintf( f,
"%s",
"-:" );
15690 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15691 fprintf( f,
"%s",
"" );
15694 fprintf( f,
"%s",
"CVRI(" );
15695 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15696 fprintf( f,
"%s",
")" );
15699 fprintf( f,
"%s",
"CVIR(" );
15700 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15701 fprintf( f,
"%s",
")" );
15704 fprintf( f,
"%s",
"{" );
15705 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15706 fprintf( f,
"%s",
"{" );
15707 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15708 fprintf( f,
"%s",
"}}" );
15711 fprintf( f,
"%s",
"{" );
15712 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15713 fprintf( f,
"%s",
"," );
15714 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15715 fprintf( f,
"%s",
"}" );
15718 fprintf( f,
"%s",
"{" );
15719 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15720 fprintf( f,
"%s",
"}" );
15723 fprintf( f,
"%s",
"~(" );
15724 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15725 fprintf( f,
"%s",
")" );
15728 fprintf( f,
"%s",
"-(" );
15729 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15730 fprintf( f,
"%s",
")" );
15733 fprintf( f,
"%s",
"+(" );
15734 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15735 fprintf( f,
"%s",
")" );
15738 fprintf( f,
"%s",
"!(" );
15739 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15740 fprintf( f,
"%s",
")" );
15743 fprintf( f,
"%s",
"(" );
15744 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15745 fprintf( f,
"%s",
")>(" );
15746 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15747 fprintf( f,
"%s",
")" );
15750 fprintf( f,
"%s",
"(" );
15751 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15752 fprintf( f,
"%s",
")>=(" );
15753 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15754 fprintf( f,
"%s",
")" );
15757 fprintf( f,
"%s",
"(" );
15758 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15759 fprintf( f,
"%s",
")<(" );
15760 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15761 fprintf( f,
"%s",
")" );
15764 fprintf( f,
"%s",
"(" );
15765 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15766 fprintf( f,
"%s",
")<=(" );
15767 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15768 fprintf( f,
"%s",
")" );
15771 fprintf( f,
"%s",
"(" );
15772 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15773 fprintf( f,
"%s",
")&&(" );
15774 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15775 fprintf( f,
"%s",
")" );
15778 fprintf( f,
"%s",
"(" );
15779 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15780 fprintf( f,
"%s",
")||(" );
15781 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15782 fprintf( f,
"%s",
")" );
15785 fprintf( f,
"%s",
"(" );
15786 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15787 fprintf( f,
"%s",
")===(" );
15788 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15789 fprintf( f,
"%s",
")" );
15792 fprintf( f,
"%s",
"(" );
15793 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15794 fprintf( f,
"%s",
")!==(" );
15795 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15796 fprintf( f,
"%s",
")" );
15799 fprintf( f,
"%s",
"(" );
15800 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15801 fprintf( f,
"%s",
")==(" );
15802 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15803 fprintf( f,
"%s",
")" );
15806 fprintf( f,
"%s",
"(" );
15807 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15808 fprintf( f,
"%s",
")!=(" );
15809 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15810 fprintf( f,
"%s",
")" );
15813 fprintf( f,
"%s",
"&(" );
15814 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15815 fprintf( f,
"%s",
")" );
15818 fprintf( f,
"%s",
"~&(" );
15819 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15820 fprintf( f,
"%s",
")" );
15823 fprintf( f,
"%s",
"|(" );
15824 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15825 fprintf( f,
"%s",
")" );
15828 fprintf( f,
"%s",
"~|(" );
15829 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15830 fprintf( f,
"%s",
")" );
15833 fprintf( f,
"%s",
"^(" );
15834 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15835 fprintf( f,
"%s",
")" );
15838 fprintf( f,
"%s",
"~^(" );
15839 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15840 fprintf( f,
"%s",
")" );
15843 fprintf( f,
"%s",
"(" );
15844 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15845 fprintf( f,
"%s",
")?(" );
15846 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15847 fprintf( f,
"%s",
"):(" );
15848 if( Arg<CNode*>(2) ) Arg<CNode*>(2)->
Dump( f );
else fprintf( f,
"NULL" );
15849 fprintf( f,
"%s",
")" );
15852 fprintf( f,
"%s",
"INIT(*)" );
15855 fprintf( f,
"%s",
"POSEDGE(" );
15856 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15857 fprintf( f,
"%s",
")" );
15860 fprintf( f,
"%s",
"NEGEDGE(" );
15861 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15862 fprintf( f,
"%s",
")" );
15865 fprintf( f,
"%s",
"EDGE(" );
15866 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15867 fprintf( f,
"%s",
")" );
15870 fprintf( f,
"%s",
"(" );
15871 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15872 fprintf( f,
"%s",
":" );
15873 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15874 fprintf( f,
"%s",
":" );
15875 if( Arg<CNode*>(2) ) Arg<CNode*>(2)->
Dump( f );
else fprintf( f,
"NULL" );
15876 fprintf( f,
"%s",
")" );
15879 fprintf( f,
"%s",
"MODULE_DEF" );
15882 fprintf( f,
"%s",
"PACKAGE_DEF" );
15885 fprintf( f,
"%s",
"" );
15886 fprintf( f,
"%s", (
const char*)Arg<const char*>(0) );
15887 fprintf( f,
"%s",
"<" );
15888 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15889 fprintf( f,
"%s",
">" );
15892 fprintf( f,
"%s",
"" );
15893 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15894 fprintf( f,
"%s",
"." );
15895 fprintf( f,
"%s", Arg<CSymbol*>(1)->GetName() );
15896 fprintf( f,
"%s",
"" );
15899 fprintf( f,
"%s",
"++(" );
15900 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15901 fprintf( f,
"%s",
")" );
15904 fprintf( f,
"%s",
"(" );
15905 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15906 fprintf( f,
"%s",
")++" );
15909 fprintf( f,
"%s",
"--(" );
15910 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15911 fprintf( f,
"%s",
")" );
15914 fprintf( f,
"%s",
"(" );
15915 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15916 fprintf( f,
"%s",
")--" );
15919 fprintf( f,
"%s",
"CAST(" );
15920 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15921 fprintf( f,
"%s",
"," );
15922 if( Arg<CNode*>(1) ) Arg<CNode*>(1)->
Dump( f );
else fprintf( f,
"NULL" );
15923 fprintf( f,
"%s",
")" );
15926 fprintf( f,
"%s",
"'" );
15927 if( Arg<CNode*>(0) ) Arg<CNode*>(0)->
Dump( f );
else fprintf( f,
"NULL" );
15928 fprintf( f,
"%s",
"" );
15931 fprintf( f,
"%s",
"$" );
16015 #endif // DEFINE_METHODS
16017 #ifdef DEFINE_TEST_HARNESS
16020 for(
int i = 0; i < 155; ++i ) {
16022 if( n->
Precedence() != n->Precedence_1() ) {
16028 #endif // DEFINE_TEST_HARNESS
CNode * cDIV(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for DIV divide.
Definition: cnode_def.h:2989
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:2923
static NodeType_t Type(CSymbol *symbol, CNode *args)
Determine type of systask.
Definition: systask.h:134
nonblocking assignment
Definition: cnode_def.h:1734
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:5986
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:4909
CNode * cFOREVER(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for FOREVER forever statement.
Definition: cnode_def.h:6162
real constant
Definition: cnode_def.h:665
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:5534
CNode * cDEASSIGN(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for DEASSIGN deassign statement.
Definition: cnode_def.h:7032
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:5460
preincrement
Definition: cnode_def.h:2260
CNode * cASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for ASSIGN procedural assignment.
Definition: cnode_def.h:5312
vector subrange with ascending index select
Definition: cnode_def.h:1164
force statement
Definition: cnode_def.h:1712
condition expression operator
Definition: cnode_def.h:1449
arithmetic right shift
Definition: cnode_def.h:826
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:6478
procedural assignment with mul
Definition: cnode_def.h:1593
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:5423
sentinal at end of port list
Definition: cnode_def.h:2206
CNode * cPARAM_DECL(CParam *a0, Coord_t *loc=NULL)
Node construction shortcut for PARAM_DECL parameter declaration.
Definition: cnode_def.h:3942
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:6052
reduction xnor
Definition: cnode_def.h:1437
case not equal
Definition: cnode_def.h:1355
CNode * cMOD(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for MOD modulus.
Definition: cnode_def.h:3220
CNode * cWAIT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for WAIT wait statement.
Definition: cnode_def.h:6258
no operation
Definition: cnode_def.h:727
Declaration object for genvars.
Definition: cgenvar.h:46
reduction nand
Definition: cnode_def.h:1397
CNode * cELIST(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ELIST expression list.
Definition: cnode_def.h:2832
undefined
Definition: cdatatype.h:102
error node
Definition: cnode_def.h:645
CNode * cPORT_REF(CPortDir *a0, Coord_t *loc=NULL)
Node construction shortcut for PORT_REF reference to port.
Definition: cnode_def.h:3731
signed bit vector, includes integer
Definition: cdatatype.h:104
gate instance
Definition: cnode_def.h:912
procedural assignment with right shift
Definition: cnode_def.h:1677
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:1990
exponent
Definition: cnode_def.h:771
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:3576
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:2740
statement block
Definition: cnode_def.h:1522
disable statement
Definition: cnode_def.h:2121
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:1653
vector decl range specification
Definition: cnode_def.h:1142
case equal
Definition: cnode_def.h:1344
CNode * cREAL(double number)
Short cut for creating RCONSTANT node with a given double value.
Definition: cnode.h:817
negative event qualifier
Definition: cnode_def.h:1754
import item
Definition: cnode_def.h:1949
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:5497
initial block
Definition: cnode_def.h:1459
CNode * cPREDEC(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for PREDEC predecrement.
Definition: cnode_def.h:7532
CNode * cGIF(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for GIF structural if statement.
Definition: cnode_def.h:7121
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:3760
int IsEvaluateable()
Checks to see if expression tree can be evaluated.
Definition: cnode_def.h:12842
CNode * cPRAGMA(const char *a0, int a1, Coord_t *loc=NULL)
Node construction shortcut for PRAGMA program pragma.
Definition: cnode_def.h:2799
CNode * cCASEX(CNode *a0, CNode *a1, ConditionalType a2, Coord_t *loc=NULL)
Node construction shortcut for CASEX casex statement.
Definition: cnode_def.h:6370
bitwise and
Definition: cnode_def.h:859
CNode * cCAT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CAT concatenation operator.
Definition: cnode_def.h:4344
postincrement
Definition: cnode_def.h:2270
void Add(double *r, double *a, double *b)
Definition: cnode.h:682
CNode * cRXOR(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RXOR reduction xor.
Definition: cnode_def.h:4967
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:6517
CNode * cMAX_N(CNode *first,...)
Definition: cnode.h:1266
CNode * cAND(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for AND bitwise and.
Definition: cnode_def.h:3286
instance reference
Definition: cnode_def.h:902
CNode * cTABLE_SYMBOL(char *a0, Coord_t *loc=NULL)
Node construction shortcut for TABLE_SYMBOL udp table symbol.
Definition: cnode_def.h:7288
CNode * cPOSEDGE(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for POSEDGE positive event qualifier.
Definition: cnode_def.h:5927
not equal
Definition: cnode_def.h:1377
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:5793
CNode * cNOT(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for NOT logical complement.
Definition: cnode_def.h:4492
CNode * cRETURN(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RETURN return.
Definition: cnode_def.h:7445
void Neg(double *r, double *a)
Definition: cnode.h:702
CNode * cCEQ(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CEQ case equal.
Definition: cnode_def.h:4720
list of nodes
Definition: cnode_def.h:1131
greater than or equal
Definition: cnode_def.h:1289
CNode * cEQ(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for EQ equal.
Definition: cnode_def.h:4786
vector constant
Definition: cnode_def.h:655
procedural assignment
Definition: cnode_def.h:1545
assignment_pattern
Definition: cnode_def.h:2311
Coord_t * GetCoord()
Get node's file coordinates.
Definition: cnode.h:312
CNode * cNET_DECL(CNet *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for NET_DECL net declaration.
Definition: cnode_def.h:3877
wait statement
Definition: cnode_def.h:1855
CNode * cMUL_N(CNode *first,...)
Definition: cnode.h:1300
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:6938
static CObstack * CurrentHeap()
Gets pointer to current heap allocator.
Definition: cnode.h:237
CNode * cEVOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for EVOR event or.
Definition: cnode_def.h:6019
int IsConstant()
Checks expression tree to see if it is constant.
Definition: cnode_def.h:8183
CNode * GetWidthExp(void)
Create expression representing width of expression.
Definition: cnode_def.h:8837
reduction xor
Definition: cnode_def.h:1427
case item
Definition: cnode_def.h:1915
delay control
Definition: cnode_def.h:2000
CNode * cRAND(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RAND reduction and.
Definition: cnode_def.h:4851
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:5892
CNode * cNEG(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for NEG negation.
Definition: cnode_def.h:4434
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:5608
reduction nor
Definition: cnode_def.h:1417
CNode * cGT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for GT greater than.
Definition: cnode_def.h:4522
CNode * cCVRI(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for CVRI convert real to integer.
Definition: cnode_def.h:4252
void PostVisit1(void(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node after children have been visited.
Definition: cnode_def.h:10654
port connection
Definition: cnode_def.h:1939
long INT32
Short cut for signed 32 bit integer.
Definition: glue.h:38
arithmetic left shift
Definition: cnode_def.h:815
CNode * cDISABLE(CSymbol *a0, Coord_t *loc=NULL)
Node construction shortcut for DISABLE disable statement.
Definition: cnode_def.h:7061
CNode * cREPEAT_CONTROL(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for REPEAT_CONTROL repeat control.
Definition: cnode_def.h:6666
variable declaration
Definition: cnode_def.h:1070
int IsVolatile(void)
Checks to see if expression tree is volatile.
Definition: cnode_def.h:8349
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:5756
path statement
Definition: cnode_def.h:2057
int Precedence()
Get the precedence of the operator represented by the node.
Definition: cnode_def.h:8011
genvar declaration
Definition: cnode_def.h:1110
CNode_sp< T > Arg(int index)
Get a node's operand.
Definition: cnode.h:549
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:6293
CNode * cRSH(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for RSH logical right shift.
Definition: cnode_def.h:3121
reference to port
Definition: cnode_def.h:1008
CNode * cFUNCTION_DEF(CFunction *a0, Coord_t *loc=NULL)
Node construction shortcut for FUNCTION_DEF function definition.
Definition: cnode_def.h:6578
convert integer to real
Definition: cnode_def.h:1195
logical and
Definition: cnode_def.h:1322
reduction or
Definition: cnode_def.h:1407
less than or equal
Definition: cnode_def.h:1311
edge qualifier
Definition: cnode_def.h:1765
reduction and
Definition: cnode_def.h:1387
bitwise or
Definition: cnode_def.h:848
CNode * cSLICE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for SLICE vector subrange.
Definition: cnode_def.h:4154
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:4621
reference to a forward declared variable
Definition: cnode_def.h:1018
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:4187
CNode * cSPECPARAM_DECL(CParam *a0, Coord_t *loc=NULL)
Node construction shortcut for SPECPARAM_DECL specify parameter declaration.
Definition: cnode_def.h:3971
void CNodeTestHarness()
Definition: cnode_def.h:16018
comment
Definition: cnode_def.h:675
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:6225
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:5386
bitwise xor
Definition: cnode_def.h:881
CNode * cCAST(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CAST data type change.
Definition: cnode_def.h:7591
procedural assignment with div
Definition: cnode_def.h:1605
procedural assignment with add
Definition: cnode_def.h:1569
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:5027
concatenation operator
Definition: cnode_def.h:1217
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:1665
port declaration
Definition: cnode_def.h:1100
CNode * cPACKAGE_DEF(CPackage *a0, Coord_t *loc=NULL)
Node construction shortcut for PACKAGE_DEF package definition.
Definition: cnode_def.h:6636
reference to a genvar
Definition: cnode_def.h:1028
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:7159
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:6902
CNode * cATTRIBUTE(CAttr *a0, Coord_t *loc=NULL)
Node construction shortcut for ATTRIBUTE attribute specification.
Definition: cnode_def.h:7090
CNode * cTABLE_ENTRY(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for TABLE_ENTRY udp table entry.
Definition: cnode_def.h:7259
convert real to integer
Definition: cnode_def.h:1185
int ArgCount(void)
Get the number of operands for the node.
Definition: cnode_def.h:7685
CNode * cGENVAR_DECL(CGenvar *a0, Coord_t *loc=NULL)
Node construction shortcut for GENVAR_DECL genvar declaration.
Definition: cnode_def.h:4029
CNode * cALWAYS(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS always block.
Definition: cnode_def.h:5091
CNode * cERROR(Coord_t *loc=NULL)
Node construction shortcut for ERROR error node.
Definition: cnode_def.h:2656
unsigned bit vector
Definition: cdatatype.h:106
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:3509
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:3847
CNode * cALWAYS_COMB(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS_COMB always combinational logic block.
Definition: cnode_def.h:5178
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:2131
CNode * cRANGE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for RANGE vector decl range specification.
Definition: cnode_def.h:4121
event statement
Definition: cnode_def.h:1510
Declaration object for module/function/task ports.
Definition: cport.h:44
generate intialize assignment
Definition: cnode_def.h:1557
divide
Definition: cnode_def.h:760
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:1316
delay statement
Definition: cnode_def.h:1787
negation
Definition: cnode_def.h:1247
logical right shift
Definition: cnode_def.h:804
casez statement
Definition: cnode_def.h:1904
unary concat
Definition: cnode_def.h:1227
call to a task
Definition: cnode_def.h:923
reference to net
Definition: cnode_def.h:978
void LoadReal(double d)
Load vector with integer part of real value.
int error
Definition: cnode_def.h:13891
int IsOwner(void *ptr)
Determine if pointer was allocated from this obstack.
Definition: cnode_def.h:13889
CNode * cFORCE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for FORCE force statement.
Definition: cnode_def.h:5829
CNode * cEXTERNAL_REF(CSymbol *a0, Coord_t *loc=NULL)
Node construction shortcut for EXTERNAL_REF external reference.
Definition: cnode_def.h:6756
vrq comment
Definition: cnode_def.h:685
CNode * cLAND(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LAND logical and.
Definition: cnode_def.h:4654
CNode * cRSHA(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for RSHA arithmetic right shift.
Definition: cnode_def.h:3187
equal
Definition: cnode_def.h:1366
unary plus
Definition: cnode_def.h:1257
Primary data structure representing parse tree nodes.
Definition: cnode.h:197
CNode * cPASSIGN(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for PASSIGN procedural assignment.
Definition: cnode_def.h:7000
CNode * cANDANDAND(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ANDANDAND triple and.
Definition: cnode_def.h:3319
CNode * cNET_REF(CNet *a0, Coord_t *loc=NULL)
Node construction shortcut for NET_REF reference to net.
Definition: cnode_def.h:3644
integer declaration
Definition: cdatatype.h:50
NodeOp_t
Parse tree opcodes.
Definition: cnode_def.h:636
CNode * cGASSIGN(bool a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for GASSIGN generate intialize assignment.
Definition: cnode_def.h:5349
void info(struct Coord_t *location, const char *format,...)
This routine should not be used by plugins.
program pragma
Definition: cnode_def.h:696
CNode * cCASEZ(CNode *a0, CNode *a1, ConditionalType a2, Coord_t *loc=NULL)
Node construction shortcut for CASEZ casez statement.
Definition: cnode_def.h:6407
CNode * cTRIGGER(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for TRIGGER event trigger.
Definition: cnode_def.h:6970
return
Definition: cnode_def.h:2250
CNode * cCNE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CNE case not equal.
Definition: cnode_def.h:4753
CNode * cVAR_REF(CVar *a0, Coord_t *loc=NULL)
Node construction shortcut for VAR_REF reference to variable.
Definition: cnode_def.h:3673
CNode * cCOM(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for COM bitwise complement.
Definition: cnode_def.h:4405
positive event qualifier
Definition: cnode_def.h:1744
CNode * cWIDTH(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for WIDTH expression width change.
Definition: cnode_def.h:2865
CNode * cEVENT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for EVENT event statement.
Definition: cnode_def.h:5208
defparam statement
Definition: cnode_def.h:2041
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:9451
Declaration object for module and gate instances.
Definition: cinstance.h:45
expression list
Definition: cnode_def.h:707
void EvalVector(CVector &v)
Evaluates expression tree evaluated in unconstrainted context.
Definition: cnode.cc:360
udp table symbol
Definition: cnode_def.h:2197
CNode * cEVENT_CONTROL(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for EVENT_CONTROL event control.
Definition: cnode_def.h:6727
multiply
Definition: cnode_def.h:749
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:4220
call to a function
Definition: cnode_def.h:957
queue dimension
Definition: cnode_def.h:2320
CNode * cARRAY(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ARRAY dimensioned reference (array/bit select)
Definition: cnode_def.h:3612
CNode * cVRQ(const char *a0, Coord_t *loc=NULL)
Node construction shortcut for VRQ vrq comment.
Definition: cnode_def.h:2769
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:7503
parameter declaration
Definition: cnode_def.h:1080
void Pow(double *r, double *a, double *b)
Definition: cnode.h:712
less than
Definition: cnode_def.h:1300
CNode * cALWAYS_FF(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS_FF always flip-flop block.
Definition: cnode_def.h:5149
CNode * cCASEITEM(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CASEITEM case item.
Definition: cnode_def.h:6443
replication operator
Definition: cnode_def.h:1206
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:2240
CNode * cINIT(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for INIT initial block.
Definition: cnode_def.h:5062
void SetAttributes(CNode *attr)
Attach attributes to operation.
Definition: cnode.h:519
CNode * cPORTLIST_END(Coord_t *loc=NULL)
Node construction shortcut for PORTLIST_END sentinal at end of port list.
Definition: cnode_def.h:7316
package definition
Definition: cnode_def.h:1979
bitwise xnor
Definition: cnode_def.h:892
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:7413
CNode * cALWAYS_LATCH(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS_LATCH always latch block.
Definition: cnode_def.h:5120
event control
Definition: cnode_def.h:2010
event or
Definition: cnode_def.h:1776
const char * nodeOpDescription[]
Definition: cnode_def.h:2485
CNode * PostSubVisit1(CNode *(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node after children have been visited.
Definition: cnode_def.h:11193
procedural assignment with bitwise and
Definition: cnode_def.h:1629
CNode * cPOSTDEC(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for POSTDEC postdecrement.
Definition: cnode_def.h:7561
udp table
Definition: cnode_def.h:2177
for statement
Definition: cnode_def.h:1868
triple and
Definition: cnode_def.h:870
void Div(double *r, double *a, double *b)
Definition: cnode.h:697
CNode * cXOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for XOR bitwise xor.
Definition: cnode_def.h:3352
event trigger
Definition: cnode_def.h:2090
structural if statement
Definition: cnode_def.h:2143
reference to a enum
Definition: cnode_def.h:1038
int Equivalent(CNode *a, CNode *b)
Definition: cnode_def.h:12282
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:5956
postdecrement
Definition: cnode_def.h:2290
module definition
Definition: cnode_def.h:1969
void Sub(double *r, double *a, double *b)
Definition: cnode.h:687
subtract
Definition: cnode_def.h:738
CNode * cRNAND(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RNAND reduction nand.
Definition: cnode_def.h:4880
specify parameter declaration
Definition: cnode_def.h:1090
forever statement
Definition: cnode_def.h:1822
CNode * cRELEASE(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RELEASE release statement.
Definition: cnode_def.h:5861
Declaration object for variables.
Definition: cvar.h:50
CNode * cIF(CNode *a0, CNode *a1, CNode *a2, ConditionalType a3, Coord_t *loc=NULL)
Node construction shortcut for IF if statement.
Definition: cnode_def.h:6124
external reference
Definition: cnode_def.h:2020
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:4938
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:6086
while statement
Definition: cnode_def.h:1844
CNode * cENUM_REF(CEnum *a0, Coord_t *loc=NULL)
Node construction shortcut for ENUM_REF reference to a enum.
Definition: cnode_def.h:3818
CNode * cTABLE(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for TABLE udp table.
Definition: cnode_def.h:7230
CNode * cPOW(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for POW exponent.
Definition: cnode_def.h:3022
CNode * cREPEAT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for REPEAT repeat statement.
Definition: cnode_def.h:6192
CNode * cOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for OR bitwise or.
Definition: cnode_def.h:3253
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:1701
CNode * cINT32(INT32 i)
Short cut for creating VCONSTANT node with a given integer value.
Definition: cnode.h:798
int suppressErrorMessages
Definition: cnode_def.h:13890
CNode * cASSIGNMENT_PATTERN(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ASSIGNMENT_PATTERN assignment_pattern.
Definition: cnode_def.h:7623
function definition
Definition: cnode_def.h:1959
CNode * cNE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for NE not equal.
Definition: cnode_def.h:4819
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:2229
CNode * cGATE_REF(CGate *a0, Coord_t *loc=NULL)
Node construction shortcut for GATE_REF gate instance.
Definition: cnode_def.h:3446
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:6853
int IsWidthEvaluateable(void)
Evaluates if expression width can be evaluated.
Definition: cnode_def.h:9289
CNode * cRCONSTANT(char *a0, Coord_t *loc=NULL)
Node construction shortcut for RCONSTANT real constant.
Definition: cnode_def.h:2711
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:3910
event - have width 0
Definition: cdatatype.h:105
CNode * cPORT_DEF(CPort *a0, Coord_t *loc=NULL)
Node construction shortcut for PORT_DEF port definition.
Definition: cnode_def.h:6785
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:4555
void PreVisit1(int(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node before children have been visited.
Definition: cnode_def.h:10128
procedural assignment with mod
Definition: cnode_def.h:1617
CNode * cIMPORT(CSymbol *a0, Coord_t *loc=NULL)
Node construction shortcut for IMPORT import item.
Definition: cnode_def.h:6549
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:494
call to a timing task
Definition: cnode_def.h:945
CNode * cLT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LT less than.
Definition: cnode_def.h:4588
release statement
Definition: cnode_def.h:1722
void Mul(double *r, double *a, double *b)
Definition: cnode.h:692
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:5682
structural case statement
Definition: cnode_def.h:2167
int IsWidthConstant(void)
Evaluates if expression width is constant.
Definition: cnode_def.h:8515
CNode * cREP(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for REP replication operator.
Definition: cnode_def.h:4311
CNode * cDELAY_CONTROL(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for DELAY_CONTROL delay control.
Definition: cnode_def.h:6698
CNode * cNOP(Coord_t *loc=NULL)
Node construction shortcut for NOP no operation.
Definition: cnode_def.h:2896
NodeType_t GetNodeType(void)
Get node expression type.
Definition: cnode.h:540
always block
Definition: cnode_def.h:1469
reference to a type
Definition: cnode_def.h:1048
udp table entry
Definition: cnode_def.h:2187
void Plus(double *r, double *a)
Definition: cnode.h:707
INT32 GetWidth(void)
Get vector bit width.
CNode * cDOLLAR(Coord_t *loc=NULL)
Node construction shortcut for DOLLAR queue dimension.
Definition: cnode_def.h:7651
static int WidthConstant(CSymbol *symbol, CNode *args, CBlock *block)
Determine if width of function is constant.
path assignment statement
Definition: cnode_def.h:2069
int Signed() const
Get signed attribute.
Definition: cvector.h:178
vector subrange
Definition: cnode_def.h:1153
real - have width 0
Definition: cdatatype.h:103
Declaration object for functions and tasks.
Definition: cfunction.h:50
port definition
Definition: cnode_def.h:2030
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:4088
always flip-flop block
Definition: cnode_def.h:1489
call to enable a systask
Definition: cnode_def.h:934
procedural assignment
Definition: cnode_def.h:2101
CNode * cGCASE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for GCASE structural case statement.
Definition: cnode_def.h:7198
procedural assignment with bitwise or
Definition: cnode_def.h:1641
unsigned Hash()
Calculate hash of tree.
Definition: cnode_def.h:11734
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:3542
CNode * cRXNOR(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RXNOR reduction xnor.
Definition: cnode_def.h:4996
structural for statement
Definition: cnode_def.h:2156
logical complement
Definition: cnode_def.h:1267
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:895
CNode * cXNOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for XNOR bitwise xnor.
Definition: cnode_def.h:3385
casex statement
Definition: cnode_def.h:1892
always latch block
Definition: cnode_def.h:1479
CNode * cADD_N(CNode *first,...)
Definition: cnode.h:1284
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:7343
addition
Definition: cnode_def.h:782
repeat statement
Definition: cnode_def.h:1833
expression represented by a macro
Definition: cnode_def.h:2217
deassign statement
Definition: cnode_def.h:2111
NodeType_t
Expression node type.
Definition: cdatatype.h:101
CNode * cSPECIFY_REF(CSpecify *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for SPECIFY_REF specify block.
Definition: cnode_def.h:5278
data type change
Definition: cnode_def.h:2301
procedural assignment with subtract
Definition: cnode_def.h:1581
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:5719
CNode * cCASE(CNode *a0, CNode *a1, ConditionalType a2, Coord_t *loc=NULL)
Node construction shortcut for CASE case statement.
Definition: cnode_def.h:6333
CNode * GetAttributes()
Get attributes attached to operation.
Definition: cnode.h:514
CNode * cADD(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ADD addition.
Definition: cnode_def.h:3055
const char * nodeOpName[]
Definition: cnode_def.h:2326
predecrement
Definition: cnode_def.h:2280
CNode * cDEFPARAM(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for DEFPARAM defparam statement.
Definition: cnode_def.h:6815
dimensioned reference (array/bit select)
Definition: cnode_def.h:968
CNode * cPORT_DECL(CPortDir *a0, Coord_t *loc=NULL)
Node construction shortcut for PORT_DECL port declaration.
Definition: cnode_def.h:4000
CNode * cLOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LOR logical or.
Definition: cnode_def.h:4687
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:7377
NodeOp_t GetOp()
Return node's operation type.
Definition: cnode.h:317
CNode * cLSH(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LSH logical left shift.
Definition: cnode_def.h:3088
int IsWidthVolatile(void)
Evaluates if expression width is volatile.
Definition: cnode_def.h:8675
type declaration
Definition: cnode_def.h:1120
CNode * cVCONSTANT(CVector *a0, Coord_t *loc=NULL)
Node construction shortcut for VCONSTANT vector constant.
Definition: cnode_def.h:2682
void Dump(FILE *f)
Print a compact representation of the parse tree.
Definition: cnode_def.h:15479
logical left shift
Definition: cnode_def.h:793
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:4376
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:1928
CNode * cTYPEDEF_DECL(CTypedef *a0, Coord_t *loc=NULL)
Node construction shortcut for TYPEDEF_DECL type declaration.
Definition: cnode_def.h:4058
int cABSDIFFPLUS1(int a1, int a2)
Definition: cnode.h:1354
vector subrange with descending index select
Definition: cnode_def.h:1175
bitwise complement
Definition: cnode_def.h:1237
reference to parameter
Definition: cnode_def.h:998
always combinational logic block
Definition: cnode_def.h:1499
double EvalReal(void)
Evaluates expression tree evaluated in a real context.
Definition: cnode.cc:391
case statement
Definition: cnode_def.h:1880
CNode * cLSHA(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LSHA arithmetic left shift.
Definition: cnode_def.h:3154
CNode * cPARAM_REF(CParam *a0, Coord_t *loc=NULL)
Node construction shortcut for PARAM_REF reference to parameter.
Definition: cnode_def.h:3702
greater than
Definition: cnode_def.h:1278
CNode * cMODULE_DEF(CModule *a0, Coord_t *loc=NULL)
Node construction shortcut for MODULE_DEF module definition.
Definition: cnode_def.h:6607
specify block
Definition: cnode_def.h:1533
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:7474
CNode * cPLUS(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for PLUS unary plus.
Definition: cnode_def.h:4463
modulus
Definition: cnode_def.h:837
ifnone path assignment statement
Definition: cnode_def.h:2080
net declaration
Definition: cnode_def.h:1059
expression width change
Definition: cnode_def.h:718
CNode * cINSTANCE_REF(CInstance *a0, Coord_t *loc=NULL)
Node construction shortcut for INSTANCE_REF instance reference.
Definition: cnode_def.h:3417
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:3476
ConditionalType
Case/If type.
Definition: cnode.h:116
CNode * cGENVAR_REF(CGenvar *a0, Coord_t *loc=NULL)
Node construction shortcut for GENVAR_REF reference to a genvar.
Definition: cnode_def.h:3789
CNode * cMUL(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for MUL multiply.
Definition: cnode_def.h:2956
virtual INT32 GetWidth(void)
Evaluate packed width of declaration.
procedural assignment with left arithmetic shift
Definition: cnode_def.h:1689
double s2d(char *s)
Convert char string to double.
Definition: cnode.h:1093
if statement
Definition: cnode_def.h:1812
reference to variable
Definition: cnode_def.h:988
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:5571
CNode * cCVIR(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for CVIR convert integer to real.
Definition: cnode_def.h:4281
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:5645
CNode * cBLOCK_REF(CBlock *a0, CNode *a1, bool a2, Coord_t *loc=NULL)
Node construction shortcut for BLOCK_REF statement block.
Definition: cnode_def.h:5242
CNode * Clone(CObstack *heap=stack)
Replicate tree.
Definition: cnode_def.h:9626
min/typ/max expression
Definition: cnode_def.h:1799
logical or
Definition: cnode_def.h:1333