2271 #endif // DEFINE_ENUM
2272 #ifdef DEFINE_METHODS
2405 "IFNONE_PATH_ASSIGN",
2437 "expression width change",
2444 "logical left shift",
2445 "logical right shift",
2446 "arithmetic left shift",
2447 "arithmetic right shift",
2454 "instance reference",
2457 "call to enable a systask",
2458 "call to a timing task",
2459 "call to a function",
2460 "dimensioned reference (array/bit select)",
2462 "reference to variable",
2463 "reference to parameter",
2464 "reference to port",
2465 "reference to a forward declared variable",
2466 "reference to a genvar",
2467 "reference to a enum",
2468 "reference to a type",
2470 "variable declaration",
2471 "parameter declaration",
2472 "specify parameter declaration",
2474 "genvar declaration",
2477 "vector decl range specification",
2479 "vector subrange with ascending index select",
2480 "vector subrange with descending index select",
2481 "convert real to integer",
2482 "convert integer to real",
2483 "replication operator",
2484 "concatenation operator",
2486 "bitwise complement",
2489 "logical complement",
2491 "greater than or equal",
2493 "less than or equal",
2506 "condition expression operator",
2509 "always latch block",
2510 "always flip-flop block",
2511 "always combinational logic block",
2515 "procedural assignment",
2516 "procedural assignment with add",
2517 "procedural assignment with subtract",
2518 "procedural assignment with mul",
2519 "procedural assignment with div",
2520 "procedural assignment with mod",
2521 "procedural assignment with bitwise and",
2522 "procedural assignment with bitwise or",
2523 "procedural assignment with bitwise xor",
2524 "procedural assignment with left shift",
2525 "procedural assignment with right shift",
2526 "procedural assignment with left arithmetic shift",
2527 "procedural assignment with right arithmetic shift",
2529 "release statement",
2530 "nonblocking assignment",
2531 "positive event qualifier",
2532 "negative event qualifier",
2536 "min/typ/max expression",
2538 "forever statement",
2547 "continious assignment",
2550 "function definition",
2551 "module definition",
2552 "package definition",
2556 "external reference",
2558 "defparam statement",
2560 "path assignment statement",
2561 "ifnone path assignment statement",
2563 "procedural assignment",
2564 "deassign statement",
2565 "disable statement",
2566 "attribute specification",
2567 "structural if statement",
2568 "structural for statement",
2569 "structural case statement",
2573 "sentinal at end of port list",
2574 "expression represented by a macro",
2575 "enum specification",
2576 "member reference (structure, class or external",
2585 #endif // DEFINE_METHODS
2588 #ifdef DEFINE_CONSTRUCTOR
2655 n->
Arg<
char*>(0) = a0;
2670 n->
Arg<
char*>(0) = a0;
2684 n->
Arg<
const char*>(0) = a0;
2699 n->
Arg<
const char*>(0) = a0;
2713 n->
Arg<
const char*>(0) = a0;
2728 n->
Arg<
const char*>(0) = a0;
2742 n->
Arg<
const char*>(0) = a0;
2757 n->
Arg<
const char*>(0) = a0;
3758 n->
Arg<CEnum*>(0) = a0;
3773 n->
Arg<CEnum*>(0) = a0;
3787 n->
Arg<CTypedef*>(0) = a0;
3802 n->
Arg<CTypedef*>(0) = a0;
3998 n->
Arg<CTypedef*>(0) = a0;
4013 n->
Arg<CTypedef*>(0) = a0;
6519 n->
Arg<CPackage*>(0) = a0;
6534 n->
Arg<CPackage*>(0) = a0;
6736 n->
Arg<
int>(0) = a0;
6738 n->
Arg<
int>(2) = a2;
6739 n->
Arg<
int>(3) = a3;
6741 n->
Arg<
int>(5) = a5;
6763 n->
Arg<
int>(0) = a0;
6765 n->
Arg<
int>(2) = a2;
6766 n->
Arg<
int>(3) = a3;
6768 n->
Arg<
int>(5) = a5;
7171 n->
Arg<
char*>(0) = a0;
7186 n->
Arg<
char*>(0) = a0;
7226 n->
Arg<
const char*>(0) = a0;
7243 n->
Arg<
const char*>(0) = a0;
7495 #endif // DEFINE_CONSTUCTOR
7505 #ifdef DEFINE_METHODS
8229 return Arg<CEnum*>(0)->GetExpression()->IsVolatile();
8297 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsVolatile() : TRUE;
8371 return Array::WidthConstant(Arg<CNode*>(0),Arg<CNode*>(1));
8457 return Member::WidthConstant(Arg<CNode*>(0),Arg<CSymbol*>(1));
8527 return Array::WidthVolatile(Arg<CNode*>(0),Arg<CNode*>(1));
8613 return Member::WidthVolatile(Arg<CNode*>(0),Arg<CSymbol*>(1));
8776 return Array::WidthExp(Arg<CNode*>(0),Arg<CNode*>(1));
8842 return Arg<CNode*>(1);
8848 return Arg<CNode*>(1);
9034 return Member::WidthExp(Arg<CNode*>(0),Arg<CSymbol*>(1));
9125 return Array::WidthEvaluateable(Arg<CNode*>(0),Arg<CNode*>(1));
9211 return Member::WidthEvaluateable(Arg<CNode*>(0),Arg<CSymbol*>(1));
9241 return !Arg<CVector*>(0)->HasXZ();
9245 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9247 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9249 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9251 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9253 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9255 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9257 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9259 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9261 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9263 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9265 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9267 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9269 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9271 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9273 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9275 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9277 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9283 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9287 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() ==
eINT);
9289 return Arg<CDecl*>(0)->GetDataType()->GetTwoState() ||
9295 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() ==
eINTEGER);
9301 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() ==
eINT);
9307 return Arg<CEnum*>(0)->GetExpression()->IsNonX( integerIsNonX, exclude );
9313 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9315 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9317 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9319 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9321 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9323 return Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9325 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9327 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9329 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9331 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9333 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9335 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9337 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9339 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9341 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9343 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9345 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9347 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9349 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9351 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9353 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9355 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9357 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9359 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9361 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9363 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9365 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9367 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9369 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(2)->
IsNonX( integerIsNonX, exclude );
9371 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9373 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9375 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9377 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(2)->
IsNonX( integerIsNonX, exclude );
9381 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsNonX(integerIsNonX, exclude) : FALSE;
9383 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9385 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9387 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9389 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9391 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude );
9393 return Arg<CNode*>(0)->
IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->
IsNonX( integerIsNonX, exclude );
9876 n->fixedWidth = fixedWidth;
9878 n->attributes = attributes->
Clone(heap);
9880 for(
int i = 0; i <
ArgCount(); i++ ) {
9881 if( ((nodeMask>>i)&1) && Arg<CNode*>(i) ) {
9884 void* tmp = Arg<void*>(i);
9885 n->
Arg<
void*>(i) = tmp;
9901 if( !(*func)(
this, data ) ) {
9985 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->
PreVisit1( func, data );
9989 if(Arg<CGate*>(0)) Arg<CGate*>(0)->
PreVisit1( func, data );
10024 if(Arg<CNet*>(0)) Arg<CNet*>(0)->
PreVisit1( func, data );
10028 if(Arg<CVar*>(0)) Arg<CVar*>(0)->
PreVisit1( func, data );
10032 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PreVisit1( func, data );
10036 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PreVisit1( func, data );
10040 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->
PreVisit1( func, data );
10044 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->
PreVisit1( func, data );
10048 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->
PreVisit1( func, data );
10163 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->
PreVisit1( func, data );
10167 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->
PreVisit1( func, data );
10276 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->
PreVisit1( func, data );
10280 if(Arg<CModule*>(0)) Arg<CModule*>(0)->
PreVisit1( func, data );
10284 if(Arg<CPackage*>(0)) Arg<CPackage*>(0)->
PreVisit1( func, data );
10300 if(Arg<CPort*>(0)) Arg<CPort*>(0)->
PreVisit1( func, data );
10328 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->
PreVisit1( func, data );
10384 for(
int i = 0; i <
ArgCount(); i++ ) {
10385 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i)->PreVisit1( func, data );
10397 if( !(*func)( n, data ) ) {
10423 switch(
GetOp() ) {
10498 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->
PostVisit1( func, data );
10502 if(Arg<CGate*>(0)) Arg<CGate*>(0)->
PostVisit1( func, data );
10545 if(Arg<CNet*>(0)) Arg<CNet*>(0)->
PostVisit1( func, data );
10549 if(Arg<CVar*>(0)) Arg<CVar*>(0)->
PostVisit1( func, data );
10553 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostVisit1( func, data );
10557 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostVisit1( func, data );
10561 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->
PostVisit1( func, data );
10565 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->
PostVisit1( func, data );
10569 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->
PostVisit1( func, data );
10684 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->
PostVisit1( func, data );
10688 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->
PostVisit1( func, data );
10797 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->
PostVisit1( func, data );
10801 if(Arg<CModule*>(0)) Arg<CModule*>(0)->
PostVisit1( func, data );
10805 if(Arg<CPackage*>(0)) Arg<CPackage*>(0)->
PostVisit1( func, data );
10821 if(Arg<CPort*>(0)) Arg<CPort*>(0)->
PostVisit1( func, data );
10849 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->
PostVisit1( func, data );
10905 for(
int i = 0; i <
ArgCount(); i++ ) {
10906 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i)->PostVisit1( func, data );
10909 std::stack<CNode*> visitLog;
10927 while( !visitLog.empty() ) {
10928 CNode* top = visitLog.top();
10930 (*func)(top->
Arg<
CNode*>(1),data);
10936 (*func)(
this, data );
10953 switch(
GetOp() ) {
11028 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->
PostSubVisit1( func, data );
11032 if(Arg<CGate*>(0)) Arg<CGate*>(0)->
PostSubVisit1( func, data );
11075 if(Arg<CNet*>(0)) Arg<CNet*>(0)->
PostSubVisit1( func, data );
11079 if(Arg<CVar*>(0)) Arg<CVar*>(0)->
PostSubVisit1( func, data );
11083 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostSubVisit1( func, data );
11087 if(Arg<CParam*>(0)) Arg<CParam*>(0)->
PostSubVisit1( func, data );
11091 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->
PostSubVisit1( func, data );
11095 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->
PostSubVisit1( func, data );
11099 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->
PostSubVisit1( func, data );
11214 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->
PostSubVisit1( func, data );
11218 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->
PostSubVisit1( func, data );
11327 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->
PostSubVisit1( func, data );
11331 if(Arg<CModule*>(0)) Arg<CModule*>(0)->
PostSubVisit1( func, data );
11335 if(Arg<CPackage*>(0)) Arg<CPackage*>(0)->
PostSubVisit1( func, data );
11351 if(Arg<CPort*>(0)) Arg<CPort*>(0)->
PostSubVisit1( func, data );
11379 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->
PostSubVisit1( func, data );
11435 for(
int i = 0; i <
ArgCount(); i++ ) {
11436 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i) = Arg<CNode*>(i)->
PostSubVisit1( func, data );
11439 std::stack<CNode*> visitLog;
11458 while( !visitLog.empty() ) {
11459 CNode* top = visitLog.top();
11467 return (*func)(
this, data );
11480 unsigned result =
GetOp();
11482 switch(
GetOp() ) {
11488 result ^= Arg<CVector*>(0)->
Hash();
11492 result ^= strlen(Arg<char*>(0));
11496 result ^= strlen(Arg<char*>(0));
11500 result ^= strlen(Arg<char*>(0));
11504 result ^= strlen(Arg<char*>(0));
11562 result ^= Arg<unsigned long>(0);
11566 result ^= Arg<unsigned long>(0);
11570 result ^= Arg<unsigned long>(0);
11574 result ^= Arg<unsigned long>(0);
11578 result ^= Arg<unsigned long>(0);
11582 result ^= Arg<unsigned long>(0);
11583 result ^= Arg<unsigned long>(2);
11590 result ^= Arg<unsigned long>(0);
11594 result ^= Arg<unsigned long>(0);
11598 result ^= Arg<unsigned long>(0);
11602 result ^= Arg<unsigned long>(0);
11606 result ^= Arg<unsigned long>(0);
11610 result ^= Arg<unsigned long>(0);
11614 result ^= Arg<unsigned long>(0);
11618 result ^= Arg<unsigned long>(0);
11622 result ^= Arg<unsigned long>(0);
11626 result ^= Arg<unsigned long>(0);
11630 result ^= Arg<unsigned long>(0);
11634 result ^= Arg<unsigned long>(0);
11638 result ^= Arg<unsigned long>(0);
11642 result ^= Arg<unsigned long>(0);
11646 result ^= Arg<unsigned long>(0);
11761 result ^= Arg<unsigned long>(0);
11765 result ^= Arg<unsigned long>(0);
11823 result ^= (
unsigned long)Arg<Edge_t>(1);
11866 result ^= Arg<unsigned long>(0);
11870 result ^= Arg<unsigned long>(0);
11874 result ^= Arg<unsigned long>(0);
11878 result ^= Arg<unsigned long>(0);
11882 result ^= Arg<unsigned long>(0);
11886 result ^= Arg<unsigned long>(0);
11899 result ^= Arg<unsigned long>(0);
11903 result ^= Arg<unsigned long>(0);
11910 result ^= Arg<int>(0);
11911 result ^= Arg<int>(2);
11912 result ^= Arg<int>(3);
11913 result ^= Arg<int>(5);
11932 result ^= Arg<unsigned long>(0);
11936 result ^= Arg<unsigned long>(0);
11955 result ^= strlen(Arg<char*>(0));
11962 result ^= strlen(Arg<char*>(0));
11966 result ^= Arg<unsigned long>(0);
11970 result ^= Arg<unsigned long>(1);
11992 for(
int i = 0; i <
ArgCount(); i++ ) {
11993 if( !((nodeMask>>i)&1) ) result ^= Arg<CNode*>(i)->Hash();
12021 if( a == NULL || b == NULL ) {
12032 switch( a->
GetOp() ) {
12042 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12046 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12050 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12054 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12436 if( !(a->
Arg<CPackage*>(0)==b->
Arg<CPackage*>(0)) ) {
return FALSE; }
12460 if( !(a->
Arg<
int>(0)==b->
Arg<
int>(0)) ) {
return FALSE; }
12461 if( !(a->
Arg<
int>(2)==b->
Arg<
int>(2)) ) {
return FALSE; }
12462 if( !(a->
Arg<
int>(3)==b->
Arg<
int>(3)) ) {
return FALSE; }
12463 if( !(a->
Arg<
int>(5)==b->
Arg<
int>(5)) ) {
return FALSE; }
12505 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12512 if( !(!strcmp(a->
Arg<
char*>(0),b->
Arg<
char*>(0))) ) {
return FALSE; }
12542 for(
int i = 0; i < a->
ArgCount(); i++ ) {
12543 if( !((nodeMask>>i)&1) &&
12560 return Arg<CParam*>(0)->GetExpression()->IsEvaluateable();
12562 return Arg<CParam*>(0)->GetExpression()->IsEvaluateable();
12564 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsEvaluateable() : FALSE;
12721 for(
int i = 0; i <
ArgCount(); i++ ) {
12722 if( !Arg<CNode*>(i)->IsEvaluateable() )
return FALSE;
12737 void CNode::_EvalVector(
CVector& v )
12744 {
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;};
12747 EVAL_VECTOR_BINARY(
Sub);
12750 EVAL_VECTOR_BINARY(
Mul);
12753 EVAL_VECTOR_BINARY(
Div);
12756 EVAL_VECTOR_BINARY(
Pow);
12759 EVAL_VECTOR_BINARY(
Add);
12762 EVAL_VECTOR_BINARY_SELF_RIGHT(Lsh);
12765 EVAL_VECTOR_BINARY_SELF_RIGHT(Rsh);
12768 EVAL_VECTOR_BINARY_SELF_RIGHT(Lsha);
12771 EVAL_VECTOR_BINARY_SELF_RIGHT(Rsha);
12774 EVAL_VECTOR_BINARY(Mod);
12777 EVAL_VECTOR_BINARY(Or);
12780 EVAL_VECTOR_BINARY(And);
12783 EVAL_VECTOR_BINARY(Xor);
12786 EVAL_VECTOR_BINARY(Xnor);
12792 EVAL_VECTOR_PARAM_REF();
12795 EVAL_VECTOR_ENUM_REF();
12798 v.
LoadReal( Arg<CNode*>(0)->_EvalReal() );
12801 EVAL_VECTOR_BINARY(Rep);
12804 EVAL_VECTOR_BINARY(Cat);
12807 {
CVector vv(Arg<CNode*>(0)->width); Arg<CNode*>(0)->_EvalVector(vv); v = vv;};
12810 EVAL_VECTOR_UNARY(Com);
12813 EVAL_VECTOR_UNARY(
Neg);
12816 EVAL_VECTOR_UNARY(
Plus);
12819 EVAL_VECTOR_UNARY(Not);
12822 EVAL_RELATIONAL(Gt);
12825 EVAL_RELATIONAL(Ge);
12828 EVAL_RELATIONAL(Lt);
12831 EVAL_RELATIONAL(Le);
12834 EVAL_VECTOR_BINARY(Land);
12837 EVAL_VECTOR_BINARY(Lor);
12840 EVAL_RELATIONAL(Ceq);
12843 EVAL_RELATIONAL(Cne);
12846 EVAL_RELATIONAL(Eq);
12849 EVAL_RELATIONAL(Ne);
12852 EVAL_VECTOR_UNARY_SELF(Rand);
12855 EVAL_VECTOR_UNARY_SELF(Rnand);
12858 EVAL_VECTOR_UNARY_SELF(Ror);
12861 EVAL_VECTOR_UNARY_SELF(Rnor);
12864 EVAL_VECTOR_UNARY_SELF(Rxor);
12867 EVAL_VECTOR_UNARY_SELF(Rxnor);
12870 EVAL_VECTOR_HOOK();
12889 double CNode::_EvalReal()
12894 d =
s2d(Arg<char*>(0));
12897 EVAL_REAL_BINARY(
Sub);
12900 EVAL_REAL_BINARY(
Mul);
12903 EVAL_REAL_BINARY(
Div);
12906 EVAL_REAL_BINARY(
Pow);
12909 EVAL_REAL_BINARY(
Add);
12915 EVAL_REAL_PARAM_REF();
12918 EVAL_REAL_ENUM_REF();
12921 {
CVector v(Arg<CNode*>(0)->width); v.
Signed(Arg<CNode*>(0)->type ==
eS); Arg<CNode*>(0)->_EvalVector(v); d = v.
GetReal(); };
12924 EVAL_REAL_UNARY(
Neg);
12927 EVAL_REAL_UNARY(
Plus);
12945 int CNode::ConditionalWiden()
12947 switch(
GetOp() ) {
13105 unsigned CNode::NodeMask()
13107 switch(
GetOp() ) {
13425 int CNode::WidthFixed()
13427 switch(
GetOp() ) {
13429 return NodeMask()==0;
13433 return NodeMask()==0;
13435 return NodeMask()==0;
13437 return NodeMask()==0;
13439 return NodeMask()==0;
13441 return NodeMask()==0;
13443 return NodeMask()==0;
13445 return NodeMask()==0;
13447 return NodeMask()==0;
13449 return NodeMask()==0;
13451 return NodeMask()==0;
13453 return NodeMask()==0;
13455 return NodeMask()==0;
13457 return NodeMask()==0;
13459 return NodeMask()==0;
13461 return NodeMask()==0;
13463 return NodeMask()==0;
13465 return NodeMask()==0;
13467 return NodeMask()==0;
13469 return NodeMask()==0;
13471 return NodeMask()==0;
13473 return NodeMask()==0;
13475 return NodeMask()==0;
13477 return NodeMask()==0;
13479 return NodeMask()==0;
13481 return NodeMask()==0;
13483 return NodeMask()==0;
13485 return NodeMask()==0;
13489 return NodeMask()==0;
13491 return NodeMask()==0;
13493 return NodeMask()==0;
13495 return NodeMask()==0;
13501 return NodeMask()==0;
13503 return NodeMask()==0;
13505 return NodeMask()==0;
13507 return NodeMask()==0;
13509 return NodeMask()==0;
13511 return NodeMask()==0;
13547 return NodeMask()==0;
13549 return NodeMask()==0;
13551 return NodeMask()==0;
13553 return NodeMask()==0;
13555 return NodeMask()==0;
13557 return NodeMask()==0;
13561 return NodeMask()==0;
13563 return NodeMask()==0;
13565 return NodeMask()==0;
13567 return NodeMask()==0;
13569 return NodeMask()==0;
13571 return NodeMask()==0;
13573 return NodeMask()==0;
13589 void CNode::_LabelBits(
CNode* n,
void* arg )
13597 if( labelCacheEnabled && (evalCount == 0 || !evalHeap.
IsOwner(n)) ) {
13598 if( labelCache.find(n) != labelCache.end() ) {
13607 unsigned nodeMask = n->NodeMask();
13608 int conditionalWiden = n->ConditionalWiden();
13610 switch( n->
GetOp() ) {
13622 if( !suppressErrorMessages ) {
13625 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13627 if( !suppressErrorMessages ) {
13644 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13655 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13666 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13677 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13688 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13727 if( !suppressErrorMessages ) {
13730 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13732 if( !suppressErrorMessages ) {
13744 if( !suppressErrorMessages ) {
13747 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13749 if( !suppressErrorMessages ) {
13761 if( !suppressErrorMessages ) {
13764 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13766 if( !suppressErrorMessages ) {
13778 if( !suppressErrorMessages ) {
13781 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13783 if( !suppressErrorMessages ) {
13793 if( !suppressErrorMessages ) {
13796 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13798 if( !suppressErrorMessages ) {
13810 if( !suppressErrorMessages ) {
13813 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13815 if( !suppressErrorMessages ) {
13864 if( !suppressErrorMessages ) {
13867 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13869 if( !suppressErrorMessages ) {
13879 if( !suppressErrorMessages ) {
13882 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13884 if( !suppressErrorMessages ) {
13894 if( !suppressErrorMessages ) {
13904 if( !suppressErrorMessages ) {
13924 if( !suppressErrorMessages ) {
13927 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13929 if( !suppressErrorMessages ) {
13939 if( !suppressErrorMessages ) {
13942 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
13944 if( !suppressErrorMessages ) {
13954 if( !suppressErrorMessages ) {
13964 if( !suppressErrorMessages ) {
13967 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
13974 n->type = n->
Arg<
CNode*>(0)->type;
13977 n->type = n->
Arg<
CNode*>(0)->type;
14017 if( !suppressErrorMessages ) {
14020 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14022 if( !suppressErrorMessages ) {
14032 if( !suppressErrorMessages ) {
14035 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14037 if( !suppressErrorMessages ) {
14057 if( !suppressErrorMessages ) {
14067 if( !suppressErrorMessages ) {
14077 if( !suppressErrorMessages ) {
14087 if( !suppressErrorMessages ) {
14097 if( !suppressErrorMessages ) {
14107 if( !suppressErrorMessages ) {
14117 }
else if( n->
Arg<
CNode*>(2)->type ==
eR ) {
14143 }
else if( n->
Arg<
CNode*>(1)->type ==
eR ) {
14145 }
else if( n->
Arg<
CNode*>(2)->type ==
eR ) {
14162 n->type = n->
Arg<
CNode*>(1)->type;
14170 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14179 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14188 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14197 }
else if( n->
Arg<
CNode*>(0)->type ==
eS ) {
14215 switch( n->type ) {
14226 switch( n->
GetOp() ) {
14252 n->width = n->
Arg<
CNode*>(0)->width;
14258 n->width = n->
Arg<
CNode*>(0)->width;
14261 n->width = n->
Arg<
CNode*>(0)->width;
14264 n->width = n->
Arg<
CNode*>(0)->width;
14267 n->width = n->
Arg<
CNode*>(0)->width;
14345 n->width = n->
Arg<
CNode*>(0)->width;
14348 n->width = n->
Arg<
CNode*>(0)->width;
14351 n->width = n->
Arg<
CNode*>(0)->width;
14354 n->width = n->
Arg<
CNode*>(0)->width;
14420 n->width = n->
Arg<
CNode*>(1)->width;
14426 n->width = n->
Arg<
CNode*>(0)->width;
14429 n->width = n->
Arg<
CNode*>(0)->width;
14432 n->width = n->
Arg<
CNode*>(0)->width;
14435 n->width = n->
Arg<
CNode*>(0)->width;
14446 int operandWidth = -1;
14447 for(
int i = 0; i < n->
ArgCount(); i++ ) {
14448 if( ((nodeMask>>i)&1) && n->
Arg<
CNode*>(i) ) {
14449 int widthFixed = n->
Arg<
CNode*>(i)->WidthFixed() ||
14452 if( n->ConditionalWiden() && !widthFixed ) {
14453 n->FixedWidth( 0 );
14455 }
else if( !widthFixed ) {
14456 n->FixedWidth( 0 );
14460 if( operandWidth != w ) {
14461 if( operandWidth >= 0 ) {
14462 n->FixedWidth( 0 );
14470 if( !conditionalWiden && nodeMask != 0 ) {
14471 n->FixedWidth( 0 );
14487 int calculateMax = 0;
14489 int conditionalWiden = ConditionalWiden();
14490 unsigned nodeMask = NodeMask();
14491 unsigned scalarMask = 0;
14492 unsigned selfDeterminedMask = 0;
14493 switch(
GetOp() ) {
14514 selfDeterminedMask = nodeMask;
14518 selfDeterminedMask = nodeMask;
14534 selfDeterminedMask = 1<<1;
14541 selfDeterminedMask = 1<<1;
14545 selfDeterminedMask = 1<<1;
14549 selfDeterminedMask = 1<<1;
14553 selfDeterminedMask = 1<<1;
14584 selfDeterminedMask = nodeMask;
14591 selfDeterminedMask = nodeMask;
14595 selfDeterminedMask = 1<<1;
14647 selfDeterminedMask = nodeMask;
14651 selfDeterminedMask = nodeMask;
14655 selfDeterminedMask = nodeMask;
14659 selfDeterminedMask = nodeMask;
14663 selfDeterminedMask = nodeMask;
14667 selfDeterminedMask = nodeMask;
14671 selfDeterminedMask = nodeMask;
14675 selfDeterminedMask = nodeMask;
14679 selfDeterminedMask = nodeMask;
14736 selfDeterminedMask = nodeMask;
14740 selfDeterminedMask = nodeMask;
14744 selfDeterminedMask = nodeMask;
14748 selfDeterminedMask = nodeMask;
14752 selfDeterminedMask = nodeMask;
14756 selfDeterminedMask = nodeMask;
14989 selfDeterminedMask = nodeMask;
14997 unsigned realMask = 0;
14998 unsigned forceRealMask = 0;
14999 int widthsDiffer = 0;
15000 int originalWidth = width;
15001 for(
int i = 0; i <
ArgCount(); i++ ) {
15002 if( ((nodeMask>>i)&1) && Arg<CNode*>(i)->type ==
eR ) {
15005 if( ((nodeMask>>i)&1) &&
15006 Arg<CNode*>(i)->type !=
eR &&
15008 Arg<CNode*>(i)->width != width) ) {
15016 if( newType ==
eU && newWidth == 0 ) {
15023 }
else if( (newType ==
eB || newType ==
eS || newType ==
eU) &&
15024 (type ==
eB || type ==
eS) ) {
15025 if( newWidth > width ) {
15028 if( newType ==
eU ) {
15033 MASSERT( newType !=
eR || newWidth == 0 );
15034 MASSERT( newType !=
eE || newWidth == 0 );
15041 forceRealMask = (~realMask & nodeMask);
15048 int convertWidth = conditionalWiden && FixedWidth();
15049 if( convertWidth ) {
15050 width = originalWidth;
15052 if( newType ==
eB && type ==
eS ) {
15058 int cWidth = width;
15060 if( calculateMax ) {
15064 int foundUnsigned = 0;
15065 for(
int i = 0; i <
ArgCount(); i++ ) {
15066 if( (nodeMask>>i)&1 ) {
15067 switch( Arg<CNode*>(i)->type ) {
15075 if( Arg<CNode*>(i)->width > max ) {
15076 max = Arg<CNode*>(i)->width;
15083 }
else if( foundUnsigned ) {
15094 for(
int i = 0; i <
ArgCount(); i++ ) {
15095 if( (nodeMask>>i)&1 ) {
15096 if( (scalarMask>>i)&1 ) {
15097 if( Arg<CNode*>(i)->type ==
eR ) {
15099 Arg<CNode*>(i) =
cNE( Arg<CNode*>(i),
cREAL(0), &loc );
15100 Arg<CNode*>(i)->LabelBits();
15101 }
else if( type ==
eR ) {
15104 Arg<CNode*>(i) =
cCNE( Arg<CNode*>(i),
cINT32(0), &loc );
15105 Arg<CNode*>(i)->LabelBits();
15107 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0,
eU );
15108 }
else if( (forceRealMask>>i)&1 ) {
15109 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0,
eR );
15110 }
else if( (selfDeterminedMask>>i)&1 ) {
15111 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0,
eU );
15113 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( cWidth, cType );
15123 if( newType !=
eR && convertWidth ) {
15125 nn->width = newWidth;
15129 if( newType ==
eR && (type ==
eB || type ==
eS) ) {
15135 }
else if( (newType ==
eB || newType ==
eS) && type ==
eR ) {
15137 nn->width = newWidth;
15138 nn->type = newType;
15151 switch(
GetOp() ) {
15153 fprintf( f,
"%s",
"???" );
15156 fprintf( f,
"%s", Arg<CVector*>(0)->GetVString() );
15159 fprintf( f,
"%s", (
char*)Arg<char*>(0) );
15162 fprintf( f,
"%s", (
char*)Arg<char*>(0) );
15165 fprintf( f,
"%s",
"" );
15166 Arg<CNode*>(0)->
Dump( f );
15167 fprintf( f,
"%s",
"," );
15168 Arg<CNode*>(1)->
Dump( f );
15169 fprintf( f,
"%s",
"" );
15172 fprintf( f,
"%s",
"WIDTH(" );
15173 fprintf( f,
"%s", type==
eS ?
"S" :
"U" );
15174 fprintf( f,
"%s",
"," );
15175 fprintf( f,
"%ld", width );
15176 fprintf( f,
"%s",
"," );
15177 Arg<CNode*>(0)->
Dump( f );
15178 fprintf( f,
"%s",
"," );
15179 Arg<CNode*>(1)->
Dump( f );
15180 fprintf( f,
"%s",
")" );
15183 fprintf( f,
"%s",
"(" );
15184 Arg<CNode*>(0)->
Dump( f );
15185 fprintf( f,
"%s",
")-(" );
15186 Arg<CNode*>(1)->
Dump( f );
15187 fprintf( f,
"%s",
")" );
15190 fprintf( f,
"%s",
"(" );
15191 Arg<CNode*>(0)->
Dump( f );
15192 fprintf( f,
"%s",
")*(" );
15193 Arg<CNode*>(1)->
Dump( f );
15194 fprintf( f,
"%s",
")" );
15197 fprintf( f,
"%s",
"(" );
15198 Arg<CNode*>(0)->
Dump( f );
15199 fprintf( f,
"%s",
")/(" );
15200 Arg<CNode*>(1)->
Dump( f );
15201 fprintf( f,
"%s",
")" );
15204 fprintf( f,
"%s",
"(" );
15205 Arg<CNode*>(0)->
Dump( f );
15206 fprintf( f,
"%s",
")**(" );
15207 Arg<CNode*>(1)->
Dump( f );
15208 fprintf( f,
"%s",
")" );
15211 fprintf( f,
"%s",
"(" );
15212 Arg<CNode*>(0)->
Dump( f );
15213 fprintf( f,
"%s",
")+(" );
15214 Arg<CNode*>(1)->
Dump( f );
15215 fprintf( f,
"%s",
")" );
15218 fprintf( f,
"%s",
"(" );
15219 Arg<CNode*>(0)->
Dump( f );
15220 fprintf( f,
"%s",
")<<(" );
15221 Arg<CNode*>(1)->
Dump( f );
15222 fprintf( f,
"%s",
")" );
15225 fprintf( f,
"%s",
"(" );
15226 Arg<CNode*>(0)->
Dump( f );
15227 fprintf( f,
"%s",
")>>(" );
15228 Arg<CNode*>(1)->
Dump( f );
15229 fprintf( f,
"%s",
")" );
15232 fprintf( f,
"%s",
"(" );
15233 Arg<CNode*>(0)->
Dump( f );
15234 fprintf( f,
"%s",
")<<<(" );
15235 Arg<CNode*>(1)->
Dump( f );
15236 fprintf( f,
"%s",
")" );
15239 fprintf( f,
"%s",
"(" );
15240 Arg<CNode*>(0)->
Dump( f );
15241 fprintf( f,
"%s",
")>>>(" );
15242 Arg<CNode*>(1)->
Dump( f );
15243 fprintf( f,
"%s",
")" );
15246 fprintf( f,
"%s",
"(" );
15247 Arg<CNode*>(0)->
Dump( f );
15248 fprintf( f,
"%s",
")%%(" );
15249 Arg<CNode*>(1)->
Dump( f );
15250 fprintf( f,
"%s",
")" );
15253 fprintf( f,
"%s",
"(" );
15254 Arg<CNode*>(0)->
Dump( f );
15255 fprintf( f,
"%s",
")|(" );
15256 Arg<CNode*>(1)->
Dump( f );
15257 fprintf( f,
"%s",
")" );
15260 fprintf( f,
"%s",
"(" );
15261 Arg<CNode*>(0)->
Dump( f );
15262 fprintf( f,
"%s",
")&(" );
15263 Arg<CNode*>(1)->
Dump( f );
15264 fprintf( f,
"%s",
")" );
15267 fprintf( f,
"%s",
"(" );
15268 Arg<CNode*>(0)->
Dump( f );
15269 fprintf( f,
"%s",
")&&&(" );
15270 Arg<CNode*>(1)->
Dump( f );
15271 fprintf( f,
"%s",
")" );
15274 fprintf( f,
"%s",
"(" );
15275 Arg<CNode*>(0)->
Dump( f );
15276 fprintf( f,
"%s",
")^(" );
15277 Arg<CNode*>(1)->
Dump( f );
15278 fprintf( f,
"%s",
")" );
15281 fprintf( f,
"%s",
"(" );
15282 Arg<CNode*>(0)->
Dump( f );
15283 fprintf( f,
"%s",
")~^(" );
15284 Arg<CNode*>(1)->
Dump( f );
15285 fprintf( f,
"%s",
")" );
15288 fprintf( f,
"%s",
"" );
15289 fprintf( f,
"%s", Arg<CSymbol*>(0)->GetName() );
15290 fprintf( f,
"%s",
"(" );
15291 Arg<CNode*>(1)->
Dump( f );
15292 fprintf( f,
"%s",
")" );
15295 fprintf( f,
"%s",
"" );
15296 Arg<CNode*>(0)->
Dump( f );
15297 fprintf( f,
"%s",
"[" );
15298 Arg<CNode*>(1)->
Dump( f );
15299 fprintf( f,
"%s",
"]" );
15302 fprintf( f,
"%s", Arg<CNet*>(0)->GetName() );
15305 fprintf( f,
"%s", Arg<CVar*>(0)->GetName() );
15308 fprintf( f,
"%s", Arg<CParam*>(0)->GetName() );
15311 fprintf( f,
"%s", Arg<CPort*>(0)->GetName() );
15314 fprintf( f,
"%s", Arg<CFref*>(0)->GetName() );
15317 fprintf( f,
"%s", Arg<CGenvar*>(0)->GetName() );
15320 fprintf( f,
"%s", Arg<CEnum*>(0)->GetName() );
15323 fprintf( f,
"%s", Arg<CTypedef*>(0)->GetName() );
15326 fprintf( f,
"%s",
"VarDecl" );
15329 fprintf( f,
"%s",
"(" );
15330 Arg<CNode*>(0)->
Dump( f );
15331 fprintf( f,
"%s",
"," );
15332 Arg<CNode*>(1)->
Dump( f );
15333 fprintf( f,
"%s",
")" );
15336 fprintf( f,
"%s",
"" );
15337 Arg<CNode*>(0)->
Dump( f );
15338 fprintf( f,
"%s",
":" );
15339 Arg<CNode*>(1)->
Dump( f );
15340 fprintf( f,
"%s",
"" );
15343 fprintf( f,
"%s",
"" );
15344 Arg<CNode*>(0)->
Dump( f );
15345 fprintf( f,
"%s",
":" );
15346 Arg<CNode*>(1)->
Dump( f );
15347 fprintf( f,
"%s",
"" );
15350 fprintf( f,
"%s",
"" );
15351 Arg<CNode*>(0)->
Dump( f );
15352 fprintf( f,
"%s",
"+:" );
15353 Arg<CNode*>(1)->
Dump( f );
15354 fprintf( f,
"%s",
"" );
15357 fprintf( f,
"%s",
"" );
15358 Arg<CNode*>(0)->
Dump( f );
15359 fprintf( f,
"%s",
"-:" );
15360 Arg<CNode*>(1)->
Dump( f );
15361 fprintf( f,
"%s",
"" );
15364 fprintf( f,
"%s",
"CVRI(" );
15365 Arg<CNode*>(0)->
Dump( f );
15366 fprintf( f,
"%s",
")" );
15369 fprintf( f,
"%s",
"CVIR(" );
15370 Arg<CNode*>(0)->
Dump( f );
15371 fprintf( f,
"%s",
")" );
15374 fprintf( f,
"%s",
"{" );
15375 Arg<CNode*>(0)->
Dump( f );
15376 fprintf( f,
"%s",
"{" );
15377 Arg<CNode*>(1)->
Dump( f );
15378 fprintf( f,
"%s",
"}}" );
15381 fprintf( f,
"%s",
"{" );
15382 Arg<CNode*>(0)->
Dump( f );
15383 fprintf( f,
"%s",
"," );
15384 Arg<CNode*>(1)->
Dump( f );
15385 fprintf( f,
"%s",
"}" );
15388 fprintf( f,
"%s",
"{" );
15389 Arg<CNode*>(0)->
Dump( f );
15390 fprintf( f,
"%s",
"}" );
15393 fprintf( f,
"%s",
"~(" );
15394 Arg<CNode*>(0)->
Dump( f );
15395 fprintf( f,
"%s",
")" );
15398 fprintf( f,
"%s",
"-(" );
15399 Arg<CNode*>(0)->
Dump( f );
15400 fprintf( f,
"%s",
")" );
15403 fprintf( f,
"%s",
"+(" );
15404 Arg<CNode*>(0)->
Dump( f );
15405 fprintf( f,
"%s",
")" );
15408 fprintf( f,
"%s",
"!(" );
15409 Arg<CNode*>(0)->
Dump( f );
15410 fprintf( f,
"%s",
")" );
15413 fprintf( f,
"%s",
"(" );
15414 Arg<CNode*>(0)->
Dump( f );
15415 fprintf( f,
"%s",
")>(" );
15416 Arg<CNode*>(1)->
Dump( f );
15417 fprintf( f,
"%s",
")" );
15420 fprintf( f,
"%s",
"(" );
15421 Arg<CNode*>(0)->
Dump( f );
15422 fprintf( f,
"%s",
")>=(" );
15423 Arg<CNode*>(1)->
Dump( f );
15424 fprintf( f,
"%s",
")" );
15427 fprintf( f,
"%s",
"(" );
15428 Arg<CNode*>(0)->
Dump( f );
15429 fprintf( f,
"%s",
")<(" );
15430 Arg<CNode*>(1)->
Dump( f );
15431 fprintf( f,
"%s",
")" );
15434 fprintf( f,
"%s",
"(" );
15435 Arg<CNode*>(0)->
Dump( f );
15436 fprintf( f,
"%s",
")<=(" );
15437 Arg<CNode*>(1)->
Dump( f );
15438 fprintf( f,
"%s",
")" );
15441 fprintf( f,
"%s",
"(" );
15442 Arg<CNode*>(0)->
Dump( f );
15443 fprintf( f,
"%s",
")&&(" );
15444 Arg<CNode*>(1)->
Dump( f );
15445 fprintf( f,
"%s",
")" );
15448 fprintf( f,
"%s",
"(" );
15449 Arg<CNode*>(0)->
Dump( f );
15450 fprintf( f,
"%s",
")||(" );
15451 Arg<CNode*>(1)->
Dump( f );
15452 fprintf( f,
"%s",
")" );
15455 fprintf( f,
"%s",
"(" );
15456 Arg<CNode*>(0)->
Dump( f );
15457 fprintf( f,
"%s",
")===(" );
15458 Arg<CNode*>(1)->
Dump( f );
15459 fprintf( f,
"%s",
")" );
15462 fprintf( f,
"%s",
"(" );
15463 Arg<CNode*>(0)->
Dump( f );
15464 fprintf( f,
"%s",
")!==(" );
15465 Arg<CNode*>(1)->
Dump( f );
15466 fprintf( f,
"%s",
")" );
15469 fprintf( f,
"%s",
"(" );
15470 Arg<CNode*>(0)->
Dump( f );
15471 fprintf( f,
"%s",
")==(" );
15472 Arg<CNode*>(1)->
Dump( f );
15473 fprintf( f,
"%s",
")" );
15476 fprintf( f,
"%s",
"(" );
15477 Arg<CNode*>(0)->
Dump( f );
15478 fprintf( f,
"%s",
")!=(" );
15479 Arg<CNode*>(1)->
Dump( f );
15480 fprintf( f,
"%s",
")" );
15483 fprintf( f,
"%s",
"&(" );
15484 Arg<CNode*>(0)->
Dump( f );
15485 fprintf( f,
"%s",
")" );
15488 fprintf( f,
"%s",
"~&(" );
15489 Arg<CNode*>(0)->
Dump( f );
15490 fprintf( f,
"%s",
")" );
15493 fprintf( f,
"%s",
"|(" );
15494 Arg<CNode*>(0)->
Dump( f );
15495 fprintf( f,
"%s",
")" );
15498 fprintf( f,
"%s",
"~|(" );
15499 Arg<CNode*>(0)->
Dump( f );
15500 fprintf( f,
"%s",
")" );
15503 fprintf( f,
"%s",
"^(" );
15504 Arg<CNode*>(0)->
Dump( f );
15505 fprintf( f,
"%s",
")" );
15508 fprintf( f,
"%s",
"~^(" );
15509 Arg<CNode*>(0)->
Dump( f );
15510 fprintf( f,
"%s",
")" );
15513 fprintf( f,
"%s",
"(" );
15514 Arg<CNode*>(0)->
Dump( f );
15515 fprintf( f,
"%s",
")?(" );
15516 Arg<CNode*>(1)->
Dump( f );
15517 fprintf( f,
"%s",
"):(" );
15518 Arg<CNode*>(2)->
Dump( f );
15519 fprintf( f,
"%s",
")" );
15522 fprintf( f,
"%s",
"INIT(*)" );
15525 fprintf( f,
"%s",
"POSEDGE(" );
15526 Arg<CNode*>(0)->
Dump( f );
15527 fprintf( f,
"%s",
")" );
15530 fprintf( f,
"%s",
"NEGEDGE(" );
15531 Arg<CNode*>(0)->
Dump( f );
15532 fprintf( f,
"%s",
")" );
15535 fprintf( f,
"%s",
"EDGE(" );
15536 Arg<CNode*>(0)->
Dump( f );
15537 fprintf( f,
"%s",
")" );
15540 fprintf( f,
"%s",
"(" );
15541 Arg<CNode*>(0)->
Dump( f );
15542 fprintf( f,
"%s",
":" );
15543 Arg<CNode*>(1)->
Dump( f );
15544 fprintf( f,
"%s",
":" );
15545 Arg<CNode*>(2)->
Dump( f );
15546 fprintf( f,
"%s",
")" );
15549 fprintf( f,
"%s",
"MODULE_DEF" );
15552 fprintf( f,
"%s",
"PACKAGE_DEF" );
15555 fprintf( f,
"%s",
"" );
15556 fprintf( f,
"%s", (
const char*)Arg<const char*>(0) );
15557 fprintf( f,
"%s",
"<" );
15558 Arg<CNode*>(1)->
Dump( f );
15559 fprintf( f,
"%s",
">" );
15562 fprintf( f,
"%s",
"" );
15563 Arg<CNode*>(0)->
Dump( f );
15564 fprintf( f,
"%s",
"." );
15565 fprintf( f,
"%s", Arg<CSymbol*>(1)->GetName() );
15566 fprintf( f,
"%s",
"" );
15569 fprintf( f,
"%s",
"++(" );
15570 Arg<CNode*>(0)->
Dump( f );
15571 fprintf( f,
"%s",
")" );
15574 fprintf( f,
"%s",
"(" );
15575 Arg<CNode*>(0)->
Dump( f );
15576 fprintf( f,
"%s",
")++" );
15579 fprintf( f,
"%s",
"--(" );
15580 Arg<CNode*>(0)->
Dump( f );
15581 fprintf( f,
"%s",
")" );
15584 fprintf( f,
"%s",
"(" );
15585 Arg<CNode*>(0)->
Dump( f );
15586 fprintf( f,
"%s",
")--" );
15589 fprintf( f,
"%s",
"CAST(" );
15590 Arg<CNode*>(0)->
Dump( f );
15591 fprintf( f,
"%s",
"," );
15592 Arg<CNode*>(1)->
Dump( f );
15593 fprintf( f,
"%s",
")" );
15676 #endif // DEFINE_METHODS
15678 #ifdef DEFINE_TEST_HARNESS
15681 for(
int i = 0; i < 152; ++i ) {
15683 if( n->
Precedence() != n->Precedence_1() ) {
15689 #endif // DEFINE_TEST_HARNESS
CNode * cDIV(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for DIV divide.
Definition: cnode_def.h:2926
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:2860
static NodeType_t Type(CSymbol *symbol, CNode *args)
Determine type of systask.
Definition: systask.h:134
nonblocking assignment
Definition: cnode_def.h:1704
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:5882
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:4846
CNode * cFOREVER(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for FOREVER forever statement.
Definition: cnode_def.h:6054
real constant
Definition: cnode_def.h:649
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:5430
CNode * cDEASSIGN(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for DEASSIGN deassign statement.
Definition: cnode_def.h:6912
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:5356
preincrement
Definition: cnode_def.h:2226
CNode * cASSIGN(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for ASSIGN procedural assignment.
Definition: cnode_def.h:5245
vector subrange with ascending index select
Definition: cnode_def.h:1147
force statement
Definition: cnode_def.h:1682
condition expression operator
Definition: cnode_def.h:1432
arithmetic right shift
Definition: cnode_def.h:809
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:6358
procedural assignment with mul
Definition: cnode_def.h:1563
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:5319
sentinal at end of port list
Definition: cnode_def.h:2172
CNode * cPARAM_DECL(CParam *a0, Coord_t *loc=NULL)
Node construction shortcut for PARAM_DECL parameter declaration.
Definition: cnode_def.h:3879
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:5948
reduction xnor
Definition: cnode_def.h:1420
case not equal
Definition: cnode_def.h:1338
CNode * cMOD(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for MOD modulus.
Definition: cnode_def.h:3157
CNode * cWAIT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for WAIT wait statement.
Definition: cnode_def.h:6150
no operation
Definition: cnode_def.h:710
Declaration object for genvars.
Definition: cgenvar.h:46
reduction nand
Definition: cnode_def.h:1380
CNode * cELIST(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ELIST expression list.
Definition: cnode_def.h:2769
undefined
Definition: cdatatype.h:98
error node
Definition: cnode_def.h:629
CNode * cPORT_REF(CPortDir *a0, Coord_t *loc=NULL)
Node construction shortcut for PORT_REF reference to port.
Definition: cnode_def.h:3668
signed bit vector, includes integer
Definition: cdatatype.h:100
gate instance
Definition: cnode_def.h:895
procedural assignment with right shift
Definition: cnode_def.h:1647
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:1956
exponent
Definition: cnode_def.h:754
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:3513
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:2681
statement block
Definition: cnode_def.h:1504
disable statement
Definition: cnode_def.h:2087
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:1623
vector decl range specification
Definition: cnode_def.h:1125
case equal
Definition: cnode_def.h:1327
CNode * cREAL(double number)
Short cut for creating RCONSTANT node with a given double value.
Definition: cnode.h:803
negative event qualifier
Definition: cnode_def.h:1724
import item
Definition: cnode_def.h:1915
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:5393
initial block
Definition: cnode_def.h:1442
CNode * cPREDEC(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for PREDEC predecrement.
Definition: cnode_def.h:7412
CNode * cGIF(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for GIF structural if statement.
Definition: cnode_def.h:7001
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:3697
int IsEvaluateable()
Checks to see if expression tree can be evaluated.
Definition: cnode_def.h:12554
bitwise and
Definition: cnode_def.h:842
CNode * cCAT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CAT concatenation operator.
Definition: cnode_def.h:4281
postincrement
Definition: cnode_def.h:2236
void Add(double *r, double *a, double *b)
Definition: cnode.h:668
CNode * cRXOR(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RXOR reduction xor.
Definition: cnode_def.h:4904
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:6397
CNode * cMAX_N(CNode *first,...)
Definition: cnode.h:1252
CNode * cAND(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for AND bitwise and.
Definition: cnode_def.h:3223
instance reference
Definition: cnode_def.h:885
CNode * cTABLE_SYMBOL(char *a0, Coord_t *loc=NULL)
Node construction shortcut for TABLE_SYMBOL udp table symbol.
Definition: cnode_def.h:7168
CNode * cPOSEDGE(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for POSEDGE positive event qualifier.
Definition: cnode_def.h:5823
not equal
Definition: cnode_def.h:1360
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:5689
CNode * cNOT(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for NOT logical complement.
Definition: cnode_def.h:4429
CNode * cRETURN(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RETURN return.
Definition: cnode_def.h:7325
void Neg(double *r, double *a)
Definition: cnode.h:688
CNode * cCEQ(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CEQ case equal.
Definition: cnode_def.h:4657
list of nodes
Definition: cnode_def.h:1114
greater than or equal
Definition: cnode_def.h:1272
CNode * cEQ(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for EQ equal.
Definition: cnode_def.h:4723
vector constant
Definition: cnode_def.h:639
procedural assignment
Definition: cnode_def.h:1527
Coord_t * GetCoord()
Get node's file coordinates.
Definition: cnode.h:303
CNode * cNET_DECL(CNet *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for NET_DECL net declaration.
Definition: cnode_def.h:3814
wait statement
Definition: cnode_def.h:1824
CNode * cMUL_N(CNode *first,...)
Definition: cnode.h:1286
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:6818
static CObstack * CurrentHeap()
Gets pointer to current heap allocator.
Definition: cnode.h:228
CNode * cEVOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for EVOR event or.
Definition: cnode_def.h:5915
int IsConstant()
Checks expression tree to see if it is constant.
Definition: cnode_def.h:7999
CNode * GetWidthExp(void)
Create expression representing width of expression.
Definition: cnode_def.h:8637
reduction xor
Definition: cnode_def.h:1410
case item
Definition: cnode_def.h:1881
delay control
Definition: cnode_def.h:1966
CNode * cRAND(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RAND reduction and.
Definition: cnode_def.h:4788
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:5788
CNode * cNEG(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for NEG negation.
Definition: cnode_def.h:4371
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:5504
reduction nor
Definition: cnode_def.h:1400
CNode * cGT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for GT greater than.
Definition: cnode_def.h:4459
CNode * cCVRI(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for CVRI convert real to integer.
Definition: cnode_def.h:4189
void PostVisit1(void(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node after children have been visited.
Definition: cnode_def.h:10416
port connection
Definition: cnode_def.h:1905
long INT32
Short cut for signed 32 bit integer.
Definition: glue.h:38
arithmetic left shift
Definition: cnode_def.h:798
CNode * cDISABLE(CSymbol *a0, Coord_t *loc=NULL)
Node construction shortcut for DISABLE disable statement.
Definition: cnode_def.h:6941
CNode * cREPEAT_CONTROL(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for REPEAT_CONTROL repeat control.
Definition: cnode_def.h:6546
variable declaration
Definition: cnode_def.h:1053
int IsVolatile(void)
Checks to see if expression tree is volatile.
Definition: cnode_def.h:8161
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:5652
path statement
Definition: cnode_def.h:2023
int Precedence()
Get the precedence of the operator represented by the node.
Definition: cnode_def.h:7831
genvar declaration
Definition: cnode_def.h:1093
CNode_sp< T > Arg(int index)
Get a node's operand.
Definition: cnode.h:535
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:6185
CNode * cRSH(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for RSH logical right shift.
Definition: cnode_def.h:3058
reference to port
Definition: cnode_def.h:991
CNode * cFUNCTION_DEF(CFunction *a0, Coord_t *loc=NULL)
Node construction shortcut for FUNCTION_DEF function definition.
Definition: cnode_def.h:6458
convert integer to real
Definition: cnode_def.h:1178
logical and
Definition: cnode_def.h:1305
reduction or
Definition: cnode_def.h:1390
less than or equal
Definition: cnode_def.h:1294
edge qualifier
Definition: cnode_def.h:1735
reduction and
Definition: cnode_def.h:1370
bitwise or
Definition: cnode_def.h:831
CNode * cSLICE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for SLICE vector subrange.
Definition: cnode_def.h:4091
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:4558
reference to a forward declared variable
Definition: cnode_def.h:1001
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:4124
CNode * cSPECPARAM_DECL(CParam *a0, Coord_t *loc=NULL)
Node construction shortcut for SPECPARAM_DECL specify parameter declaration.
Definition: cnode_def.h:3908
void CNodeTestHarness()
Definition: cnode_def.h:15679
comment
Definition: cnode_def.h:659
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:6117
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:5282
bitwise xor
Definition: cnode_def.h:864
CNode * cCAST(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CAST data type change.
Definition: cnode_def.h:7471
procedural assignment with div
Definition: cnode_def.h:1575
procedural assignment with add
Definition: cnode_def.h:1539
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:4964
concatenation operator
Definition: cnode_def.h:1200
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:1635
port declaration
Definition: cnode_def.h:1083
CNode * cPACKAGE_DEF(CPackage *a0, Coord_t *loc=NULL)
Node construction shortcut for PACKAGE_DEF package definition.
Definition: cnode_def.h:6516
reference to a genvar
Definition: cnode_def.h:1011
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:7039
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:6782
CNode * cATTRIBUTE(CAttr *a0, Coord_t *loc=NULL)
Node construction shortcut for ATTRIBUTE attribute specification.
Definition: cnode_def.h:6970
CNode * cTABLE_ENTRY(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for TABLE_ENTRY udp table entry.
Definition: cnode_def.h:7139
convert real to integer
Definition: cnode_def.h:1168
int ArgCount(void)
Get the number of operands for the node.
Definition: cnode_def.h:7511
CNode * cGENVAR_DECL(CGenvar *a0, Coord_t *loc=NULL)
Node construction shortcut for GENVAR_DECL genvar declaration.
Definition: cnode_def.h:3966
CNode * cALWAYS(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS always block.
Definition: cnode_def.h:5028
CNode * cERROR(Coord_t *loc=NULL)
Node construction shortcut for ERROR error node.
Definition: cnode_def.h:2597
CNode * cCASEX(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CASEX casex statement.
Definition: cnode_def.h:6257
unsigned bit vector
Definition: cdatatype.h:102
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:3446
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:3784
CNode * cALWAYS_COMB(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS_COMB always combinational logic block.
Definition: cnode_def.h:5115
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:2097
CNode * cRANGE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for RANGE vector decl range specification.
Definition: cnode_def.h:4058
event statement
Definition: cnode_def.h:1493
Declaration object for module/function/task ports.
Definition: cport.h:44
divide
Definition: cnode_def.h:743
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:1302
delay statement
Definition: cnode_def.h:1757
negation
Definition: cnode_def.h:1230
logical right shift
Definition: cnode_def.h:787
casez statement
Definition: cnode_def.h:1870
unary concat
Definition: cnode_def.h:1210
call to a task
Definition: cnode_def.h:906
reference to net
Definition: cnode_def.h:961
void LoadReal(double d)
Load vector with integer part of real value.
int error
Definition: cnode_def.h:13586
int IsOwner(void *ptr)
Determine if pointer was allocated from this obstack.
Definition: cnode_def.h:13584
CNode * cPRAGMA(const char *a0, Coord_t *loc=NULL)
Node construction shortcut for PRAGMA program pragma.
Definition: cnode_def.h:2739
CNode * cFORCE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for FORCE force statement.
Definition: cnode_def.h:5725
CNode * cEXTERNAL_REF(CSymbol *a0, Coord_t *loc=NULL)
Node construction shortcut for EXTERNAL_REF external reference.
Definition: cnode_def.h:6636
vrq comment
Definition: cnode_def.h:669
CNode * cLAND(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LAND logical and.
Definition: cnode_def.h:4591
CNode * cRSHA(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for RSHA arithmetic right shift.
Definition: cnode_def.h:3124
equal
Definition: cnode_def.h:1349
unary plus
Definition: cnode_def.h:1240
Primary data structure representing parse tree nodes.
Definition: cnode.h:188
CNode * cPASSIGN(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for PASSIGN procedural assignment.
Definition: cnode_def.h:6880
CNode * cANDANDAND(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ANDANDAND triple and.
Definition: cnode_def.h:3256
CNode * cNET_REF(CNet *a0, Coord_t *loc=NULL)
Node construction shortcut for NET_REF reference to net.
Definition: cnode_def.h:3581
integer declaration
Definition: cdatatype.h:50
NodeOp_t
Parse tree opcodes.
Definition: cnode_def.h:620
void info(struct Coord_t *location, const char *format,...)
This routine should not be used by plugins.
program pragma
Definition: cnode_def.h:679
CNode * cTRIGGER(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for TRIGGER event trigger.
Definition: cnode_def.h:6850
return
Definition: cnode_def.h:2216
CNode * cCNE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CNE case not equal.
Definition: cnode_def.h:4690
CNode * cVAR_REF(CVar *a0, Coord_t *loc=NULL)
Node construction shortcut for VAR_REF reference to variable.
Definition: cnode_def.h:3610
CNode * cCOM(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for COM bitwise complement.
Definition: cnode_def.h:4342
positive event qualifier
Definition: cnode_def.h:1714
CNode * cWIDTH(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for WIDTH expression width change.
Definition: cnode_def.h:2802
CNode * cEVENT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for EVENT event statement.
Definition: cnode_def.h:5145
defparam statement
Definition: cnode_def.h:2007
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:9235
Declaration object for module and gate instances.
Definition: cinstance.h:45
expression list
Definition: cnode_def.h:690
void EvalVector(CVector &v)
Evaluates expression tree evaluated in unconstrainted context.
Definition: cnode.cc:360
udp table symbol
Definition: cnode_def.h:2163
CNode * cEVENT_CONTROL(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for EVENT_CONTROL event control.
Definition: cnode_def.h:6607
multiply
Definition: cnode_def.h:732
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:4157
call to a function
Definition: cnode_def.h:940
CNode * cARRAY(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ARRAY dimensioned reference (array/bit select)
Definition: cnode_def.h:3549
CNode * cVRQ(const char *a0, Coord_t *loc=NULL)
Node construction shortcut for VRQ vrq comment.
Definition: cnode_def.h:2710
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:7383
parameter declaration
Definition: cnode_def.h:1063
void Pow(double *r, double *a, double *b)
Definition: cnode.h:698
less than
Definition: cnode_def.h:1283
CNode * cALWAYS_FF(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS_FF always flip-flop block.
Definition: cnode_def.h:5086
CNode * cCASEITEM(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CASEITEM case item.
Definition: cnode_def.h:6323
replication operator
Definition: cnode_def.h:1189
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:2206
CNode * cINIT(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for INIT initial block.
Definition: cnode_def.h:4999
void SetAttributes(CNode *attr)
Attach attributes to operation.
Definition: cnode.h:505
CNode * cPORTLIST_END(Coord_t *loc=NULL)
Node construction shortcut for PORTLIST_END sentinal at end of port list.
Definition: cnode_def.h:7196
package definition
Definition: cnode_def.h:1945
bitwise xnor
Definition: cnode_def.h:875
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:7293
CNode * cALWAYS_LATCH(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for ALWAYS_LATCH always latch block.
Definition: cnode_def.h:5057
event control
Definition: cnode_def.h:1976
event or
Definition: cnode_def.h:1746
const char * nodeOpDescription[]
Definition: cnode_def.h:2429
CNode * PostSubVisit1(CNode *(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node after children have been visited.
Definition: cnode_def.h:10946
procedural assignment with bitwise and
Definition: cnode_def.h:1599
CNode * cPOSTDEC(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for POSTDEC postdecrement.
Definition: cnode_def.h:7441
udp table
Definition: cnode_def.h:2143
for statement
Definition: cnode_def.h:1837
triple and
Definition: cnode_def.h:853
void Div(double *r, double *a, double *b)
Definition: cnode.h:683
CNode * cXOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for XOR bitwise xor.
Definition: cnode_def.h:3289
event trigger
Definition: cnode_def.h:2056
structural if statement
Definition: cnode_def.h:2109
reference to a enum
Definition: cnode_def.h:1021
int Equivalent(CNode *a, CNode *b)
Definition: cnode_def.h:12010
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:5852
postdecrement
Definition: cnode_def.h:2256
module definition
Definition: cnode_def.h:1935
void Sub(double *r, double *a, double *b)
Definition: cnode.h:673
subtract
Definition: cnode_def.h:721
CNode * cRNAND(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RNAND reduction nand.
Definition: cnode_def.h:4817
specify parameter declaration
Definition: cnode_def.h:1073
forever statement
Definition: cnode_def.h:1791
CNode * cRELEASE(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RELEASE release statement.
Definition: cnode_def.h:5757
Declaration object for variables.
Definition: cvar.h:50
external reference
Definition: cnode_def.h:1986
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:4875
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:5982
while statement
Definition: cnode_def.h:1813
CNode * cENUM_REF(CEnum *a0, Coord_t *loc=NULL)
Node construction shortcut for ENUM_REF reference to a enum.
Definition: cnode_def.h:3755
CNode * cTABLE(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for TABLE udp table.
Definition: cnode_def.h:7110
CNode * cPOW(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for POW exponent.
Definition: cnode_def.h:2959
CNode * cREPEAT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for REPEAT repeat statement.
Definition: cnode_def.h:6084
CNode * cOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for OR bitwise or.
Definition: cnode_def.h:3190
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:1671
CNode * cINT32(INT32 i)
Short cut for creating VCONSTANT node with a given integer value.
Definition: cnode.h:784
int suppressErrorMessages
Definition: cnode_def.h:13585
function definition
Definition: cnode_def.h:1925
CNode * cNE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for NE not equal.
Definition: cnode_def.h:4756
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:2195
CNode * cGATE_REF(CGate *a0, Coord_t *loc=NULL)
Node construction shortcut for GATE_REF gate instance.
Definition: cnode_def.h:3383
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:6733
int IsWidthEvaluateable(void)
Evaluates if expression width can be evaluated.
Definition: cnode_def.h:9077
CNode * cRCONSTANT(char *a0, Coord_t *loc=NULL)
Node construction shortcut for RCONSTANT real constant.
Definition: cnode_def.h:2652
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:3847
event - have width 0
Definition: cdatatype.h:101
CNode * cPORT_DEF(CPort *a0, Coord_t *loc=NULL)
Node construction shortcut for PORT_DEF port definition.
Definition: cnode_def.h:6665
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:4492
void PreVisit1(int(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node before children have been visited.
Definition: cnode_def.h:9899
procedural assignment with mod
Definition: cnode_def.h:1587
CNode * cIMPORT(CSymbol *a0, Coord_t *loc=NULL)
Node construction shortcut for IMPORT import item.
Definition: cnode_def.h:6429
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:480
call to a timing task
Definition: cnode_def.h:928
CNode * cLT(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LT less than.
Definition: cnode_def.h:4525
release statement
Definition: cnode_def.h:1692
void Mul(double *r, double *a, double *b)
Definition: cnode.h:678
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:5578
structural case statement
Definition: cnode_def.h:2133
int IsWidthConstant(void)
Evaluates if expression width is constant.
Definition: cnode_def.h:8323
CNode * cREP(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for REP replication operator.
Definition: cnode_def.h:4248
CNode * cDELAY_CONTROL(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for DELAY_CONTROL delay control.
Definition: cnode_def.h:6578
CNode * cNOP(Coord_t *loc=NULL)
Node construction shortcut for NOP no operation.
Definition: cnode_def.h:2833
NodeType_t GetNodeType(void)
Get node expression type.
Definition: cnode.h:526
always block
Definition: cnode_def.h:1452
reference to a type
Definition: cnode_def.h:1031
udp table entry
Definition: cnode_def.h:2153
void Plus(double *r, double *a)
Definition: cnode.h:693
CNode * cCASEZ(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CASEZ casez statement.
Definition: cnode_def.h:6290
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:2035
CNode * cCASE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for CASE case statement.
Definition: cnode_def.h:6224
int Signed() const
Get signed attribute.
Definition: cvector.h:178
vector subrange
Definition: cnode_def.h:1136
real - have width 0
Definition: cdatatype.h:99
CNode * cBLOCK_REF(CBlock *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for BLOCK_REF statement block.
Definition: cnode_def.h:5178
Declaration object for functions and tasks.
Definition: cfunction.h:50
port definition
Definition: cnode_def.h:1996
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:4025
always flip-flop block
Definition: cnode_def.h:1472
call to enable a systask
Definition: cnode_def.h:917
procedural assignment
Definition: cnode_def.h:2067
CNode * cGCASE(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for GCASE structural case statement.
Definition: cnode_def.h:7078
procedural assignment with bitwise or
Definition: cnode_def.h:1611
unsigned Hash()
Calculate hash of tree.
Definition: cnode_def.h:11478
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:3479
CNode * cRXNOR(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for RXNOR reduction xnor.
Definition: cnode_def.h:4933
structural for statement
Definition: cnode_def.h:2122
logical complement
Definition: cnode_def.h:1250
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:881
CNode * cXNOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for XNOR bitwise xnor.
Definition: cnode_def.h:3322
casex statement
Definition: cnode_def.h:1859
always latch block
Definition: cnode_def.h:1462
CNode * cADD_N(CNode *first,...)
Definition: cnode.h:1270
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:7223
addition
Definition: cnode_def.h:765
repeat statement
Definition: cnode_def.h:1802
expression represented by a macro
Definition: cnode_def.h:2183
deassign statement
Definition: cnode_def.h:2077
NodeType_t
Expression node type.
Definition: cdatatype.h:97
CNode * cIF(CNode *a0, CNode *a1, CNode *a2, Coord_t *loc=NULL)
Node construction shortcut for IF if statement.
Definition: cnode_def.h:6019
CNode * cSPECIFY_REF(CSpecify *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for SPECIFY_REF specify block.
Definition: cnode_def.h:5211
data type change
Definition: cnode_def.h:2267
procedural assignment with subtract
Definition: cnode_def.h:1551
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:5615
CNode * GetAttributes()
Get attributes attached to operation.
Definition: cnode.h:500
CNode * cADD(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for ADD addition.
Definition: cnode_def.h:2992
const char * nodeOpName[]
Definition: cnode_def.h:2273
predecrement
Definition: cnode_def.h:2246
CNode * cDEFPARAM(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for DEFPARAM defparam statement.
Definition: cnode_def.h:6695
dimensioned reference (array/bit select)
Definition: cnode_def.h:951
CNode * cPORT_DECL(CPortDir *a0, Coord_t *loc=NULL)
Node construction shortcut for PORT_DECL port declaration.
Definition: cnode_def.h:3937
CNode * cLOR(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LOR logical or.
Definition: cnode_def.h:4624
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:7257
NodeOp_t GetOp()
Return node's operation type.
Definition: cnode.h:308
CNode * cLSH(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LSH logical left shift.
Definition: cnode_def.h:3025
int IsWidthVolatile(void)
Evaluates if expression width is volatile.
Definition: cnode_def.h:8479
type declaration
Definition: cnode_def.h:1103
CNode * cVCONSTANT(CVector *a0, Coord_t *loc=NULL)
Node construction shortcut for VCONSTANT vector constant.
Definition: cnode_def.h:2623
void Dump(FILE *f)
Print a compact representation of the parse tree.
Definition: cnode_def.h:15149
logical left shift
Definition: cnode_def.h:776
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:4313
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:1894
CNode * cTYPEDEF_DECL(CTypedef *a0, Coord_t *loc=NULL)
Node construction shortcut for TYPEDEF_DECL type declaration.
Definition: cnode_def.h:3995
int cABSDIFFPLUS1(int a1, int a2)
Definition: cnode.h:1340
vector subrange with descending index select
Definition: cnode_def.h:1158
bitwise complement
Definition: cnode_def.h:1220
reference to parameter
Definition: cnode_def.h:981
always combinational logic block
Definition: cnode_def.h:1482
double EvalReal(void)
Evaluates expression tree evaluated in a real context.
Definition: cnode.cc:391
case statement
Definition: cnode_def.h:1848
CNode * cLSHA(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for LSHA arithmetic left shift.
Definition: cnode_def.h:3091
CNode * cPARAM_REF(CParam *a0, Coord_t *loc=NULL)
Node construction shortcut for PARAM_REF reference to parameter.
Definition: cnode_def.h:3639
greater than
Definition: cnode_def.h:1261
CNode * cMODULE_DEF(CModule *a0, Coord_t *loc=NULL)
Node construction shortcut for MODULE_DEF module definition.
Definition: cnode_def.h:6487
specify block
Definition: cnode_def.h:1515
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:7354
CNode * cPLUS(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for PLUS unary plus.
Definition: cnode_def.h:4400
modulus
Definition: cnode_def.h:820
ifnone path assignment statement
Definition: cnode_def.h:2046
net declaration
Definition: cnode_def.h:1042
expression width change
Definition: cnode_def.h:701
CNode * cINSTANCE_REF(CInstance *a0, Coord_t *loc=NULL)
Node construction shortcut for INSTANCE_REF instance reference.
Definition: cnode_def.h:3354
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:3413
CNode * cGENVAR_REF(CGenvar *a0, Coord_t *loc=NULL)
Node construction shortcut for GENVAR_REF reference to a genvar.
Definition: cnode_def.h:3726
CNode * cMUL(CNode *a0, CNode *a1, Coord_t *loc=NULL)
Node construction shortcut for MUL multiply.
Definition: cnode_def.h:2893
virtual INT32 GetWidth(void)
Evaluate packed width of declaration.
procedural assignment with left arithmetic shift
Definition: cnode_def.h:1659
double s2d(char *s)
Convert char string to double.
Definition: cnode.h:1079
if statement
Definition: cnode_def.h:1781
reference to variable
Definition: cnode_def.h:971
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:5467
CNode * cCVIR(CNode *a0, Coord_t *loc=NULL)
Node construction shortcut for CVIR convert integer to real.
Definition: cnode_def.h:4218
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:5541
CNode * Clone(CObstack *heap=stack)
Replicate tree.
Definition: cnode_def.h:9406
min/typ/max expression
Definition: cnode_def.h:1769
logical or
Definition: cnode_def.h:1316