2311 #endif // DEFINE_ENUM
2312 #ifdef DEFINE_METHODS
2446 "IFNONE_PATH_ASSIGN",
2468 "ASSIGNMENT_PATTERN",
2479 "expression width change",
2486 "logical left shift",
2487 "logical right shift",
2488 "arithmetic left shift",
2489 "arithmetic right shift",
2496 "instance reference",
2499 "call to enable a systask",
2500 "call to a timing task",
2501 "call to a function",
2502 "dimensioned reference (array/bit select)",
2504 "reference to variable",
2505 "reference to parameter",
2506 "reference to port",
2507 "reference to a forward declared variable",
2508 "reference to a genvar",
2509 "reference to a enum",
2510 "reference to a type",
2512 "variable declaration",
2513 "parameter declaration",
2514 "specify parameter declaration",
2516 "genvar declaration",
2519 "vector decl range specification",
2521 "vector subrange with ascending index select",
2522 "vector subrange with descending index select",
2523 "convert real to integer",
2524 "convert integer to real",
2525 "replication operator",
2526 "concatenation operator",
2528 "bitwise complement",
2531 "logical complement",
2533 "greater than or equal",
2535 "less than or equal",
2548 "condition expression operator",
2551 "always latch block",
2552 "always flip-flop block",
2553 "always combinational logic block",
2557 "procedural assignment",
2558 "generate intialize assignment",
2559 "procedural assignment with add",
2560 "procedural assignment with subtract",
2561 "procedural assignment with mul",
2562 "procedural assignment with div",
2563 "procedural assignment with mod",
2564 "procedural assignment with bitwise and",
2565 "procedural assignment with bitwise or",
2566 "procedural assignment with bitwise xor",
2567 "procedural assignment with left shift",
2568 "procedural assignment with right shift",
2569 "procedural assignment with left arithmetic shift",
2570 "procedural assignment with right arithmetic shift",
2572 "release statement",
2573 "nonblocking assignment",
2574 "positive event qualifier",
2575 "negative event qualifier",
2579 "min/typ/max expression",
2581 "forever statement",
2590 "continious assignment",
2593 "function definition",
2594 "module definition",
2595 "package definition",
2599 "external reference",
2601 "defparam statement",
2603 "path assignment statement",
2604 "ifnone path assignment statement",
2606 "procedural assignment",
2607 "deassign statement",
2608 "disable statement",
2609 "attribute specification",
2610 "structural if statement",
2611 "structural for statement",
2612 "structural case statement",
2616 "sentinal at end of port list",
2617 "expression represented by a macro",
2618 "enum specification",
2619 "member reference (structure, class or external",
2626 "assignment_pattern",
2629 #endif // DEFINE_METHODS
2632 #ifdef DEFINE_CONSTRUCTOR
2699 n->
Arg<
char*>(0) = a0;
2714 n->
Arg<
char*>(0) = a0;
2728 n->
Arg<
const char*>(0) = a0;
2743 n->
Arg<
const char*>(0) = a0;
2757 n->
Arg<
const char*>(0) = a0;
2772 n->
Arg<
const char*>(0) = a0;
2787 n->
Arg<
const char*>(0) = a0;
2788 n->
Arg<
int>(1) = a1;
2804 n->
Arg<
const char*>(0) = a0;
2805 n->
Arg<
int>(1) = a1;
3806 n->
Arg<CEnum*>(0) = a0;
3821 n->
Arg<CEnum*>(0) = a0;
3835 n->
Arg<CTypedef*>(0) = a0;
3850 n->
Arg<CTypedef*>(0) = a0;
4046 n->
Arg<CTypedef*>(0) = a0;
4061 n->
Arg<CTypedef*>(0) = a0;
5333 n->
Arg<
bool>(0) = a0;
5352 n->
Arg<
bool>(0) = a0;
6620 n->
Arg<CPackage*>(0) = a0;
6635 n->
Arg<CPackage*>(0) = a0;
6837 n->
Arg<
int>(0) = a0;
6839 n->
Arg<
int>(2) = a2;
6840 n->
Arg<
int>(3) = a3;
6842 n->
Arg<
int>(5) = a5;
6864 n->
Arg<
int>(0) = a0;
6866 n->
Arg<
int>(2) = a2;
6867 n->
Arg<
int>(3) = a3;
6869 n->
Arg<
int>(5) = a5;
7272 n->
Arg<
char*>(0) = a0;
7287 n->
Arg<
char*>(0) = a0;
7327 n->
Arg<
const char*>(0) = a0;
7344 n->
Arg<
const char*>(0) = a0;
7625 #endif // DEFINE_CONSTUCTOR
7635 #ifdef DEFINE_METHODS
8367 return Arg<CEnum*>(0)->GetExpression()->IsVolatile();
8435 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsVolatile() : TRUE;
8511 return Array::WidthConstant(Arg<CNode*>(0),Arg<CNode*>(1));
8597 return Member::WidthConstant(Arg<CNode*>(0),Arg<CSymbol*>(1));
8669 return Array::WidthVolatile(Arg<CNode*>(0),Arg<CNode*>(1));
8755 return Member::WidthVolatile(Arg<CNode*>(0),Arg<CSymbol*>(1));
8920 return Array::WidthExp(Arg<CNode*>(0),Arg<CNode*>(1));
8986 return Arg<CNode*>(1);
8992 return Arg<CNode*>(1);
9178 return Member::WidthExp(Arg<CNode*>(0),Arg<CSymbol*>(1));
9275 return Array::WidthEvaluateable(Arg<CNode*>(0),Arg<CNode*>(1));
9361 return Member::WidthEvaluateable(Arg<CNode*>(0),Arg<CSymbol*>(1));
9393 return !Arg<CVector*>(0)->HasXZ();
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 ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9417 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9419 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9421 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9423 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9425 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9427 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9429 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 );
9439 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() ==
eINT);
9441 return Arg<CDecl*>(0)->GetDataType()->GetTwoState() ||
9447 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() ==
eINTEGER);
9453 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() ==
eINT);
9459 return Arg<CEnum*>(0)->GetExpression()->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 );
9473 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9475 return 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 );
9481 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9483 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9485 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9487 return Arg<CNode*>(0)->
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 );
9495 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9497 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 );
9501 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9503 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9505 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9507 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9509 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9511 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9513 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9515 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9517 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9519 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9521 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(2)->
IsNonX( integerIsNonX, exclude );
9523 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9525 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9527 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9529 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(2)->
IsNonX( integerIsNonX, exclude );
9533 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsNonX(integerIsNonX, exclude) : FALSE;
9535 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9537 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9539 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9541 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9543 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9545 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9547 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
10036 n->fixedWidth = fixedWidth;
10038 n->attributes = attributes->
Clone(heap);
10040 for(
int i = 0; i <
ArgCount(); i++ ) {
10041 if( ((nodeMask>>i)&1) && Arg<CNode*>(i) ) {
10044 void* tmp = Arg<void*>(i);
10045 n->
Arg<
void*>(i) = tmp;
10061 if( !(*func)(
this, data ) ) {
10070 switch(
GetOp() ) {
10145 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->
PreVisit1( func, data );
10149 if(Arg<CGate*>(0)) Arg<CGate*>(0)->
PreVisit1( func, data );
10184 if(Arg<CNet*>(0)) Arg<CNet*>(0)->
PreVisit1( func, data );
10188 if(Arg<CVar*>(0)) Arg<CVar*>(0)->
PreVisit1( func, data );
10192 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PreVisit1( func, data );
10196 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PreVisit1( func, data );
10200 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->
PreVisit1( func, data );
10204 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->
PreVisit1( func, data );
10208 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->
PreVisit1( func, data );
10323 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->
PreVisit1( func, data );
10327 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->
PreVisit1( func, data );
10439 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->
PreVisit1( func, data );
10443 if(Arg<CModule*>(0)) Arg<CModule*>(0)->
PreVisit1( func, data );
10447 if(Arg<CPackage*>(0)) Arg<CPackage*>(0)->
PreVisit1( func, data );
10463 if(Arg<CPort*>(0)) Arg<CPort*>(0)->
PreVisit1( func, data );
10491 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->
PreVisit1( func, data );
10550 for(
int i = 0; i <
ArgCount(); i++ ) {
10551 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i)->PreVisit1( func, data );
10563 if( !(*func)( n, data ) ) {
10589 switch(
GetOp() ) {
10664 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->
PostVisit1( func, data );
10668 if(Arg<CGate*>(0)) Arg<CGate*>(0)->
PostVisit1( func, data );
10711 if(Arg<CNet*>(0)) Arg<CNet*>(0)->
PostVisit1( func, data );
10715 if(Arg<CVar*>(0)) Arg<CVar*>(0)->
PostVisit1( func, data );
10719 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostVisit1( func, data );
10723 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostVisit1( func, data );
10727 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->
PostVisit1( func, data );
10731 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->
PostVisit1( func, data );
10735 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->
PostVisit1( func, data );
10850 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->
PostVisit1( func, data );
10854 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->
PostVisit1( func, data );
10966 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->
PostVisit1( func, data );
10970 if(Arg<CModule*>(0)) Arg<CModule*>(0)->
PostVisit1( func, data );
10974 if(Arg<CPackage*>(0)) Arg<CPackage*>(0)->
PostVisit1( func, data );
10990 if(Arg<CPort*>(0)) Arg<CPort*>(0)->
PostVisit1( func, data );
11018 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->
PostVisit1( func, data );
11077 for(
int i = 0; i <
ArgCount(); i++ ) {
11078 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i)->PostVisit1( func, data );
11081 std::stack<CNode*> visitLog;
11099 while( !visitLog.empty() ) {
11100 CNode* top = visitLog.top();
11102 (*func)(top->
Arg<
CNode*>(1),data);
11108 (*func)(
this, data );
11125 switch(
GetOp() ) {
11200 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->
PostSubVisit1( func, data );
11204 if(Arg<CGate*>(0)) Arg<CGate*>(0)->
PostSubVisit1( func, data );
11247 if(Arg<CNet*>(0)) Arg<CNet*>(0)->
PostSubVisit1( func, data );
11251 if(Arg<CVar*>(0)) Arg<CVar*>(0)->
PostSubVisit1( func, data );
11255 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostSubVisit1( func, data );
11259 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostSubVisit1( func, data );
11263 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->
PostSubVisit1( func, data );
11267 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->
PostSubVisit1( func, data );
11271 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->
PostSubVisit1( func, data );
11386 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->
PostSubVisit1( func, data );
11390 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->
PostSubVisit1( func, data );
11502 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->
PostSubVisit1( func, data );
11506 if(Arg<CModule*>(0)) Arg<CModule*>(0)->
PostSubVisit1( func, data );
11510 if(Arg<CPackage*>(0)) Arg<CPackage*>(0)->
PostSubVisit1( func, data );
11526 if(Arg<CPort*>(0)) Arg<CPort*>(0)->
PostSubVisit1( func, data );
11554 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->
PostSubVisit1( func, data );
11613 for(
int i = 0; i <
ArgCount(); i++ ) {
11614 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i) = Arg<CNode*>(i)->
PostSubVisit1( func, data );
11617 std::stack<CNode*> visitLog;
11636 while( !visitLog.empty() ) {
11637 CNode* top = visitLog.top();
11645 return (*func)(
this, data );
11658 unsigned result =
GetOp();
11660 switch(
GetOp() ) {
11666 result ^= Arg<CVector*>(0)->
Hash();
11670 result ^= strlen(Arg<char*>(0));
11674 result ^= strlen(Arg<char*>(0));
11678 result ^= strlen(Arg<char*>(0));
11682 result ^= strlen(Arg<char*>(0));
11683 result ^= Arg<int>(1);
11741 result ^= Arg<unsigned long>(0);
11745 result ^= Arg<unsigned long>(0);
11749 result ^= Arg<unsigned long>(0);
11753 result ^= Arg<unsigned long>(0);
11757 result ^= Arg<unsigned long>(0);
11761 result ^= Arg<unsigned long>(0);
11762 result ^= Arg<unsigned long>(2);
11769 result ^= Arg<unsigned long>(0);
11773 result ^= Arg<unsigned long>(0);
11777 result ^= Arg<unsigned long>(0);
11781 result ^= Arg<unsigned long>(0);
11785 result ^= Arg<unsigned long>(0);
11789 result ^= Arg<unsigned long>(0);
11793 result ^= Arg<unsigned long>(0);
11797 result ^= Arg<unsigned long>(0);
11801 result ^= Arg<unsigned long>(0);
11805 result ^= Arg<unsigned long>(0);
11809 result ^= Arg<unsigned long>(0);
11813 result ^= Arg<unsigned long>(0);
11817 result ^= Arg<unsigned long>(0);
11821 result ^= Arg<unsigned long>(0);
11825 result ^= Arg<unsigned long>(0);
11940 result ^= Arg<unsigned long>(0);
11944 result ^= Arg<unsigned long>(0);
11951 result ^= Arg<bool>(0);
12006 result ^= (
unsigned long)Arg<Edge_t>(1);
12019 result ^= Arg<unsigned long>(3);
12038 result ^= Arg<unsigned long>(2);
12042 result ^= Arg<unsigned long>(2);
12046 result ^= Arg<unsigned long>(2);
12053 result ^= Arg<unsigned long>(0);
12057 result ^= Arg<unsigned long>(0);
12061 result ^= Arg<unsigned long>(0);
12065 result ^= Arg<unsigned long>(0);
12069 result ^= Arg<unsigned long>(0);
12073 result ^= Arg<unsigned long>(0);
12086 result ^= Arg<unsigned long>(0);
12090 result ^= Arg<unsigned long>(0);
12097 result ^= Arg<int>(0);
12098 result ^= Arg<int>(2);
12099 result ^= Arg<int>(3);
12100 result ^= Arg<int>(5);
12119 result ^= Arg<unsigned long>(0);
12123 result ^= Arg<unsigned long>(0);
12142 result ^= strlen(Arg<char*>(0));
12149 result ^= strlen(Arg<char*>(0));
12153 result ^= Arg<unsigned long>(0);
12157 result ^= Arg<unsigned long>(1);
12182 for(
int i = 0; i <
ArgCount(); i++ ) {
12183 if( !((nodeMask>>i)&1) ) result ^= Arg<CNode*>(i)->Hash();
12211 if( a == NULL || b == NULL ) {
12222 switch( a->
GetOp() ) {
12232 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12236 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12240 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12244 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12245 if( !(a->
Arg<
int>(1)==b->
Arg<
int>(1)) ) {
return FALSE; }
12635 if( !(a->
Arg<CPackage*>(0)==b->
Arg<CPackage*>(0)) ) {
return FALSE; }
12659 if( !(a->
Arg<
int>(0)==b->
Arg<
int>(0)) ) {
return FALSE; }
12660 if( !(a->
Arg<
int>(2)==b->
Arg<
int>(2)) ) {
return FALSE; }
12661 if( !(a->
Arg<
int>(3)==b->
Arg<
int>(3)) ) {
return FALSE; }
12662 if( !(a->
Arg<
int>(5)==b->
Arg<
int>(5)) ) {
return FALSE; }
12704 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12711 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12744 for(
int i = 0; i < a->
ArgCount(); i++ ) {
12745 if( !((nodeMask>>i)&1) &&
12762 return Arg<CParam*>(0)->GetExpression()->IsEvaluateable();
12764 return Arg<CParam*>(0)->GetExpression()->IsEvaluateable();
12766 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsEvaluateable() : FALSE;
12925 for(
int i = 0; i <
ArgCount(); i++ ) {
12926 if( !Arg<CNode*>(i)->IsEvaluateable() )
return FALSE;
12941 void CNode::_EvalVector(
CVector& v )
12948 {
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;};
12951 EVAL_VECTOR_BINARY(
Sub);
12954 EVAL_VECTOR_BINARY(
Mul);
12957 EVAL_VECTOR_BINARY(
Div);
12960 EVAL_VECTOR_BINARY(
Pow);
12963 EVAL_VECTOR_BINARY(
Add);
12966 EVAL_VECTOR_BINARY_SELF_RIGHT(Lsh);
12969 EVAL_VECTOR_BINARY_SELF_RIGHT(Rsh);
12972 EVAL_VECTOR_BINARY_SELF_RIGHT(Lsha);
12975 EVAL_VECTOR_BINARY_SELF_RIGHT(Rsha);
12978 EVAL_VECTOR_BINARY(Mod);
12981 EVAL_VECTOR_BINARY(Or);
12984 EVAL_VECTOR_BINARY(And);
12987 EVAL_VECTOR_BINARY(Xor);
12990 EVAL_VECTOR_BINARY(Xnor);
12996 EVAL_VECTOR_PARAM_REF();
12999 EVAL_VECTOR_ENUM_REF();
13002 v.
LoadReal( Arg<CNode*>(0)->_EvalReal() );
13005 EVAL_VECTOR_BINARY(Rep);
13008 EVAL_VECTOR_BINARY(Cat);
13011 {
CVector vv(Arg<CNode*>(0)->width); Arg<CNode*>(0)->_EvalVector(vv); v = vv;};
13014 EVAL_VECTOR_UNARY(Com);
13017 EVAL_VECTOR_UNARY(
Neg);
13020 EVAL_VECTOR_UNARY(
Plus);
13023 EVAL_VECTOR_UNARY(Not);
13026 EVAL_RELATIONAL(Gt);
13029 EVAL_RELATIONAL(Ge);
13032 EVAL_RELATIONAL(Lt);
13035 EVAL_RELATIONAL(Le);
13038 EVAL_VECTOR_BINARY(Land);
13041 EVAL_VECTOR_BINARY(Lor);
13044 EVAL_RELATIONAL(Ceq);
13047 EVAL_RELATIONAL(Cne);
13050 EVAL_RELATIONAL(Eq);
13053 EVAL_RELATIONAL(Ne);
13056 EVAL_VECTOR_UNARY_SELF(Rand);
13059 EVAL_VECTOR_UNARY_SELF(Rnand);
13062 EVAL_VECTOR_UNARY_SELF(Ror);
13065 EVAL_VECTOR_UNARY_SELF(Rnor);
13068 EVAL_VECTOR_UNARY_SELF(Rxor);
13071 EVAL_VECTOR_UNARY_SELF(Rxnor);
13074 EVAL_VECTOR_HOOK();
13093 double CNode::_EvalReal()
13098 d =
s2d(Arg<char*>(0));
13101 EVAL_REAL_BINARY(
Sub);
13104 EVAL_REAL_BINARY(
Mul);
13107 EVAL_REAL_BINARY(
Div);
13110 EVAL_REAL_BINARY(
Pow);
13113 EVAL_REAL_BINARY(
Add);
13119 EVAL_REAL_PARAM_REF();
13122 EVAL_REAL_ENUM_REF();
13125 {
CVector v(Arg<CNode*>(0)->width); v.
Signed(Arg<CNode*>(0)->type ==
eS); Arg<CNode*>(0)->_EvalVector(v); d = v.
GetReal(); };
13128 EVAL_REAL_UNARY(
Neg);
13131 EVAL_REAL_UNARY(
Plus);
13149 int CNode::ConditionalWiden()
13151 switch(
GetOp() ) {
13311 unsigned CNode::NodeMask()
13313 switch(
GetOp() ) {
13635 int CNode::WidthFixed()
13637 switch(
GetOp() ) {
13639 return NodeMask()==0;
13643 return NodeMask()==0;
13645 return NodeMask()==0;
13647 return NodeMask()==0;
13649 return NodeMask()==0;
13651 return NodeMask()==0;
13653 return NodeMask()==0;
13655 return NodeMask()==0;
13657 return NodeMask()==0;
13659 return NodeMask()==0;
13661 return NodeMask()==0;
13663 return NodeMask()==0;
13665 return NodeMask()==0;
13667 return NodeMask()==0;
13669 return NodeMask()==0;
13671 return NodeMask()==0;
13673 return NodeMask()==0;
13675 return NodeMask()==0;
13677 return NodeMask()==0;
13679 return NodeMask()==0;
13681 return NodeMask()==0;
13683 return NodeMask()==0;
13685 return NodeMask()==0;
13687 return NodeMask()==0;
13689 return NodeMask()==0;
13691 return NodeMask()==0;
13693 return NodeMask()==0;
13695 return NodeMask()==0;
13699 return NodeMask()==0;
13701 return NodeMask()==0;
13703 return NodeMask()==0;
13705 return NodeMask()==0;
13711 return NodeMask()==0;
13713 return NodeMask()==0;
13715 return NodeMask()==0;
13717 return NodeMask()==0;
13719 return NodeMask()==0;
13721 return NodeMask()==0;
13757 return NodeMask()==0;
13759 return NodeMask()==0;
13761 return NodeMask()==0;
13763 return NodeMask()==0;
13765 return NodeMask()==0;
13767 return NodeMask()==0;
13771 return NodeMask()==0;
13773 return NodeMask()==0;
13775 return NodeMask()==0;
13777 return NodeMask()==0;
13779 return NodeMask()==0;
13781 return NodeMask()==0;
13783 return NodeMask()==0;
13801 void CNode::_LabelBits(
CNode* n,
void* arg )
13809 if( labelCacheEnabled && (evalCount == 0 || !evalHeap.
IsOwner(n)) ) {
13810 if( labelCache.find(n) != labelCache.end() ) {
13819 unsigned nodeMask = n->NodeMask();
13820 int conditionalWiden = n->ConditionalWiden();
13822 switch( n->
GetOp() ) {
13834 if( !suppressErrorMessages ) {
13837 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13839 if( !suppressErrorMessages ) {
13856 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13867 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13878 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13889 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13900 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13939 if( !suppressErrorMessages ) {
13942 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13944 if( !suppressErrorMessages ) {
13956 if( !suppressErrorMessages ) {
13959 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13961 if( !suppressErrorMessages ) {
13973 if( !suppressErrorMessages ) {
13976 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13978 if( !suppressErrorMessages ) {
13990 if( !suppressErrorMessages ) {
13993 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13995 if( !suppressErrorMessages ) {
14005 if( !suppressErrorMessages ) {
14008 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14010 if( !suppressErrorMessages ) {
14022 if( !suppressErrorMessages ) {
14025 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14027 if( !suppressErrorMessages ) {
14076 if( !suppressErrorMessages ) {
14079 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14081 if( !suppressErrorMessages ) {
14091 if( !suppressErrorMessages ) {
14094 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14096 if( !suppressErrorMessages ) {
14106 if( !suppressErrorMessages ) {
14116 if( !suppressErrorMessages ) {
14136 if( !suppressErrorMessages ) {
14139 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14141 if( !suppressErrorMessages ) {
14151 if( !suppressErrorMessages ) {
14154 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14156 if( !suppressErrorMessages ) {
14166 if( !suppressErrorMessages ) {
14176 if( !suppressErrorMessages ) {
14179 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14186 n->type = n->
Arg<
CNode*>(0)->type;
14189 n->type = n->
Arg<
CNode*>(0)->type;
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 ) {
14269 if( !suppressErrorMessages ) {
14279 if( !suppressErrorMessages ) {
14289 if( !suppressErrorMessages ) {
14299 if( !suppressErrorMessages ) {
14309 if( !suppressErrorMessages ) {
14319 if( !suppressErrorMessages ) {
14329 }
else if( n->
Arg<
CNode*>(2)->type ==
eR ) {
14355 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14357 }
else if( n->
Arg<
CNode*>(2)->type ==
eR ) {
14374 n->type = n->
Arg<
CNode*>(1)->type;
14382 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14391 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14400 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14409 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14421 n->type = n->
Arg<
CNode*>(0)->type;
14430 switch( n->type ) {
14441 switch( n->
GetOp() ) {
14467 n->width = n->
Arg<
CNode*>(0)->width;
14473 n->width = n->
Arg<
CNode*>(0)->width;
14476 n->width = n->
Arg<
CNode*>(0)->width;
14479 n->width = n->
Arg<
CNode*>(0)->width;
14482 n->width = n->
Arg<
CNode*>(0)->width;
14560 n->width = n->
Arg<
CNode*>(0)->width;
14563 n->width = n->
Arg<
CNode*>(0)->width;
14566 n->width = n->
Arg<
CNode*>(0)->width;
14569 n->width = n->
Arg<
CNode*>(0)->width;
14635 n->width = n->
Arg<
CNode*>(1)->width;
14641 n->width = n->
Arg<
CNode*>(0)->width;
14644 n->width = n->
Arg<
CNode*>(0)->width;
14647 n->width = n->
Arg<
CNode*>(0)->width;
14650 n->width = n->
Arg<
CNode*>(0)->width;
14653 n->width = n->
Arg<
CNode*>(0)->width;
14664 int operandWidth = -1;
14665 for(
int i = 0; i < n->
ArgCount(); i++ ) {
14666 if( ((nodeMask>>i)&1) && n->
Arg<
CNode*>(i) ) {
14667 int widthFixed = n->
Arg<
CNode*>(i)->WidthFixed() ||
14670 if( n->ConditionalWiden() && !widthFixed ) {
14671 n->FixedWidth( 0 );
14673 }
else if( !widthFixed ) {
14674 n->FixedWidth( 0 );
14678 if( operandWidth != w ) {
14679 if( operandWidth >= 0 ) {
14680 n->FixedWidth( 0 );
14688 if( !conditionalWiden && nodeMask != 0 ) {
14689 n->FixedWidth( 0 );
14705 int calculateMax = 0;
14707 int conditionalWiden = ConditionalWiden();
14708 unsigned nodeMask = NodeMask();
14709 unsigned scalarMask = 0;
14710 unsigned selfDeterminedMask = 0;
14711 switch(
GetOp() ) {
14732 selfDeterminedMask = nodeMask;
14736 selfDeterminedMask = nodeMask;
14752 selfDeterminedMask = 1<<1;
14759 selfDeterminedMask = 1<<1;
14763 selfDeterminedMask = 1<<1;
14767 selfDeterminedMask = 1<<1;
14771 selfDeterminedMask = 1<<1;
14802 selfDeterminedMask = nodeMask;
14809 selfDeterminedMask = nodeMask;
14813 selfDeterminedMask = 1<<1;
14865 selfDeterminedMask = nodeMask;
14869 selfDeterminedMask = nodeMask;
14873 selfDeterminedMask = nodeMask;
14877 selfDeterminedMask = nodeMask;
14881 selfDeterminedMask = nodeMask;
14885 selfDeterminedMask = nodeMask;
14889 selfDeterminedMask = nodeMask;
14893 selfDeterminedMask = nodeMask;
14897 selfDeterminedMask = nodeMask;
14954 selfDeterminedMask = nodeMask;
14958 selfDeterminedMask = nodeMask;
14962 selfDeterminedMask = nodeMask;
14966 selfDeterminedMask = nodeMask;
14970 selfDeterminedMask = nodeMask;
14974 selfDeterminedMask = nodeMask;
15210 selfDeterminedMask = nodeMask;
15214 selfDeterminedMask = nodeMask;
15222 unsigned realMask = 0;
15223 unsigned forceRealMask = 0;
15224 int widthsDiffer = 0;
15225 int originalWidth = width;
15226 for(
int i = 0; i <
ArgCount(); i++ ) {
15227 if( ((nodeMask>>i)&1) && Arg<CNode*>(i)->type ==
eR ) {
15230 if( ((nodeMask>>i)&1) &&
15231 Arg<CNode*>(i)->type !=
eR &&
15233 Arg<CNode*>(i)->width != width) ) {
15241 if( newType ==
eU && newWidth == 0 ) {
15248 }
else if( (newType ==
eB || newType ==
eS || newType ==
eU) &&
15249 (type ==
eB || type ==
eS) ) {
15250 if( newWidth > width ) {
15253 if( newType ==
eU ) {
15258 MASSERT( newType !=
eR || newWidth == 0 );
15259 MASSERT( newType !=
eE || newWidth == 0 );
15266 forceRealMask = (~realMask & nodeMask);
15273 int convertWidth = conditionalWiden && FixedWidth();
15274 if( convertWidth ) {
15275 width = originalWidth;
15277 if( newType ==
eB && type ==
eS ) {
15283 int cWidth = width;
15285 if( calculateMax ) {
15289 int foundUnsigned = 0;
15290 for(
int i = 0; i <
ArgCount(); i++ ) {
15291 if( (nodeMask>>i)&1 ) {
15292 switch( Arg<CNode*>(i)->type ) {
15300 if( Arg<CNode*>(i)->width > max ) {
15301 max = Arg<CNode*>(i)->width;
15308 }
else if( foundUnsigned ) {
15319 for(
int i = 0; i <
ArgCount(); i++ ) {
15320 if( (nodeMask>>i)&1 ) {
15321 if( (scalarMask>>i)&1 ) {
15322 if( Arg<CNode*>(i)->type ==
eR ) {
15324 Arg<CNode*>(i) =
cNE( Arg<CNode*>(i),
cREAL(0), &loc );
15325 Arg<CNode*>(i)->LabelBits();
15326 }
else if( type ==
eR ) {
15329 Arg<CNode*>(i) =
cCNE( Arg<CNode*>(i),
cINT32(0), &loc );
15330 Arg<CNode*>(i)->LabelBits();
15332 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0,
eU );
15333 }
else if( (forceRealMask>>i)&1 ) {
15334 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0,
eR );
15335 }
else if( (selfDeterminedMask>>i)&1 ) {
15336 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0,
eU );
15338 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( cWidth, cType );
15348 if( newType !=
eR && convertWidth ) {
15350 nn->width = newWidth;
15354 if( newType ==
eR && (type ==
eB || type ==
eS) ) {
15360 }
else if( (newType ==
eB || newType ==
eS) && type ==
eR ) {
15362 nn->width = newWidth;
15363 nn->type = newType;
15376 switch(
GetOp() ) {
15378 fprintf( f,
"%s",
"???" );
15381 fprintf( f,
"%s", Arg<CVector*>(0)->GetVString() );
15384 fprintf( f,
"%s", (
char*)Arg<char*>(0) );
15387 fprintf( f,
"%s", (
char*)Arg<char*>(0) );
15390 fprintf( f,
"%s",
"" );
15391 Arg<CNode*>(0)->
Dump( f );
15392 fprintf( f,
"%s",
"," );
15393 Arg<CNode*>(1)->
Dump( f );
15394 fprintf( f,
"%s",
"" );
15397 fprintf( f,
"%s",
"WIDTH(" );
15398 fprintf( f,
"%s", type==
eS ?
"S" :
"U" );
15399 fprintf( f,
"%s",
"," );
15400 fprintf( f,
"%ld", width );
15401 fprintf( f,
"%s",
"," );
15402 Arg<CNode*>(0)->
Dump( f );
15403 fprintf( f,
"%s",
"," );
15404 Arg<CNode*>(1)->
Dump( f );
15405 fprintf( f,
"%s",
")" );
15408 fprintf( f,
"%s",
"(" );
15409 Arg<CNode*>(0)->
Dump( f );
15410 fprintf( f,
"%s",
")-(" );
15411 Arg<CNode*>(1)->
Dump( f );
15412 fprintf( f,
"%s",
")" );
15415 fprintf( f,
"%s",
"(" );
15416 Arg<CNode*>(0)->
Dump( f );
15417 fprintf( f,
"%s",
")*(" );
15418 Arg<CNode*>(1)->
Dump( f );
15419 fprintf( f,
"%s",
")" );
15422 fprintf( f,
"%s",
"(" );
15423 Arg<CNode*>(0)->
Dump( f );
15424 fprintf( f,
"%s",
")/(" );
15425 Arg<CNode*>(1)->
Dump( f );
15426 fprintf( f,
"%s",
")" );
15429 fprintf( f,
"%s",
"(" );
15430 Arg<CNode*>(0)->
Dump( f );
15431 fprintf( f,
"%s",
")**(" );
15432 Arg<CNode*>(1)->
Dump( f );
15433 fprintf( f,
"%s",
")" );
15436 fprintf( f,
"%s",
"(" );
15437 Arg<CNode*>(0)->
Dump( f );
15438 fprintf( f,
"%s",
")+(" );
15439 Arg<CNode*>(1)->
Dump( f );
15440 fprintf( f,
"%s",
")" );
15443 fprintf( f,
"%s",
"(" );
15444 Arg<CNode*>(0)->
Dump( f );
15445 fprintf( f,
"%s",
")<<(" );
15446 Arg<CNode*>(1)->
Dump( f );
15447 fprintf( f,
"%s",
")" );
15450 fprintf( f,
"%s",
"(" );
15451 Arg<CNode*>(0)->
Dump( f );
15452 fprintf( f,
"%s",
")>>(" );
15453 Arg<CNode*>(1)->
Dump( f );
15454 fprintf( f,
"%s",
")" );
15457 fprintf( f,
"%s",
"(" );
15458 Arg<CNode*>(0)->
Dump( f );
15459 fprintf( f,
"%s",
")<<<(" );
15460 Arg<CNode*>(1)->
Dump( f );
15461 fprintf( f,
"%s",
")" );
15464 fprintf( f,
"%s",
"(" );
15465 Arg<CNode*>(0)->
Dump( f );
15466 fprintf( f,
"%s",
")>>>(" );
15467 Arg<CNode*>(1)->
Dump( f );
15468 fprintf( f,
"%s",
")" );
15471 fprintf( f,
"%s",
"(" );
15472 Arg<CNode*>(0)->
Dump( f );
15473 fprintf( f,
"%s",
")%%(" );
15474 Arg<CNode*>(1)->
Dump( f );
15475 fprintf( f,
"%s",
")" );
15478 fprintf( f,
"%s",
"(" );
15479 Arg<CNode*>(0)->
Dump( f );
15480 fprintf( f,
"%s",
")|(" );
15481 Arg<CNode*>(1)->
Dump( f );
15482 fprintf( f,
"%s",
")" );
15485 fprintf( f,
"%s",
"(" );
15486 Arg<CNode*>(0)->
Dump( f );
15487 fprintf( f,
"%s",
")&(" );
15488 Arg<CNode*>(1)->
Dump( f );
15489 fprintf( f,
"%s",
")" );
15492 fprintf( f,
"%s",
"(" );
15493 Arg<CNode*>(0)->
Dump( f );
15494 fprintf( f,
"%s",
")&&&(" );
15495 Arg<CNode*>(1)->
Dump( f );
15496 fprintf( f,
"%s",
")" );
15499 fprintf( f,
"%s",
"(" );
15500 Arg<CNode*>(0)->
Dump( f );
15501 fprintf( f,
"%s",
")^(" );
15502 Arg<CNode*>(1)->
Dump( f );
15503 fprintf( f,
"%s",
")" );
15506 fprintf( f,
"%s",
"(" );
15507 Arg<CNode*>(0)->
Dump( f );
15508 fprintf( f,
"%s",
")~^(" );
15509 Arg<CNode*>(1)->
Dump( f );
15510 fprintf( f,
"%s",
")" );
15513 fprintf( f,
"%s",
"" );
15514 fprintf( f,
"%s", Arg<CSymbol*>(0)->GetName() );
15515 fprintf( f,
"%s",
"(" );
15516 Arg<CNode*>(1)->
Dump( f );
15517 fprintf( f,
"%s",
")" );
15520 fprintf( f,
"%s",
"" );
15521 Arg<CNode*>(0)->
Dump( f );
15522 fprintf( f,
"%s",
"[" );
15523 Arg<CNode*>(1)->
Dump( f );
15524 fprintf( f,
"%s",
"]" );
15527 fprintf( f,
"%s", Arg<CNet*>(0)->GetName() );
15530 fprintf( f,
"%s", Arg<CVar*>(0)->GetName() );
15533 fprintf( f,
"%s", Arg<CParam*>(0)->GetName() );
15536 fprintf( f,
"%s", Arg<CPort*>(0)->GetName() );
15539 fprintf( f,
"%s", Arg<CFref*>(0)->GetName() );
15542 fprintf( f,
"%s", Arg<CGenvar*>(0)->GetName() );
15545 fprintf( f,
"%s", Arg<CEnum*>(0)->GetName() );
15548 fprintf( f,
"%s", Arg<CTypedef*>(0)->GetName() );
15551 fprintf( f,
"%s",
"VarDecl" );
15554 fprintf( f,
"%s",
"(" );
15555 Arg<CNode*>(0)->
Dump( f );
15556 fprintf( f,
"%s",
"," );
15557 Arg<CNode*>(1)->
Dump( f );
15558 fprintf( f,
"%s",
")" );
15561 fprintf( f,
"%s",
"" );
15562 Arg<CNode*>(0)->
Dump( f );
15563 fprintf( f,
"%s",
":" );
15564 Arg<CNode*>(1)->
Dump( f );
15565 fprintf( f,
"%s",
"" );
15568 fprintf( f,
"%s",
"" );
15569 Arg<CNode*>(0)->
Dump( f );
15570 fprintf( f,
"%s",
":" );
15571 Arg<CNode*>(1)->
Dump( f );
15572 fprintf( f,
"%s",
"" );
15575 fprintf( f,
"%s",
"" );
15576 Arg<CNode*>(0)->
Dump( f );
15577 fprintf( f,
"%s",
"+:" );
15578 Arg<CNode*>(1)->
Dump( f );
15579 fprintf( f,
"%s",
"" );
15582 fprintf( f,
"%s",
"" );
15583 Arg<CNode*>(0)->
Dump( f );
15584 fprintf( f,
"%s",
"-:" );
15585 Arg<CNode*>(1)->
Dump( f );
15586 fprintf( f,
"%s",
"" );
15589 fprintf( f,
"%s",
"CVRI(" );
15590 Arg<CNode*>(0)->
Dump( f );
15591 fprintf( f,
"%s",
")" );
15594 fprintf( f,
"%s",
"CVIR(" );
15595 Arg<CNode*>(0)->
Dump( f );
15596 fprintf( f,
"%s",
")" );
15599 fprintf( f,
"%s",
"{" );
15600 Arg<CNode*>(0)->
Dump( f );
15601 fprintf( f,
"%s",
"{" );
15602 Arg<CNode*>(1)->
Dump( f );
15603 fprintf( f,
"%s",
"}}" );
15606 fprintf( f,
"%s",
"{" );
15607 Arg<CNode*>(0)->
Dump( f );
15608 fprintf( f,
"%s",
"," );
15609 Arg<CNode*>(1)->
Dump( f );
15610 fprintf( f,
"%s",
"}" );
15613 fprintf( f,
"%s",
"{" );
15614 Arg<CNode*>(0)->
Dump( f );
15615 fprintf( f,
"%s",
"}" );
15618 fprintf( f,
"%s",
"~(" );
15619 Arg<CNode*>(0)->
Dump( f );
15620 fprintf( f,
"%s",
")" );
15623 fprintf( f,
"%s",
"-(" );
15624 Arg<CNode*>(0)->
Dump( f );
15625 fprintf( f,
"%s",
")" );
15628 fprintf( f,
"%s",
"+(" );
15629 Arg<CNode*>(0)->
Dump( f );
15630 fprintf( f,
"%s",
")" );
15633 fprintf( f,
"%s",
"!(" );
15634 Arg<CNode*>(0)->
Dump( f );
15635 fprintf( f,
"%s",
")" );
15638 fprintf( f,
"%s",
"(" );
15639 Arg<CNode*>(0)->
Dump( f );
15640 fprintf( f,
"%s",
")>(" );
15641 Arg<CNode*>(1)->
Dump( f );
15642 fprintf( f,
"%s",
")" );
15645 fprintf( f,
"%s",
"(" );
15646 Arg<CNode*>(0)->
Dump( f );
15647 fprintf( f,
"%s",
")>=(" );
15648 Arg<CNode*>(1)->
Dump( f );
15649 fprintf( f,
"%s",
")" );
15652 fprintf( f,
"%s",
"(" );
15653 Arg<CNode*>(0)->
Dump( f );
15654 fprintf( f,
"%s",
")<(" );
15655 Arg<CNode*>(1)->
Dump( f );
15656 fprintf( f,
"%s",
")" );
15659 fprintf( f,
"%s",
"(" );
15660 Arg<CNode*>(0)->
Dump( f );
15661 fprintf( f,
"%s",
")<=(" );
15662 Arg<CNode*>(1)->
Dump( f );
15663 fprintf( f,
"%s",
")" );
15666 fprintf( f,
"%s",
"(" );
15667 Arg<CNode*>(0)->
Dump( f );
15668 fprintf( f,
"%s",
")&&(" );
15669 Arg<CNode*>(1)->
Dump( f );
15670 fprintf( f,
"%s",
")" );
15673 fprintf( f,
"%s",
"(" );
15674 Arg<CNode*>(0)->
Dump( f );
15675 fprintf( f,
"%s",
")||(" );
15676 Arg<CNode*>(1)->
Dump( f );
15677 fprintf( f,
"%s",
")" );
15680 fprintf( f,
"%s",
"(" );
15681 Arg<CNode*>(0)->
Dump( f );
15682 fprintf( f,
"%s",
")===(" );
15683 Arg<CNode*>(1)->
Dump( f );
15684 fprintf( f,
"%s",
")" );
15687 fprintf( f,
"%s",
"(" );
15688 Arg<CNode*>(0)->
Dump( f );
15689 fprintf( f,
"%s",
")!==(" );
15690 Arg<CNode*>(1)->
Dump( f );
15691 fprintf( f,
"%s",
")" );
15694 fprintf( f,
"%s",
"(" );
15695 Arg<CNode*>(0)->
Dump( f );
15696 fprintf( f,
"%s",
")==(" );
15697 Arg<CNode*>(1)->
Dump( f );
15698 fprintf( f,
"%s",
")" );
15701 fprintf( f,
"%s",
"(" );
15702 Arg<CNode*>(0)->
Dump( f );
15703 fprintf( f,
"%s",
")!=(" );
15704 Arg<CNode*>(1)->
Dump( f );
15705 fprintf( f,
"%s",
")" );
15708 fprintf( f,
"%s",
"&(" );
15709 Arg<CNode*>(0)->
Dump( f );
15710 fprintf( f,
"%s",
")" );
15713 fprintf( f,
"%s",
"~&(" );
15714 Arg<CNode*>(0)->
Dump( f );
15715 fprintf( f,
"%s",
")" );
15718 fprintf( f,
"%s",
"|(" );
15719 Arg<CNode*>(0)->
Dump( f );
15720 fprintf( f,
"%s",
")" );
15723 fprintf( f,
"%s",
"~|(" );
15724 Arg<CNode*>(0)->
Dump( f );
15725 fprintf( f,
"%s",
")" );
15728 fprintf( f,
"%s",
"^(" );
15729 Arg<CNode*>(0)->
Dump( f );
15730 fprintf( f,
"%s",
")" );
15733 fprintf( f,
"%s",
"~^(" );
15734 Arg<CNode*>(0)->
Dump( f );
15735 fprintf( f,
"%s",
")" );
15738 fprintf( f,
"%s",
"(" );
15739 Arg<CNode*>(0)->
Dump( f );
15740 fprintf( f,
"%s",
")?(" );
15741 Arg<CNode*>(1)->
Dump( f );
15742 fprintf( f,
"%s",
"):(" );
15743 Arg<CNode*>(2)->
Dump( f );
15744 fprintf( f,
"%s",
")" );
15747 fprintf( f,
"%s",
"INIT(*)" );
15750 fprintf( f,
"%s",
"POSEDGE(" );
15751 Arg<CNode*>(0)->
Dump( f );
15752 fprintf( f,
"%s",
")" );
15755 fprintf( f,
"%s",
"NEGEDGE(" );
15756 Arg<CNode*>(0)->
Dump( f );
15757 fprintf( f,
"%s",
")" );
15760 fprintf( f,
"%s",
"EDGE(" );
15761 Arg<CNode*>(0)->
Dump( f );
15762 fprintf( f,
"%s",
")" );
15765 fprintf( f,
"%s",
"(" );
15766 Arg<CNode*>(0)->
Dump( f );
15767 fprintf( f,
"%s",
":" );
15768 Arg<CNode*>(1)->
Dump( f );
15769 fprintf( f,
"%s",
":" );
15770 Arg<CNode*>(2)->
Dump( f );
15771 fprintf( f,
"%s",
")" );
15774 fprintf( f,
"%s",
"MODULE_DEF" );
15777 fprintf( f,
"%s",
"PACKAGE_DEF" );
15780 fprintf( f,
"%s",
"" );
15781 fprintf( f,
"%s", (
const char*)Arg<const char*>(0) );
15782 fprintf( f,
"%s",
"<" );
15783 Arg<CNode*>(1)->
Dump( f );
15784 fprintf( f,
"%s",
">" );
15787 fprintf( f,
"%s",
"" );
15788 Arg<CNode*>(0)->
Dump( f );
15789 fprintf( f,
"%s",
"." );
15790 fprintf( f,
"%s", Arg<CSymbol*>(1)->GetName() );
15791 fprintf( f,
"%s",
"" );
15794 fprintf( f,
"%s",
"++(" );
15795 Arg<CNode*>(0)->
Dump( f );
15796 fprintf( f,
"%s",
")" );
15799 fprintf( f,
"%s",
"(" );
15800 Arg<CNode*>(0)->
Dump( f );
15801 fprintf( f,
"%s",
")++" );
15804 fprintf( f,
"%s",
"--(" );
15805 Arg<CNode*>(0)->
Dump( f );
15806 fprintf( f,
"%s",
")" );
15809 fprintf( f,
"%s",
"(" );
15810 Arg<CNode*>(0)->
Dump( f );
15811 fprintf( f,
"%s",
")--" );
15814 fprintf( f,
"%s",
"CAST(" );
15815 Arg<CNode*>(0)->
Dump( f );
15816 fprintf( f,
"%s",
"," );
15817 Arg<CNode*>(1)->
Dump( f );
15818 fprintf( f,
"%s",
")" );
15821 fprintf( f,
"%s",
"'" );
15822 Arg<CNode*>(0)->
Dump( f );
15823 fprintf( f,
"%s",
"" );
15907 #endif // DEFINE_METHODS
15909 #ifdef DEFINE_TEST_HARNESS
15912 for(
int i = 0; i < 154; ++i ) {
15914 if( n->
Precedence() != n->Precedence_1() ) {
15920 #endif // DEFINE_TEST_HARNESS
CNode * cDIV(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for DIV divide.
Definition: cnode_def.h:2974
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:2908
static NodeType_t Type(CSymbol *symbol, CNode *args)
Determine type of systask.
Definition: systask.h:134
nonblocking assignment
Definition: cnode_def.h:1730
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:5967
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:4894
CNode * cFOREVER(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for FOREVER forever statement.
Definition: cnode_def.h:6143
real constant
Definition: cnode_def.h:662
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:5515
CNode * cDEASSIGN(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for DEASSIGN deassign statement.
Definition: cnode_def.h:7013
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:5441
preincrement
Definition: cnode_def.h:2256
CNode * cASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for ASSIGN procedural assignment.
Definition: cnode_def.h:5293
vector subrange with ascending index select
Definition: cnode_def.h:1161
force statement
Definition: cnode_def.h:1708
condition expression operator
Definition: cnode_def.h:1446
arithmetic right shift
Definition: cnode_def.h:823
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:6459
procedural assignment with mul
Definition: cnode_def.h:1589
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:5404
sentinal at end of port list
Definition: cnode_def.h:2202
CNode * cPARAM_DECL(CParam *a0, Coord_t *loc=NULL)
Node construction shortcut for PARAM_DECL parameter declaration.
Definition: cnode_def.h:3927
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:6033
reduction xnor
Definition: cnode_def.h:1434
case not equal
Definition: cnode_def.h:1352
CNode * cMOD(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for MOD modulus.
Definition: cnode_def.h:3205
CNode * cWAIT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for WAIT wait statement.
Definition: cnode_def.h:6239
no operation
Definition: cnode_def.h:724
Declaration object for genvars.
Definition: cgenvar.h:46
reduction nand
Definition: cnode_def.h:1394
CNode * cELIST(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ELIST expression list.
Definition: cnode_def.h:2817
undefined
Definition: cdatatype.h:100
error node
Definition: cnode_def.h:642
CNode * cPORT_REF(CPortDir *a0, Coord_t *loc=NULL)
Node construction shortcut for PORT_REF reference to port.
Definition: cnode_def.h:3716
signed bit vector, includes integer
Definition: cdatatype.h:102
gate instance
Definition: cnode_def.h:909
procedural assignment with right shift
Definition: cnode_def.h:1673
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:1986
exponent
Definition: cnode_def.h:768
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:3561
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:2725
statement block
Definition: cnode_def.h:1518
disable statement
Definition: cnode_def.h:2117
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:1649
vector decl range specification
Definition: cnode_def.h:1139
case equal
Definition: cnode_def.h:1341
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:1750
import item
Definition: cnode_def.h:1945
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:5478
initial block
Definition: cnode_def.h:1456
CNode * cPREDEC(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for PREDEC predecrement.
Definition: cnode_def.h:7513
CNode * cGIF(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for GIF structural if statement.
Definition: cnode_def.h:7102
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:3745
int IsEvaluateable()
Checks to see if expression tree can be evaluated.
Definition: cnode_def.h:12756
CNode * cPRAGMA(const char *a0, int a1, Coord_t *loc=NULL)
Node construction shortcut for PRAGMA program pragma.
Definition: cnode_def.h:2784
CNode * cCASEX(CNode *a0, CNode *a1, ConditionalType a2, Coord_t *loc=NULL)
Node construction shortcut for CASEX casex statement.
Definition: cnode_def.h:6351
bitwise and
Definition: cnode_def.h:856
CNode * cCAT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CAT concatenation operator.
Definition: cnode_def.h:4329
postincrement
Definition: cnode_def.h:2266
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:4952
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:6498
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:3271
instance reference
Definition: cnode_def.h:899
CNode * cTABLE_SYMBOL(char *a0, Coord_t *loc=NULL)
Node construction shortcut for TABLE_SYMBOL udp table symbol.
Definition: cnode_def.h:7269
CNode * cPOSEDGE(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for POSEDGE positive event qualifier.
Definition: cnode_def.h:5908
not equal
Definition: cnode_def.h:1374
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:5774
CNode * cNOT(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for NOT logical complement.
Definition: cnode_def.h:4477
CNode * cRETURN(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RETURN return.
Definition: cnode_def.h:7426
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:4705
list of nodes
Definition: cnode_def.h:1128
greater than or equal
Definition: cnode_def.h:1286
CNode * cEQ(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for EQ equal.
Definition: cnode_def.h:4771
vector constant
Definition: cnode_def.h:652
procedural assignment
Definition: cnode_def.h:1541
assignment_pattern
Definition: cnode_def.h:2307
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:3862
wait statement
Definition: cnode_def.h:1851
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:6919
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:6000
int IsConstant()
Checks expression tree to see if it is constant.
Definition: cnode_def.h:8135
CNode * GetWidthExp(void)
Create expression representing width of expression.
Definition: cnode_def.h:8781
reduction xor
Definition: cnode_def.h:1424
case item
Definition: cnode_def.h:1911
delay control
Definition: cnode_def.h:1996
CNode * cRAND(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RAND reduction and.
Definition: cnode_def.h:4836
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:5873
CNode * cNEG(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for NEG negation.
Definition: cnode_def.h:4419
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:5589
reduction nor
Definition: cnode_def.h:1414
CNode * cGT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for GT greater than.
Definition: cnode_def.h:4507
CNode * cCVRI(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for CVRI convert real to integer.
Definition: cnode_def.h:4237
void PostVisit1(void(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node after children have been visited.
Definition: cnode_def.h:10582
port connection
Definition: cnode_def.h:1935
long INT32
Short cut for signed 32 bit integer.
Definition: glue.h:38
arithmetic left shift
Definition: cnode_def.h:812
CNode * cDISABLE(CSymbol *a0, Coord_t *loc=NULL)
Node construction shortcut for DISABLE disable statement.
Definition: cnode_def.h:7042
CNode * cREPEAT_CONTROL(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for REPEAT_CONTROL repeat control.
Definition: cnode_def.h:6647
variable declaration
Definition: cnode_def.h:1067
int IsVolatile(void)
Checks to see if expression tree is volatile.
Definition: cnode_def.h:8299
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:5737
path statement
Definition: cnode_def.h:2053
int Precedence()
Get the precedence of the operator represented by the node.
Definition: cnode_def.h:7965
genvar declaration
Definition: cnode_def.h:1107
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:6274
CNode * cRSH(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for RSH logical right shift.
Definition: cnode_def.h:3106
reference to port
Definition: cnode_def.h:1005
CNode * cFUNCTION_DEF(CFunction *a0, Coord_t *loc=NULL)
Node construction shortcut for FUNCTION_DEF function definition.
Definition: cnode_def.h:6559
convert integer to real
Definition: cnode_def.h:1192
logical and
Definition: cnode_def.h:1319
reduction or
Definition: cnode_def.h:1404
less than or equal
Definition: cnode_def.h:1308
edge qualifier
Definition: cnode_def.h:1761
reduction and
Definition: cnode_def.h:1384
bitwise or
Definition: cnode_def.h:845
CNode * cSLICE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for SLICE vector subrange.
Definition: cnode_def.h:4139
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:4606
reference to a forward declared variable
Definition: cnode_def.h:1015
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:4172
CNode * cSPECPARAM_DECL(CParam *a0, Coord_t *loc=NULL)
Node construction shortcut for SPECPARAM_DECL specify parameter declaration.
Definition: cnode_def.h:3956
void CNodeTestHarness()
Definition: cnode_def.h:15910
comment
Definition: cnode_def.h:672
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:6206
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:5367
bitwise xor
Definition: cnode_def.h:878
CNode * cCAST(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CAST data type change.
Definition: cnode_def.h:7572
procedural assignment with div
Definition: cnode_def.h:1601
procedural assignment with add
Definition: cnode_def.h:1565
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:5012
concatenation operator
Definition: cnode_def.h:1214
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:1661
port declaration
Definition: cnode_def.h:1097
CNode * cPACKAGE_DEF(CPackage *a0, Coord_t *loc=NULL)
Node construction shortcut for PACKAGE_DEF package definition.
Definition: cnode_def.h:6617
reference to a genvar
Definition: cnode_def.h:1025
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:7140
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:6883
CNode * cATTRIBUTE(CAttr *a0, Coord_t *loc=NULL)
Node construction shortcut for ATTRIBUTE attribute specification.
Definition: cnode_def.h:7071
CNode * cTABLE_ENTRY(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for TABLE_ENTRY udp table entry.
Definition: cnode_def.h:7240
convert real to integer
Definition: cnode_def.h:1182
int ArgCount(void)
Get the number of operands for the node.
Definition: cnode_def.h:7641
CNode * cGENVAR_DECL(CGenvar *a0, Coord_t *loc=NULL)
Node construction shortcut for GENVAR_DECL genvar declaration.
Definition: cnode_def.h:4014
CNode * cALWAYS(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS always block.
Definition: cnode_def.h:5076
CNode * cERROR(Coord_t *loc=NULL)
Node construction shortcut for ERROR error node.
Definition: cnode_def.h:2641
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:3494
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:3832
CNode * cALWAYS_COMB(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS_COMB always combinational logic block.
Definition: cnode_def.h:5163
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:2127
CNode * cRANGE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for RANGE vector decl range specification.
Definition: cnode_def.h:4106
event statement
Definition: cnode_def.h:1507
Declaration object for module/function/task ports.
Definition: cport.h:44
generate intialize assignment
Definition: cnode_def.h:1553
divide
Definition: cnode_def.h:757
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:1783
negation
Definition: cnode_def.h:1244
logical right shift
Definition: cnode_def.h:801
casez statement
Definition: cnode_def.h:1900
unary concat
Definition: cnode_def.h:1224
call to a task
Definition: cnode_def.h:920
reference to net
Definition: cnode_def.h:975
void LoadReal(double d)
Load vector with integer part of real value.
int error
Definition: cnode_def.h:13798
int IsOwner(void *ptr)
Determine if pointer was allocated from this obstack.
Definition: cnode_def.h:13796
CNode * cFORCE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for FORCE force statement.
Definition: cnode_def.h:5810
CNode * cEXTERNAL_REF(CSymbol *a0, Coord_t *loc=NULL)
Node construction shortcut for EXTERNAL_REF external reference.
Definition: cnode_def.h:6737
vrq comment
Definition: cnode_def.h:682
CNode * cLAND(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LAND logical and.
Definition: cnode_def.h:4639
CNode * cRSHA(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for RSHA arithmetic right shift.
Definition: cnode_def.h:3172
equal
Definition: cnode_def.h:1363
unary plus
Definition: cnode_def.h:1254
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:6981
CNode * cANDANDAND(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ANDANDAND triple and.
Definition: cnode_def.h:3304
CNode * cNET_REF(CNet *a0, Coord_t *loc=NULL)
Node construction shortcut for NET_REF reference to net.
Definition: cnode_def.h:3629
integer declaration
Definition: cdatatype.h:50
NodeOp_t
Parse tree opcodes.
Definition: cnode_def.h:633
CNode * cGASSIGN(bool a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for GASSIGN generate intialize assignment.
Definition: cnode_def.h:5330
void info(struct Coord_t *location, const char *format,...)
This routine should not be used by plugins.
program pragma
Definition: cnode_def.h:693
CNode * cCASEZ(CNode *a0, CNode *a1, ConditionalType a2, Coord_t *loc=NULL)
Node construction shortcut for CASEZ casez statement.
Definition: cnode_def.h:6388
CNode * cTRIGGER(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for TRIGGER event trigger.
Definition: cnode_def.h:6951
return
Definition: cnode_def.h:2246
CNode * cCNE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CNE case not equal.
Definition: cnode_def.h:4738
CNode * cVAR_REF(CVar *a0, Coord_t *loc=NULL)
Node construction shortcut for VAR_REF reference to variable.
Definition: cnode_def.h:3658
CNode * cCOM(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for COM bitwise complement.
Definition: cnode_def.h:4390
positive event qualifier
Definition: cnode_def.h:1740
CNode * cWIDTH(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for WIDTH expression width change.
Definition: cnode_def.h:2850
CNode * cEVENT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for EVENT event statement.
Definition: cnode_def.h:5193
defparam statement
Definition: cnode_def.h:2037
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:9387
Declaration object for module and gate instances.
Definition: cinstance.h:45
expression list
Definition: cnode_def.h:704
void EvalVector(CVector &v)
Evaluates expression tree evaluated in unconstrainted context.
Definition: cnode.cc:360
udp table symbol
Definition: cnode_def.h:2193
CNode * cEVENT_CONTROL(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for EVENT_CONTROL event control.
Definition: cnode_def.h:6708
multiply
Definition: cnode_def.h:746
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:4205
call to a function
Definition: cnode_def.h:954
CNode * cARRAY(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ARRAY dimensioned reference (array/bit select)
Definition: cnode_def.h:3597
CNode * cVRQ(const char *a0, Coord_t *loc=NULL)
Node construction shortcut for VRQ vrq comment.
Definition: cnode_def.h:2754
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:7484
parameter declaration
Definition: cnode_def.h:1077
void Pow(double *r, double *a, double *b)
Definition: cnode.h:712
less than
Definition: cnode_def.h:1297
CNode * cALWAYS_FF(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS_FF always flip-flop block.
Definition: cnode_def.h:5134
CNode * cCASEITEM(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CASEITEM case item.
Definition: cnode_def.h:6424
replication operator
Definition: cnode_def.h:1203
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:2236
CNode * cINIT(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for INIT initial block.
Definition: cnode_def.h:5047
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:7297
package definition
Definition: cnode_def.h:1975
bitwise xnor
Definition: cnode_def.h:889
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:7394
CNode * cALWAYS_LATCH(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS_LATCH always latch block.
Definition: cnode_def.h:5105
event control
Definition: cnode_def.h:2006
event or
Definition: cnode_def.h:1772
const char * nodeOpDescription[]
Definition: cnode_def.h:2471
CNode * PostSubVisit1(CNode *(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node after children have been visited.
Definition: cnode_def.h:11118
procedural assignment with bitwise and
Definition: cnode_def.h:1625
CNode * cPOSTDEC(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for POSTDEC postdecrement.
Definition: cnode_def.h:7542
udp table
Definition: cnode_def.h:2173
for statement
Definition: cnode_def.h:1864
triple and
Definition: cnode_def.h:867
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:3337
event trigger
Definition: cnode_def.h:2086
structural if statement
Definition: cnode_def.h:2139
reference to a enum
Definition: cnode_def.h:1035
int Equivalent(CNode *a, CNode *b)
Definition: cnode_def.h:12200
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:5937
postdecrement
Definition: cnode_def.h:2286
module definition
Definition: cnode_def.h:1965
void Sub(double *r, double *a, double *b)
Definition: cnode.h:687
subtract
Definition: cnode_def.h:735
CNode * cRNAND(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RNAND reduction nand.
Definition: cnode_def.h:4865
specify parameter declaration
Definition: cnode_def.h:1087
forever statement
Definition: cnode_def.h:1818
CNode * cRELEASE(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RELEASE release statement.
Definition: cnode_def.h:5842
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:6105
external reference
Definition: cnode_def.h:2016
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:4923
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:6067
while statement
Definition: cnode_def.h:1840
CNode * cENUM_REF(CEnum *a0, Coord_t *loc=NULL)
Node construction shortcut for ENUM_REF reference to a enum.
Definition: cnode_def.h:3803
CNode * cTABLE(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for TABLE udp table.
Definition: cnode_def.h:7211
CNode * cPOW(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for POW exponent.
Definition: cnode_def.h:3007
CNode * cREPEAT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for REPEAT repeat statement.
Definition: cnode_def.h:6173
CNode * cOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for OR bitwise or.
Definition: cnode_def.h:3238
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:1697
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:13797
CNode * cASSIGNMENT_PATTERN(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ASSIGNMENT_PATTERN assignment_pattern.
Definition: cnode_def.h:7604
function definition
Definition: cnode_def.h:1955
CNode * cNE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for NE not equal.
Definition: cnode_def.h:4804
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:2225
CNode * cGATE_REF(CGate *a0, Coord_t *loc=NULL)
Node construction shortcut for GATE_REF gate instance.
Definition: cnode_def.h:3431
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:6834
int IsWidthEvaluateable(void)
Evaluates if expression width can be evaluated.
Definition: cnode_def.h:9227
CNode * cRCONSTANT(char *a0, Coord_t *loc=NULL)
Node construction shortcut for RCONSTANT real constant.
Definition: cnode_def.h:2696
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:3895
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:6766
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:4540
void PreVisit1(int(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node before children have been visited.
Definition: cnode_def.h:10059
procedural assignment with mod
Definition: cnode_def.h:1613
CNode * cIMPORT(CSymbol *a0, Coord_t *loc=NULL)
Node construction shortcut for IMPORT import item.
Definition: cnode_def.h:6530
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:942
CNode * cLT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LT less than.
Definition: cnode_def.h:4573
release statement
Definition: cnode_def.h:1718
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:5663
structural case statement
Definition: cnode_def.h:2163
int IsWidthConstant(void)
Evaluates if expression width is constant.
Definition: cnode_def.h:8463
CNode * cREP(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for REP replication operator.
Definition: cnode_def.h:4296
CNode * cDELAY_CONTROL(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for DELAY_CONTROL delay control.
Definition: cnode_def.h:6679
CNode * cNOP(Coord_t *loc=NULL)
Node construction shortcut for NOP no operation.
Definition: cnode_def.h:2881
NodeType_t GetNodeType(void)
Get node expression type.
Definition: cnode.h:540
always block
Definition: cnode_def.h:1466
reference to a type
Definition: cnode_def.h:1045
udp table entry
Definition: cnode_def.h:2183
void Plus(double *r, double *a)
Definition: cnode.h:707
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:2065
int Signed() const
Get signed attribute.
Definition: cvector.h:178
vector subrange
Definition: cnode_def.h:1150
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:5226
Declaration object for functions and tasks.
Definition: cfunction.h:50
port definition
Definition: cnode_def.h:2026
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:4073
always flip-flop block
Definition: cnode_def.h:1486
call to enable a systask
Definition: cnode_def.h:931
procedural assignment
Definition: cnode_def.h:2097
CNode * cGCASE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for GCASE structural case statement.
Definition: cnode_def.h:7179
procedural assignment with bitwise or
Definition: cnode_def.h:1637
unsigned Hash()
Calculate hash of tree.
Definition: cnode_def.h:11656
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:3527
CNode * cRXNOR(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RXNOR reduction xnor.
Definition: cnode_def.h:4981
structural for statement
Definition: cnode_def.h:2152
logical complement
Definition: cnode_def.h:1264
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:3370
casex statement
Definition: cnode_def.h:1888
always latch block
Definition: cnode_def.h:1476
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:7324
addition
Definition: cnode_def.h:779
repeat statement
Definition: cnode_def.h:1829
expression represented by a macro
Definition: cnode_def.h:2213
deassign statement
Definition: cnode_def.h:2107
NodeType_t
Expression node type.
Definition: cdatatype.h:99
CNode * cSPECIFY_REF(CSpecify *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for SPECIFY_REF specify block.
Definition: cnode_def.h:5259
data type change
Definition: cnode_def.h:2297
procedural assignment with subtract
Definition: cnode_def.h:1577
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:5700
CNode * cCASE(CNode *a0, CNode *a1, ConditionalType a2, Coord_t *loc=NULL)
Node construction shortcut for CASE case statement.
Definition: cnode_def.h:6314
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:3040
const char * nodeOpName[]
Definition: cnode_def.h:2313
predecrement
Definition: cnode_def.h:2276
CNode * cDEFPARAM(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for DEFPARAM defparam statement.
Definition: cnode_def.h:6796
dimensioned reference (array/bit select)
Definition: cnode_def.h:965
CNode * cPORT_DECL(CPortDir *a0, Coord_t *loc=NULL)
Node construction shortcut for PORT_DECL port declaration.
Definition: cnode_def.h:3985
CNode * cLOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LOR logical or.
Definition: cnode_def.h:4672
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:7358
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:3073
int IsWidthVolatile(void)
Evaluates if expression width is volatile.
Definition: cnode_def.h:8621
type declaration
Definition: cnode_def.h:1117
CNode * cVCONSTANT(CVector *a0, Coord_t *loc=NULL)
Node construction shortcut for VCONSTANT vector constant.
Definition: cnode_def.h:2667
void Dump(FILE *f)
Print a compact representation of the parse tree.
Definition: cnode_def.h:15374
logical left shift
Definition: cnode_def.h:790
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:4361
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:1924
CNode * cTYPEDEF_DECL(CTypedef *a0, Coord_t *loc=NULL)
Node construction shortcut for TYPEDEF_DECL type declaration.
Definition: cnode_def.h:4043
int cABSDIFFPLUS1(int a1, int a2)
Definition: cnode.h:1354
vector subrange with descending index select
Definition: cnode_def.h:1172
bitwise complement
Definition: cnode_def.h:1234
reference to parameter
Definition: cnode_def.h:995
always combinational logic block
Definition: cnode_def.h:1496
double EvalReal(void)
Evaluates expression tree evaluated in a real context.
Definition: cnode.cc:391
case statement
Definition: cnode_def.h:1876
CNode * cLSHA(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LSHA arithmetic left shift.
Definition: cnode_def.h:3139
CNode * cPARAM_REF(CParam *a0, Coord_t *loc=NULL)
Node construction shortcut for PARAM_REF reference to parameter.
Definition: cnode_def.h:3687
greater than
Definition: cnode_def.h:1275
CNode * cMODULE_DEF(CModule *a0, Coord_t *loc=NULL)
Node construction shortcut for MODULE_DEF module definition.
Definition: cnode_def.h:6588
specify block
Definition: cnode_def.h:1529
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:7455
CNode * cPLUS(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for PLUS unary plus.
Definition: cnode_def.h:4448
modulus
Definition: cnode_def.h:834
ifnone path assignment statement
Definition: cnode_def.h:2076
net declaration
Definition: cnode_def.h:1056
expression width change
Definition: cnode_def.h:715
CNode * cINSTANCE_REF(CInstance *a0, Coord_t *loc=NULL)
Node construction shortcut for INSTANCE_REF instance reference.
Definition: cnode_def.h:3402
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:3461
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:3774
CNode * cMUL(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for MUL multiply.
Definition: cnode_def.h:2941
virtual INT32 GetWidth(void)
Evaluate packed width of declaration.
procedural assignment with left arithmetic shift
Definition: cnode_def.h:1685
double s2d(char *s)
Convert char string to double.
Definition: cnode.h:1093
if statement
Definition: cnode_def.h:1808
reference to variable
Definition: cnode_def.h:985
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:5552
CNode * cCVIR(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for CVIR convert integer to real.
Definition: cnode_def.h:4266
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:5626
CNode * Clone(CObstack *heap=stack)
Replicate tree.
Definition: cnode_def.h:9560
min/typ/max expression
Definition: cnode_def.h:1795
logical or
Definition: cnode_def.h:1330