00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00610 #ifdef DEFINE_ENUM
00611
00614 enum NodeOp_t {
00618
00619
00620
00621
00622
00623 eERROR,
00627
00628
00629
00630
00631
00632
00633 eVCONSTANT,
00637
00638
00639
00640
00641
00642
00643 eRCONSTANT,
00647
00648
00649
00650
00651
00652
00653 eCOMMENT,
00657
00658
00659
00660
00661
00662
00663 eVRQ,
00667
00668
00669
00670
00671
00672
00673 ePRAGMA,
00677
00678
00679
00680
00681
00682
00683
00684 eELIST,
00688
00689
00690
00691
00692
00693
00694
00695 eWIDTH,
00699
00700
00701
00702
00703
00704 eNOP,
00708
00709
00710
00711
00712
00713
00714
00715 eSUB,
00719
00720
00721
00722
00723
00724
00725
00726 eMUL,
00730
00731
00732
00733
00734
00735
00736
00737 eDIV,
00741
00742
00743
00744
00745
00746
00747
00748 ePOW,
00752
00753
00754
00755
00756
00757
00758
00759 eADD,
00763
00764
00765
00766
00767
00768
00769
00770 eLSH,
00774
00775
00776
00777
00778
00779
00780
00781 eRSH,
00785
00786
00787
00788
00789
00790
00791
00792 eLSHA,
00796
00797
00798
00799
00800
00801
00802
00803 eRSHA,
00807
00808
00809
00810
00811
00812
00813
00814 eMOD,
00818
00819
00820
00821
00822
00823
00824
00825 eOR,
00829
00830
00831
00832
00833
00834
00835
00836 eAND,
00840
00841
00842
00843
00844
00845
00846
00847 eANDANDAND,
00851
00852
00853
00854
00855
00856
00857
00858 eXOR,
00862
00863
00864
00865
00866
00867
00868
00869 eXNOR,
00873
00874
00875
00876
00877
00878
00879 eINSTANCE_REF,
00883
00884
00885
00886
00887
00888
00889 eGATE_REF,
00893
00894
00895
00896
00897
00898
00899
00900 eTASK_ENABLE,
00904
00905
00906
00907
00908
00909
00910
00911 eSYSTASK_CALL,
00915
00916
00917
00918
00919
00920
00921
00922 eTIMING_CALL,
00926
00927
00928
00929
00930
00931
00932
00933
00934 eFUNCTION_CALL,
00938
00939
00940
00941
00942
00943
00944
00945 eARRAY,
00949
00950
00951
00952
00953
00954
00955 eNET_REF,
00959
00960
00961
00962
00963
00964
00965 eVAR_REF,
00969
00970
00971
00972
00973
00974
00975 ePARAM_REF,
00979
00980
00981
00982
00983
00984
00985 ePORT_REF,
00989
00990
00991
00992
00993
00994
00995 eFWD_REF,
00999
01000
01001
01002
01003
01004
01005 eGENVAR_REF,
01009
01010
01011
01012
01013
01014
01015 eENUM_REF,
01019
01020
01021
01022
01023
01024
01025 eTYPE_REF,
01029
01030
01031
01032
01033
01034
01035
01036 eNET_DECL,
01040
01041
01042
01043
01044
01045
01046
01047 eVAR_DECL,
01051
01052
01053
01054
01055
01056
01057 ePARAM_DECL,
01061
01062
01063
01064
01065
01066
01067 eSPECPARAM_DECL,
01071
01072
01073
01074
01075
01076
01077 ePORT_DECL,
01081
01082
01083
01084
01085
01086
01087 eGENVAR_DECL,
01091
01092
01093
01094
01095
01096
01097 eTYPEDEF_DECL,
01101
01102
01103
01104
01105
01106
01107
01108 eLIST,
01112
01113
01114
01115
01116
01117
01118
01119 eRANGE,
01123
01124
01125
01126
01127
01128
01129
01130 eSLICE,
01134
01135
01136
01137
01138
01139
01140
01141 ePSLICE,
01145
01146
01147
01148
01149
01150
01151
01152 eMSLICE,
01156
01157
01158
01159
01160
01161
01162 eCVRI,
01166
01167
01168
01169
01170
01171
01172 eCVIR,
01176
01177
01178
01179
01180
01181
01182
01183 eREP,
01187
01188
01189
01190
01191
01192
01193
01194 eCAT,
01198
01199
01200
01201
01202
01203
01204 eUCAT,
01208
01209
01210
01211
01212
01213
01214 eCOM,
01218
01219
01220
01221
01222
01223
01224 eNEG,
01228
01229
01230
01231
01232
01233
01234 ePLUS,
01238
01239
01240
01241
01242
01243
01244 eNOT,
01248
01249
01250
01251
01252
01253
01254
01255 eGT,
01259
01260
01261
01262
01263
01264
01265
01266 eGE,
01270
01271
01272
01273
01274
01275
01276
01277 eLT,
01281
01282
01283
01284
01285
01286
01287
01288 eLE,
01292
01293
01294
01295
01296
01297
01298
01299 eLAND,
01303
01304
01305
01306
01307
01308
01309
01310 eLOR,
01314
01315
01316
01317
01318
01319
01320
01321 eCEQ,
01325
01326
01327
01328
01329
01330
01331
01332 eCNE,
01336
01337
01338
01339
01340
01341
01342
01343 eEQ,
01347
01348
01349
01350
01351
01352
01353
01354 eNE,
01358
01359
01360
01361
01362
01363
01364 eRAND,
01368
01369
01370
01371
01372
01373
01374 eRNAND,
01378
01379
01380
01381
01382
01383
01384 eROR,
01388
01389
01390
01391
01392
01393
01394 eRNOR,
01398
01399
01400
01401
01402
01403
01404 eRXOR,
01408
01409
01410
01411
01412
01413
01414 eRXNOR,
01418
01419
01420
01421
01422
01423
01424
01425
01426 eHOOK,
01430
01431
01432
01433
01434
01435
01436 eINIT,
01440
01441
01442
01443
01444
01445
01446 eALWAYS,
01450
01451
01452
01453
01454
01455
01456 eALWAYS_LATCH,
01460
01461
01462
01463
01464
01465
01466 eALWAYS_FF,
01470
01471
01472
01473
01474
01475
01476 eALWAYS_COMB,
01480
01481
01482
01483
01484
01485
01486
01487 eEVENT,
01491
01492
01493
01494
01495
01496
01497
01498 eBLOCK_REF,
01502
01503
01504
01505
01506
01507
01508
01509 eSPECIFY_REF,
01513
01514
01515
01516
01517
01518
01519
01520
01521 eASSIGN,
01525
01526
01527
01528
01529
01530
01531
01532
01533 eADD_ASSIGN,
01537
01538
01539
01540
01541
01542
01543
01544
01545 eSUB_ASSIGN,
01549
01550
01551
01552
01553
01554
01555
01556
01557 eMUL_ASSIGN,
01561
01562
01563
01564
01565
01566
01567
01568
01569 eDIV_ASSIGN,
01573
01574
01575
01576
01577
01578
01579
01580
01581 eMOD_ASSIGN,
01585
01586
01587
01588
01589
01590
01591
01592
01593 eAND_ASSIGN,
01597
01598
01599
01600
01601
01602
01603
01604
01605 eOR_ASSIGN,
01609
01610
01611
01612
01613
01614
01615
01616
01617 eXOR_ASSIGN,
01621
01622
01623
01624
01625
01626
01627
01628
01629 eLSH_ASSIGN,
01633
01634
01635
01636
01637
01638
01639
01640
01641 eRSH_ASSIGN,
01645
01646
01647
01648
01649
01650
01651
01652
01653 eLSHA_ASSIGN,
01657
01658
01659
01660
01661
01662
01663
01664
01665 eRSHA_ASSIGN,
01669
01670
01671
01672
01673
01674
01675
01676 eFORCE,
01680
01681
01682
01683
01684
01685
01686 eRELEASE,
01690
01691
01692
01693
01694
01695
01696
01697
01698 eNBASSIGN,
01702
01703
01704
01705
01706
01707
01708 ePOSEDGE,
01712
01713
01714
01715
01716
01717
01718 eNEGEDGE,
01722
01723
01724
01725
01726
01727
01728
01729 eEDGE,
01733
01734
01735
01736
01737
01738
01739
01740 eEVOR,
01744
01745
01746
01747
01748
01749
01750
01751 eDELAY,
01755
01756
01757
01758
01759
01760
01761
01762
01763 eMTM,
01767
01768
01769
01770
01771
01772
01773
01774
01775 eIF,
01779
01780
01781
01782
01783
01784
01785 eFOREVER,
01789
01790
01791
01792
01793
01794
01795
01796 eREPEAT,
01800
01801
01802
01803
01804
01805
01806
01807 eWHILE,
01811
01812
01813
01814
01815
01816
01817
01818 eWAIT,
01822
01823
01824
01825
01826
01827
01828
01829
01830
01831 eFOR,
01835
01836
01837
01838
01839
01840
01841
01842 eCASE,
01846
01847
01848
01849
01850
01851
01852
01853 eCASEX,
01857
01858
01859
01860
01861
01862
01863
01864 eCASEZ,
01868
01869
01870
01871
01872
01873
01874
01875 eCASEITEM,
01879
01880
01881
01882
01883
01884
01885
01886
01887
01888 eCASSIGN,
01892
01893
01894
01895
01896
01897
01898
01899 eARG,
01903
01904
01905
01906
01907
01908
01909 eFUNCTION_DEF,
01913
01914
01915
01916
01917
01918
01919 eMODULE_DEF,
01923
01924
01925
01926
01927
01928
01929
01930 eREPEAT_CONTROL,
01934
01935
01936
01937
01938
01939
01940 eDELAY_CONTROL,
01944
01945
01946
01947
01948
01949
01950 eEVENT_CONTROL,
01954
01955
01956
01957
01958
01959
01960 eEXTERNAL_REF,
01964
01965
01966
01967
01968
01969
01970 ePORT_DEF,
01974
01975
01976
01977
01978
01979
01980
01981 eDEFPARAM,
01985
01986
01987
01988
01989
01990
01991
01992
01993
01994
01995
01996
01997 ePATH,
02001
02002
02003
02004
02005
02006
02007
02008
02009 ePATH_ASSIGN,
02013
02014
02015
02016
02017
02018
02019
02020 eIFNONE_PATH_ASSIGN,
02024
02025
02026
02027
02028
02029
02030 eTRIGGER,
02034
02035
02036
02037
02038
02039
02040
02041 ePASSIGN,
02045
02046
02047
02048
02049
02050
02051 eDEASSIGN,
02055
02056
02057
02058
02059
02060
02061 eDISABLE,
02065
02066
02067
02068
02069
02070
02071 eATTRIBUTE,
02075
02076
02077
02078
02079
02080
02081
02082
02083 eGIF,
02087
02088
02089
02090
02091
02092
02093
02094
02095
02096 eGFOR,
02100
02101
02102
02103
02104
02105
02106
02107 eGCASE,
02111
02112
02113
02114
02115
02116
02117 eTABLE,
02121
02122
02123
02124
02125
02126
02127 eTABLE_ENTRY,
02131
02132
02133
02134
02135
02136
02137 eTABLE_SYMBOL,
02141
02142
02143
02144
02145
02146 ePORTLIST_END,
02150
02151
02152
02153
02154
02155
02156
02157 eMACRO_EXPR,
02161
02162
02163
02164
02165
02166
02167
02168
02169 eENUM_SPEC,
02173
02174
02175
02176
02177
02178
02179
02180 eMEMBER,
02184
02185
02186
02187
02188
02189
02190 eRETURN,
02194
02195
02196
02197
02198
02199
02200 ePREINC,
02204
02205
02206
02207
02208
02209
02210 ePOSTINC,
02214
02215
02216
02217
02218
02219
02220 ePREDEC,
02224
02225
02226
02227
02228
02229
02230 ePOSTDEC,
02234
02235
02236
02237
02238
02239
02240
02241 eCAST
02242 };
02243 extern const char* nodeOpName[];
02244 extern const char* nodeOpDescription[];
02245 #endif // DEFINE_ENUM
02246 #ifdef DEFINE_METHODS
02247 const char* nodeOpName[] = {
02248 "ERROR",
02249 "VCONSTANT",
02250 "RCONSTANT",
02251 "COMMENT",
02252 "VRQ",
02253 "PRAGMA",
02254 "ELIST",
02255 "WIDTH",
02256 "NOP",
02257 "SUB",
02258 "MUL",
02259 "DIV",
02260 "POW",
02261 "ADD",
02262 "LSH",
02263 "RSH",
02264 "LSHA",
02265 "RSHA",
02266 "MOD",
02267 "OR",
02268 "AND",
02269 "ANDANDAND",
02270 "XOR",
02271 "XNOR",
02272 "INSTANCE_REF",
02273 "GATE_REF",
02274 "TASK_ENABLE",
02275 "SYSTASK_CALL",
02276 "TIMING_CALL",
02277 "FUNCTION_CALL",
02278 "ARRAY",
02279 "NET_REF",
02280 "VAR_REF",
02281 "PARAM_REF",
02282 "PORT_REF",
02283 "FWD_REF",
02284 "GENVAR_REF",
02285 "ENUM_REF",
02286 "TYPE_REF",
02287 "NET_DECL",
02288 "VAR_DECL",
02289 "PARAM_DECL",
02290 "SPECPARAM_DECL",
02291 "PORT_DECL",
02292 "GENVAR_DECL",
02293 "TYPEDEF_DECL",
02294 "LIST",
02295 "RANGE",
02296 "SLICE",
02297 "PSLICE",
02298 "MSLICE",
02299 "CVRI",
02300 "CVIR",
02301 "REP",
02302 "CAT",
02303 "UCAT",
02304 "COM",
02305 "NEG",
02306 "PLUS",
02307 "NOT",
02308 "GT",
02309 "GE",
02310 "LT",
02311 "LE",
02312 "LAND",
02313 "LOR",
02314 "CEQ",
02315 "CNE",
02316 "EQ",
02317 "NE",
02318 "RAND",
02319 "RNAND",
02320 "ROR",
02321 "RNOR",
02322 "RXOR",
02323 "RXNOR",
02324 "HOOK",
02325 "INIT",
02326 "ALWAYS",
02327 "ALWAYS_LATCH",
02328 "ALWAYS_FF",
02329 "ALWAYS_COMB",
02330 "EVENT",
02331 "BLOCK_REF",
02332 "SPECIFY_REF",
02333 "ASSIGN",
02334 "ADD_ASSIGN",
02335 "SUB_ASSIGN",
02336 "MUL_ASSIGN",
02337 "DIV_ASSIGN",
02338 "MOD_ASSIGN",
02339 "AND_ASSIGN",
02340 "OR_ASSIGN",
02341 "XOR_ASSIGN",
02342 "LSH_ASSIGN",
02343 "RSH_ASSIGN",
02344 "LSHA_ASSIGN",
02345 "RSHA_ASSIGN",
02346 "FORCE",
02347 "RELEASE",
02348 "NBASSIGN",
02349 "POSEDGE",
02350 "NEGEDGE",
02351 "EDGE",
02352 "EVOR",
02353 "DELAY",
02354 "MTM",
02355 "IF",
02356 "FOREVER",
02357 "REPEAT",
02358 "WHILE",
02359 "WAIT",
02360 "FOR",
02361 "CASE",
02362 "CASEX",
02363 "CASEZ",
02364 "CASEITEM",
02365 "CASSIGN",
02366 "ARG",
02367 "FUNCTION_DEF",
02368 "MODULE_DEF",
02369 "REPEAT_CONTROL",
02370 "DELAY_CONTROL",
02371 "EVENT_CONTROL",
02372 "EXTERNAL_REF",
02373 "PORT_DEF",
02374 "DEFPARAM",
02375 "PATH",
02376 "PATH_ASSIGN",
02377 "IFNONE_PATH_ASSIGN",
02378 "TRIGGER",
02379 "PASSIGN",
02380 "DEASSIGN",
02381 "DISABLE",
02382 "ATTRIBUTE",
02383 "GIF",
02384 "GFOR",
02385 "GCASE",
02386 "TABLE",
02387 "TABLE_ENTRY",
02388 "TABLE_SYMBOL",
02389 "PORTLIST_END",
02390 "MACRO_EXPR",
02391 "ENUM_SPEC",
02392 "MEMBER",
02393 "RETURN",
02394 "PREINC",
02395 "POSTINC",
02396 "PREDEC",
02397 "POSTDEC",
02398 "CAST",
02399 NULL
02400 };
02401 const char* nodeOpDescription[] = {
02402 "error node",
02403 "vector constant",
02404 "real constant",
02405 "comment",
02406 "vrq comment",
02407 "program pragma",
02408 "expression list",
02409 "expression width change",
02410 "no operation",
02411 "subtract",
02412 "multiply",
02413 "divide",
02414 "exponent",
02415 "addition",
02416 "logical left shift",
02417 "logical right shift",
02418 "arithmetic left shift",
02419 "arithmetic right shift",
02420 "modulus",
02421 "bitwise or",
02422 "bitwise and",
02423 "triple and",
02424 "bitwise xor",
02425 "bitwise xnor",
02426 "instance reference",
02427 "gate instance",
02428 "call to a task",
02429 "call to enable a systask",
02430 "call to a timing task",
02431 "call to a function",
02432 "dimensioned reference (array/bit select)",
02433 "reference to net",
02434 "reference to variable",
02435 "reference to parameter",
02436 "reference to port",
02437 "reference to a forward declared variable",
02438 "reference to a genvar",
02439 "reference to a enum",
02440 "reference to a type",
02441 "net declaration",
02442 "variable declaration",
02443 "parameter declaration",
02444 "specify parameter declaration",
02445 "port declaration",
02446 "genvar declaration",
02447 "type declaration",
02448 "list of nodes",
02449 "vector decl range specification",
02450 "vector subrange",
02451 "vector subrange with ascending index select",
02452 "vector subrange with descending index select",
02453 "convert real to integer",
02454 "convert integer to real",
02455 "replication operator",
02456 "concatenation operator",
02457 "unary concat",
02458 "bitwise complement",
02459 "negation",
02460 "unary plus",
02461 "logical complement",
02462 "greater than",
02463 "greater than or equal",
02464 "less than",
02465 "less than or equal",
02466 "logical and",
02467 "logical or",
02468 "case equal",
02469 "case not equal",
02470 "equal",
02471 "not equal",
02472 "reduction and",
02473 "reduction nand",
02474 "reduction or",
02475 "reduction nor",
02476 "reduction xor",
02477 "reduction xnor",
02478 "condition expression operator",
02479 "initial block",
02480 "always block",
02481 "always latch block",
02482 "always flip-flop block",
02483 "always combinational logic block",
02484 "event statement",
02485 "statement block",
02486 "specify block",
02487 "procedural assignment",
02488 "procedural assignment with add",
02489 "procedural assignment with subtract",
02490 "procedural assignment with mul",
02491 "procedural assignment with div",
02492 "procedural assignment with mod",
02493 "procedural assignment with bitwise and",
02494 "procedural assignment with bitwise or",
02495 "procedural assignment with bitwise xor",
02496 "procedural assignment with left shift",
02497 "procedural assignment with right shift",
02498 "procedural assignment with left arithmetic shift",
02499 "procedural assignment with right arithmetic shift",
02500 "force statement",
02501 "release statement",
02502 "nonblocking assignment",
02503 "positive event qualifier",
02504 "negative event qualifier",
02505 "edge qualifier",
02506 "event or",
02507 "delay statement",
02508 "min/typ/max expression",
02509 "if statement",
02510 "forever statement",
02511 "repeat statement",
02512 "while statement",
02513 "wait statement",
02514 "for statement",
02515 "case statement",
02516 "casex statement",
02517 "casez statement",
02518 "case item",
02519 "continious assignment",
02520 "port connection",
02521 "function definition",
02522 "module definition",
02523 "repeat control",
02524 "delay control",
02525 "event control",
02526 "external reference",
02527 "port definition",
02528 "defparam statement",
02529 "path statement",
02530 "path assignment statement",
02531 "ifnone path assignment statement",
02532 "event trigger",
02533 "procedural assignment",
02534 "deassign statement",
02535 "disable statement",
02536 "attribute specification",
02537 "structural if statement",
02538 "structural for statement",
02539 "structural case statement",
02540 "udp table",
02541 "udp table entry",
02542 "udp table symbol",
02543 "sentinal at end of port list",
02544 "expression represented by a macro",
02545 "enum specification",
02546 "member reference (structure, class or external",
02547 "return",
02548 "preincrement",
02549 "postincrement",
02550 "predecrement",
02551 "postdecrement",
02552 "data type change",
02553 NULL
02554 };
02555 #endif // DEFINE_METHODS
02556
02557
02558 #ifdef DEFINE_CONSTRUCTOR
02559
02567 inline CNode* cERROR( Coord_t* loc=NULL )
02568 {
02569 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eERROR );
02570 return n;
02571 }
02580 inline CNode* cERROR( CObstack* heap, Coord_t* loc=NULL )
02581 {
02582 CNode* n = new(heap) CNode( loc, eERROR );
02583 return n;
02584 }
02593 inline CNode* cVCONSTANT( CVector* a0, Coord_t* loc=NULL )
02594 {
02595 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eVCONSTANT );
02596 n->Arg<CVector*>(0) = a0;
02597 return n;
02598 }
02608 inline CNode* cVCONSTANT( CObstack* heap, CVector* a0, Coord_t* loc=NULL )
02609 {
02610 CNode* n = new(heap) CNode( loc, eVCONSTANT );
02611 n->Arg<CVector*>(0) = a0;
02612 return n;
02613 }
02622 inline CNode* cRCONSTANT( char* a0, Coord_t* loc=NULL )
02623 {
02624 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eRCONSTANT );
02625 n->Arg<char*>(0) = a0;
02626 return n;
02627 }
02637 inline CNode* cRCONSTANT( CObstack* heap, char* a0, Coord_t* loc=NULL )
02638 {
02639 CNode* n = new(heap) CNode( loc, eRCONSTANT );
02640 n->Arg<char*>(0) = a0;
02641 return n;
02642 }
02651 inline CNode* cCOMMENT( const char* a0, Coord_t* loc=NULL )
02652 {
02653 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eCOMMENT );
02654 n->Arg<const char*>(0) = a0;
02655 return n;
02656 }
02666 inline CNode* cCOMMENT( CObstack* heap, const char* a0, Coord_t* loc=NULL )
02667 {
02668 CNode* n = new(heap) CNode( loc, eCOMMENT );
02669 n->Arg<const char*>(0) = a0;
02670 return n;
02671 }
02680 inline CNode* cVRQ( const char* a0, Coord_t* loc=NULL )
02681 {
02682 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eVRQ );
02683 n->Arg<const char*>(0) = a0;
02684 return n;
02685 }
02695 inline CNode* cVRQ( CObstack* heap, const char* a0, Coord_t* loc=NULL )
02696 {
02697 CNode* n = new(heap) CNode( loc, eVRQ );
02698 n->Arg<const char*>(0) = a0;
02699 return n;
02700 }
02709 inline CNode* cPRAGMA( const char* a0, Coord_t* loc=NULL )
02710 {
02711 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePRAGMA );
02712 n->Arg<const char*>(0) = a0;
02713 return n;
02714 }
02724 inline CNode* cPRAGMA( CObstack* heap, const char* a0, Coord_t* loc=NULL )
02725 {
02726 CNode* n = new(heap) CNode( loc, ePRAGMA );
02727 n->Arg<const char*>(0) = a0;
02728 return n;
02729 }
02739 inline CNode* cELIST( CNode* a0, CNode* a1, Coord_t* loc=NULL )
02740 {
02741 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eELIST );
02742 n->Arg<CNode*>(0) = a0;
02743 n->Arg<CNode*>(1) = a1;
02744 return n;
02745 }
02756 inline CNode* cELIST( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
02757 {
02758 CNode* n = new(heap) CNode( loc, eELIST );
02759 n->Arg<CNode*>(0) = a0;
02760 n->Arg<CNode*>(1) = a1;
02761 return n;
02762 }
02772 inline CNode* cWIDTH( CNode* a0, CNode* a1, Coord_t* loc=NULL )
02773 {
02774 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eWIDTH );
02775 n->Arg<CNode*>(0) = a0;
02776 n->Arg<CNode*>(1) = a1;
02777 return n;
02778 }
02789 inline CNode* cWIDTH( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
02790 {
02791 CNode* n = new(heap) CNode( loc, eWIDTH );
02792 n->Arg<CNode*>(0) = a0;
02793 n->Arg<CNode*>(1) = a1;
02794 return n;
02795 }
02803 inline CNode* cNOP( Coord_t* loc=NULL )
02804 {
02805 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eNOP );
02806 return n;
02807 }
02816 inline CNode* cNOP( CObstack* heap, Coord_t* loc=NULL )
02817 {
02818 CNode* n = new(heap) CNode( loc, eNOP );
02819 return n;
02820 }
02830 inline CNode* cSUB( CNode* a0, CNode* a1, Coord_t* loc=NULL )
02831 {
02832 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eSUB );
02833 n->Arg<CNode*>(0) = a0;
02834 n->Arg<CNode*>(1) = a1;
02835 return n;
02836 }
02847 inline CNode* cSUB( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
02848 {
02849 CNode* n = new(heap) CNode( loc, eSUB );
02850 n->Arg<CNode*>(0) = a0;
02851 n->Arg<CNode*>(1) = a1;
02852 return n;
02853 }
02863 inline CNode* cMUL( CNode* a0, CNode* a1, Coord_t* loc=NULL )
02864 {
02865 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eMUL );
02866 n->Arg<CNode*>(0) = a0;
02867 n->Arg<CNode*>(1) = a1;
02868 return n;
02869 }
02880 inline CNode* cMUL( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
02881 {
02882 CNode* n = new(heap) CNode( loc, eMUL );
02883 n->Arg<CNode*>(0) = a0;
02884 n->Arg<CNode*>(1) = a1;
02885 return n;
02886 }
02896 inline CNode* cDIV( CNode* a0, CNode* a1, Coord_t* loc=NULL )
02897 {
02898 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eDIV );
02899 n->Arg<CNode*>(0) = a0;
02900 n->Arg<CNode*>(1) = a1;
02901 return n;
02902 }
02913 inline CNode* cDIV( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
02914 {
02915 CNode* n = new(heap) CNode( loc, eDIV );
02916 n->Arg<CNode*>(0) = a0;
02917 n->Arg<CNode*>(1) = a1;
02918 return n;
02919 }
02929 inline CNode* cPOW( CNode* a0, CNode* a1, Coord_t* loc=NULL )
02930 {
02931 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePOW );
02932 n->Arg<CNode*>(0) = a0;
02933 n->Arg<CNode*>(1) = a1;
02934 return n;
02935 }
02946 inline CNode* cPOW( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
02947 {
02948 CNode* n = new(heap) CNode( loc, ePOW );
02949 n->Arg<CNode*>(0) = a0;
02950 n->Arg<CNode*>(1) = a1;
02951 return n;
02952 }
02962 inline CNode* cADD( CNode* a0, CNode* a1, Coord_t* loc=NULL )
02963 {
02964 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eADD );
02965 n->Arg<CNode*>(0) = a0;
02966 n->Arg<CNode*>(1) = a1;
02967 return n;
02968 }
02979 inline CNode* cADD( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
02980 {
02981 CNode* n = new(heap) CNode( loc, eADD );
02982 n->Arg<CNode*>(0) = a0;
02983 n->Arg<CNode*>(1) = a1;
02984 return n;
02985 }
02995 inline CNode* cLSH( CNode* a0, CNode* a1, Coord_t* loc=NULL )
02996 {
02997 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eLSH );
02998 n->Arg<CNode*>(0) = a0;
02999 n->Arg<CNode*>(1) = a1;
03000 return n;
03001 }
03012 inline CNode* cLSH( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
03013 {
03014 CNode* n = new(heap) CNode( loc, eLSH );
03015 n->Arg<CNode*>(0) = a0;
03016 n->Arg<CNode*>(1) = a1;
03017 return n;
03018 }
03028 inline CNode* cRSH( CNode* a0, CNode* a1, Coord_t* loc=NULL )
03029 {
03030 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eRSH );
03031 n->Arg<CNode*>(0) = a0;
03032 n->Arg<CNode*>(1) = a1;
03033 return n;
03034 }
03045 inline CNode* cRSH( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
03046 {
03047 CNode* n = new(heap) CNode( loc, eRSH );
03048 n->Arg<CNode*>(0) = a0;
03049 n->Arg<CNode*>(1) = a1;
03050 return n;
03051 }
03061 inline CNode* cLSHA( CNode* a0, CNode* a1, Coord_t* loc=NULL )
03062 {
03063 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eLSHA );
03064 n->Arg<CNode*>(0) = a0;
03065 n->Arg<CNode*>(1) = a1;
03066 return n;
03067 }
03078 inline CNode* cLSHA( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
03079 {
03080 CNode* n = new(heap) CNode( loc, eLSHA );
03081 n->Arg<CNode*>(0) = a0;
03082 n->Arg<CNode*>(1) = a1;
03083 return n;
03084 }
03094 inline CNode* cRSHA( CNode* a0, CNode* a1, Coord_t* loc=NULL )
03095 {
03096 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eRSHA );
03097 n->Arg<CNode*>(0) = a0;
03098 n->Arg<CNode*>(1) = a1;
03099 return n;
03100 }
03111 inline CNode* cRSHA( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
03112 {
03113 CNode* n = new(heap) CNode( loc, eRSHA );
03114 n->Arg<CNode*>(0) = a0;
03115 n->Arg<CNode*>(1) = a1;
03116 return n;
03117 }
03127 inline CNode* cMOD( CNode* a0, CNode* a1, Coord_t* loc=NULL )
03128 {
03129 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eMOD );
03130 n->Arg<CNode*>(0) = a0;
03131 n->Arg<CNode*>(1) = a1;
03132 return n;
03133 }
03144 inline CNode* cMOD( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
03145 {
03146 CNode* n = new(heap) CNode( loc, eMOD );
03147 n->Arg<CNode*>(0) = a0;
03148 n->Arg<CNode*>(1) = a1;
03149 return n;
03150 }
03160 inline CNode* cOR( CNode* a0, CNode* a1, Coord_t* loc=NULL )
03161 {
03162 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eOR );
03163 n->Arg<CNode*>(0) = a0;
03164 n->Arg<CNode*>(1) = a1;
03165 return n;
03166 }
03177 inline CNode* cOR( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
03178 {
03179 CNode* n = new(heap) CNode( loc, eOR );
03180 n->Arg<CNode*>(0) = a0;
03181 n->Arg<CNode*>(1) = a1;
03182 return n;
03183 }
03193 inline CNode* cAND( CNode* a0, CNode* a1, Coord_t* loc=NULL )
03194 {
03195 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eAND );
03196 n->Arg<CNode*>(0) = a0;
03197 n->Arg<CNode*>(1) = a1;
03198 return n;
03199 }
03210 inline CNode* cAND( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
03211 {
03212 CNode* n = new(heap) CNode( loc, eAND );
03213 n->Arg<CNode*>(0) = a0;
03214 n->Arg<CNode*>(1) = a1;
03215 return n;
03216 }
03226 inline CNode* cANDANDAND( CNode* a0, CNode* a1, Coord_t* loc=NULL )
03227 {
03228 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eANDANDAND );
03229 n->Arg<CNode*>(0) = a0;
03230 n->Arg<CNode*>(1) = a1;
03231 return n;
03232 }
03243 inline CNode* cANDANDAND( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
03244 {
03245 CNode* n = new(heap) CNode( loc, eANDANDAND );
03246 n->Arg<CNode*>(0) = a0;
03247 n->Arg<CNode*>(1) = a1;
03248 return n;
03249 }
03259 inline CNode* cXOR( CNode* a0, CNode* a1, Coord_t* loc=NULL )
03260 {
03261 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eXOR );
03262 n->Arg<CNode*>(0) = a0;
03263 n->Arg<CNode*>(1) = a1;
03264 return n;
03265 }
03276 inline CNode* cXOR( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
03277 {
03278 CNode* n = new(heap) CNode( loc, eXOR );
03279 n->Arg<CNode*>(0) = a0;
03280 n->Arg<CNode*>(1) = a1;
03281 return n;
03282 }
03292 inline CNode* cXNOR( CNode* a0, CNode* a1, Coord_t* loc=NULL )
03293 {
03294 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eXNOR );
03295 n->Arg<CNode*>(0) = a0;
03296 n->Arg<CNode*>(1) = a1;
03297 return n;
03298 }
03309 inline CNode* cXNOR( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
03310 {
03311 CNode* n = new(heap) CNode( loc, eXNOR );
03312 n->Arg<CNode*>(0) = a0;
03313 n->Arg<CNode*>(1) = a1;
03314 return n;
03315 }
03324 inline CNode* cINSTANCE_REF( CInstance* a0, Coord_t* loc=NULL )
03325 {
03326 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eINSTANCE_REF );
03327 n->Arg<CInstance*>(0) = a0;
03328 return n;
03329 }
03339 inline CNode* cINSTANCE_REF( CObstack* heap, CInstance* a0, Coord_t* loc=NULL )
03340 {
03341 CNode* n = new(heap) CNode( loc, eINSTANCE_REF );
03342 n->Arg<CInstance*>(0) = a0;
03343 return n;
03344 }
03353 inline CNode* cGATE_REF( CGate* a0, Coord_t* loc=NULL )
03354 {
03355 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eGATE_REF );
03356 n->Arg<CGate*>(0) = a0;
03357 return n;
03358 }
03368 inline CNode* cGATE_REF( CObstack* heap, CGate* a0, Coord_t* loc=NULL )
03369 {
03370 CNode* n = new(heap) CNode( loc, eGATE_REF );
03371 n->Arg<CGate*>(0) = a0;
03372 return n;
03373 }
03383 inline CNode* cTASK_ENABLE( CSymbol* a0, CNode* a1, Coord_t* loc=NULL )
03384 {
03385 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eTASK_ENABLE );
03386 n->Arg<CSymbol*>(0) = a0;
03387 n->Arg<CNode*>(1) = a1;
03388 return n;
03389 }
03400 inline CNode* cTASK_ENABLE( CObstack* heap, CSymbol* a0, CNode* a1, Coord_t* loc=NULL )
03401 {
03402 CNode* n = new(heap) CNode( loc, eTASK_ENABLE );
03403 n->Arg<CSymbol*>(0) = a0;
03404 n->Arg<CNode*>(1) = a1;
03405 return n;
03406 }
03416 inline CNode* cSYSTASK_CALL( CSymbol* a0, CNode* a1, Coord_t* loc=NULL )
03417 {
03418 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eSYSTASK_CALL );
03419 n->Arg<CSymbol*>(0) = a0;
03420 n->Arg<CNode*>(1) = a1;
03421 return n;
03422 }
03433 inline CNode* cSYSTASK_CALL( CObstack* heap, CSymbol* a0, CNode* a1, Coord_t* loc=NULL )
03434 {
03435 CNode* n = new(heap) CNode( loc, eSYSTASK_CALL );
03436 n->Arg<CSymbol*>(0) = a0;
03437 n->Arg<CNode*>(1) = a1;
03438 return n;
03439 }
03449 inline CNode* cTIMING_CALL( CSymbol* a0, CNode* a1, Coord_t* loc=NULL )
03450 {
03451 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eTIMING_CALL );
03452 n->Arg<CSymbol*>(0) = a0;
03453 n->Arg<CNode*>(1) = a1;
03454 return n;
03455 }
03466 inline CNode* cTIMING_CALL( CObstack* heap, CSymbol* a0, CNode* a1, Coord_t* loc=NULL )
03467 {
03468 CNode* n = new(heap) CNode( loc, eTIMING_CALL );
03469 n->Arg<CSymbol*>(0) = a0;
03470 n->Arg<CNode*>(1) = a1;
03471 return n;
03472 }
03483 inline CNode* cFUNCTION_CALL( CSymbol* a0, CNode* a1, CScope* a2, Coord_t* loc=NULL )
03484 {
03485 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eFUNCTION_CALL );
03486 n->Arg<CSymbol*>(0) = a0;
03487 n->Arg<CNode*>(1) = a1;
03488 n->Arg<CScope*>(2) = a2;
03489 return n;
03490 }
03502 inline CNode* cFUNCTION_CALL( CObstack* heap, CSymbol* a0, CNode* a1, CScope* a2, Coord_t* loc=NULL )
03503 {
03504 CNode* n = new(heap) CNode( loc, eFUNCTION_CALL );
03505 n->Arg<CSymbol*>(0) = a0;
03506 n->Arg<CNode*>(1) = a1;
03507 n->Arg<CScope*>(2) = a2;
03508 return n;
03509 }
03519 inline CNode* cARRAY( CNode* a0, CNode* a1, Coord_t* loc=NULL )
03520 {
03521 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eARRAY );
03522 n->Arg<CNode*>(0) = a0;
03523 n->Arg<CNode*>(1) = a1;
03524 return n;
03525 }
03536 inline CNode* cARRAY( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
03537 {
03538 CNode* n = new(heap) CNode( loc, eARRAY );
03539 n->Arg<CNode*>(0) = a0;
03540 n->Arg<CNode*>(1) = a1;
03541 return n;
03542 }
03551 inline CNode* cNET_REF( CNet* a0, Coord_t* loc=NULL )
03552 {
03553 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eNET_REF );
03554 n->Arg<CNet*>(0) = a0;
03555 return n;
03556 }
03566 inline CNode* cNET_REF( CObstack* heap, CNet* a0, Coord_t* loc=NULL )
03567 {
03568 CNode* n = new(heap) CNode( loc, eNET_REF );
03569 n->Arg<CNet*>(0) = a0;
03570 return n;
03571 }
03580 inline CNode* cVAR_REF( CVar* a0, Coord_t* loc=NULL )
03581 {
03582 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eVAR_REF );
03583 n->Arg<CVar*>(0) = a0;
03584 return n;
03585 }
03595 inline CNode* cVAR_REF( CObstack* heap, CVar* a0, Coord_t* loc=NULL )
03596 {
03597 CNode* n = new(heap) CNode( loc, eVAR_REF );
03598 n->Arg<CVar*>(0) = a0;
03599 return n;
03600 }
03609 inline CNode* cPARAM_REF( CParam* a0, Coord_t* loc=NULL )
03610 {
03611 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePARAM_REF );
03612 n->Arg<CParam*>(0) = a0;
03613 return n;
03614 }
03624 inline CNode* cPARAM_REF( CObstack* heap, CParam* a0, Coord_t* loc=NULL )
03625 {
03626 CNode* n = new(heap) CNode( loc, ePARAM_REF );
03627 n->Arg<CParam*>(0) = a0;
03628 return n;
03629 }
03638 inline CNode* cPORT_REF( CPortDir* a0, Coord_t* loc=NULL )
03639 {
03640 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePORT_REF );
03641 n->Arg<CPortDir*>(0) = a0;
03642 return n;
03643 }
03653 inline CNode* cPORT_REF( CObstack* heap, CPortDir* a0, Coord_t* loc=NULL )
03654 {
03655 CNode* n = new(heap) CNode( loc, ePORT_REF );
03656 n->Arg<CPortDir*>(0) = a0;
03657 return n;
03658 }
03667 inline CNode* cFWD_REF( CFref* a0, Coord_t* loc=NULL )
03668 {
03669 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eFWD_REF );
03670 n->Arg<CFref*>(0) = a0;
03671 return n;
03672 }
03682 inline CNode* cFWD_REF( CObstack* heap, CFref* a0, Coord_t* loc=NULL )
03683 {
03684 CNode* n = new(heap) CNode( loc, eFWD_REF );
03685 n->Arg<CFref*>(0) = a0;
03686 return n;
03687 }
03696 inline CNode* cGENVAR_REF( CGenvar* a0, Coord_t* loc=NULL )
03697 {
03698 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eGENVAR_REF );
03699 n->Arg<CGenvar*>(0) = a0;
03700 return n;
03701 }
03711 inline CNode* cGENVAR_REF( CObstack* heap, CGenvar* a0, Coord_t* loc=NULL )
03712 {
03713 CNode* n = new(heap) CNode( loc, eGENVAR_REF );
03714 n->Arg<CGenvar*>(0) = a0;
03715 return n;
03716 }
03725 inline CNode* cENUM_REF( CEnum* a0, Coord_t* loc=NULL )
03726 {
03727 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eENUM_REF );
03728 n->Arg<CEnum*>(0) = a0;
03729 return n;
03730 }
03740 inline CNode* cENUM_REF( CObstack* heap, CEnum* a0, Coord_t* loc=NULL )
03741 {
03742 CNode* n = new(heap) CNode( loc, eENUM_REF );
03743 n->Arg<CEnum*>(0) = a0;
03744 return n;
03745 }
03754 inline CNode* cTYPE_REF( CTypedef* a0, Coord_t* loc=NULL )
03755 {
03756 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eTYPE_REF );
03757 n->Arg<CTypedef*>(0) = a0;
03758 return n;
03759 }
03769 inline CNode* cTYPE_REF( CObstack* heap, CTypedef* a0, Coord_t* loc=NULL )
03770 {
03771 CNode* n = new(heap) CNode( loc, eTYPE_REF );
03772 n->Arg<CTypedef*>(0) = a0;
03773 return n;
03774 }
03784 inline CNode* cNET_DECL( CNet* a0, CNode* a1, Coord_t* loc=NULL )
03785 {
03786 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eNET_DECL );
03787 n->Arg<CNet*>(0) = a0;
03788 n->Arg<CNode*>(1) = a1;
03789 return n;
03790 }
03801 inline CNode* cNET_DECL( CObstack* heap, CNet* a0, CNode* a1, Coord_t* loc=NULL )
03802 {
03803 CNode* n = new(heap) CNode( loc, eNET_DECL );
03804 n->Arg<CNet*>(0) = a0;
03805 n->Arg<CNode*>(1) = a1;
03806 return n;
03807 }
03817 inline CNode* cVAR_DECL( CVar* a0, CNode* a1, Coord_t* loc=NULL )
03818 {
03819 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eVAR_DECL );
03820 n->Arg<CVar*>(0) = a0;
03821 n->Arg<CNode*>(1) = a1;
03822 return n;
03823 }
03834 inline CNode* cVAR_DECL( CObstack* heap, CVar* a0, CNode* a1, Coord_t* loc=NULL )
03835 {
03836 CNode* n = new(heap) CNode( loc, eVAR_DECL );
03837 n->Arg<CVar*>(0) = a0;
03838 n->Arg<CNode*>(1) = a1;
03839 return n;
03840 }
03849 inline CNode* cPARAM_DECL( CParam* a0, Coord_t* loc=NULL )
03850 {
03851 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePARAM_DECL );
03852 n->Arg<CParam*>(0) = a0;
03853 return n;
03854 }
03864 inline CNode* cPARAM_DECL( CObstack* heap, CParam* a0, Coord_t* loc=NULL )
03865 {
03866 CNode* n = new(heap) CNode( loc, ePARAM_DECL );
03867 n->Arg<CParam*>(0) = a0;
03868 return n;
03869 }
03878 inline CNode* cSPECPARAM_DECL( CParam* a0, Coord_t* loc=NULL )
03879 {
03880 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eSPECPARAM_DECL );
03881 n->Arg<CParam*>(0) = a0;
03882 return n;
03883 }
03893 inline CNode* cSPECPARAM_DECL( CObstack* heap, CParam* a0, Coord_t* loc=NULL )
03894 {
03895 CNode* n = new(heap) CNode( loc, eSPECPARAM_DECL );
03896 n->Arg<CParam*>(0) = a0;
03897 return n;
03898 }
03907 inline CNode* cPORT_DECL( CPortDir* a0, Coord_t* loc=NULL )
03908 {
03909 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePORT_DECL );
03910 n->Arg<CPortDir*>(0) = a0;
03911 return n;
03912 }
03922 inline CNode* cPORT_DECL( CObstack* heap, CPortDir* a0, Coord_t* loc=NULL )
03923 {
03924 CNode* n = new(heap) CNode( loc, ePORT_DECL );
03925 n->Arg<CPortDir*>(0) = a0;
03926 return n;
03927 }
03936 inline CNode* cGENVAR_DECL( CGenvar* a0, Coord_t* loc=NULL )
03937 {
03938 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eGENVAR_DECL );
03939 n->Arg<CGenvar*>(0) = a0;
03940 return n;
03941 }
03951 inline CNode* cGENVAR_DECL( CObstack* heap, CGenvar* a0, Coord_t* loc=NULL )
03952 {
03953 CNode* n = new(heap) CNode( loc, eGENVAR_DECL );
03954 n->Arg<CGenvar*>(0) = a0;
03955 return n;
03956 }
03965 inline CNode* cTYPEDEF_DECL( CTypedef* a0, Coord_t* loc=NULL )
03966 {
03967 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eTYPEDEF_DECL );
03968 n->Arg<CTypedef*>(0) = a0;
03969 return n;
03970 }
03980 inline CNode* cTYPEDEF_DECL( CObstack* heap, CTypedef* a0, Coord_t* loc=NULL )
03981 {
03982 CNode* n = new(heap) CNode( loc, eTYPEDEF_DECL );
03983 n->Arg<CTypedef*>(0) = a0;
03984 return n;
03985 }
03995 inline CNode* cLIST( CNode* a0, CNode* a1, Coord_t* loc=NULL )
03996 {
03997 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eLIST );
03998 n->Arg<CNode*>(0) = a0;
03999 n->Arg<CNode*>(1) = a1;
04000 return n;
04001 }
04012 inline CNode* cLIST( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04013 {
04014 CNode* n = new(heap) CNode( loc, eLIST );
04015 n->Arg<CNode*>(0) = a0;
04016 n->Arg<CNode*>(1) = a1;
04017 return n;
04018 }
04028 inline CNode* cRANGE( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04029 {
04030 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eRANGE );
04031 n->Arg<CNode*>(0) = a0;
04032 n->Arg<CNode*>(1) = a1;
04033 return n;
04034 }
04045 inline CNode* cRANGE( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04046 {
04047 CNode* n = new(heap) CNode( loc, eRANGE );
04048 n->Arg<CNode*>(0) = a0;
04049 n->Arg<CNode*>(1) = a1;
04050 return n;
04051 }
04061 inline CNode* cSLICE( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04062 {
04063 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eSLICE );
04064 n->Arg<CNode*>(0) = a0;
04065 n->Arg<CNode*>(1) = a1;
04066 return n;
04067 }
04078 inline CNode* cSLICE( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04079 {
04080 CNode* n = new(heap) CNode( loc, eSLICE );
04081 n->Arg<CNode*>(0) = a0;
04082 n->Arg<CNode*>(1) = a1;
04083 return n;
04084 }
04094 inline CNode* cPSLICE( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04095 {
04096 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePSLICE );
04097 n->Arg<CNode*>(0) = a0;
04098 n->Arg<CNode*>(1) = a1;
04099 return n;
04100 }
04111 inline CNode* cPSLICE( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04112 {
04113 CNode* n = new(heap) CNode( loc, ePSLICE );
04114 n->Arg<CNode*>(0) = a0;
04115 n->Arg<CNode*>(1) = a1;
04116 return n;
04117 }
04127 inline CNode* cMSLICE( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04128 {
04129 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eMSLICE );
04130 n->Arg<CNode*>(0) = a0;
04131 n->Arg<CNode*>(1) = a1;
04132 return n;
04133 }
04144 inline CNode* cMSLICE( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04145 {
04146 CNode* n = new(heap) CNode( loc, eMSLICE );
04147 n->Arg<CNode*>(0) = a0;
04148 n->Arg<CNode*>(1) = a1;
04149 return n;
04150 }
04159 inline CNode* cCVRI( CNode* a0, Coord_t* loc=NULL )
04160 {
04161 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eCVRI );
04162 n->Arg<CNode*>(0) = a0;
04163 return n;
04164 }
04174 inline CNode* cCVRI( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
04175 {
04176 CNode* n = new(heap) CNode( loc, eCVRI );
04177 n->Arg<CNode*>(0) = a0;
04178 return n;
04179 }
04188 inline CNode* cCVIR( CNode* a0, Coord_t* loc=NULL )
04189 {
04190 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eCVIR );
04191 n->Arg<CNode*>(0) = a0;
04192 return n;
04193 }
04203 inline CNode* cCVIR( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
04204 {
04205 CNode* n = new(heap) CNode( loc, eCVIR );
04206 n->Arg<CNode*>(0) = a0;
04207 return n;
04208 }
04218 inline CNode* cREP( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04219 {
04220 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eREP );
04221 n->Arg<CNode*>(0) = a0;
04222 n->Arg<CNode*>(1) = a1;
04223 return n;
04224 }
04235 inline CNode* cREP( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04236 {
04237 CNode* n = new(heap) CNode( loc, eREP );
04238 n->Arg<CNode*>(0) = a0;
04239 n->Arg<CNode*>(1) = a1;
04240 return n;
04241 }
04251 inline CNode* cCAT( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04252 {
04253 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eCAT );
04254 n->Arg<CNode*>(0) = a0;
04255 n->Arg<CNode*>(1) = a1;
04256 return n;
04257 }
04268 inline CNode* cCAT( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04269 {
04270 CNode* n = new(heap) CNode( loc, eCAT );
04271 n->Arg<CNode*>(0) = a0;
04272 n->Arg<CNode*>(1) = a1;
04273 return n;
04274 }
04283 inline CNode* cUCAT( CNode* a0, Coord_t* loc=NULL )
04284 {
04285 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eUCAT );
04286 n->Arg<CNode*>(0) = a0;
04287 return n;
04288 }
04298 inline CNode* cUCAT( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
04299 {
04300 CNode* n = new(heap) CNode( loc, eUCAT );
04301 n->Arg<CNode*>(0) = a0;
04302 return n;
04303 }
04312 inline CNode* cCOM( CNode* a0, Coord_t* loc=NULL )
04313 {
04314 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eCOM );
04315 n->Arg<CNode*>(0) = a0;
04316 return n;
04317 }
04327 inline CNode* cCOM( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
04328 {
04329 CNode* n = new(heap) CNode( loc, eCOM );
04330 n->Arg<CNode*>(0) = a0;
04331 return n;
04332 }
04341 inline CNode* cNEG( CNode* a0, Coord_t* loc=NULL )
04342 {
04343 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eNEG );
04344 n->Arg<CNode*>(0) = a0;
04345 return n;
04346 }
04356 inline CNode* cNEG( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
04357 {
04358 CNode* n = new(heap) CNode( loc, eNEG );
04359 n->Arg<CNode*>(0) = a0;
04360 return n;
04361 }
04370 inline CNode* cPLUS( CNode* a0, Coord_t* loc=NULL )
04371 {
04372 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePLUS );
04373 n->Arg<CNode*>(0) = a0;
04374 return n;
04375 }
04385 inline CNode* cPLUS( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
04386 {
04387 CNode* n = new(heap) CNode( loc, ePLUS );
04388 n->Arg<CNode*>(0) = a0;
04389 return n;
04390 }
04399 inline CNode* cNOT( CNode* a0, Coord_t* loc=NULL )
04400 {
04401 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eNOT );
04402 n->Arg<CNode*>(0) = a0;
04403 return n;
04404 }
04414 inline CNode* cNOT( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
04415 {
04416 CNode* n = new(heap) CNode( loc, eNOT );
04417 n->Arg<CNode*>(0) = a0;
04418 return n;
04419 }
04429 inline CNode* cGT( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04430 {
04431 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eGT );
04432 n->Arg<CNode*>(0) = a0;
04433 n->Arg<CNode*>(1) = a1;
04434 return n;
04435 }
04446 inline CNode* cGT( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04447 {
04448 CNode* n = new(heap) CNode( loc, eGT );
04449 n->Arg<CNode*>(0) = a0;
04450 n->Arg<CNode*>(1) = a1;
04451 return n;
04452 }
04462 inline CNode* cGE( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04463 {
04464 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eGE );
04465 n->Arg<CNode*>(0) = a0;
04466 n->Arg<CNode*>(1) = a1;
04467 return n;
04468 }
04479 inline CNode* cGE( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04480 {
04481 CNode* n = new(heap) CNode( loc, eGE );
04482 n->Arg<CNode*>(0) = a0;
04483 n->Arg<CNode*>(1) = a1;
04484 return n;
04485 }
04495 inline CNode* cLT( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04496 {
04497 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eLT );
04498 n->Arg<CNode*>(0) = a0;
04499 n->Arg<CNode*>(1) = a1;
04500 return n;
04501 }
04512 inline CNode* cLT( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04513 {
04514 CNode* n = new(heap) CNode( loc, eLT );
04515 n->Arg<CNode*>(0) = a0;
04516 n->Arg<CNode*>(1) = a1;
04517 return n;
04518 }
04528 inline CNode* cLE( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04529 {
04530 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eLE );
04531 n->Arg<CNode*>(0) = a0;
04532 n->Arg<CNode*>(1) = a1;
04533 return n;
04534 }
04545 inline CNode* cLE( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04546 {
04547 CNode* n = new(heap) CNode( loc, eLE );
04548 n->Arg<CNode*>(0) = a0;
04549 n->Arg<CNode*>(1) = a1;
04550 return n;
04551 }
04561 inline CNode* cLAND( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04562 {
04563 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eLAND );
04564 n->Arg<CNode*>(0) = a0;
04565 n->Arg<CNode*>(1) = a1;
04566 return n;
04567 }
04578 inline CNode* cLAND( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04579 {
04580 CNode* n = new(heap) CNode( loc, eLAND );
04581 n->Arg<CNode*>(0) = a0;
04582 n->Arg<CNode*>(1) = a1;
04583 return n;
04584 }
04594 inline CNode* cLOR( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04595 {
04596 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eLOR );
04597 n->Arg<CNode*>(0) = a0;
04598 n->Arg<CNode*>(1) = a1;
04599 return n;
04600 }
04611 inline CNode* cLOR( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04612 {
04613 CNode* n = new(heap) CNode( loc, eLOR );
04614 n->Arg<CNode*>(0) = a0;
04615 n->Arg<CNode*>(1) = a1;
04616 return n;
04617 }
04627 inline CNode* cCEQ( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04628 {
04629 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eCEQ );
04630 n->Arg<CNode*>(0) = a0;
04631 n->Arg<CNode*>(1) = a1;
04632 return n;
04633 }
04644 inline CNode* cCEQ( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04645 {
04646 CNode* n = new(heap) CNode( loc, eCEQ );
04647 n->Arg<CNode*>(0) = a0;
04648 n->Arg<CNode*>(1) = a1;
04649 return n;
04650 }
04660 inline CNode* cCNE( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04661 {
04662 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eCNE );
04663 n->Arg<CNode*>(0) = a0;
04664 n->Arg<CNode*>(1) = a1;
04665 return n;
04666 }
04677 inline CNode* cCNE( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04678 {
04679 CNode* n = new(heap) CNode( loc, eCNE );
04680 n->Arg<CNode*>(0) = a0;
04681 n->Arg<CNode*>(1) = a1;
04682 return n;
04683 }
04693 inline CNode* cEQ( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04694 {
04695 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eEQ );
04696 n->Arg<CNode*>(0) = a0;
04697 n->Arg<CNode*>(1) = a1;
04698 return n;
04699 }
04710 inline CNode* cEQ( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04711 {
04712 CNode* n = new(heap) CNode( loc, eEQ );
04713 n->Arg<CNode*>(0) = a0;
04714 n->Arg<CNode*>(1) = a1;
04715 return n;
04716 }
04726 inline CNode* cNE( CNode* a0, CNode* a1, Coord_t* loc=NULL )
04727 {
04728 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eNE );
04729 n->Arg<CNode*>(0) = a0;
04730 n->Arg<CNode*>(1) = a1;
04731 return n;
04732 }
04743 inline CNode* cNE( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
04744 {
04745 CNode* n = new(heap) CNode( loc, eNE );
04746 n->Arg<CNode*>(0) = a0;
04747 n->Arg<CNode*>(1) = a1;
04748 return n;
04749 }
04758 inline CNode* cRAND( CNode* a0, Coord_t* loc=NULL )
04759 {
04760 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eRAND );
04761 n->Arg<CNode*>(0) = a0;
04762 return n;
04763 }
04773 inline CNode* cRAND( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
04774 {
04775 CNode* n = new(heap) CNode( loc, eRAND );
04776 n->Arg<CNode*>(0) = a0;
04777 return n;
04778 }
04787 inline CNode* cRNAND( CNode* a0, Coord_t* loc=NULL )
04788 {
04789 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eRNAND );
04790 n->Arg<CNode*>(0) = a0;
04791 return n;
04792 }
04802 inline CNode* cRNAND( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
04803 {
04804 CNode* n = new(heap) CNode( loc, eRNAND );
04805 n->Arg<CNode*>(0) = a0;
04806 return n;
04807 }
04816 inline CNode* cROR( CNode* a0, Coord_t* loc=NULL )
04817 {
04818 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eROR );
04819 n->Arg<CNode*>(0) = a0;
04820 return n;
04821 }
04831 inline CNode* cROR( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
04832 {
04833 CNode* n = new(heap) CNode( loc, eROR );
04834 n->Arg<CNode*>(0) = a0;
04835 return n;
04836 }
04845 inline CNode* cRNOR( CNode* a0, Coord_t* loc=NULL )
04846 {
04847 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eRNOR );
04848 n->Arg<CNode*>(0) = a0;
04849 return n;
04850 }
04860 inline CNode* cRNOR( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
04861 {
04862 CNode* n = new(heap) CNode( loc, eRNOR );
04863 n->Arg<CNode*>(0) = a0;
04864 return n;
04865 }
04874 inline CNode* cRXOR( CNode* a0, Coord_t* loc=NULL )
04875 {
04876 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eRXOR );
04877 n->Arg<CNode*>(0) = a0;
04878 return n;
04879 }
04889 inline CNode* cRXOR( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
04890 {
04891 CNode* n = new(heap) CNode( loc, eRXOR );
04892 n->Arg<CNode*>(0) = a0;
04893 return n;
04894 }
04903 inline CNode* cRXNOR( CNode* a0, Coord_t* loc=NULL )
04904 {
04905 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eRXNOR );
04906 n->Arg<CNode*>(0) = a0;
04907 return n;
04908 }
04918 inline CNode* cRXNOR( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
04919 {
04920 CNode* n = new(heap) CNode( loc, eRXNOR );
04921 n->Arg<CNode*>(0) = a0;
04922 return n;
04923 }
04934 inline CNode* cHOOK( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
04935 {
04936 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eHOOK );
04937 n->Arg<CNode*>(0) = a0;
04938 n->Arg<CNode*>(1) = a1;
04939 n->Arg<CNode*>(2) = a2;
04940 return n;
04941 }
04953 inline CNode* cHOOK( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
04954 {
04955 CNode* n = new(heap) CNode( loc, eHOOK );
04956 n->Arg<CNode*>(0) = a0;
04957 n->Arg<CNode*>(1) = a1;
04958 n->Arg<CNode*>(2) = a2;
04959 return n;
04960 }
04969 inline CNode* cINIT( CNode* a0, Coord_t* loc=NULL )
04970 {
04971 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eINIT );
04972 n->Arg<CNode*>(0) = a0;
04973 return n;
04974 }
04984 inline CNode* cINIT( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
04985 {
04986 CNode* n = new(heap) CNode( loc, eINIT );
04987 n->Arg<CNode*>(0) = a0;
04988 return n;
04989 }
04998 inline CNode* cALWAYS( CNode* a0, Coord_t* loc=NULL )
04999 {
05000 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eALWAYS );
05001 n->Arg<CNode*>(0) = a0;
05002 return n;
05003 }
05013 inline CNode* cALWAYS( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
05014 {
05015 CNode* n = new(heap) CNode( loc, eALWAYS );
05016 n->Arg<CNode*>(0) = a0;
05017 return n;
05018 }
05027 inline CNode* cALWAYS_LATCH( CNode* a0, Coord_t* loc=NULL )
05028 {
05029 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eALWAYS_LATCH );
05030 n->Arg<CNode*>(0) = a0;
05031 return n;
05032 }
05042 inline CNode* cALWAYS_LATCH( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
05043 {
05044 CNode* n = new(heap) CNode( loc, eALWAYS_LATCH );
05045 n->Arg<CNode*>(0) = a0;
05046 return n;
05047 }
05056 inline CNode* cALWAYS_FF( CNode* a0, Coord_t* loc=NULL )
05057 {
05058 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eALWAYS_FF );
05059 n->Arg<CNode*>(0) = a0;
05060 return n;
05061 }
05071 inline CNode* cALWAYS_FF( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
05072 {
05073 CNode* n = new(heap) CNode( loc, eALWAYS_FF );
05074 n->Arg<CNode*>(0) = a0;
05075 return n;
05076 }
05085 inline CNode* cALWAYS_COMB( CNode* a0, Coord_t* loc=NULL )
05086 {
05087 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eALWAYS_COMB );
05088 n->Arg<CNode*>(0) = a0;
05089 return n;
05090 }
05100 inline CNode* cALWAYS_COMB( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
05101 {
05102 CNode* n = new(heap) CNode( loc, eALWAYS_COMB );
05103 n->Arg<CNode*>(0) = a0;
05104 return n;
05105 }
05115 inline CNode* cEVENT( CNode* a0, CNode* a1, Coord_t* loc=NULL )
05116 {
05117 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eEVENT );
05118 n->Arg<CNode*>(0) = a0;
05119 n->Arg<CNode*>(1) = a1;
05120 return n;
05121 }
05132 inline CNode* cEVENT( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
05133 {
05134 CNode* n = new(heap) CNode( loc, eEVENT );
05135 n->Arg<CNode*>(0) = a0;
05136 n->Arg<CNode*>(1) = a1;
05137 return n;
05138 }
05148 inline CNode* cBLOCK_REF( CBlock* a0, CNode* a1, Coord_t* loc=NULL )
05149 {
05150 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eBLOCK_REF );
05151 n->Arg<CBlock*>(0) = a0;
05152 n->Arg<CNode*>(1) = a1;
05153 return n;
05154 }
05165 inline CNode* cBLOCK_REF( CObstack* heap, CBlock* a0, CNode* a1, Coord_t* loc=NULL )
05166 {
05167 CNode* n = new(heap) CNode( loc, eBLOCK_REF );
05168 n->Arg<CBlock*>(0) = a0;
05169 n->Arg<CNode*>(1) = a1;
05170 return n;
05171 }
05181 inline CNode* cSPECIFY_REF( CSpecify* a0, CNode* a1, Coord_t* loc=NULL )
05182 {
05183 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eSPECIFY_REF );
05184 n->Arg<CSpecify*>(0) = a0;
05185 n->Arg<CNode*>(1) = a1;
05186 return n;
05187 }
05198 inline CNode* cSPECIFY_REF( CObstack* heap, CSpecify* a0, CNode* a1, Coord_t* loc=NULL )
05199 {
05200 CNode* n = new(heap) CNode( loc, eSPECIFY_REF );
05201 n->Arg<CSpecify*>(0) = a0;
05202 n->Arg<CNode*>(1) = a1;
05203 return n;
05204 }
05215 inline CNode* cASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05216 {
05217 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eASSIGN );
05218 n->Arg<CNode*>(0) = a0;
05219 n->Arg<CNode*>(1) = a1;
05220 n->Arg<CNode*>(2) = a2;
05221 return n;
05222 }
05234 inline CNode* cASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05235 {
05236 CNode* n = new(heap) CNode( loc, eASSIGN );
05237 n->Arg<CNode*>(0) = a0;
05238 n->Arg<CNode*>(1) = a1;
05239 n->Arg<CNode*>(2) = a2;
05240 return n;
05241 }
05252 inline CNode* cADD_ASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05253 {
05254 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eADD_ASSIGN );
05255 n->Arg<CNode*>(0) = a0;
05256 n->Arg<CNode*>(1) = a1;
05257 n->Arg<CNode*>(2) = a2;
05258 return n;
05259 }
05271 inline CNode* cADD_ASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05272 {
05273 CNode* n = new(heap) CNode( loc, eADD_ASSIGN );
05274 n->Arg<CNode*>(0) = a0;
05275 n->Arg<CNode*>(1) = a1;
05276 n->Arg<CNode*>(2) = a2;
05277 return n;
05278 }
05289 inline CNode* cSUB_ASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05290 {
05291 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eSUB_ASSIGN );
05292 n->Arg<CNode*>(0) = a0;
05293 n->Arg<CNode*>(1) = a1;
05294 n->Arg<CNode*>(2) = a2;
05295 return n;
05296 }
05308 inline CNode* cSUB_ASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05309 {
05310 CNode* n = new(heap) CNode( loc, eSUB_ASSIGN );
05311 n->Arg<CNode*>(0) = a0;
05312 n->Arg<CNode*>(1) = a1;
05313 n->Arg<CNode*>(2) = a2;
05314 return n;
05315 }
05326 inline CNode* cMUL_ASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05327 {
05328 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eMUL_ASSIGN );
05329 n->Arg<CNode*>(0) = a0;
05330 n->Arg<CNode*>(1) = a1;
05331 n->Arg<CNode*>(2) = a2;
05332 return n;
05333 }
05345 inline CNode* cMUL_ASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05346 {
05347 CNode* n = new(heap) CNode( loc, eMUL_ASSIGN );
05348 n->Arg<CNode*>(0) = a0;
05349 n->Arg<CNode*>(1) = a1;
05350 n->Arg<CNode*>(2) = a2;
05351 return n;
05352 }
05363 inline CNode* cDIV_ASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05364 {
05365 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eDIV_ASSIGN );
05366 n->Arg<CNode*>(0) = a0;
05367 n->Arg<CNode*>(1) = a1;
05368 n->Arg<CNode*>(2) = a2;
05369 return n;
05370 }
05382 inline CNode* cDIV_ASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05383 {
05384 CNode* n = new(heap) CNode( loc, eDIV_ASSIGN );
05385 n->Arg<CNode*>(0) = a0;
05386 n->Arg<CNode*>(1) = a1;
05387 n->Arg<CNode*>(2) = a2;
05388 return n;
05389 }
05400 inline CNode* cMOD_ASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05401 {
05402 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eMOD_ASSIGN );
05403 n->Arg<CNode*>(0) = a0;
05404 n->Arg<CNode*>(1) = a1;
05405 n->Arg<CNode*>(2) = a2;
05406 return n;
05407 }
05419 inline CNode* cMOD_ASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05420 {
05421 CNode* n = new(heap) CNode( loc, eMOD_ASSIGN );
05422 n->Arg<CNode*>(0) = a0;
05423 n->Arg<CNode*>(1) = a1;
05424 n->Arg<CNode*>(2) = a2;
05425 return n;
05426 }
05437 inline CNode* cAND_ASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05438 {
05439 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eAND_ASSIGN );
05440 n->Arg<CNode*>(0) = a0;
05441 n->Arg<CNode*>(1) = a1;
05442 n->Arg<CNode*>(2) = a2;
05443 return n;
05444 }
05456 inline CNode* cAND_ASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05457 {
05458 CNode* n = new(heap) CNode( loc, eAND_ASSIGN );
05459 n->Arg<CNode*>(0) = a0;
05460 n->Arg<CNode*>(1) = a1;
05461 n->Arg<CNode*>(2) = a2;
05462 return n;
05463 }
05474 inline CNode* cOR_ASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05475 {
05476 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eOR_ASSIGN );
05477 n->Arg<CNode*>(0) = a0;
05478 n->Arg<CNode*>(1) = a1;
05479 n->Arg<CNode*>(2) = a2;
05480 return n;
05481 }
05493 inline CNode* cOR_ASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05494 {
05495 CNode* n = new(heap) CNode( loc, eOR_ASSIGN );
05496 n->Arg<CNode*>(0) = a0;
05497 n->Arg<CNode*>(1) = a1;
05498 n->Arg<CNode*>(2) = a2;
05499 return n;
05500 }
05511 inline CNode* cXOR_ASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05512 {
05513 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eXOR_ASSIGN );
05514 n->Arg<CNode*>(0) = a0;
05515 n->Arg<CNode*>(1) = a1;
05516 n->Arg<CNode*>(2) = a2;
05517 return n;
05518 }
05530 inline CNode* cXOR_ASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05531 {
05532 CNode* n = new(heap) CNode( loc, eXOR_ASSIGN );
05533 n->Arg<CNode*>(0) = a0;
05534 n->Arg<CNode*>(1) = a1;
05535 n->Arg<CNode*>(2) = a2;
05536 return n;
05537 }
05548 inline CNode* cLSH_ASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05549 {
05550 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eLSH_ASSIGN );
05551 n->Arg<CNode*>(0) = a0;
05552 n->Arg<CNode*>(1) = a1;
05553 n->Arg<CNode*>(2) = a2;
05554 return n;
05555 }
05567 inline CNode* cLSH_ASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05568 {
05569 CNode* n = new(heap) CNode( loc, eLSH_ASSIGN );
05570 n->Arg<CNode*>(0) = a0;
05571 n->Arg<CNode*>(1) = a1;
05572 n->Arg<CNode*>(2) = a2;
05573 return n;
05574 }
05585 inline CNode* cRSH_ASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05586 {
05587 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eRSH_ASSIGN );
05588 n->Arg<CNode*>(0) = a0;
05589 n->Arg<CNode*>(1) = a1;
05590 n->Arg<CNode*>(2) = a2;
05591 return n;
05592 }
05604 inline CNode* cRSH_ASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05605 {
05606 CNode* n = new(heap) CNode( loc, eRSH_ASSIGN );
05607 n->Arg<CNode*>(0) = a0;
05608 n->Arg<CNode*>(1) = a1;
05609 n->Arg<CNode*>(2) = a2;
05610 return n;
05611 }
05622 inline CNode* cLSHA_ASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05623 {
05624 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eLSHA_ASSIGN );
05625 n->Arg<CNode*>(0) = a0;
05626 n->Arg<CNode*>(1) = a1;
05627 n->Arg<CNode*>(2) = a2;
05628 return n;
05629 }
05641 inline CNode* cLSHA_ASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05642 {
05643 CNode* n = new(heap) CNode( loc, eLSHA_ASSIGN );
05644 n->Arg<CNode*>(0) = a0;
05645 n->Arg<CNode*>(1) = a1;
05646 n->Arg<CNode*>(2) = a2;
05647 return n;
05648 }
05659 inline CNode* cRSHA_ASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05660 {
05661 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eRSHA_ASSIGN );
05662 n->Arg<CNode*>(0) = a0;
05663 n->Arg<CNode*>(1) = a1;
05664 n->Arg<CNode*>(2) = a2;
05665 return n;
05666 }
05678 inline CNode* cRSHA_ASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05679 {
05680 CNode* n = new(heap) CNode( loc, eRSHA_ASSIGN );
05681 n->Arg<CNode*>(0) = a0;
05682 n->Arg<CNode*>(1) = a1;
05683 n->Arg<CNode*>(2) = a2;
05684 return n;
05685 }
05695 inline CNode* cFORCE( CNode* a0, CNode* a1, Coord_t* loc=NULL )
05696 {
05697 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eFORCE );
05698 n->Arg<CNode*>(0) = a0;
05699 n->Arg<CNode*>(1) = a1;
05700 return n;
05701 }
05712 inline CNode* cFORCE( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
05713 {
05714 CNode* n = new(heap) CNode( loc, eFORCE );
05715 n->Arg<CNode*>(0) = a0;
05716 n->Arg<CNode*>(1) = a1;
05717 return n;
05718 }
05727 inline CNode* cRELEASE( CNode* a0, Coord_t* loc=NULL )
05728 {
05729 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eRELEASE );
05730 n->Arg<CNode*>(0) = a0;
05731 return n;
05732 }
05742 inline CNode* cRELEASE( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
05743 {
05744 CNode* n = new(heap) CNode( loc, eRELEASE );
05745 n->Arg<CNode*>(0) = a0;
05746 return n;
05747 }
05758 inline CNode* cNBASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05759 {
05760 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eNBASSIGN );
05761 n->Arg<CNode*>(0) = a0;
05762 n->Arg<CNode*>(1) = a1;
05763 n->Arg<CNode*>(2) = a2;
05764 return n;
05765 }
05777 inline CNode* cNBASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05778 {
05779 CNode* n = new(heap) CNode( loc, eNBASSIGN );
05780 n->Arg<CNode*>(0) = a0;
05781 n->Arg<CNode*>(1) = a1;
05782 n->Arg<CNode*>(2) = a2;
05783 return n;
05784 }
05793 inline CNode* cPOSEDGE( CNode* a0, Coord_t* loc=NULL )
05794 {
05795 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePOSEDGE );
05796 n->Arg<CNode*>(0) = a0;
05797 return n;
05798 }
05808 inline CNode* cPOSEDGE( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
05809 {
05810 CNode* n = new(heap) CNode( loc, ePOSEDGE );
05811 n->Arg<CNode*>(0) = a0;
05812 return n;
05813 }
05822 inline CNode* cNEGEDGE( CNode* a0, Coord_t* loc=NULL )
05823 {
05824 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eNEGEDGE );
05825 n->Arg<CNode*>(0) = a0;
05826 return n;
05827 }
05837 inline CNode* cNEGEDGE( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
05838 {
05839 CNode* n = new(heap) CNode( loc, eNEGEDGE );
05840 n->Arg<CNode*>(0) = a0;
05841 return n;
05842 }
05852 inline CNode* cEDGE( CNode* a0, Edge_t a1, Coord_t* loc=NULL )
05853 {
05854 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eEDGE );
05855 n->Arg<CNode*>(0) = a0;
05856 n->Arg<Edge_t>(1) = a1;
05857 return n;
05858 }
05869 inline CNode* cEDGE( CObstack* heap, CNode* a0, Edge_t a1, Coord_t* loc=NULL )
05870 {
05871 CNode* n = new(heap) CNode( loc, eEDGE );
05872 n->Arg<CNode*>(0) = a0;
05873 n->Arg<Edge_t>(1) = a1;
05874 return n;
05875 }
05885 inline CNode* cEVOR( CNode* a0, CNode* a1, Coord_t* loc=NULL )
05886 {
05887 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eEVOR );
05888 n->Arg<CNode*>(0) = a0;
05889 n->Arg<CNode*>(1) = a1;
05890 return n;
05891 }
05902 inline CNode* cEVOR( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
05903 {
05904 CNode* n = new(heap) CNode( loc, eEVOR );
05905 n->Arg<CNode*>(0) = a0;
05906 n->Arg<CNode*>(1) = a1;
05907 return n;
05908 }
05918 inline CNode* cDELAY( CNode* a0, CNode* a1, Coord_t* loc=NULL )
05919 {
05920 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eDELAY );
05921 n->Arg<CNode*>(0) = a0;
05922 n->Arg<CNode*>(1) = a1;
05923 return n;
05924 }
05935 inline CNode* cDELAY( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
05936 {
05937 CNode* n = new(heap) CNode( loc, eDELAY );
05938 n->Arg<CNode*>(0) = a0;
05939 n->Arg<CNode*>(1) = a1;
05940 return n;
05941 }
05952 inline CNode* cMTM( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05953 {
05954 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eMTM );
05955 n->Arg<CNode*>(0) = a0;
05956 n->Arg<CNode*>(1) = a1;
05957 n->Arg<CNode*>(2) = a2;
05958 return n;
05959 }
05971 inline CNode* cMTM( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05972 {
05973 CNode* n = new(heap) CNode( loc, eMTM );
05974 n->Arg<CNode*>(0) = a0;
05975 n->Arg<CNode*>(1) = a1;
05976 n->Arg<CNode*>(2) = a2;
05977 return n;
05978 }
05989 inline CNode* cIF( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
05990 {
05991 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eIF );
05992 n->Arg<CNode*>(0) = a0;
05993 n->Arg<CNode*>(1) = a1;
05994 n->Arg<CNode*>(2) = a2;
05995 return n;
05996 }
06008 inline CNode* cIF( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
06009 {
06010 CNode* n = new(heap) CNode( loc, eIF );
06011 n->Arg<CNode*>(0) = a0;
06012 n->Arg<CNode*>(1) = a1;
06013 n->Arg<CNode*>(2) = a2;
06014 return n;
06015 }
06024 inline CNode* cFOREVER( CNode* a0, Coord_t* loc=NULL )
06025 {
06026 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eFOREVER );
06027 n->Arg<CNode*>(0) = a0;
06028 return n;
06029 }
06039 inline CNode* cFOREVER( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
06040 {
06041 CNode* n = new(heap) CNode( loc, eFOREVER );
06042 n->Arg<CNode*>(0) = a0;
06043 return n;
06044 }
06054 inline CNode* cREPEAT( CNode* a0, CNode* a1, Coord_t* loc=NULL )
06055 {
06056 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eREPEAT );
06057 n->Arg<CNode*>(0) = a0;
06058 n->Arg<CNode*>(1) = a1;
06059 return n;
06060 }
06071 inline CNode* cREPEAT( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
06072 {
06073 CNode* n = new(heap) CNode( loc, eREPEAT );
06074 n->Arg<CNode*>(0) = a0;
06075 n->Arg<CNode*>(1) = a1;
06076 return n;
06077 }
06087 inline CNode* cWHILE( CNode* a0, CNode* a1, Coord_t* loc=NULL )
06088 {
06089 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eWHILE );
06090 n->Arg<CNode*>(0) = a0;
06091 n->Arg<CNode*>(1) = a1;
06092 return n;
06093 }
06104 inline CNode* cWHILE( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
06105 {
06106 CNode* n = new(heap) CNode( loc, eWHILE );
06107 n->Arg<CNode*>(0) = a0;
06108 n->Arg<CNode*>(1) = a1;
06109 return n;
06110 }
06120 inline CNode* cWAIT( CNode* a0, CNode* a1, Coord_t* loc=NULL )
06121 {
06122 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eWAIT );
06123 n->Arg<CNode*>(0) = a0;
06124 n->Arg<CNode*>(1) = a1;
06125 return n;
06126 }
06137 inline CNode* cWAIT( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
06138 {
06139 CNode* n = new(heap) CNode( loc, eWAIT );
06140 n->Arg<CNode*>(0) = a0;
06141 n->Arg<CNode*>(1) = a1;
06142 return n;
06143 }
06155 inline CNode* cFOR( CNode* a0, CNode* a1, CNode* a2, CNode* a3, Coord_t* loc=NULL )
06156 {
06157 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eFOR );
06158 n->Arg<CNode*>(0) = a0;
06159 n->Arg<CNode*>(1) = a1;
06160 n->Arg<CNode*>(2) = a2;
06161 n->Arg<CNode*>(3) = a3;
06162 return n;
06163 }
06176 inline CNode* cFOR( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, CNode* a3, Coord_t* loc=NULL )
06177 {
06178 CNode* n = new(heap) CNode( loc, eFOR );
06179 n->Arg<CNode*>(0) = a0;
06180 n->Arg<CNode*>(1) = a1;
06181 n->Arg<CNode*>(2) = a2;
06182 n->Arg<CNode*>(3) = a3;
06183 return n;
06184 }
06194 inline CNode* cCASE( CNode* a0, CNode* a1, Coord_t* loc=NULL )
06195 {
06196 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eCASE );
06197 n->Arg<CNode*>(0) = a0;
06198 n->Arg<CNode*>(1) = a1;
06199 return n;
06200 }
06211 inline CNode* cCASE( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
06212 {
06213 CNode* n = new(heap) CNode( loc, eCASE );
06214 n->Arg<CNode*>(0) = a0;
06215 n->Arg<CNode*>(1) = a1;
06216 return n;
06217 }
06227 inline CNode* cCASEX( CNode* a0, CNode* a1, Coord_t* loc=NULL )
06228 {
06229 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eCASEX );
06230 n->Arg<CNode*>(0) = a0;
06231 n->Arg<CNode*>(1) = a1;
06232 return n;
06233 }
06244 inline CNode* cCASEX( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
06245 {
06246 CNode* n = new(heap) CNode( loc, eCASEX );
06247 n->Arg<CNode*>(0) = a0;
06248 n->Arg<CNode*>(1) = a1;
06249 return n;
06250 }
06260 inline CNode* cCASEZ( CNode* a0, CNode* a1, Coord_t* loc=NULL )
06261 {
06262 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eCASEZ );
06263 n->Arg<CNode*>(0) = a0;
06264 n->Arg<CNode*>(1) = a1;
06265 return n;
06266 }
06277 inline CNode* cCASEZ( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
06278 {
06279 CNode* n = new(heap) CNode( loc, eCASEZ );
06280 n->Arg<CNode*>(0) = a0;
06281 n->Arg<CNode*>(1) = a1;
06282 return n;
06283 }
06293 inline CNode* cCASEITEM( CNode* a0, CNode* a1, Coord_t* loc=NULL )
06294 {
06295 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eCASEITEM );
06296 n->Arg<CNode*>(0) = a0;
06297 n->Arg<CNode*>(1) = a1;
06298 return n;
06299 }
06310 inline CNode* cCASEITEM( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
06311 {
06312 CNode* n = new(heap) CNode( loc, eCASEITEM );
06313 n->Arg<CNode*>(0) = a0;
06314 n->Arg<CNode*>(1) = a1;
06315 return n;
06316 }
06328 inline CNode* cCASSIGN( StrengthPair_t* a0, CNode* a1, CNode* a2, CNode* a3, Coord_t* loc=NULL )
06329 {
06330 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eCASSIGN );
06331 n->Arg<StrengthPair_t*>(0) = a0;
06332 n->Arg<CNode*>(1) = a1;
06333 n->Arg<CNode*>(2) = a2;
06334 n->Arg<CNode*>(3) = a3;
06335 return n;
06336 }
06349 inline CNode* cCASSIGN( CObstack* heap, StrengthPair_t* a0, CNode* a1, CNode* a2, CNode* a3, Coord_t* loc=NULL )
06350 {
06351 CNode* n = new(heap) CNode( loc, eCASSIGN );
06352 n->Arg<StrengthPair_t*>(0) = a0;
06353 n->Arg<CNode*>(1) = a1;
06354 n->Arg<CNode*>(2) = a2;
06355 n->Arg<CNode*>(3) = a3;
06356 return n;
06357 }
06367 inline CNode* cARG( CSymbol* a0, CNode* a1, Coord_t* loc=NULL )
06368 {
06369 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eARG );
06370 n->Arg<CSymbol*>(0) = a0;
06371 n->Arg<CNode*>(1) = a1;
06372 return n;
06373 }
06384 inline CNode* cARG( CObstack* heap, CSymbol* a0, CNode* a1, Coord_t* loc=NULL )
06385 {
06386 CNode* n = new(heap) CNode( loc, eARG );
06387 n->Arg<CSymbol*>(0) = a0;
06388 n->Arg<CNode*>(1) = a1;
06389 return n;
06390 }
06399 inline CNode* cFUNCTION_DEF( CFunction* a0, Coord_t* loc=NULL )
06400 {
06401 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eFUNCTION_DEF );
06402 n->Arg<CFunction*>(0) = a0;
06403 return n;
06404 }
06414 inline CNode* cFUNCTION_DEF( CObstack* heap, CFunction* a0, Coord_t* loc=NULL )
06415 {
06416 CNode* n = new(heap) CNode( loc, eFUNCTION_DEF );
06417 n->Arg<CFunction*>(0) = a0;
06418 return n;
06419 }
06428 inline CNode* cMODULE_DEF( CModule* a0, Coord_t* loc=NULL )
06429 {
06430 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eMODULE_DEF );
06431 n->Arg<CModule*>(0) = a0;
06432 return n;
06433 }
06443 inline CNode* cMODULE_DEF( CObstack* heap, CModule* a0, Coord_t* loc=NULL )
06444 {
06445 CNode* n = new(heap) CNode( loc, eMODULE_DEF );
06446 n->Arg<CModule*>(0) = a0;
06447 return n;
06448 }
06458 inline CNode* cREPEAT_CONTROL( CNode* a0, CNode* a1, Coord_t* loc=NULL )
06459 {
06460 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eREPEAT_CONTROL );
06461 n->Arg<CNode*>(0) = a0;
06462 n->Arg<CNode*>(1) = a1;
06463 return n;
06464 }
06475 inline CNode* cREPEAT_CONTROL( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
06476 {
06477 CNode* n = new(heap) CNode( loc, eREPEAT_CONTROL );
06478 n->Arg<CNode*>(0) = a0;
06479 n->Arg<CNode*>(1) = a1;
06480 return n;
06481 }
06490 inline CNode* cDELAY_CONTROL( CNode* a0, Coord_t* loc=NULL )
06491 {
06492 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eDELAY_CONTROL );
06493 n->Arg<CNode*>(0) = a0;
06494 return n;
06495 }
06505 inline CNode* cDELAY_CONTROL( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
06506 {
06507 CNode* n = new(heap) CNode( loc, eDELAY_CONTROL );
06508 n->Arg<CNode*>(0) = a0;
06509 return n;
06510 }
06519 inline CNode* cEVENT_CONTROL( CNode* a0, Coord_t* loc=NULL )
06520 {
06521 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eEVENT_CONTROL );
06522 n->Arg<CNode*>(0) = a0;
06523 return n;
06524 }
06534 inline CNode* cEVENT_CONTROL( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
06535 {
06536 CNode* n = new(heap) CNode( loc, eEVENT_CONTROL );
06537 n->Arg<CNode*>(0) = a0;
06538 return n;
06539 }
06548 inline CNode* cEXTERNAL_REF( CSymbol* a0, Coord_t* loc=NULL )
06549 {
06550 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eEXTERNAL_REF );
06551 n->Arg<CSymbol*>(0) = a0;
06552 return n;
06553 }
06563 inline CNode* cEXTERNAL_REF( CObstack* heap, CSymbol* a0, Coord_t* loc=NULL )
06564 {
06565 CNode* n = new(heap) CNode( loc, eEXTERNAL_REF );
06566 n->Arg<CSymbol*>(0) = a0;
06567 return n;
06568 }
06577 inline CNode* cPORT_DEF( CPort* a0, Coord_t* loc=NULL )
06578 {
06579 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePORT_DEF );
06580 n->Arg<CPort*>(0) = a0;
06581 return n;
06582 }
06592 inline CNode* cPORT_DEF( CObstack* heap, CPort* a0, Coord_t* loc=NULL )
06593 {
06594 CNode* n = new(heap) CNode( loc, ePORT_DEF );
06595 n->Arg<CPort*>(0) = a0;
06596 return n;
06597 }
06607 inline CNode* cDEFPARAM( CNode* a0, CNode* a1, Coord_t* loc=NULL )
06608 {
06609 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eDEFPARAM );
06610 n->Arg<CNode*>(0) = a0;
06611 n->Arg<CNode*>(1) = a1;
06612 return n;
06613 }
06624 inline CNode* cDEFPARAM( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
06625 {
06626 CNode* n = new(heap) CNode( loc, eDEFPARAM );
06627 n->Arg<CNode*>(0) = a0;
06628 n->Arg<CNode*>(1) = a1;
06629 return n;
06630 }
06645 inline CNode* cPATH( int a0, CNode* a1, int a2, int a3, CNode* a4, int a5, CNode* a6, Coord_t* loc=NULL )
06646 {
06647 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePATH );
06648 n->Arg<int>(0) = a0;
06649 n->Arg<CNode*>(1) = a1;
06650 n->Arg<int>(2) = a2;
06651 n->Arg<int>(3) = a3;
06652 n->Arg<CNode*>(4) = a4;
06653 n->Arg<int>(5) = a5;
06654 n->Arg<CNode*>(6) = a6;
06655 return n;
06656 }
06672 inline CNode* cPATH( CObstack* heap, int a0, CNode* a1, int a2, int a3, CNode* a4, int a5, CNode* a6, Coord_t* loc=NULL )
06673 {
06674 CNode* n = new(heap) CNode( loc, ePATH );
06675 n->Arg<int>(0) = a0;
06676 n->Arg<CNode*>(1) = a1;
06677 n->Arg<int>(2) = a2;
06678 n->Arg<int>(3) = a3;
06679 n->Arg<CNode*>(4) = a4;
06680 n->Arg<int>(5) = a5;
06681 n->Arg<CNode*>(6) = a6;
06682 return n;
06683 }
06694 inline CNode* cPATH_ASSIGN( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
06695 {
06696 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePATH_ASSIGN );
06697 n->Arg<CNode*>(0) = a0;
06698 n->Arg<CNode*>(1) = a1;
06699 n->Arg<CNode*>(2) = a2;
06700 return n;
06701 }
06713 inline CNode* cPATH_ASSIGN( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
06714 {
06715 CNode* n = new(heap) CNode( loc, ePATH_ASSIGN );
06716 n->Arg<CNode*>(0) = a0;
06717 n->Arg<CNode*>(1) = a1;
06718 n->Arg<CNode*>(2) = a2;
06719 return n;
06720 }
06730 inline CNode* cIFNONE_PATH_ASSIGN( CNode* a0, CNode* a1, Coord_t* loc=NULL )
06731 {
06732 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eIFNONE_PATH_ASSIGN );
06733 n->Arg<CNode*>(0) = a0;
06734 n->Arg<CNode*>(1) = a1;
06735 return n;
06736 }
06747 inline CNode* cIFNONE_PATH_ASSIGN( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
06748 {
06749 CNode* n = new(heap) CNode( loc, eIFNONE_PATH_ASSIGN );
06750 n->Arg<CNode*>(0) = a0;
06751 n->Arg<CNode*>(1) = a1;
06752 return n;
06753 }
06762 inline CNode* cTRIGGER( CNode* a0, Coord_t* loc=NULL )
06763 {
06764 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eTRIGGER );
06765 n->Arg<CNode*>(0) = a0;
06766 return n;
06767 }
06777 inline CNode* cTRIGGER( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
06778 {
06779 CNode* n = new(heap) CNode( loc, eTRIGGER );
06780 n->Arg<CNode*>(0) = a0;
06781 return n;
06782 }
06792 inline CNode* cPASSIGN( CNode* a0, CNode* a1, Coord_t* loc=NULL )
06793 {
06794 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePASSIGN );
06795 n->Arg<CNode*>(0) = a0;
06796 n->Arg<CNode*>(1) = a1;
06797 return n;
06798 }
06809 inline CNode* cPASSIGN( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
06810 {
06811 CNode* n = new(heap) CNode( loc, ePASSIGN );
06812 n->Arg<CNode*>(0) = a0;
06813 n->Arg<CNode*>(1) = a1;
06814 return n;
06815 }
06824 inline CNode* cDEASSIGN( CNode* a0, Coord_t* loc=NULL )
06825 {
06826 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eDEASSIGN );
06827 n->Arg<CNode*>(0) = a0;
06828 return n;
06829 }
06839 inline CNode* cDEASSIGN( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
06840 {
06841 CNode* n = new(heap) CNode( loc, eDEASSIGN );
06842 n->Arg<CNode*>(0) = a0;
06843 return n;
06844 }
06853 inline CNode* cDISABLE( CSymbol* a0, Coord_t* loc=NULL )
06854 {
06855 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eDISABLE );
06856 n->Arg<CSymbol*>(0) = a0;
06857 return n;
06858 }
06868 inline CNode* cDISABLE( CObstack* heap, CSymbol* a0, Coord_t* loc=NULL )
06869 {
06870 CNode* n = new(heap) CNode( loc, eDISABLE );
06871 n->Arg<CSymbol*>(0) = a0;
06872 return n;
06873 }
06882 inline CNode* cATTRIBUTE( CAttr* a0, Coord_t* loc=NULL )
06883 {
06884 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eATTRIBUTE );
06885 n->Arg<CAttr*>(0) = a0;
06886 return n;
06887 }
06897 inline CNode* cATTRIBUTE( CObstack* heap, CAttr* a0, Coord_t* loc=NULL )
06898 {
06899 CNode* n = new(heap) CNode( loc, eATTRIBUTE );
06900 n->Arg<CAttr*>(0) = a0;
06901 return n;
06902 }
06913 inline CNode* cGIF( CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
06914 {
06915 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eGIF );
06916 n->Arg<CNode*>(0) = a0;
06917 n->Arg<CNode*>(1) = a1;
06918 n->Arg<CNode*>(2) = a2;
06919 return n;
06920 }
06932 inline CNode* cGIF( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
06933 {
06934 CNode* n = new(heap) CNode( loc, eGIF );
06935 n->Arg<CNode*>(0) = a0;
06936 n->Arg<CNode*>(1) = a1;
06937 n->Arg<CNode*>(2) = a2;
06938 return n;
06939 }
06951 inline CNode* cGFOR( CNode* a0, CNode* a1, CNode* a2, CNode* a3, Coord_t* loc=NULL )
06952 {
06953 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eGFOR );
06954 n->Arg<CNode*>(0) = a0;
06955 n->Arg<CNode*>(1) = a1;
06956 n->Arg<CNode*>(2) = a2;
06957 n->Arg<CNode*>(3) = a3;
06958 return n;
06959 }
06972 inline CNode* cGFOR( CObstack* heap, CNode* a0, CNode* a1, CNode* a2, CNode* a3, Coord_t* loc=NULL )
06973 {
06974 CNode* n = new(heap) CNode( loc, eGFOR );
06975 n->Arg<CNode*>(0) = a0;
06976 n->Arg<CNode*>(1) = a1;
06977 n->Arg<CNode*>(2) = a2;
06978 n->Arg<CNode*>(3) = a3;
06979 return n;
06980 }
06990 inline CNode* cGCASE( CNode* a0, CNode* a1, Coord_t* loc=NULL )
06991 {
06992 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eGCASE );
06993 n->Arg<CNode*>(0) = a0;
06994 n->Arg<CNode*>(1) = a1;
06995 return n;
06996 }
07007 inline CNode* cGCASE( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
07008 {
07009 CNode* n = new(heap) CNode( loc, eGCASE );
07010 n->Arg<CNode*>(0) = a0;
07011 n->Arg<CNode*>(1) = a1;
07012 return n;
07013 }
07022 inline CNode* cTABLE( CNode* a0, Coord_t* loc=NULL )
07023 {
07024 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eTABLE );
07025 n->Arg<CNode*>(0) = a0;
07026 return n;
07027 }
07037 inline CNode* cTABLE( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
07038 {
07039 CNode* n = new(heap) CNode( loc, eTABLE );
07040 n->Arg<CNode*>(0) = a0;
07041 return n;
07042 }
07051 inline CNode* cTABLE_ENTRY( CNode* a0, Coord_t* loc=NULL )
07052 {
07053 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eTABLE_ENTRY );
07054 n->Arg<CNode*>(0) = a0;
07055 return n;
07056 }
07066 inline CNode* cTABLE_ENTRY( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
07067 {
07068 CNode* n = new(heap) CNode( loc, eTABLE_ENTRY );
07069 n->Arg<CNode*>(0) = a0;
07070 return n;
07071 }
07080 inline CNode* cTABLE_SYMBOL( char* a0, Coord_t* loc=NULL )
07081 {
07082 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eTABLE_SYMBOL );
07083 n->Arg<char*>(0) = a0;
07084 return n;
07085 }
07095 inline CNode* cTABLE_SYMBOL( CObstack* heap, char* a0, Coord_t* loc=NULL )
07096 {
07097 CNode* n = new(heap) CNode( loc, eTABLE_SYMBOL );
07098 n->Arg<char*>(0) = a0;
07099 return n;
07100 }
07108 inline CNode* cPORTLIST_END( Coord_t* loc=NULL )
07109 {
07110 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePORTLIST_END );
07111 return n;
07112 }
07121 inline CNode* cPORTLIST_END( CObstack* heap, Coord_t* loc=NULL )
07122 {
07123 CNode* n = new(heap) CNode( loc, ePORTLIST_END );
07124 return n;
07125 }
07135 inline CNode* cMACRO_EXPR( const char* a0, CNode* a1, Coord_t* loc=NULL )
07136 {
07137 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eMACRO_EXPR );
07138 n->Arg<const char*>(0) = a0;
07139 n->Arg<CNode*>(1) = a1;
07140 return n;
07141 }
07152 inline CNode* cMACRO_EXPR( CObstack* heap, const char* a0, CNode* a1, Coord_t* loc=NULL )
07153 {
07154 CNode* n = new(heap) CNode( loc, eMACRO_EXPR );
07155 n->Arg<const char*>(0) = a0;
07156 n->Arg<CNode*>(1) = a1;
07157 return n;
07158 }
07169 inline CNode* cENUM_SPEC( CSymbol* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
07170 {
07171 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eENUM_SPEC );
07172 n->Arg<CSymbol*>(0) = a0;
07173 n->Arg<CNode*>(1) = a1;
07174 n->Arg<CNode*>(2) = a2;
07175 return n;
07176 }
07188 inline CNode* cENUM_SPEC( CObstack* heap, CSymbol* a0, CNode* a1, CNode* a2, Coord_t* loc=NULL )
07189 {
07190 CNode* n = new(heap) CNode( loc, eENUM_SPEC );
07191 n->Arg<CSymbol*>(0) = a0;
07192 n->Arg<CNode*>(1) = a1;
07193 n->Arg<CNode*>(2) = a2;
07194 return n;
07195 }
07205 inline CNode* cMEMBER( CNode* a0, CSymbol* a1, Coord_t* loc=NULL )
07206 {
07207 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eMEMBER );
07208 n->Arg<CNode*>(0) = a0;
07209 n->Arg<CSymbol*>(1) = a1;
07210 return n;
07211 }
07222 inline CNode* cMEMBER( CObstack* heap, CNode* a0, CSymbol* a1, Coord_t* loc=NULL )
07223 {
07224 CNode* n = new(heap) CNode( loc, eMEMBER );
07225 n->Arg<CNode*>(0) = a0;
07226 n->Arg<CSymbol*>(1) = a1;
07227 return n;
07228 }
07237 inline CNode* cRETURN( CNode* a0, Coord_t* loc=NULL )
07238 {
07239 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eRETURN );
07240 n->Arg<CNode*>(0) = a0;
07241 return n;
07242 }
07252 inline CNode* cRETURN( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
07253 {
07254 CNode* n = new(heap) CNode( loc, eRETURN );
07255 n->Arg<CNode*>(0) = a0;
07256 return n;
07257 }
07266 inline CNode* cPREINC( CNode* a0, Coord_t* loc=NULL )
07267 {
07268 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePREINC );
07269 n->Arg<CNode*>(0) = a0;
07270 return n;
07271 }
07281 inline CNode* cPREINC( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
07282 {
07283 CNode* n = new(heap) CNode( loc, ePREINC );
07284 n->Arg<CNode*>(0) = a0;
07285 return n;
07286 }
07295 inline CNode* cPOSTINC( CNode* a0, Coord_t* loc=NULL )
07296 {
07297 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePOSTINC );
07298 n->Arg<CNode*>(0) = a0;
07299 return n;
07300 }
07310 inline CNode* cPOSTINC( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
07311 {
07312 CNode* n = new(heap) CNode( loc, ePOSTINC );
07313 n->Arg<CNode*>(0) = a0;
07314 return n;
07315 }
07324 inline CNode* cPREDEC( CNode* a0, Coord_t* loc=NULL )
07325 {
07326 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePREDEC );
07327 n->Arg<CNode*>(0) = a0;
07328 return n;
07329 }
07339 inline CNode* cPREDEC( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
07340 {
07341 CNode* n = new(heap) CNode( loc, ePREDEC );
07342 n->Arg<CNode*>(0) = a0;
07343 return n;
07344 }
07353 inline CNode* cPOSTDEC( CNode* a0, Coord_t* loc=NULL )
07354 {
07355 CNode* n = new(CNode::CurrentHeap()) CNode( loc, ePOSTDEC );
07356 n->Arg<CNode*>(0) = a0;
07357 return n;
07358 }
07368 inline CNode* cPOSTDEC( CObstack* heap, CNode* a0, Coord_t* loc=NULL )
07369 {
07370 CNode* n = new(heap) CNode( loc, ePOSTDEC );
07371 n->Arg<CNode*>(0) = a0;
07372 return n;
07373 }
07383 inline CNode* cCAST( CNode* a0, CNode* a1, Coord_t* loc=NULL )
07384 {
07385 CNode* n = new(CNode::CurrentHeap()) CNode( loc, eCAST );
07386 n->Arg<CNode*>(0) = a0;
07387 n->Arg<CNode*>(1) = a1;
07388 return n;
07389 }
07400 inline CNode* cCAST( CObstack* heap, CNode* a0, CNode* a1, Coord_t* loc=NULL )
07401 {
07402 CNode* n = new(heap) CNode( loc, eCAST );
07403 n->Arg<CNode*>(0) = a0;
07404 n->Arg<CNode*>(1) = a1;
07405 return n;
07406 }
07407 #endif // DEFINE_CONSTUCTOR
07408
07409
07410
07411
07412
07413
07414
07415
07416
07417 #ifdef DEFINE_METHODS
07418
07419
07420
07421
07422
07423 int CNode::ArgCount()
07424 {
07425 switch( op ) {
07426 case eERROR:
07427 return 0;
07428 case eVCONSTANT:
07429 return 1;
07430 case eRCONSTANT:
07431 return 1;
07432 case eCOMMENT:
07433 return 1;
07434 case eVRQ:
07435 return 1;
07436 case ePRAGMA:
07437 return 1;
07438 case eELIST:
07439 return 2;
07440 case eWIDTH:
07441 return 2;
07442 case eNOP:
07443 return 0;
07444 case eSUB:
07445 return 2;
07446 case eMUL:
07447 return 2;
07448 case eDIV:
07449 return 2;
07450 case ePOW:
07451 return 2;
07452 case eADD:
07453 return 2;
07454 case eLSH:
07455 return 2;
07456 case eRSH:
07457 return 2;
07458 case eLSHA:
07459 return 2;
07460 case eRSHA:
07461 return 2;
07462 case eMOD:
07463 return 2;
07464 case eOR:
07465 return 2;
07466 case eAND:
07467 return 2;
07468 case eANDANDAND:
07469 return 2;
07470 case eXOR:
07471 return 2;
07472 case eXNOR:
07473 return 2;
07474 case eINSTANCE_REF:
07475 return 1;
07476 case eGATE_REF:
07477 return 1;
07478 case eTASK_ENABLE:
07479 return 2;
07480 case eSYSTASK_CALL:
07481 return 2;
07482 case eTIMING_CALL:
07483 return 2;
07484 case eFUNCTION_CALL:
07485 return 3;
07486 case eARRAY:
07487 return 2;
07488 case eNET_REF:
07489 return 1;
07490 case eVAR_REF:
07491 return 1;
07492 case ePARAM_REF:
07493 return 1;
07494 case ePORT_REF:
07495 return 1;
07496 case eFWD_REF:
07497 return 1;
07498 case eGENVAR_REF:
07499 return 1;
07500 case eENUM_REF:
07501 return 1;
07502 case eTYPE_REF:
07503 return 1;
07504 case eNET_DECL:
07505 return 2;
07506 case eVAR_DECL:
07507 return 2;
07508 case ePARAM_DECL:
07509 return 1;
07510 case eSPECPARAM_DECL:
07511 return 1;
07512 case ePORT_DECL:
07513 return 1;
07514 case eGENVAR_DECL:
07515 return 1;
07516 case eTYPEDEF_DECL:
07517 return 1;
07518 case eLIST:
07519 return 2;
07520 case eRANGE:
07521 return 2;
07522 case eSLICE:
07523 return 2;
07524 case ePSLICE:
07525 return 2;
07526 case eMSLICE:
07527 return 2;
07528 case eCVRI:
07529 return 1;
07530 case eCVIR:
07531 return 1;
07532 case eREP:
07533 return 2;
07534 case eCAT:
07535 return 2;
07536 case eUCAT:
07537 return 1;
07538 case eCOM:
07539 return 1;
07540 case eNEG:
07541 return 1;
07542 case ePLUS:
07543 return 1;
07544 case eNOT:
07545 return 1;
07546 case eGT:
07547 return 2;
07548 case eGE:
07549 return 2;
07550 case eLT:
07551 return 2;
07552 case eLE:
07553 return 2;
07554 case eLAND:
07555 return 2;
07556 case eLOR:
07557 return 2;
07558 case eCEQ:
07559 return 2;
07560 case eCNE:
07561 return 2;
07562 case eEQ:
07563 return 2;
07564 case eNE:
07565 return 2;
07566 case eRAND:
07567 return 1;
07568 case eRNAND:
07569 return 1;
07570 case eROR:
07571 return 1;
07572 case eRNOR:
07573 return 1;
07574 case eRXOR:
07575 return 1;
07576 case eRXNOR:
07577 return 1;
07578 case eHOOK:
07579 return 3;
07580 case eINIT:
07581 return 1;
07582 case eALWAYS:
07583 return 1;
07584 case eALWAYS_LATCH:
07585 return 1;
07586 case eALWAYS_FF:
07587 return 1;
07588 case eALWAYS_COMB:
07589 return 1;
07590 case eEVENT:
07591 return 2;
07592 case eBLOCK_REF:
07593 return 2;
07594 case eSPECIFY_REF:
07595 return 2;
07596 case eASSIGN:
07597 return 3;
07598 case eADD_ASSIGN:
07599 return 3;
07600 case eSUB_ASSIGN:
07601 return 3;
07602 case eMUL_ASSIGN:
07603 return 3;
07604 case eDIV_ASSIGN:
07605 return 3;
07606 case eMOD_ASSIGN:
07607 return 3;
07608 case eAND_ASSIGN:
07609 return 3;
07610 case eOR_ASSIGN:
07611 return 3;
07612 case eXOR_ASSIGN:
07613 return 3;
07614 case eLSH_ASSIGN:
07615 return 3;
07616 case eRSH_ASSIGN:
07617 return 3;
07618 case eLSHA_ASSIGN:
07619 return 3;
07620 case eRSHA_ASSIGN:
07621 return 3;
07622 case eFORCE:
07623 return 2;
07624 case eRELEASE:
07625 return 1;
07626 case eNBASSIGN:
07627 return 3;
07628 case ePOSEDGE:
07629 return 1;
07630 case eNEGEDGE:
07631 return 1;
07632 case eEDGE:
07633 return 2;
07634 case eEVOR:
07635 return 2;
07636 case eDELAY:
07637 return 2;
07638 case eMTM:
07639 return 3;
07640 case eIF:
07641 return 3;
07642 case eFOREVER:
07643 return 1;
07644 case eREPEAT:
07645 return 2;
07646 case eWHILE:
07647 return 2;
07648 case eWAIT:
07649 return 2;
07650 case eFOR:
07651 return 4;
07652 case eCASE:
07653 return 2;
07654 case eCASEX:
07655 return 2;
07656 case eCASEZ:
07657 return 2;
07658 case eCASEITEM:
07659 return 2;
07660 case eCASSIGN:
07661 return 4;
07662 case eARG:
07663 return 2;
07664 case eFUNCTION_DEF:
07665 return 1;
07666 case eMODULE_DEF:
07667 return 1;
07668 case eREPEAT_CONTROL:
07669 return 2;
07670 case eDELAY_CONTROL:
07671 return 1;
07672 case eEVENT_CONTROL:
07673 return 1;
07674 case eEXTERNAL_REF:
07675 return 1;
07676 case ePORT_DEF:
07677 return 1;
07678 case eDEFPARAM:
07679 return 2;
07680 case ePATH:
07681 return 7;
07682 case ePATH_ASSIGN:
07683 return 3;
07684 case eIFNONE_PATH_ASSIGN:
07685 return 2;
07686 case eTRIGGER:
07687 return 1;
07688 case ePASSIGN:
07689 return 2;
07690 case eDEASSIGN:
07691 return 1;
07692 case eDISABLE:
07693 return 1;
07694 case eATTRIBUTE:
07695 return 1;
07696 case eGIF:
07697 return 3;
07698 case eGFOR:
07699 return 4;
07700 case eGCASE:
07701 return 2;
07702 case eTABLE:
07703 return 1;
07704 case eTABLE_ENTRY:
07705 return 1;
07706 case eTABLE_SYMBOL:
07707 return 1;
07708 case ePORTLIST_END:
07709 return 0;
07710 case eMACRO_EXPR:
07711 return 2;
07712 case eENUM_SPEC:
07713 return 3;
07714 case eMEMBER:
07715 return 2;
07716 case eRETURN:
07717 return 1;
07718 case ePREINC:
07719 return 1;
07720 case ePOSTINC:
07721 return 1;
07722 case ePREDEC:
07723 return 1;
07724 case ePOSTDEC:
07725 return 1;
07726 case eCAST:
07727 return 2;
07728 default:
07729 MASSERT(FALSE);
07730 }
07731 return 0;
07732 }
07733
07734
07735
07736
07737
07738
07739 int CNode::Precedence()
07740 {
07741 switch( op ) {
07742 case eERROR:
07743 return 13;
07744 case eVCONSTANT:
07745 return 13;
07746 case eRCONSTANT:
07747 return 13;
07748 case eCOMMENT:
07749 return 13;
07750 case eVRQ:
07751 return 13;
07752 case ePRAGMA:
07753 return 13;
07754 case eELIST:
07755 return 13;
07756 case eWIDTH:
07757 return 13;
07758 case eSUB:
07759 return 9;
07760 case eMUL:
07761 return 10;
07762 case eDIV:
07763 return 10;
07764 case ePOW:
07765 return 11;
07766 case eADD:
07767 return 9;
07768 case eLSH:
07769 return 8;
07770 case eRSH:
07771 return 8;
07772 case eLSHA:
07773 return 8;
07774 case eRSHA:
07775 return 8;
07776 case eMOD:
07777 return 10;
07778 case eOR:
07779 return 3;
07780 case eAND:
07781 return 5;
07782 case eANDANDAND:
07783 return 0;
07784 case eXOR:
07785 return 4;
07786 case eXNOR:
07787 return 4;
07788 case eSYSTASK_CALL:
07789 return 13;
07790 case eFUNCTION_CALL:
07791 return 13;
07792 case eARRAY:
07793 return 13;
07794 case eNET_REF:
07795 return 13;
07796 case eVAR_REF:
07797 return 13;
07798 case ePARAM_REF:
07799 return 13;
07800 case ePORT_REF:
07801 return 13;
07802 case eFWD_REF:
07803 return 13;
07804 case eGENVAR_REF:
07805 return 13;
07806 case eENUM_REF:
07807 return 13;
07808 case eTYPE_REF:
07809 return 13;
07810 case eRANGE:
07811 return 13;
07812 case eSLICE:
07813 return 13;
07814 case ePSLICE:
07815 return 13;
07816 case eMSLICE:
07817 return 13;
07818 case eCVRI:
07819 return 13;
07820 case eCVIR:
07821 return 13;
07822 case eREP:
07823 return 13;
07824 case eCAT:
07825 return 13;
07826 case eUCAT:
07827 return 13;
07828 case eCOM:
07829 return 12;
07830 case eNEG:
07831 return 12;
07832 case ePLUS:
07833 return 12;
07834 case eNOT:
07835 return 12;
07836 case eGT:
07837 return 7;
07838 case eGE:
07839 return 7;
07840 case eLT:
07841 return 7;
07842 case eLE:
07843 return 7;
07844 case eLAND:
07845 return 2;
07846 case eLOR:
07847 return 1;
07848 case eCEQ:
07849 return 6;
07850 case eCNE:
07851 return 6;
07852 case eEQ:
07853 return 6;
07854 case eNE:
07855 return 6;
07856 case eRAND:
07857 return 12;
07858 case eRNAND:
07859 return 12;
07860 case eROR:
07861 return 12;
07862 case eRNOR:
07863 return 12;
07864 case eRXOR:
07865 return 12;
07866 case eRXNOR:
07867 return 12;
07868 case eHOOK:
07869 return 0;
07870 case ePOSEDGE:
07871 return 13;
07872 case eNEGEDGE:
07873 return 13;
07874 case eEDGE:
07875 return 13;
07876 case eEVOR:
07877 return 13;
07878 case eMTM:
07879 return 13;
07880 case eEXTERNAL_REF:
07881 return 13;
07882 case eMACRO_EXPR:
07883 return 13;
07884 case eMEMBER:
07885 return 13;
07886 case ePREINC:
07887 return 12;
07888 case ePOSTINC:
07889 return 12;
07890 case ePREDEC:
07891 return 12;
07892 case ePOSTDEC:
07893 return 12;
07894 case eCAST:
07895 return 13;
07896 default:
07897 MASSERT( FALSE );
07898 return 13;
07899 }
07900 }
07901
07902
07903
07904
07905
07906
07907 int CNode::IsConstant()
07908 {
07909 switch( op ) {
07910 case eERROR:
07911 return FALSE;
07912 case eVCONSTANT:
07913 return TRUE;
07914 case eRCONSTANT:
07915 return TRUE;
07916 case eCOMMENT:
07917 return TRUE;
07918 case eVRQ:
07919 return TRUE;
07920 case ePRAGMA:
07921 return TRUE;
07922 case eELIST:
07923 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07924 case eWIDTH:
07925 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07926 case eSUB:
07927 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07928 case eMUL:
07929 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07930 case eDIV:
07931 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07932 case ePOW:
07933 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07934 case eADD:
07935 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07936 case eLSH:
07937 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07938 case eRSH:
07939 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07940 case eLSHA:
07941 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07942 case eRSHA:
07943 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07944 case eMOD:
07945 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07946 case eOR:
07947 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07948 case eAND:
07949 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07950 case eANDANDAND:
07951 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07952 case eXOR:
07953 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07954 case eXNOR:
07955 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07956 case eSYSTASK_CALL:
07957 return TRUE;
07958 case eFUNCTION_CALL:
07959 return Arg<CNode*>(1)->IsConstant();
07960 case eARRAY:
07961 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07962 case eNET_REF:
07963 return FALSE;
07964 case eVAR_REF:
07965 return FALSE;
07966 case ePARAM_REF:
07967 return TRUE;
07968 case ePORT_REF:
07969 return FALSE;
07970 case eFWD_REF:
07971 return FALSE;
07972 case eGENVAR_REF:
07973 return TRUE;
07974 case eENUM_REF:
07975 return TRUE;
07976 case eTYPE_REF:
07977 return TRUE;
07978 case eRANGE:
07979 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07980 case eSLICE:
07981 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07982 case ePSLICE:
07983 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07984 case eMSLICE:
07985 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07986 case eCVRI:
07987 return Arg<CNode*>(0)->IsConstant();
07988 case eCVIR:
07989 return Arg<CNode*>(0)->IsConstant();
07990 case eREP:
07991 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07992 case eCAT:
07993 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
07994 case eUCAT:
07995 return Arg<CNode*>(0)->IsConstant();
07996 case eCOM:
07997 return Arg<CNode*>(0)->IsConstant();
07998 case eNEG:
07999 return Arg<CNode*>(0)->IsConstant();
08000 case ePLUS:
08001 return Arg<CNode*>(0)->IsConstant();
08002 case eNOT:
08003 return Arg<CNode*>(0)->IsConstant();
08004 case eGT:
08005 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
08006 case eGE:
08007 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
08008 case eLT:
08009 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
08010 case eLE:
08011 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
08012 case eLAND:
08013 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
08014 case eLOR:
08015 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
08016 case eCEQ:
08017 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
08018 case eCNE:
08019 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
08020 case eEQ:
08021 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
08022 case eNE:
08023 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
08024 case eRAND:
08025 return Arg<CNode*>(0)->IsConstant();
08026 case eRNAND:
08027 return Arg<CNode*>(0)->IsConstant();
08028 case eROR:
08029 return Arg<CNode*>(0)->IsConstant();
08030 case eRNOR:
08031 return Arg<CNode*>(0)->IsConstant();
08032 case eRXOR:
08033 return Arg<CNode*>(0)->IsConstant();
08034 case eRXNOR:
08035 return Arg<CNode*>(0)->IsConstant();
08036 case eHOOK:
08037 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant() && Arg<CNode*>(2)->IsConstant();
08038 case eMTM:
08039 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant() && Arg<CNode*>(2)->IsConstant();
08040 case eEXTERNAL_REF:
08041 return FALSE;
08042 case eMACRO_EXPR:
08043 return TRUE;
08044 case eMEMBER:
08045 return Arg<CNode*>(0)->IsConstant();
08046 case ePREINC:
08047 return Arg<CNode*>(0)->IsConstant();
08048 case ePOSTINC:
08049 return Arg<CNode*>(0)->IsConstant();
08050 case ePREDEC:
08051 return Arg<CNode*>(0)->IsConstant();
08052 case ePOSTDEC:
08053 return Arg<CNode*>(0)->IsConstant();
08054 case eCAST:
08055 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
08056 default:
08057 MASSERT( FALSE );
08058 }
08059
08060 return TRUE;
08061 }
08062
08063
08064
08065
08066
08067
08068
08069 int CNode::IsVolatile()
08070 {
08071 switch( op ) {
08072 case eERROR:
08073 return TRUE;
08074 case eVCONSTANT:
08075 return FALSE;
08076 case eRCONSTANT:
08077 return FALSE;
08078 case eCOMMENT:
08079 return FALSE;
08080 case eVRQ:
08081 return FALSE;
08082 case ePRAGMA:
08083 return FALSE;
08084 case eELIST:
08085 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08086 case eWIDTH:
08087 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08088 case eSUB:
08089 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08090 case eMUL:
08091 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08092 case eDIV:
08093 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08094 case ePOW:
08095 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08096 case eADD:
08097 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08098 case eLSH:
08099 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08100 case eRSH:
08101 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08102 case eLSHA:
08103 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08104 case eRSHA:
08105 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08106 case eMOD:
08107 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08108 case eOR:
08109 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08110 case eAND:
08111 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08112 case eANDANDAND:
08113 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08114 case eXOR:
08115 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08116 case eXNOR:
08117 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08118 case eSYSTASK_CALL:
08119 return TRUE;
08120 case eFUNCTION_CALL:
08121 return Arg<CNode*>(1)->IsVolatile();
08122 case eARRAY:
08123 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08124 case eNET_REF:
08125 return TRUE;
08126 case eVAR_REF:
08127 return TRUE;
08128 case ePARAM_REF:
08129 return TRUE;
08130 case ePORT_REF:
08131 return TRUE;
08132 case eFWD_REF:
08133 return TRUE;
08134 case eGENVAR_REF:
08135 return TRUE;
08136 case eENUM_REF:
08137 return Arg<CEnum*>(0)->GetExpression()->IsVolatile();
08138 case eTYPE_REF:
08139 return FALSE;
08140 case eRANGE:
08141 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08142 case eSLICE:
08143 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08144 case ePSLICE:
08145 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08146 case eMSLICE:
08147 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08148 case eCVRI:
08149 return Arg<CNode*>(0)->IsVolatile();
08150 case eCVIR:
08151 return Arg<CNode*>(0)->IsVolatile();
08152 case eREP:
08153 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08154 case eCAT:
08155 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08156 case eUCAT:
08157 return Arg<CNode*>(0)->IsVolatile();
08158 case eCOM:
08159 return Arg<CNode*>(0)->IsVolatile();
08160 case eNEG:
08161 return Arg<CNode*>(0)->IsVolatile();
08162 case ePLUS:
08163 return Arg<CNode*>(0)->IsVolatile();
08164 case eNOT:
08165 return Arg<CNode*>(0)->IsVolatile();
08166 case eGT:
08167 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08168 case eGE:
08169 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08170 case eLT:
08171 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08172 case eLE:
08173 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08174 case eLAND:
08175 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08176 case eLOR:
08177 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08178 case eCEQ:
08179 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08180 case eCNE:
08181 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08182 case eEQ:
08183 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08184 case eNE:
08185 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08186 case eRAND:
08187 return Arg<CNode*>(0)->IsVolatile();
08188 case eRNAND:
08189 return Arg<CNode*>(0)->IsVolatile();
08190 case eROR:
08191 return Arg<CNode*>(0)->IsVolatile();
08192 case eRNOR:
08193 return Arg<CNode*>(0)->IsVolatile();
08194 case eRXOR:
08195 return Arg<CNode*>(0)->IsVolatile();
08196 case eRXNOR:
08197 return Arg<CNode*>(0)->IsVolatile();
08198 case eHOOK:
08199 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile() || Arg<CNode*>(2)->IsVolatile();
08200 case eMTM:
08201 return TRUE;
08202 case eEXTERNAL_REF:
08203 return TRUE;
08204 case eMACRO_EXPR:
08205 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsVolatile() : TRUE;
08206 case eMEMBER:
08207 return Arg<CNode*>(0)->IsVolatile();
08208 case ePREINC:
08209 return Arg<CNode*>(0)->IsVolatile();
08210 case ePOSTINC:
08211 return Arg<CNode*>(0)->IsVolatile();
08212 case ePREDEC:
08213 return Arg<CNode*>(0)->IsVolatile();
08214 case ePOSTDEC:
08215 return Arg<CNode*>(0)->IsVolatile();
08216 case eCAST:
08217 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08218 default:
08219 MASSERT( FALSE );
08220 }
08221
08222 return TRUE;
08223 }
08224
08225
08226
08227
08228
08229
08230
08231 int CNode::IsWidthConstant( )
08232 {
08233 switch( GetOp() ) {
08234 case eERROR:
08235 return TRUE;
08236 case eVCONSTANT:
08237 return Arg<CVector*>(0)->IsWidthConstant();
08238 case eRCONSTANT:
08239 return TRUE;
08240 case eELIST:
08241 return Arg<CNode*>(0)->IsWidthConstant() && Arg<CNode*>(1)->IsWidthConstant();
08242 case eWIDTH:
08243 return Arg<CNode*>(0)->IsConstant();
08244 case eSUB:
08245 return Arg<CNode*>(0)->IsWidthConstant() && Arg<CNode*>(1)->IsWidthConstant();
08246 case eMUL:
08247 return Arg<CNode*>(0)->IsWidthConstant() && Arg<CNode*>(1)->IsWidthConstant();
08248 case eDIV:
08249 return Arg<CNode*>(0)->IsWidthConstant() && Arg<CNode*>(1)->IsWidthConstant();
08250 case ePOW:
08251 return Arg<CNode*>(0)->IsWidthConstant();
08252 case eADD:
08253 return Arg<CNode*>(0)->IsWidthConstant() && Arg<CNode*>(1)->IsWidthConstant();
08254 case eLSH:
08255 return Arg<CNode*>(0)->IsWidthConstant();
08256 case eRSH:
08257 return Arg<CNode*>(0)->IsWidthConstant();
08258 case eLSHA:
08259 return Arg<CNode*>(0)->IsWidthConstant();
08260 case eRSHA:
08261 return Arg<CNode*>(0)->IsWidthConstant();
08262 case eMOD:
08263 return Arg<CNode*>(0)->IsWidthConstant() && Arg<CNode*>(1)->IsWidthConstant();
08264 case eOR:
08265 return Arg<CNode*>(0)->IsWidthConstant() && Arg<CNode*>(1)->IsWidthConstant();
08266 case eAND:
08267 return Arg<CNode*>(0)->IsWidthConstant() && Arg<CNode*>(1)->IsWidthConstant();
08268 case eANDANDAND:
08269 return Arg<CNode*>(0)->IsWidthConstant() && Arg<CNode*>(1)->IsWidthConstant();
08270 case eXOR:
08271 return Arg<CNode*>(0)->IsWidthConstant() && Arg<CNode*>(1)->IsWidthConstant();
08272 case eXNOR:
08273 return Arg<CNode*>(0)->IsWidthConstant() && Arg<CNode*>(1)->IsWidthConstant();
08274 case eSYSTASK_CALL:
08275 return Systask::WidthConstant(Arg<CSymbol*>(0),Arg<CNode*>(1));
08276 case eFUNCTION_CALL:
08277 return CFunction::WidthConstant(Arg<CSymbol*>(0),Arg<CNode*>(1),Arg<CScope*>(2));
08278 case eARRAY:
08279 return Array::WidthConstant(Arg<CNode*>(0),Arg<CNode*>(1));
08280 case eNET_REF:
08281 return Arg<CNet*>(0)->IsWidthConstant();
08282 case eVAR_REF:
08283 return Arg<CVar*>(0)->IsWidthConstant();
08284 case ePARAM_REF:
08285 return Arg<CParam*>(0)->IsWidthConstant();
08286 case ePORT_REF:
08287 return Arg<CPortDir*>(0)->IsWidthConstant();
08288 case eFWD_REF:
08289 return Arg<CFref*>(0)->IsWidthConstant();
08290 case eGENVAR_REF:
08291 return Arg<CGenvar*>(0)->IsWidthConstant();
08292 case eENUM_REF:
08293 return Arg<CEnum*>(0)->IsWidthConstant();
08294 case eTYPE_REF:
08295 return TRUE;
08296 case eRANGE:
08297 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
08298 case eSLICE:
08299 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsConstant();
08300 case ePSLICE:
08301 return Arg<CNode*>(1)->IsConstant();
08302 case eMSLICE:
08303 return Arg<CNode*>(1)->IsConstant();
08304 case eCVRI:
08305 return TRUE;
08306 case eCVIR:
08307 return TRUE;
08308 case eREP:
08309 return Arg<CNode*>(0)->IsConstant() && Arg<CNode*>(1)->IsWidthConstant();
08310 case eCAT:
08311 return Arg<CNode*>(0)->IsWidthConstant() && Arg<CNode*>(1)->IsWidthConstant();
08312 case eUCAT:
08313 return Arg<CNode*>(0)->IsWidthConstant();
08314 case eCOM:
08315 return Arg<CNode*>(0)->IsWidthConstant();
08316 case eNEG:
08317 return Arg<CNode*>(0)->IsWidthConstant();
08318 case ePLUS:
08319 return Arg<CNode*>(0)->IsWidthConstant();
08320 case eNOT:
08321 return TRUE;
08322 case eGT:
08323 return TRUE;
08324 case eGE:
08325 return TRUE;
08326 case eLT:
08327 return TRUE;
08328 case eLE:
08329 return TRUE;
08330 case eLAND:
08331 return TRUE;
08332 case eLOR:
08333 return TRUE;
08334 case eCEQ:
08335 return TRUE;
08336 case eCNE:
08337 return TRUE;
08338 case eEQ:
08339 return TRUE;
08340 case eNE:
08341 return TRUE;
08342 case eRAND:
08343 return TRUE;
08344 case eRNAND:
08345 return TRUE;
08346 case eROR:
08347 return TRUE;
08348 case eRNOR:
08349 return TRUE;
08350 case eRXOR:
08351 return TRUE;
08352 case eRXNOR:
08353 return TRUE;
08354 case eHOOK:
08355 return Arg<CNode*>(1)->IsWidthConstant() && Arg<CNode*>(2)->IsWidthConstant();
08356 case eMTM:
08357 return Arg<CNode*>(0)->IsWidthConstant() && Arg<CNode*>(1)->IsWidthConstant() && Arg<CNode*>(2)->IsWidthConstant();
08358 case eEXTERNAL_REF:
08359 return External::WidthConstant(Arg<CSymbol*>(0));
08360 case eATTRIBUTE:
08361 return TRUE;
08362 case eMACRO_EXPR:
08363 return Arg<CNode*>(1)->IsWidthConstant();
08364 case eMEMBER:
08365 return Member::WidthConstant(Arg<CNode*>(0),Arg<CSymbol*>(1));
08366 case ePREINC:
08367 return Arg<CNode*>(0)->IsWidthConstant();
08368 case ePOSTINC:
08369 return Arg<CNode*>(0)->IsWidthConstant();
08370 case ePREDEC:
08371 return Arg<CNode*>(0)->IsWidthConstant();
08372 case ePOSTDEC:
08373 return Arg<CNode*>(0)->IsWidthConstant();
08374 case eCAST:
08375 return Arg<CNode*>(0)->IsConstant();
08376 default:
08377 MASSERT( FALSE );
08378 return 0;
08379 }
08380 }
08381
08382
08383
08384
08385
08386
08387 int CNode::IsWidthVolatile( )
08388 {
08389 switch( GetOp() ) {
08390 case eERROR:
08391 return FALSE;
08392 case eVCONSTANT:
08393 return Arg<CVector*>(0)->IsWidthVolatile();
08394 case eRCONSTANT:
08395 return FALSE;
08396 case eELIST:
08397 return Arg<CNode*>(0)->IsWidthVolatile() || Arg<CNode*>(1)->IsWidthVolatile();
08398 case eWIDTH:
08399 return Arg<CNode*>(0)->IsVolatile();
08400 case eSUB:
08401 return Arg<CNode*>(0)->IsWidthVolatile() || Arg<CNode*>(1)->IsWidthVolatile();
08402 case eMUL:
08403 return Arg<CNode*>(0)->IsWidthVolatile() || Arg<CNode*>(1)->IsWidthVolatile();
08404 case eDIV:
08405 return Arg<CNode*>(0)->IsWidthVolatile() || Arg<CNode*>(1)->IsWidthVolatile();
08406 case ePOW:
08407 return Arg<CNode*>(0)->IsWidthVolatile();
08408 case eADD:
08409 return Arg<CNode*>(0)->IsWidthVolatile() || Arg<CNode*>(1)->IsWidthVolatile();
08410 case eLSH:
08411 return Arg<CNode*>(0)->IsWidthVolatile();
08412 case eRSH:
08413 return Arg<CNode*>(0)->IsWidthVolatile();
08414 case eLSHA:
08415 return Arg<CNode*>(0)->IsWidthVolatile();
08416 case eRSHA:
08417 return Arg<CNode*>(0)->IsWidthVolatile();
08418 case eMOD:
08419 return Arg<CNode*>(0)->IsWidthVolatile() || Arg<CNode*>(1)->IsWidthVolatile();
08420 case eOR:
08421 return Arg<CNode*>(0)->IsWidthVolatile() || Arg<CNode*>(1)->IsWidthVolatile();
08422 case eAND:
08423 return Arg<CNode*>(0)->IsWidthVolatile() || Arg<CNode*>(1)->IsWidthVolatile();
08424 case eANDANDAND:
08425 return Arg<CNode*>(0)->IsWidthVolatile() || Arg<CNode*>(1)->IsWidthVolatile();
08426 case eXOR:
08427 return Arg<CNode*>(0)->IsWidthVolatile() || Arg<CNode*>(1)->IsWidthVolatile();
08428 case eXNOR:
08429 return Arg<CNode*>(0)->IsWidthVolatile() || Arg<CNode*>(1)->IsWidthVolatile();
08430 case eSYSTASK_CALL:
08431 return Systask::WidthVolatile(Arg<CSymbol*>(0),Arg<CNode*>(1));
08432 case eFUNCTION_CALL:
08433 return CFunction::WidthVolatile(Arg<CSymbol*>(0),Arg<CNode*>(1),Arg<CScope*>(2));
08434 case eARRAY:
08435 return Array::WidthVolatile(Arg<CNode*>(0),Arg<CNode*>(1));
08436 case eNET_REF:
08437 return Arg<CNet*>(0)->IsWidthVolatile();
08438 case eVAR_REF:
08439 return Arg<CVar*>(0)->IsWidthVolatile();
08440 case ePARAM_REF:
08441 return Arg<CParam*>(0)->IsWidthVolatile();
08442 case ePORT_REF:
08443 return Arg<CPortDir*>(0)->IsWidthVolatile();
08444 case eFWD_REF:
08445 return Arg<CFref*>(0)->IsWidthVolatile();
08446 case eGENVAR_REF:
08447 return Arg<CGenvar*>(0)->IsWidthVolatile();
08448 case eENUM_REF:
08449 return Arg<CEnum*>(0)->IsWidthVolatile();
08450 case eTYPE_REF:
08451 return FALSE;
08452 case eRANGE:
08453 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08454 case eSLICE:
08455 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsVolatile();
08456 case ePSLICE:
08457 return Arg<CNode*>(1)->IsVolatile();
08458 case eMSLICE:
08459 return Arg<CNode*>(1)->IsVolatile();
08460 case eCVRI:
08461 return FALSE;
08462 case eCVIR:
08463 return FALSE;
08464 case eREP:
08465 return Arg<CNode*>(0)->IsVolatile() || Arg<CNode*>(1)->IsWidthVolatile();
08466 case eCAT:
08467 return Arg<CNode*>(0)->IsWidthVolatile() || Arg<CNode*>(1)->IsWidthVolatile();
08468 case eUCAT:
08469 return Arg<CNode*>(0)->IsWidthVolatile();
08470 case eCOM:
08471 return Arg<CNode*>(0)->IsWidthVolatile();
08472 case eNEG:
08473 return Arg<CNode*>(0)->IsWidthVolatile();
08474 case ePLUS:
08475 return Arg<CNode*>(0)->IsWidthVolatile();
08476 case eNOT:
08477 return FALSE;
08478 case eGT:
08479 return FALSE;
08480 case eGE:
08481 return FALSE;
08482 case eLT:
08483 return FALSE;
08484 case eLE:
08485 return FALSE;
08486 case eLAND:
08487 return FALSE;
08488 case eLOR:
08489 return FALSE;
08490 case eCEQ:
08491 return FALSE;
08492 case eCNE:
08493 return FALSE;
08494 case eEQ:
08495 return FALSE;
08496 case eNE:
08497 return FALSE;
08498 case eRAND:
08499 return FALSE;
08500 case eRNAND:
08501 return FALSE;
08502 case eROR:
08503 return FALSE;
08504 case eRNOR:
08505 return FALSE;
08506 case eRXOR:
08507 return FALSE;
08508 case eRXNOR:
08509 return FALSE;
08510 case eHOOK:
08511 return Arg<CNode*>(1)->IsWidthVolatile() || Arg<CNode*>(2)->IsWidthVolatile();
08512 case eMTM:
08513 return Arg<CNode*>(0)->IsWidthVolatile() || Arg<CNode*>(1)->IsWidthVolatile() || Arg<CNode*>(2)->IsWidthVolatile();
08514 case eEXTERNAL_REF:
08515 return External::WidthVolatile(Arg<CSymbol*>(0));
08516 case eATTRIBUTE:
08517 return FALSE;
08518 case eMACRO_EXPR:
08519 return Arg<CNode*>(1)->IsWidthVolatile();
08520 case eMEMBER:
08521 return Member::WidthVolatile(Arg<CNode*>(0),Arg<CSymbol*>(1));
08522 case ePREINC:
08523 return Arg<CNode*>(0)->IsWidthVolatile();
08524 case ePOSTINC:
08525 return Arg<CNode*>(0)->IsWidthVolatile();
08526 case ePREDEC:
08527 return Arg<CNode*>(0)->IsWidthVolatile();
08528 case ePOSTDEC:
08529 return Arg<CNode*>(0)->IsWidthVolatile();
08530 case eCAST:
08531 return Arg<CNode*>(0)->IsVolatile();
08532 default:
08533 MASSERT( FALSE );
08534 return 0;
08535 }
08536
08537 }
08538
08539
08540
08541
08542
08543
08544
08545 CNode* CNode::GetWidthExp()
08546 {
08547 switch( GetOp() ) {
08548 case eERROR: {
08549 CNode* temp0;
08550 CNode* temp1;
08551 CNode* temp2;
08552 return NULL;
08553 }
08554 case eVCONSTANT: {
08555 CNode* temp0;
08556 CNode* temp1;
08557 CNode* temp2;
08558 return Arg<CVector*>(0)->GetWidthExp();
08559 }
08560 case eRCONSTANT: {
08561 CNode* temp0;
08562 CNode* temp1;
08563 CNode* temp2;
08564 return NULL;
08565 }
08566 case eELIST: {
08567 CNode* temp0;
08568 CNode* temp1;
08569 CNode* temp2;
08570 return ((temp0=Arg<CNode*>(0)->GetWidthExp()) && (temp1=Arg<CNode*>(1)->GetWidthExp())) ? cADD_N(temp0,temp1,NULL) : NULL;
08571 }
08572 case eWIDTH: {
08573 CNode* temp0;
08574 CNode* temp1;
08575 CNode* temp2;
08576 return cINT32(Arg<CNode*>(0)->EvalINT32());
08577 }
08578 case eSUB: {
08579 CNode* temp0;
08580 CNode* temp1;
08581 CNode* temp2;
08582 return ((temp0=Arg<CNode*>(0)->GetWidthExp()) && (temp1=Arg<CNode*>(1)->GetWidthExp())) ? cMAX_N(temp0,temp1,NULL) : NULL;
08583 }
08584 case eMUL: {
08585 CNode* temp0;
08586 CNode* temp1;
08587 CNode* temp2;
08588 return ((temp0=Arg<CNode*>(0)->GetWidthExp()) && (temp1=Arg<CNode*>(1)->GetWidthExp())) ? cMAX_N(temp0,temp1,NULL) : NULL;
08589 }
08590 case eDIV: {
08591 CNode* temp0;
08592 CNode* temp1;
08593 CNode* temp2;
08594 return ((temp0=Arg<CNode*>(0)->GetWidthExp()) && (temp1=Arg<CNode*>(1)->GetWidthExp())) ? cMAX_N(temp0,temp1,NULL) : NULL;
08595 }
08596 case ePOW: {
08597 CNode* temp0;
08598 CNode* temp1;
08599 CNode* temp2;
08600 return Arg<CNode*>(0)->GetWidthExp();
08601 }
08602 case eADD: {
08603 CNode* temp0;
08604 CNode* temp1;
08605 CNode* temp2;
08606 return ((temp0=Arg<CNode*>(0)->GetWidthExp()) && (temp1=Arg<CNode*>(1)->GetWidthExp())) ? cMAX_N(temp0,temp1,NULL) : NULL;
08607 }
08608 case eLSH: {
08609 CNode* temp0;
08610 CNode* temp1;
08611 CNode* temp2;
08612 return Arg<CNode*>(0)->GetWidthExp();
08613 }
08614 case eRSH: {
08615 CNode* temp0;
08616 CNode* temp1;
08617 CNode* temp2;
08618 return Arg<CNode*>(0)->GetWidthExp();
08619 }
08620 case eLSHA: {
08621 CNode* temp0;
08622 CNode* temp1;
08623 CNode* temp2;
08624 return Arg<CNode*>(0)->GetWidthExp();
08625 }
08626 case eRSHA: {
08627 CNode* temp0;
08628 CNode* temp1;
08629 CNode* temp2;
08630 return Arg<CNode*>(0)->GetWidthExp();
08631 }
08632 case eMOD: {
08633 CNode* temp0;
08634 CNode* temp1;
08635 CNode* temp2;
08636 return ((temp0=Arg<CNode*>(0)->GetWidthExp()) && (temp1=Arg<CNode*>(1)->GetWidthExp())) ? cMAX_N(temp0,temp1,NULL) : NULL;
08637 }
08638 case eOR: {
08639 CNode* temp0;
08640 CNode* temp1;
08641 CNode* temp2;
08642 return ((temp0=Arg<CNode*>(0)->GetWidthExp()) && (temp1=Arg<CNode*>(1)->GetWidthExp())) ? cMAX_N(temp0,temp1,NULL) : NULL;
08643 }
08644 case eAND: {
08645 CNode* temp0;
08646 CNode* temp1;
08647 CNode* temp2;
08648 return ((temp0=Arg<CNode*>(0)->GetWidthExp()) && (temp1=Arg<CNode*>(1)->GetWidthExp())) ? cMAX_N(temp0,temp1,NULL) : NULL;
08649 }
08650 case eANDANDAND: {
08651 CNode* temp0;
08652 CNode* temp1;
08653 CNode* temp2;
08654 return ((temp0=Arg<CNode*>(0)->GetWidthExp()) && (temp1=Arg<CNode*>(1)->GetWidthExp())) ? cMAX_N(temp0,temp1,NULL) : NULL;
08655 }
08656 case eXOR: {
08657 CNode* temp0;
08658 CNode* temp1;
08659 CNode* temp2;
08660 return ((temp0=Arg<CNode*>(0)->GetWidthExp()) && (temp1=Arg<CNode*>(1)->GetWidthExp())) ? cMAX_N(temp0,temp1,NULL) : NULL;
08661 }
08662 case eXNOR: {
08663 CNode* temp0;
08664 CNode* temp1;
08665 CNode* temp2;
08666 return ((temp0=Arg<CNode*>(0)->GetWidthExp()) && (temp1=Arg<CNode*>(1)->GetWidthExp())) ? cMAX_N(temp0,temp1,NULL) : NULL;
08667 }
08668 case eSYSTASK_CALL: {
08669 CNode* temp0;
08670 CNode* temp1;
08671 CNode* temp2;
08672 return Systask::WidthExp(Arg<CSymbol*>(0),Arg<CNode*>(1));
08673 }
08674 case eFUNCTION_CALL: {
08675 CNode* temp0;
08676 CNode* temp1;
08677 CNode* temp2;
08678 return CFunction::WidthExp(Arg<CSymbol*>(0),Arg<CNode*>(1),Arg<CScope*>(2));
08679 }
08680 case eARRAY: {
08681 CNode* temp0;
08682 CNode* temp1;
08683 CNode* temp2;
08684 return Array::WidthExp(Arg<CNode*>(0),Arg<CNode*>(1));
08685 }
08686 case eNET_REF: {
08687 CNode* temp0;
08688 CNode* temp1;
08689 CNode* temp2;
08690 return Arg<CNet*>(0)->GetWidthExp();
08691 }
08692 case eVAR_REF: {
08693 CNode* temp0;
08694 CNode* temp1;
08695 CNode* temp2;
08696 return Arg<CVar*>(0)->GetWidthExp();
08697 }
08698 case ePARAM_REF: {
08699 CNode* temp0;
08700 CNode* temp1;
08701 CNode* temp2;
08702 return Arg<CParam*>(0)->GetWidthExp();
08703 }
08704 case ePORT_REF: {
08705 CNode* temp0;
08706 CNode* temp1;
08707 CNode* temp2;
08708 return Arg<CPortDir*>(0)->GetWidthExp();
08709 }
08710 case eFWD_REF: {
08711 CNode* temp0;
08712 CNode* temp1;
08713 CNode* temp2;
08714 return Arg<CFref*>(0)->GetWidthExp();
08715 }
08716 case eGENVAR_REF: {
08717 CNode* temp0;
08718 CNode* temp1;
08719 CNode* temp2;
08720 return Arg<CGenvar*>(0)->GetWidthExp();
08721 }
08722 case eENUM_REF: {
08723 CNode* temp0;
08724 CNode* temp1;
08725 CNode* temp2;
08726 return Arg<CEnum*>(0)->GetWidthExp();
08727 }
08728 case eTYPE_REF: {
08729 CNode* temp0;
08730 CNode* temp1;
08731 CNode* temp2;
08732 return cINT32(32);
08733 }
08734 case eRANGE: {
08735 CNode* temp0;
08736 CNode* temp1;
08737 CNode* temp2;
08738 return (1 && 1) ? cABSDIFFPLUS1_N(Arg<CNode*>(0)->Clone(),Arg<CNode*>(1)->Clone(),NULL) : NULL;
08739 }
08740 case eSLICE: {
08741 CNode* temp0;
08742 CNode* temp1;
08743 CNode* temp2;
08744 return (1 && 1) ? cABSDIFFPLUS1_N(Arg<CNode*>(0)->Clone(),Arg<CNode*>(1)->Clone(),NULL) : NULL;
08745 }
08746 case ePSLICE: {
08747 CNode* temp0;
08748 CNode* temp1;
08749 CNode* temp2;
08750 return Arg<CNode*>(1);
08751 }
08752 case eMSLICE: {
08753 CNode* temp0;
08754 CNode* temp1;
08755 CNode* temp2;
08756 return Arg<CNode*>(1);
08757 }
08758 case eCVRI: {
08759 CNode* temp0;
08760 CNode* temp1;
08761 CNode* temp2;
08762 return cINT32(32);
08763 }
08764 case eCVIR: {
08765 CNode* temp0;
08766 CNode* temp1;
08767 CNode* temp2;
08768 return NULL;
08769 }
08770 case eREP: {
08771 CNode* temp0;
08772 CNode* temp1;
08773 CNode* temp2;
08774 return (1 && (temp1=Arg<CNode*>(1)->GetWidthExp())) ? cMUL_N(Arg<CNode*>(0)->Clone(),temp1,NULL) : NULL;
08775 }
08776 case eCAT: {
08777 CNode* temp0;
08778 CNode* temp1;
08779 CNode* temp2;
08780 return ((temp0=Arg<CNode*>(0)->GetWidthExp()) && (temp1=Arg<CNode*>(1)->GetWidthExp())) ? cADD_N(temp0,temp1,NULL) : NULL;
08781 }
08782 case eUCAT: {
08783 CNode* temp0;
08784 CNode* temp1;
08785 CNode* temp2;
08786 return Arg<CNode*>(0)->GetWidthExp();
08787 }
08788 case eCOM: {
08789 CNode* temp0;
08790 CNode* temp1;
08791 CNode* temp2;
08792 return Arg<CNode*>(0)->GetWidthExp();
08793 }
08794 case eNEG: {
08795 CNode* temp0;
08796 CNode* temp1;
08797 CNode* temp2;
08798 return Arg<CNode*>(0)->GetWidthExp();
08799 }
08800 case ePLUS: {
08801 CNode* temp0;
08802 CNode* temp1;
08803 CNode* temp2;
08804 return Arg<CNode*>(0)->GetWidthExp();
08805 }
08806 case eNOT: {
08807 CNode* temp0;
08808 CNode* temp1;
08809 CNode* temp2;
08810 return cINT32(1);
08811 }
08812 case eGT: {
08813 CNode* temp0;
08814 CNode* temp1;
08815 CNode* temp2;
08816 return cINT32(1);
08817 }
08818 case eGE: {
08819 CNode* temp0;
08820 CNode* temp1;
08821 CNode* temp2;
08822 return cINT32(1);
08823 }
08824 case eLT: {
08825 CNode* temp0;
08826 CNode* temp1;
08827 CNode* temp2;
08828 return cINT32(1);
08829 }
08830 case eLE: {
08831 CNode* temp0;
08832 CNode* temp1;
08833 CNode* temp2;
08834 return cINT32(1);
08835 }
08836 case eLAND: {
08837 CNode* temp0;
08838 CNode* temp1;
08839 CNode* temp2;
08840 return cINT32(1);
08841 }
08842 case eLOR: {
08843 CNode* temp0;
08844 CNode* temp1;
08845 CNode* temp2;
08846 return cINT32(1);
08847 }
08848 case eCEQ: {
08849 CNode* temp0;
08850 CNode* temp1;
08851 CNode* temp2;
08852 return cINT32(1);
08853 }
08854 case eCNE: {
08855 CNode* temp0;
08856 CNode* temp1;
08857 CNode* temp2;
08858 return cINT32(1);
08859 }
08860 case eEQ: {
08861 CNode* temp0;
08862 CNode* temp1;
08863 CNode* temp2;
08864 return cINT32(1);
08865 }
08866 case eNE: {
08867 CNode* temp0;
08868 CNode* temp1;
08869 CNode* temp2;
08870 return cINT32(1);
08871 }
08872 case eRAND: {
08873 CNode* temp0;
08874 CNode* temp1;
08875 CNode* temp2;
08876 return cINT32(1);
08877 }
08878 case eRNAND: {
08879 CNode* temp0;
08880 CNode* temp1;
08881 CNode* temp2;
08882 return cINT32(1);
08883 }
08884 case eROR: {
08885 CNode* temp0;
08886 CNode* temp1;
08887 CNode* temp2;
08888 return cINT32(1);
08889 }
08890 case eRNOR: {
08891 CNode* temp0;
08892 CNode* temp1;
08893 CNode* temp2;
08894 return cINT32(1);
08895 }
08896 case eRXOR: {
08897 CNode* temp0;
08898 CNode* temp1;
08899 CNode* temp2;
08900 return cINT32(1);
08901 }
08902 case eRXNOR: {
08903 CNode* temp0;
08904 CNode* temp1;
08905 CNode* temp2;
08906 return cINT32(1);
08907 }
08908 case eHOOK: {
08909 CNode* temp0;
08910 CNode* temp1;
08911 CNode* temp2;
08912 return ((temp1=Arg<CNode*>(1)->GetWidthExp()) && (temp2=Arg<CNode*>(2)->GetWidthExp())) ? cMAX_N(temp1,temp2,NULL) : NULL;
08913 }
08914 case eMTM: {
08915 CNode* temp0;
08916 CNode* temp1;
08917 CNode* temp2;
08918 return ((temp0=Arg<CNode*>(0)->GetWidthExp()) && (temp1=Arg<CNode*>(1)->GetWidthExp()) && (temp2=Arg<CNode*>(2)->GetWidthExp())) ? cMAX_N(temp0,temp1,temp2,NULL) : NULL;
08919 }
08920 case eEXTERNAL_REF: {
08921 CNode* temp0;
08922 CNode* temp1;
08923 CNode* temp2;
08924 return External::WidthExp(Arg<CSymbol*>(0));
08925 }
08926 case eATTRIBUTE: {
08927 CNode* temp0;
08928 CNode* temp1;
08929 CNode* temp2;
08930 return cINT32(0);
08931 }
08932 case eMACRO_EXPR: {
08933 CNode* temp0;
08934 CNode* temp1;
08935 CNode* temp2;
08936 return Arg<CNode*>(1)->GetWidthExp();
08937 }
08938 case eMEMBER: {
08939 CNode* temp0;
08940 CNode* temp1;
08941 CNode* temp2;
08942 return Member::WidthExp(Arg<CNode*>(0),Arg<CSymbol*>(1));
08943 }
08944 case ePREINC: {
08945 CNode* temp0;
08946 CNode* temp1;
08947 CNode* temp2;
08948 return Arg<CNode*>(0)->GetWidthExp();
08949 }
08950 case ePOSTINC: {
08951 CNode* temp0;
08952 CNode* temp1;
08953 CNode* temp2;
08954 return Arg<CNode*>(0)->GetWidthExp();
08955 }
08956 case ePREDEC: {
08957 CNode* temp0;
08958 CNode* temp1;
08959 CNode* temp2;
08960 return Arg<CNode*>(0)->GetWidthExp();
08961 }
08962 case ePOSTDEC: {
08963 CNode* temp0;
08964 CNode* temp1;
08965 CNode* temp2;
08966 return Arg<CNode*>(0)->GetWidthExp();
08967 }
08968 case eCAST: {
08969 CNode* temp0;
08970 CNode* temp1;
08971 CNode* temp2;
08972 return cINT32(Arg<CNode*>(0)->EvalINT32());
08973 }
08974 default:
08975 MASSERT( FALSE );
08976 return NULL;
08977 }
08978 }
08979
08980
08981
08982
08983
08984
08985 int CNode::IsWidthEvaluateable( )
08986 {
08987 switch( GetOp() ) {
08988 case eERROR:
08989 return FALSE;
08990 case eVCONSTANT:
08991 return Arg<CVector*>(0)->IsWidthEvaluateable();
08992 case eRCONSTANT:
08993 return FALSE;
08994 case eELIST:
08995 return Arg<CNode*>(0)->IsWidthEvaluateable() && Arg<CNode*>(1)->IsWidthEvaluateable();
08996 case eWIDTH:
08997 return Arg<CNode*>(0)->IsEvaluateable();
08998 case eSUB:
08999 return Arg<CNode*>(0)->IsWidthEvaluateable() && Arg<CNode*>(1)->IsWidthEvaluateable();
09000 case eMUL:
09001 return Arg<CNode*>(0)->IsWidthEvaluateable() && Arg<CNode*>(1)->IsWidthEvaluateable();
09002 case eDIV:
09003 return Arg<CNode*>(0)->IsWidthEvaluateable() && Arg<CNode*>(1)->IsWidthEvaluateable();
09004 case ePOW:
09005 return Arg<CNode*>(0)->IsWidthEvaluateable();
09006 case eADD:
09007 return Arg<CNode*>(0)->IsWidthEvaluateable() && Arg<CNode*>(1)->IsWidthEvaluateable();
09008 case eLSH:
09009 return Arg<CNode*>(0)->IsWidthEvaluateable();
09010 case eRSH:
09011 return Arg<CNode*>(0)->IsWidthEvaluateable();
09012 case eLSHA:
09013 return Arg<CNode*>(0)->IsWidthEvaluateable();
09014 case eRSHA:
09015 return Arg<CNode*>(0)->IsWidthEvaluateable();
09016 case eMOD:
09017 return Arg<CNode*>(0)->IsWidthEvaluateable() && Arg<CNode*>(1)->IsWidthEvaluateable();
09018 case eOR:
09019 return Arg<CNode*>(0)->IsWidthEvaluateable() && Arg<CNode*>(1)->IsWidthEvaluateable();
09020 case eAND:
09021 return Arg<CNode*>(0)->IsWidthEvaluateable() && Arg<CNode*>(1)->IsWidthEvaluateable();
09022 case eANDANDAND:
09023 return Arg<CNode*>(0)->IsWidthEvaluateable() && Arg<CNode*>(1)->IsWidthEvaluateable();
09024 case eXOR:
09025 return Arg<CNode*>(0)->IsWidthEvaluateable() && Arg<CNode*>(1)->IsWidthEvaluateable();
09026 case eXNOR:
09027 return Arg<CNode*>(0)->IsWidthEvaluateable() && Arg<CNode*>(1)->IsWidthEvaluateable();
09028 case eSYSTASK_CALL:
09029 return Systask::WidthEvaluateable(Arg<CSymbol*>(0),Arg<CNode*>(1));
09030 case eFUNCTION_CALL:
09031 return CFunction::WidthEvaluateable(Arg<CSymbol*>(0),Arg<CNode*>(1),Arg<CScope*>(2));
09032 case eARRAY:
09033 return Array::WidthEvaluateable(Arg<CNode*>(0),Arg<CNode*>(1));
09034 case eNET_REF:
09035 return Arg<CNet*>(0)->IsWidthEvaluateable();
09036 case eVAR_REF:
09037 return Arg<CVar*>(0)->IsWidthEvaluateable();
09038 case ePARAM_REF:
09039 return Arg<CParam*>(0)->IsWidthEvaluateable();
09040 case ePORT_REF:
09041 return Arg<CPortDir*>(0)->IsWidthEvaluateable();
09042 case eFWD_REF:
09043 return Arg<CFref*>(0)->IsWidthEvaluateable();
09044 case eGENVAR_REF:
09045 return Arg<CGenvar*>(0)->IsWidthEvaluateable();
09046 case eENUM_REF:
09047 return Arg<CEnum*>(0)->IsWidthEvaluateable();
09048 case eTYPE_REF:
09049 return TRUE;
09050 case eRANGE:
09051 return Arg<CNode*>(0)->IsEvaluateable() && Arg<CNode*>(1)->IsEvaluateable();
09052 case eSLICE:
09053 return Arg<CNode*>(0)->IsEvaluateable() && Arg<CNode*>(1)->IsEvaluateable();
09054 case ePSLICE:
09055 return Arg<CNode*>(1)->IsEvaluateable();
09056 case eMSLICE:
09057 return Arg<CNode*>(1)->IsEvaluateable();
09058 case eCVRI:
09059 return TRUE;
09060 case eCVIR:
09061 return FALSE;
09062 case eREP:
09063 return Arg<CNode*>(0)->IsEvaluateable() && Arg<CNode*>(1)->IsWidthEvaluateable();
09064 case eCAT:
09065 return Arg<CNode*>(0)->IsWidthEvaluateable() && Arg<CNode*>(1)->IsWidthEvaluateable();
09066 case eUCAT:
09067 return Arg<CNode*>(0)->IsWidthEvaluateable();
09068 case eCOM:
09069 return Arg<CNode*>(0)->IsWidthEvaluateable();
09070 case eNEG:
09071 return Arg<CNode*>(0)->IsWidthEvaluateable();
09072 case ePLUS:
09073 return Arg<CNode*>(0)->IsWidthEvaluateable();
09074 case eNOT:
09075 return TRUE;
09076 case eGT:
09077 return TRUE;
09078 case eGE:
09079 return TRUE;
09080 case eLT:
09081 return TRUE;
09082 case eLE:
09083 return TRUE;
09084 case eLAND:
09085 return TRUE;
09086 case eLOR:
09087 return TRUE;
09088 case eCEQ:
09089 return TRUE;
09090 case eCNE:
09091 return TRUE;
09092 case eEQ:
09093 return TRUE;
09094 case eNE:
09095 return TRUE;
09096 case eRAND:
09097 return TRUE;
09098 case eRNAND:
09099 return TRUE;
09100 case eROR:
09101 return TRUE;
09102 case eRNOR:
09103 return TRUE;
09104 case eRXOR:
09105 return TRUE;
09106 case eRXNOR:
09107 return TRUE;
09108 case eHOOK:
09109 return Arg<CNode*>(1)->IsWidthEvaluateable() && Arg<CNode*>(2)->IsWidthEvaluateable();
09110 case eMTM:
09111 return Arg<CNode*>(0)->IsWidthEvaluateable() && Arg<CNode*>(1)->IsWidthEvaluateable() && Arg<CNode*>(2)->IsWidthEvaluateable();
09112 case eEXTERNAL_REF:
09113 return External::WidthEvaluateable(Arg<CSymbol*>(0));
09114 case eATTRIBUTE:
09115 return TRUE;
09116 case eMACRO_EXPR:
09117 return Arg<CNode*>(1)->IsWidthEvaluateable();
09118 case eMEMBER:
09119 return Member::WidthEvaluateable(Arg<CNode*>(0),Arg<CSymbol*>(1));
09120 case ePREINC:
09121 return Arg<CNode*>(0)->IsWidthEvaluateable();
09122 case ePOSTINC:
09123 return Arg<CNode*>(0)->IsWidthEvaluateable();
09124 case ePREDEC:
09125 return Arg<CNode*>(0)->IsWidthEvaluateable();
09126 case ePOSTDEC:
09127 return Arg<CNode*>(0)->IsWidthEvaluateable();
09128 case eCAST:
09129 return Arg<CNode*>(0)->IsEvaluateable();
09130 default:
09131 MASSERT( FALSE );
09132 return 0;
09133 }
09134 }
09135
09136
09137
09138
09139
09140
09141
09142
09143 int CNode::IsNonX( int integerIsNonX, char* exclude )
09144 {
09145 switch( GetOp() ) {
09146 case eERROR:
09147 return FALSE;
09148 case eVCONSTANT:
09149 return !Arg<CVector*>(0)->HasXZ();
09150 case eRCONSTANT:
09151 return TRUE;
09152 case eELIST:
09153 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09154 case eWIDTH:
09155 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09156 case eSUB:
09157 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09158 case eMUL:
09159 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09160 case eDIV:
09161 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09162 case ePOW:
09163 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09164 case eADD:
09165 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09166 case eLSH:
09167 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09168 case eRSH:
09169 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09170 case eLSHA:
09171 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09172 case eRSHA:
09173 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09174 case eMOD:
09175 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09176 case eOR:
09177 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09178 case eAND:
09179 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09180 case eANDANDAND:
09181 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09182 case eXOR:
09183 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09184 case eXNOR:
09185 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09186 case eSYSTASK_CALL:
09187 return FALSE;
09188 case eFUNCTION_CALL:
09189 return FALSE;
09190 case eARRAY:
09191 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09192 case eNET_REF:
09193 return Arg<CDecl*>(0)->HasAttribute( exclude ) ||
09194
09195 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() == eINT);
09196 case eVAR_REF:
09197 return Arg<CDecl*>(0)->GetDataType()->GetTwoState() ||
09198
09199 Arg<CDecl*>(0)->GetNodeType() == eR ||
09200
09201 Arg<CDecl*>(0)->HasAttribute( exclude ) ||
09202
09203 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() == eINTEGER);
09204 case ePARAM_REF:
09205 return TRUE;
09206 case ePORT_REF:
09207 return Arg<CDecl*>(0)->HasAttribute( exclude ) ||
09208
09209 (integerIsNonX && Arg<CDecl*>(0)->GetDataType()->GetVarDataType() == eINT);
09210 case eFWD_REF:
09211 return FALSE;
09212 case eGENVAR_REF:
09213 return TRUE;
09214 case eENUM_REF:
09215 return Arg<CEnum*>(0)->GetExpression()->IsNonX( integerIsNonX, exclude );
09216 case eTYPE_REF:
09217 return TRUE;
09218 case eRANGE:
09219 return FALSE;
09220 case eSLICE:
09221 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09222 case ePSLICE:
09223 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09224 case eMSLICE:
09225 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09226 case eCVRI:
09227 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09228 case eCVIR:
09229 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09230 case eREP:
09231 return Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09232 case eCAT:
09233 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09234 case eUCAT:
09235 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09236 case eCOM:
09237 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09238 case eNEG:
09239 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09240 case ePLUS:
09241 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09242 case eNOT:
09243 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09244 case eGT:
09245 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09246 case eGE:
09247 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09248 case eLT:
09249 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09250 case eLE:
09251 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09252 case eLAND:
09253 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09254 case eLOR:
09255 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09256 case eCEQ:
09257 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09258 case eCNE:
09259 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09260 case eEQ:
09261 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09262 case eNE:
09263 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09264 case eRAND:
09265 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09266 case eRNAND:
09267 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09268 case eROR:
09269 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09270 case eRNOR:
09271 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09272 case eRXOR:
09273 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09274 case eRXNOR:
09275 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09276 case eHOOK:
09277 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(2)->IsNonX( integerIsNonX, exclude );
09278 case ePOSEDGE:
09279 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09280 case eNEGEDGE:
09281 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09282 case eEVOR:
09283 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09284 case eMTM:
09285 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(2)->IsNonX( integerIsNonX, exclude );
09286 case eEXTERNAL_REF:
09287 return FALSE;
09288 case eMACRO_EXPR:
09289 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsNonX(integerIsNonX, exclude) : FALSE;
09290 case eMEMBER:
09291 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09292 case ePREINC:
09293 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09294 case ePOSTINC:
09295 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09296 case ePREDEC:
09297 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09298 case ePOSTDEC:
09299 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude );
09300 case eCAST:
09301 return Arg<CNode*>(0)->IsNonX( integerIsNonX, exclude ) && Arg<CNode*>(1)->IsNonX( integerIsNonX, exclude );
09302 default:
09303 MASSERT( FALSE );
09304 return 0;
09305 }
09306 }
09307
09308
09309
09310
09311
09312
09313
09314 CNode* CNode::Clone( CObstack* heap )
09315 {
09316 int nodeMask = 0;
09317 switch( GetOp() ) {
09318 case eERROR:
09319 nodeMask = 0;
09320 break;
09321 case eVCONSTANT:
09322 nodeMask = 0;
09323 break;
09324 case eRCONSTANT:
09325 nodeMask = 0;
09326 break;
09327 case eCOMMENT:
09328 nodeMask = 0;
09329 break;
09330 case eVRQ:
09331 nodeMask = 0;
09332 break;
09333 case ePRAGMA:
09334 nodeMask = 0;
09335 break;
09336 case eELIST:
09337 nodeMask = 3;
09338 break;
09339 case eWIDTH:
09340 nodeMask = 3;
09341 break;
09342 case eNOP:
09343 nodeMask = 0;
09344 break;
09345 case eSUB:
09346 nodeMask = 3;
09347 break;
09348 case eMUL:
09349 nodeMask = 3;
09350 break;
09351 case eDIV:
09352 nodeMask = 3;
09353 break;
09354 case ePOW:
09355 nodeMask = 3;
09356 break;
09357 case eADD:
09358 nodeMask = 3;
09359 break;
09360 case eLSH:
09361 nodeMask = 3;
09362 break;
09363 case eRSH:
09364 nodeMask = 3;
09365 break;
09366 case eLSHA:
09367 nodeMask = 3;
09368 break;
09369 case eRSHA:
09370 nodeMask = 3;
09371 break;
09372 case eMOD:
09373 nodeMask = 3;
09374 break;
09375 case eOR:
09376 nodeMask = 3;
09377 break;
09378 case eAND:
09379 nodeMask = 3;
09380 break;
09381 case eANDANDAND:
09382 nodeMask = 3;
09383 break;
09384 case eXOR:
09385 nodeMask = 3;
09386 break;
09387 case eXNOR:
09388 nodeMask = 3;
09389 break;
09390 case eINSTANCE_REF:
09391 nodeMask = 0;
09392 break;
09393 case eGATE_REF:
09394 nodeMask = 0;
09395 break;
09396 case eTASK_ENABLE:
09397 nodeMask = 2;
09398 break;
09399 case eSYSTASK_CALL:
09400 nodeMask = 2;
09401 break;
09402 case eTIMING_CALL:
09403 nodeMask = 2;
09404 break;
09405 case eFUNCTION_CALL:
09406 nodeMask = 2;
09407 break;
09408 case eARRAY:
09409 nodeMask = 3;
09410 break;
09411 case eNET_REF:
09412 nodeMask = 0;
09413 break;
09414 case eVAR_REF:
09415 nodeMask = 0;
09416 break;
09417 case ePARAM_REF:
09418 nodeMask = 0;
09419 break;
09420 case ePORT_REF:
09421 nodeMask = 0;
09422 break;
09423 case eFWD_REF:
09424 nodeMask = 0;
09425 break;
09426 case eGENVAR_REF:
09427 nodeMask = 0;
09428 break;
09429 case eENUM_REF:
09430 nodeMask = 0;
09431 break;
09432 case eTYPE_REF:
09433 nodeMask = 0;
09434 break;
09435 case eNET_DECL:
09436 nodeMask = 2;
09437 break;
09438 case eVAR_DECL:
09439 nodeMask = 2;
09440 break;
09441 case ePARAM_DECL:
09442 nodeMask = 0;
09443 break;
09444 case eSPECPARAM_DECL:
09445 nodeMask = 0;
09446 break;
09447 case ePORT_DECL:
09448 nodeMask = 0;
09449 break;
09450 case eGENVAR_DECL:
09451 nodeMask = 0;
09452 break;
09453 case eTYPEDEF_DECL:
09454 nodeMask = 0;
09455 break;
09456 case eLIST:
09457 nodeMask = 3;
09458 break;
09459 case eRANGE:
09460 nodeMask = 3;
09461 break;
09462 case eSLICE:
09463 nodeMask = 3;
09464 break;
09465 case ePSLICE:
09466 nodeMask = 3;
09467 break;
09468 case eMSLICE:
09469 nodeMask = 3;
09470 break;
09471 case eCVRI:
09472 nodeMask = 1;
09473 break;
09474 case eCVIR:
09475 nodeMask = 1;
09476 break;
09477 case eREP:
09478 nodeMask = 3;
09479 break;
09480 case eCAT:
09481 nodeMask = 3;
09482 break;
09483 case eUCAT:
09484 nodeMask = 1;
09485 break;
09486 case eCOM:
09487 nodeMask = 1;
09488 break;
09489 case eNEG:
09490 nodeMask = 1;
09491 break;
09492 case ePLUS:
09493 nodeMask = 1;
09494 break;
09495 case eNOT:
09496 nodeMask = 1;
09497 break;
09498 case eGT:
09499 nodeMask = 3;
09500 break;
09501 case eGE:
09502 nodeMask = 3;
09503 break;
09504 case eLT:
09505 nodeMask = 3;
09506 break;
09507 case eLE:
09508 nodeMask = 3;
09509 break;
09510 case eLAND:
09511 nodeMask = 3;
09512 break;
09513 case eLOR:
09514 nodeMask = 3;
09515 break;
09516 case eCEQ:
09517 nodeMask = 3;
09518 break;
09519 case eCNE:
09520 nodeMask = 3;
09521 break;
09522 case eEQ:
09523 nodeMask = 3;
09524 break;
09525 case eNE:
09526 nodeMask = 3;
09527 break;
09528 case eRAND:
09529 nodeMask = 1;
09530 break;
09531 case eRNAND:
09532 nodeMask = 1;
09533 break;
09534 case eROR:
09535 nodeMask = 1;
09536 break;
09537 case eRNOR:
09538 nodeMask = 1;
09539 break;
09540 case eRXOR:
09541 nodeMask = 1;
09542 break;
09543 case eRXNOR:
09544 nodeMask = 1;
09545 break;
09546 case eHOOK:
09547 nodeMask = 7;
09548 break;
09549 case eINIT:
09550 nodeMask = 1;
09551 break;
09552 case eALWAYS:
09553 nodeMask = 1;
09554 break;
09555 case eALWAYS_LATCH:
09556 nodeMask = 1;
09557 break;
09558 case eALWAYS_FF:
09559 nodeMask = 1;
09560 break;
09561 case eALWAYS_COMB:
09562 nodeMask = 1;
09563 break;
09564 case eEVENT:
09565 nodeMask = 3;
09566 break;
09567 case eBLOCK_REF:
09568 nodeMask = 2;
09569 break;
09570 case eSPECIFY_REF:
09571 nodeMask = 2;
09572 break;
09573 case eASSIGN:
09574 nodeMask = 7;
09575 break;
09576 case eADD_ASSIGN:
09577 nodeMask = 7;
09578 break;
09579 case eSUB_ASSIGN:
09580 nodeMask = 7;
09581 break;
09582 case eMUL_ASSIGN:
09583 nodeMask = 7;
09584 break;
09585 case eDIV_ASSIGN:
09586 nodeMask = 7;
09587 break;
09588 case eMOD_ASSIGN:
09589 nodeMask = 7;
09590 break;
09591 case eAND_ASSIGN:
09592 nodeMask = 7;
09593 break;
09594 case eOR_ASSIGN:
09595 nodeMask = 7;
09596 break;
09597 case eXOR_ASSIGN:
09598 nodeMask = 7;
09599 break;
09600 case eLSH_ASSIGN:
09601 nodeMask = 7;
09602 break;
09603 case eRSH_ASSIGN:
09604 nodeMask = 7;
09605 break;
09606 case eLSHA_ASSIGN:
09607 nodeMask = 7;
09608 break;
09609 case eRSHA_ASSIGN:
09610 nodeMask = 7;
09611 break;
09612 case eFORCE:
09613 nodeMask = 3;
09614 break;
09615 case eRELEASE:
09616 nodeMask = 1;
09617 break;
09618 case eNBASSIGN:
09619 nodeMask = 7;
09620 break;
09621 case ePOSEDGE:
09622 nodeMask = 1;
09623 break;
09624 case eNEGEDGE:
09625 nodeMask = 1;
09626 break;
09627 case eEDGE:
09628 nodeMask = 1;
09629 break;
09630 case eEVOR:
09631 nodeMask = 3;
09632 break;
09633 case eDELAY:
09634 nodeMask = 3;
09635 break;
09636 case eMTM:
09637 nodeMask = 7;
09638 break;
09639 case eIF:
09640 nodeMask = 7;
09641 break;
09642 case eFOREVER:
09643 nodeMask = 1;
09644 break;
09645 case eREPEAT:
09646 nodeMask = 3;
09647 break;
09648 case eWHILE:
09649 nodeMask = 3;
09650 break;
09651 case eWAIT:
09652 nodeMask = 3;
09653 break;
09654 case eFOR:
09655 nodeMask = 15;
09656 break;
09657 case eCASE:
09658 nodeMask = 3;
09659 break;
09660 case eCASEX:
09661 nodeMask = 3;
09662 break;
09663 case eCASEZ:
09664 nodeMask = 3;
09665 break;
09666 case eCASEITEM:
09667 nodeMask = 3;
09668 break;
09669 case eCASSIGN:
09670 nodeMask = 14;
09671 break;
09672 case eARG:
09673 nodeMask = 2;
09674 break;
09675 case eFUNCTION_DEF:
09676 nodeMask = 0;
09677 break;
09678 case eMODULE_DEF:
09679 nodeMask = 0;
09680 break;
09681 case eREPEAT_CONTROL:
09682 nodeMask = 3;
09683 break;
09684 case eDELAY_CONTROL:
09685 nodeMask = 1;
09686 break;
09687 case eEVENT_CONTROL:
09688 nodeMask = 1;
09689 break;
09690 case eEXTERNAL_REF:
09691 nodeMask = 0;
09692 break;
09693 case ePORT_DEF:
09694 nodeMask = 0;
09695 break;
09696 case eDEFPARAM:
09697 nodeMask = 3;
09698 break;
09699 case ePATH:
09700 nodeMask = 82;
09701 break;
09702 case ePATH_ASSIGN:
09703 nodeMask = 7;
09704 break;
09705 case eIFNONE_PATH_ASSIGN:
09706 nodeMask = 3;
09707 break;
09708 case eTRIGGER:
09709 nodeMask = 1;
09710 break;
09711 case ePASSIGN:
09712 nodeMask = 3;
09713 break;
09714 case eDEASSIGN:
09715 nodeMask = 1;
09716 break;
09717 case eDISABLE:
09718 nodeMask = 0;
09719 break;
09720 case eATTRIBUTE:
09721 nodeMask = 0;
09722 break;
09723 case eGIF:
09724 nodeMask = 7;
09725 break;
09726 case eGFOR:
09727 nodeMask = 15;
09728 break;
09729 case eGCASE:
09730 nodeMask = 3;
09731 break;
09732 case eTABLE:
09733 nodeMask = 1;
09734 break;
09735 case eTABLE_ENTRY:
09736 nodeMask = 1;
09737 break;
09738 case eTABLE_SYMBOL:
09739 nodeMask = 0;
09740 break;
09741 case ePORTLIST_END:
09742 nodeMask = 0;
09743 break;
09744 case eMACRO_EXPR:
09745 nodeMask = 2;
09746 break;
09747 case eENUM_SPEC:
09748 nodeMask = 6;
09749 break;
09750 case eMEMBER:
09751 nodeMask = 1;
09752 break;
09753 case eRETURN:
09754 nodeMask = 1;
09755 break;
09756 case ePREINC:
09757 nodeMask = 1;
09758 break;
09759 case ePOSTINC:
09760 nodeMask = 1;
09761 break;
09762 case ePREDEC:
09763 nodeMask = 1;
09764 break;
09765 case ePOSTDEC:
09766 nodeMask = 1;
09767 break;
09768 case eCAST:
09769 nodeMask = 3;
09770 break;
09771 default:
09772 MASSERT( FALSE );
09773 }
09774
09775 CNode* n = new(stack) CNode( &loc, op );
09776 n->width = width;
09777 n->type = type;
09778 n->fixedWidth = fixedWidth;
09779 if( attributes ) {
09780 n->attributes = attributes->Clone(heap);
09781 }
09782 for( int i = 0; i < ArgCount(); i++ ) {
09783 if( ((nodeMask>>i)&1) && Arg<CNode*>(i) ) {
09784 n->Arg<CNode*>(i) = Arg<CNode*>(i)->Clone(heap);
09785 } else {
09786 void* tmp = Arg<void*>(i);
09787 n->Arg<void*>(i) = tmp;
09788 }
09789 }
09790 return n;
09791 }
09792
09793
09794
09795
09796
09797
09798
09799
09800
09801 void CNode::PreVisit1( int (*func)(CNode*, void*), void* data )
09802 {
09803 if( !(*func)( this, data ) ) {
09804 return;
09805 }
09806
09807 if( GetAttributes() ) {
09808 GetAttributes()->PreVisit1( func, data );
09809 }
09810
09811 int nodeMask = 0;
09812 switch( GetOp() ) {
09813 case eERROR:
09814 nodeMask = 0;
09815 break;
09816 case eVCONSTANT:
09817 nodeMask = 1;
09818 break;
09819 case eRCONSTANT:
09820 nodeMask = 1;
09821 break;
09822 case eCOMMENT:
09823 nodeMask = 1;
09824 break;
09825 case eVRQ:
09826 nodeMask = 1;
09827 break;
09828 case ePRAGMA:
09829 nodeMask = 1;
09830 break;
09831 case eELIST:
09832 nodeMask = 0;
09833 break;
09834 case eWIDTH:
09835 nodeMask = 0;
09836 break;
09837 case eNOP:
09838 nodeMask = 0;
09839 break;
09840 case eSUB:
09841 nodeMask = 0;
09842 break;
09843 case eMUL:
09844 nodeMask = 0;
09845 break;
09846 case eDIV:
09847 nodeMask = 0;
09848 break;
09849 case ePOW:
09850 nodeMask = 0;
09851 break;
09852 case eADD:
09853 nodeMask = 0;
09854 break;
09855 case eLSH:
09856 nodeMask = 0;
09857 break;
09858 case eRSH:
09859 nodeMask = 0;
09860 break;
09861 case eLSHA:
09862 nodeMask = 0;
09863 break;
09864 case eRSHA:
09865 nodeMask = 0;
09866 break;
09867 case eMOD:
09868 nodeMask = 0;
09869 break;
09870 case eOR:
09871 nodeMask = 0;
09872 break;
09873 case eAND:
09874 nodeMask = 0;
09875 break;
09876 case eANDANDAND:
09877 nodeMask = 0;
09878 break;
09879 case eXOR:
09880 nodeMask = 0;
09881 break;
09882 case eXNOR:
09883 nodeMask = 0;
09884 break;
09885 case eINSTANCE_REF:
09886 nodeMask = 1;
09887 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->PreVisit1( func, data );
09888 break;
09889 case eGATE_REF:
09890 nodeMask = 1;
09891 if(Arg<CGate*>(0)) Arg<CGate*>(0)->PreVisit1( func, data );
09892 break;
09893 case eTASK_ENABLE:
09894 nodeMask = 1;
09895 break;
09896 case eSYSTASK_CALL:
09897 nodeMask = 1;
09898 break;
09899 case eTIMING_CALL:
09900 nodeMask = 1;
09901 break;
09902 case eFUNCTION_CALL:
09903 nodeMask = 5;
09904 break;
09905 case eARRAY:
09906 nodeMask = 0;
09907 break;
09908 case eNET_REF:
09909 return;
09910 case eVAR_REF:
09911 return;
09912 case ePARAM_REF:
09913 return;
09914 case ePORT_REF:
09915 return;
09916 case eFWD_REF:
09917 return;
09918 case eGENVAR_REF:
09919 return;
09920 case eENUM_REF:
09921 return;
09922 case eTYPE_REF:
09923 return;
09924 case eNET_DECL:
09925 nodeMask = 1;
09926 if(Arg<CNet*>(0)) Arg<CNet*>(0)->PreVisit1( func, data );
09927 break;
09928 case eVAR_DECL:
09929 nodeMask = 1;
09930 if(Arg<CVar*>(0)) Arg<CVar*>(0)->PreVisit1( func, data );
09931 break;
09932 case ePARAM_DECL:
09933 nodeMask = 1;
09934 if(Arg<CParam*>(0)) Arg<CParam*>(0)->PreVisit1( func, data );
09935 break;
09936 case eSPECPARAM_DECL:
09937 nodeMask = 1;
09938 if(Arg<CParam*>(0)) Arg<CParam*>(0)->PreVisit1( func, data );
09939 break;
09940 case ePORT_DECL:
09941 nodeMask = 1;
09942 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->PreVisit1( func, data );
09943 break;
09944 case eGENVAR_DECL:
09945 nodeMask = 1;
09946 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->PreVisit1( func, data );
09947 break;
09948 case eTYPEDEF_DECL:
09949 nodeMask = 1;
09950 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->PreVisit1( func, data );
09951 break;
09952 case eLIST:
09953 nodeMask = 0;
09954 break;
09955 case eRANGE:
09956 nodeMask = 0;
09957 break;
09958 case eSLICE:
09959 nodeMask = 0;
09960 break;
09961 case ePSLICE:
09962 nodeMask = 0;
09963 break;
09964 case eMSLICE:
09965 nodeMask = 0;
09966 break;
09967 case eCVRI:
09968 nodeMask = 0;
09969 break;
09970 case eCVIR:
09971 nodeMask = 0;
09972 break;
09973 case eREP:
09974 nodeMask = 0;
09975 break;
09976 case eCAT:
09977 nodeMask = 0;
09978 break;
09979 case eUCAT:
09980 nodeMask = 0;
09981 break;
09982 case eCOM:
09983 nodeMask = 0;
09984 break;
09985 case eNEG:
09986 nodeMask = 0;
09987 break;
09988 case ePLUS:
09989 nodeMask = 0;
09990 break;
09991 case eNOT:
09992 nodeMask = 0;
09993 break;
09994 case eGT:
09995 nodeMask = 0;
09996 break;
09997 case eGE:
09998 nodeMask = 0;
09999 break;
10000 case eLT:
10001 nodeMask = 0;
10002 break;
10003 case eLE:
10004 nodeMask = 0;
10005 break;
10006 case eLAND:
10007 nodeMask = 0;
10008 break;
10009 case eLOR:
10010 nodeMask = 0;
10011 break;
10012 case eCEQ:
10013 nodeMask = 0;
10014 break;
10015 case eCNE:
10016 nodeMask = 0;
10017 break;
10018 case eEQ:
10019 nodeMask = 0;
10020 break;
10021 case eNE:
10022 nodeMask = 0;
10023 break;
10024 case eRAND:
10025 nodeMask = 0;
10026 break;
10027 case eRNAND:
10028 nodeMask = 0;
10029 break;
10030 case eROR:
10031 nodeMask = 0;
10032 break;
10033 case eRNOR:
10034 nodeMask = 0;
10035 break;
10036 case eRXOR:
10037 nodeMask = 0;
10038 break;
10039 case eRXNOR:
10040 nodeMask = 0;
10041 break;
10042 case eHOOK:
10043 nodeMask = 0;
10044 break;
10045 case eINIT:
10046 nodeMask = 0;
10047 break;
10048 case eALWAYS:
10049 nodeMask = 0;
10050 break;
10051 case eALWAYS_LATCH:
10052 nodeMask = 0;
10053 break;
10054 case eALWAYS_FF:
10055 nodeMask = 0;
10056 break;
10057 case eALWAYS_COMB:
10058 nodeMask = 0;
10059 break;
10060 case eEVENT:
10061 nodeMask = 0;
10062 break;
10063 case eBLOCK_REF:
10064 nodeMask = 1;
10065 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->PreVisit1( func, data );
10066 break;
10067 case eSPECIFY_REF:
10068 nodeMask = 1;
10069 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->PreVisit1( func, data );
10070 break;
10071 case eASSIGN:
10072 nodeMask = 0;
10073 break;
10074 case eADD_ASSIGN:
10075 nodeMask = 0;
10076 break;
10077 case eSUB_ASSIGN:
10078 nodeMask = 0;
10079 break;
10080 case eMUL_ASSIGN:
10081 nodeMask = 0;
10082 break;
10083 case eDIV_ASSIGN:
10084 nodeMask = 0;
10085 break;
10086 case eMOD_ASSIGN:
10087 nodeMask = 0;
10088 break;
10089 case eAND_ASSIGN:
10090 nodeMask = 0;
10091 break;
10092 case eOR_ASSIGN:
10093 nodeMask = 0;
10094 break;
10095 case eXOR_ASSIGN:
10096 nodeMask = 0;
10097 break;
10098 case eLSH_ASSIGN:
10099 nodeMask = 0;
10100 break;
10101 case eRSH_ASSIGN:
10102 nodeMask = 0;
10103 break;
10104 case eLSHA_ASSIGN:
10105 nodeMask = 0;
10106 break;
10107 case eRSHA_ASSIGN:
10108 nodeMask = 0;
10109 break;
10110 case eFORCE:
10111 nodeMask = 0;
10112 break;
10113 case eRELEASE:
10114 nodeMask = 0;
10115 break;
10116 case eNBASSIGN:
10117 nodeMask = 0;
10118 break;
10119 case ePOSEDGE:
10120 nodeMask = 0;
10121 break;
10122 case eNEGEDGE:
10123 nodeMask = 0;
10124 break;
10125 case eEDGE:
10126 nodeMask = 2;
10127 break;
10128 case eEVOR:
10129 nodeMask = 0;
10130 break;
10131 case eDELAY:
10132 nodeMask = 0;
10133 break;
10134 case eMTM:
10135 nodeMask = 0;
10136 break;
10137 case eIF:
10138 nodeMask = 0;
10139 break;
10140 case eFOREVER:
10141 nodeMask = 0;
10142 break;
10143 case eREPEAT:
10144 nodeMask = 0;
10145 break;
10146 case eWHILE:
10147 nodeMask = 0;
10148 break;
10149 case eWAIT:
10150 nodeMask = 0;
10151 break;
10152 case eFOR:
10153 nodeMask = 0;
10154 break;
10155 case eCASE:
10156 nodeMask = 0;
10157 break;
10158 case eCASEX:
10159 nodeMask = 0;
10160 break;
10161 case eCASEZ:
10162 nodeMask = 0;
10163 break;
10164 case eCASEITEM:
10165 nodeMask = 0;
10166 break;
10167 case eCASSIGN:
10168 nodeMask = 1;
10169 break;
10170 case eARG:
10171 nodeMask = 1;
10172 break;
10173 case eFUNCTION_DEF:
10174 nodeMask = 1;
10175 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->PreVisit1( func, data );
10176 break;
10177 case eMODULE_DEF:
10178 nodeMask = 1;
10179 if(Arg<CModule*>(0)) Arg<CModule*>(0)->PreVisit1( func, data );
10180 break;
10181 case eREPEAT_CONTROL:
10182 nodeMask = 0;
10183 break;
10184 case eDELAY_CONTROL:
10185 nodeMask = 0;
10186 break;
10187 case eEVENT_CONTROL:
10188 nodeMask = 0;
10189 break;
10190 case eEXTERNAL_REF:
10191 nodeMask = 1;
10192 break;
10193 case ePORT_DEF:
10194 nodeMask = 1;
10195 if(Arg<CPort*>(0)) Arg<CPort*>(0)->PreVisit1( func, data );
10196 break;
10197 case eDEFPARAM:
10198 nodeMask = 0;
10199 break;
10200 case ePATH:
10201 nodeMask = 45;
10202 break;
10203 case ePATH_ASSIGN:
10204 nodeMask = 0;
10205 break;
10206 case eIFNONE_PATH_ASSIGN:
10207 nodeMask = 0;
10208 break;
10209 case eTRIGGER:
10210 nodeMask = 0;
10211 break;
10212 case ePASSIGN:
10213 nodeMask = 0;
10214 break;
10215 case eDEASSIGN:
10216 nodeMask = 0;
10217 break;
10218 case eDISABLE:
10219 nodeMask = 1;
10220 break;
10221 case eATTRIBUTE:
10222 nodeMask = 1;
10223 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->PreVisit1( func, data );
10224 break;
10225 case eGIF:
10226 nodeMask = 0;
10227 break;
10228 case eGFOR:
10229 nodeMask = 0;
10230 break;
10231 case eGCASE:
10232 nodeMask = 0;
10233 break;
10234 case eTABLE:
10235 nodeMask = 0;
10236 break;
10237 case eTABLE_ENTRY:
10238 nodeMask = 0;
10239 break;
10240 case eTABLE_SYMBOL:
10241 nodeMask = 1;
10242 break;
10243 case ePORTLIST_END:
10244 nodeMask = 0;
10245 break;
10246 case eMACRO_EXPR:
10247 nodeMask = 1;
10248 break;
10249 case eENUM_SPEC:
10250 nodeMask = 1;
10251 break;
10252 case eMEMBER:
10253 nodeMask = 2;
10254 break;
10255 case eRETURN:
10256 nodeMask = 0;
10257 break;
10258 case ePREINC:
10259 nodeMask = 0;
10260 break;
10261 case ePOSTINC:
10262 nodeMask = 0;
10263 break;
10264 case ePREDEC:
10265 nodeMask = 0;
10266 break;
10267 case ePOSTDEC:
10268 nodeMask = 0;
10269 break;
10270 case eCAST:
10271 nodeMask = 0;
10272 break;
10273 }
10274
10275
10276
10277
10278 if( GetOp() != eLIST ) {
10279 for( int i = 0; i < ArgCount(); i++ ) {
10280 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i)->PreVisit1( func, data );
10281 }
10282 } else {
10283 CNode* n = this;
10284 while( 1 ) {
10285 if( n->Arg<CNode*>(0) ) {
10286 n->Arg<CNode*>(0)->PreVisit1( func, data );
10287 }
10288 if( !n->Arg<CNode*>(1) || n->Arg<CNode*>(1)->GetOp() != eLIST ) {
10289 break;
10290 }
10291 n = n->Arg<CNode*>(1);
10292 if( !(*func)( n, data ) ) {
10293 return;
10294 }
10295 if( n->GetAttributes() ) {
10296 n->GetAttributes()->PreVisit1( func, data );
10297 }
10298 }
10299 if( n->Arg<CNode*>(1) ) {
10300 n->Arg<CNode*>(1)->PreVisit1( func, data );
10301 }
10302 }
10303 }
10304
10305
10306
10307
10308
10309
10310
10311 void CNode::PostVisit1( void (*func)(CNode*, void*), void* data )
10312 {
10313 if( GetAttributes() ) {
10314 GetAttributes()->PostVisit1( func, data );
10315 }
10316
10317 int nodeMask = 0;
10318 switch( GetOp() ) {
10319 case eERROR:
10320 nodeMask = 0;
10321 break;
10322 case eVCONSTANT:
10323 nodeMask = 1;
10324 break;
10325 case eRCONSTANT:
10326 nodeMask = 1;
10327 break;
10328 case eCOMMENT:
10329 nodeMask = 1;
10330 break;
10331 case eVRQ:
10332 nodeMask = 1;
10333 break;
10334 case ePRAGMA:
10335 nodeMask = 1;
10336 break;
10337 case eELIST:
10338 nodeMask = 0;
10339 break;
10340 case eWIDTH:
10341 nodeMask = 0;
10342 break;
10343 case eNOP:
10344 nodeMask = 0;
10345 break;
10346 case eSUB:
10347 nodeMask = 0;
10348 break;
10349 case eMUL:
10350 nodeMask = 0;
10351 break;
10352 case eDIV:
10353 nodeMask = 0;
10354 break;
10355 case ePOW:
10356 nodeMask = 0;
10357 break;
10358 case eADD:
10359 nodeMask = 0;
10360 break;
10361 case eLSH:
10362 nodeMask = 0;
10363 break;
10364 case eRSH:
10365 nodeMask = 0;
10366 break;
10367 case eLSHA:
10368 nodeMask = 0;
10369 break;
10370 case eRSHA:
10371 nodeMask = 0;
10372 break;
10373 case eMOD:
10374 nodeMask = 0;
10375 break;
10376 case eOR:
10377 nodeMask = 0;
10378 break;
10379 case eAND:
10380 nodeMask = 0;
10381 break;
10382 case eANDANDAND:
10383 nodeMask = 0;
10384 break;
10385 case eXOR:
10386 nodeMask = 0;
10387 break;
10388 case eXNOR:
10389 nodeMask = 0;
10390 break;
10391 case eINSTANCE_REF:
10392 nodeMask = 1;
10393 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->PostVisit1( func, data );
10394 break;
10395 case eGATE_REF:
10396 nodeMask = 1;
10397 if(Arg<CGate*>(0)) Arg<CGate*>(0)->PostVisit1( func, data );
10398 break;
10399 case eTASK_ENABLE:
10400 nodeMask = 1;
10401 break;
10402 case eSYSTASK_CALL:
10403 nodeMask = 1;
10404 break;
10405 case eTIMING_CALL:
10406 nodeMask = 1;
10407 break;
10408 case eFUNCTION_CALL:
10409 nodeMask = 5;
10410 break;
10411 case eARRAY:
10412 nodeMask = 0;
10413 break;
10414 case eNET_REF:
10415 nodeMask = ~0;
10416 break;
10417 case eVAR_REF:
10418 nodeMask = ~0;
10419 break;
10420 case ePARAM_REF:
10421 nodeMask = ~0;
10422 break;
10423 case ePORT_REF:
10424 nodeMask = ~0;
10425 break;
10426 case eFWD_REF:
10427 nodeMask = ~0;
10428 break;
10429 case eGENVAR_REF:
10430 nodeMask = ~0;
10431 break;
10432 case eENUM_REF:
10433 nodeMask = ~0;
10434 break;
10435 case eTYPE_REF:
10436 nodeMask = ~0;
10437 break;
10438 case eNET_DECL:
10439 nodeMask = 1;
10440 if(Arg<CNet*>(0)) Arg<CNet*>(0)->PostVisit1( func, data );
10441 break;
10442 case eVAR_DECL:
10443 nodeMask = 1;
10444 if(Arg<CVar*>(0)) Arg<CVar*>(0)->PostVisit1( func, data );
10445 break;
10446 case ePARAM_DECL:
10447 nodeMask = 1;
10448 if(Arg<CParam*>(0)) Arg<CParam*>(0)->PostVisit1( func, data );
10449 break;
10450 case eSPECPARAM_DECL:
10451 nodeMask = 1;
10452 if(Arg<CParam*>(0)) Arg<CParam*>(0)->PostVisit1( func, data );
10453 break;
10454 case ePORT_DECL:
10455 nodeMask = 1;
10456 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->PostVisit1( func, data );
10457 break;
10458 case eGENVAR_DECL:
10459 nodeMask = 1;
10460 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->PostVisit1( func, data );
10461 break;
10462 case eTYPEDEF_DECL:
10463 nodeMask = 1;
10464 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->PostVisit1( func, data );
10465 break;
10466 case eLIST:
10467 nodeMask = 0;
10468 break;
10469 case eRANGE:
10470 nodeMask = 0;
10471 break;
10472 case eSLICE:
10473 nodeMask = 0;
10474 break;
10475 case ePSLICE:
10476 nodeMask = 0;
10477 break;
10478 case eMSLICE:
10479 nodeMask = 0;
10480 break;
10481 case eCVRI:
10482 nodeMask = 0;
10483 break;
10484 case eCVIR:
10485 nodeMask = 0;
10486 break;
10487 case eREP:
10488 nodeMask = 0;
10489 break;
10490 case eCAT:
10491 nodeMask = 0;
10492 break;
10493 case eUCAT:
10494 nodeMask = 0;
10495 break;
10496 case eCOM:
10497 nodeMask = 0;
10498 break;
10499 case eNEG:
10500 nodeMask = 0;
10501 break;
10502 case ePLUS:
10503 nodeMask = 0;
10504 break;
10505 case eNOT:
10506 nodeMask = 0;
10507 break;
10508 case eGT:
10509 nodeMask = 0;
10510 break;
10511 case eGE:
10512 nodeMask = 0;
10513 break;
10514 case eLT:
10515 nodeMask = 0;
10516 break;
10517 case eLE:
10518 nodeMask = 0;
10519 break;
10520 case eLAND:
10521 nodeMask = 0;
10522 break;
10523 case eLOR:
10524 nodeMask = 0;
10525 break;
10526 case eCEQ:
10527 nodeMask = 0;
10528 break;
10529 case eCNE:
10530 nodeMask = 0;
10531 break;
10532 case eEQ:
10533 nodeMask = 0;
10534 break;
10535 case eNE:
10536 nodeMask = 0;
10537 break;
10538 case eRAND:
10539 nodeMask = 0;
10540 break;
10541 case eRNAND:
10542 nodeMask = 0;
10543 break;
10544 case eROR:
10545 nodeMask = 0;
10546 break;
10547 case eRNOR:
10548 nodeMask = 0;
10549 break;
10550 case eRXOR:
10551 nodeMask = 0;
10552 break;
10553 case eRXNOR:
10554 nodeMask = 0;
10555 break;
10556 case eHOOK:
10557 nodeMask = 0;
10558 break;
10559 case eINIT:
10560 nodeMask = 0;
10561 break;
10562 case eALWAYS:
10563 nodeMask = 0;
10564 break;
10565 case eALWAYS_LATCH:
10566 nodeMask = 0;
10567 break;
10568 case eALWAYS_FF:
10569 nodeMask = 0;
10570 break;
10571 case eALWAYS_COMB:
10572 nodeMask = 0;
10573 break;
10574 case eEVENT:
10575 nodeMask = 0;
10576 break;
10577 case eBLOCK_REF:
10578 nodeMask = 1;
10579 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->PostVisit1( func, data );
10580 break;
10581 case eSPECIFY_REF:
10582 nodeMask = 1;
10583 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->PostVisit1( func, data );
10584 break;
10585 case eASSIGN:
10586 nodeMask = 0;
10587 break;
10588 case eADD_ASSIGN:
10589 nodeMask = 0;
10590 break;
10591 case eSUB_ASSIGN:
10592 nodeMask = 0;
10593 break;
10594 case eMUL_ASSIGN:
10595 nodeMask = 0;
10596 break;
10597 case eDIV_ASSIGN:
10598 nodeMask = 0;
10599 break;
10600 case eMOD_ASSIGN:
10601 nodeMask = 0;
10602 break;
10603 case eAND_ASSIGN:
10604 nodeMask = 0;
10605 break;
10606 case eOR_ASSIGN:
10607 nodeMask = 0;
10608 break;
10609 case eXOR_ASSIGN:
10610 nodeMask = 0;
10611 break;
10612 case eLSH_ASSIGN:
10613 nodeMask = 0;
10614 break;
10615 case eRSH_ASSIGN:
10616 nodeMask = 0;
10617 break;
10618 case eLSHA_ASSIGN:
10619 nodeMask = 0;
10620 break;
10621 case eRSHA_ASSIGN:
10622 nodeMask = 0;
10623 break;
10624 case eFORCE:
10625 nodeMask = 0;
10626 break;
10627 case eRELEASE:
10628 nodeMask = 0;
10629 break;
10630 case eNBASSIGN:
10631 nodeMask = 0;
10632 break;
10633 case ePOSEDGE:
10634 nodeMask = 0;
10635 break;
10636 case eNEGEDGE:
10637 nodeMask = 0;
10638 break;
10639 case eEDGE:
10640 nodeMask = 2;
10641 break;
10642 case eEVOR:
10643 nodeMask = 0;
10644 break;
10645 case eDELAY:
10646 nodeMask = 0;
10647 break;
10648 case eMTM:
10649 nodeMask = 0;
10650 break;
10651 case eIF:
10652 nodeMask = 0;
10653 break;
10654 case eFOREVER:
10655 nodeMask = 0;
10656 break;
10657 case eREPEAT:
10658 nodeMask = 0;
10659 break;
10660 case eWHILE:
10661 nodeMask = 0;
10662 break;
10663 case eWAIT:
10664 nodeMask = 0;
10665 break;
10666 case eFOR:
10667 nodeMask = 0;
10668 break;
10669 case eCASE:
10670 nodeMask = 0;
10671 break;
10672 case eCASEX:
10673 nodeMask = 0;
10674 break;
10675 case eCASEZ:
10676 nodeMask = 0;
10677 break;
10678 case eCASEITEM:
10679 nodeMask = 0;
10680 break;
10681 case eCASSIGN:
10682 nodeMask = 1;
10683 break;
10684 case eARG:
10685 nodeMask = 1;
10686 break;
10687 case eFUNCTION_DEF:
10688 nodeMask = 1;
10689 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->PostVisit1( func, data );
10690 break;
10691 case eMODULE_DEF:
10692 nodeMask = 1;
10693 if(Arg<CModule*>(0)) Arg<CModule*>(0)->PostVisit1( func, data );
10694 break;
10695 case eREPEAT_CONTROL:
10696 nodeMask = 0;
10697 break;
10698 case eDELAY_CONTROL:
10699 nodeMask = 0;
10700 break;
10701 case eEVENT_CONTROL:
10702 nodeMask = 0;
10703 break;
10704 case eEXTERNAL_REF:
10705 nodeMask = 1;
10706 break;
10707 case ePORT_DEF:
10708 nodeMask = 1;
10709 if(Arg<CPort*>(0)) Arg<CPort*>(0)->PostVisit1( func, data );
10710 break;
10711 case eDEFPARAM:
10712 nodeMask = 0;
10713 break;
10714 case ePATH:
10715 nodeMask = 45;
10716 break;
10717 case ePATH_ASSIGN:
10718 nodeMask = 0;
10719 break;
10720 case eIFNONE_PATH_ASSIGN:
10721 nodeMask = 0;
10722 break;
10723 case eTRIGGER:
10724 nodeMask = 0;
10725 break;
10726 case ePASSIGN:
10727 nodeMask = 0;
10728 break;
10729 case eDEASSIGN:
10730 nodeMask = 0;
10731 break;
10732 case eDISABLE:
10733 nodeMask = 1;
10734 break;
10735 case eATTRIBUTE:
10736 nodeMask = 1;
10737 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->PostVisit1( func, data );
10738 break;
10739 case eGIF:
10740 nodeMask = 0;
10741 break;
10742 case eGFOR:
10743 nodeMask = 0;
10744 break;
10745 case eGCASE:
10746 nodeMask = 0;
10747 break;
10748 case eTABLE:
10749 nodeMask = 0;
10750 break;
10751 case eTABLE_ENTRY:
10752 nodeMask = 0;
10753 break;
10754 case eTABLE_SYMBOL:
10755 nodeMask = 1;
10756 break;
10757 case ePORTLIST_END:
10758 nodeMask = 0;
10759 break;
10760 case eMACRO_EXPR:
10761 nodeMask = 1;
10762 break;
10763 case eENUM_SPEC:
10764 nodeMask = 1;
10765 break;
10766 case eMEMBER:
10767 nodeMask = 2;
10768 break;
10769 case eRETURN:
10770 nodeMask = 0;
10771 break;
10772 case ePREINC:
10773 nodeMask = 0;
10774 break;
10775 case ePOSTINC:
10776 nodeMask = 0;
10777 break;
10778 case ePREDEC:
10779 nodeMask = 0;
10780 break;
10781 case ePOSTDEC:
10782 nodeMask = 0;
10783 break;
10784 case eCAST:
10785 nodeMask = 0;
10786 break;
10787 }
10788
10789
10790
10791
10792 if( GetOp() != eLIST ) {
10793 for( int i = 0; i < ArgCount(); i++ ) {
10794 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i)->PostVisit1( func, data );
10795 }
10796 } else {
10797 std::stack<CNode*> visitLog;
10798 CNode* n = this;
10799 while( 1 ) {
10800 if( n->Arg<CNode*>(0) ) {
10801 n->Arg<CNode*>(0)-> PostVisit1( func, data );
10802 }
10803 if( !n->Arg<CNode*>(1) || n->Arg<CNode*>(1)->GetOp() != eLIST ) {
10804 break;
10805 }
10806 visitLog.push(n);
10807 n = n->Arg<CNode*>(1);
10808 if( n->GetAttributes() ) {
10809 n->GetAttributes()->PostVisit1( func, data );
10810 }
10811 }
10812 if( n->Arg<CNode*>(1) ) {
10813 n->Arg<CNode*>(1)->PostVisit1( func, data );
10814 }
10815 while( !visitLog.empty() ) {
10816 CNode* top = visitLog.top();
10817 if( top->Arg<CNode*>(1) ) {
10818 (*func)(top->Arg<CNode*>(1),data);
10819 }
10820 visitLog.pop();
10821 }
10822 }
10823
10824 (*func)( this, data );
10825 }
10826
10827
10828
10829
10830
10831
10832
10833
10834 CNode* CNode::PostSubVisit1( CNode* (*func)(CNode*, void*), void* data )
10835 {
10836 if( GetAttributes() ) {
10837 SetAttributes( GetAttributes()->PostSubVisit1( func, data ) );
10838 }
10839
10840 int nodeMask = 0;
10841 switch( GetOp() ) {
10842 case eERROR:
10843 nodeMask = 0;
10844 break;
10845 case eVCONSTANT:
10846 nodeMask = 1;
10847 break;
10848 case eRCONSTANT:
10849 nodeMask = 1;
10850 break;
10851 case eCOMMENT:
10852 nodeMask = 1;
10853 break;
10854 case eVRQ:
10855 nodeMask = 1;
10856 break;
10857 case ePRAGMA:
10858 nodeMask = 1;
10859 break;
10860 case eELIST:
10861 nodeMask = 0;
10862 break;
10863 case eWIDTH:
10864 nodeMask = 0;
10865 break;
10866 case eNOP:
10867 nodeMask = 0;
10868 break;
10869 case eSUB:
10870 nodeMask = 0;
10871 break;
10872 case eMUL:
10873 nodeMask = 0;
10874 break;
10875 case eDIV:
10876 nodeMask = 0;
10877 break;
10878 case ePOW:
10879 nodeMask = 0;
10880 break;
10881 case eADD:
10882 nodeMask = 0;
10883 break;
10884 case eLSH:
10885 nodeMask = 0;
10886 break;
10887 case eRSH:
10888 nodeMask = 0;
10889 break;
10890 case eLSHA:
10891 nodeMask = 0;
10892 break;
10893 case eRSHA:
10894 nodeMask = 0;
10895 break;
10896 case eMOD:
10897 nodeMask = 0;
10898 break;
10899 case eOR:
10900 nodeMask = 0;
10901 break;
10902 case eAND:
10903 nodeMask = 0;
10904 break;
10905 case eANDANDAND:
10906 nodeMask = 0;
10907 break;
10908 case eXOR:
10909 nodeMask = 0;
10910 break;
10911 case eXNOR:
10912 nodeMask = 0;
10913 break;
10914 case eINSTANCE_REF:
10915 nodeMask = 1;
10916 if(Arg<CInstance*>(0)) Arg<CInstance*>(0)->PostSubVisit1( func, data );
10917 break;
10918 case eGATE_REF:
10919 nodeMask = 1;
10920 if(Arg<CGate*>(0)) Arg<CGate*>(0)->PostSubVisit1( func, data );
10921 break;
10922 case eTASK_ENABLE:
10923 nodeMask = 1;
10924 break;
10925 case eSYSTASK_CALL:
10926 nodeMask = 1;
10927 break;
10928 case eTIMING_CALL:
10929 nodeMask = 1;
10930 break;
10931 case eFUNCTION_CALL:
10932 nodeMask = 5;
10933 break;
10934 case eARRAY:
10935 nodeMask = 0;
10936 break;
10937 case eNET_REF:
10938 nodeMask = ~0;
10939 break;
10940 case eVAR_REF:
10941 nodeMask = ~0;
10942 break;
10943 case ePARAM_REF:
10944 nodeMask = ~0;
10945 break;
10946 case ePORT_REF:
10947 nodeMask = ~0;
10948 break;
10949 case eFWD_REF:
10950 nodeMask = ~0;
10951 break;
10952 case eGENVAR_REF:
10953 nodeMask = ~0;
10954 break;
10955 case eENUM_REF:
10956 nodeMask = ~0;
10957 break;
10958 case eTYPE_REF:
10959 nodeMask = ~0;
10960 break;
10961 case eNET_DECL:
10962 nodeMask = 1;
10963 if(Arg<CNet*>(0)) Arg<CNet*>(0)->PostSubVisit1( func, data );
10964 break;
10965 case eVAR_DECL:
10966 nodeMask = 1;
10967 if(Arg<CVar*>(0)) Arg<CVar*>(0)->PostSubVisit1( func, data );
10968 break;
10969 case ePARAM_DECL:
10970 nodeMask = 1;
10971 if(Arg<CParam*>(0)) Arg<CParam*>(0)->PostSubVisit1( func, data );
10972 break;
10973 case eSPECPARAM_DECL:
10974 nodeMask = 1;
10975 if(Arg<CParam*>(0)) Arg<CParam*>(0)->PostSubVisit1( func, data );
10976 break;
10977 case ePORT_DECL:
10978 nodeMask = 1;
10979 if(Arg<CPortDir*>(0)) Arg<CPortDir*>(0)->PostSubVisit1( func, data );
10980 break;
10981 case eGENVAR_DECL:
10982 nodeMask = 1;
10983 if(Arg<CGenvar*>(0)) Arg<CGenvar*>(0)->PostSubVisit1( func, data );
10984 break;
10985 case eTYPEDEF_DECL:
10986 nodeMask = 1;
10987 if(Arg<CTypedef*>(0)) Arg<CTypedef*>(0)->PostSubVisit1( func, data );
10988 break;
10989 case eLIST:
10990 nodeMask = 0;
10991 break;
10992 case eRANGE:
10993 nodeMask = 0;
10994 break;
10995 case eSLICE:
10996 nodeMask = 0;
10997 break;
10998 case ePSLICE:
10999 nodeMask = 0;
11000 break;
11001 case eMSLICE:
11002 nodeMask = 0;
11003 break;
11004 case eCVRI:
11005 nodeMask = 0;
11006 break;
11007 case eCVIR:
11008 nodeMask = 0;
11009 break;
11010 case eREP:
11011 nodeMask = 0;
11012 break;
11013 case eCAT:
11014 nodeMask = 0;
11015 break;
11016 case eUCAT:
11017 nodeMask = 0;
11018 break;
11019 case eCOM:
11020 nodeMask = 0;
11021 break;
11022 case eNEG:
11023 nodeMask = 0;
11024 break;
11025 case ePLUS:
11026 nodeMask = 0;
11027 break;
11028 case eNOT:
11029 nodeMask = 0;
11030 break;
11031 case eGT:
11032 nodeMask = 0;
11033 break;
11034 case eGE:
11035 nodeMask = 0;
11036 break;
11037 case eLT:
11038 nodeMask = 0;
11039 break;
11040 case eLE:
11041 nodeMask = 0;
11042 break;
11043 case eLAND:
11044 nodeMask = 0;
11045 break;
11046 case eLOR:
11047 nodeMask = 0;
11048 break;
11049 case eCEQ:
11050 nodeMask = 0;
11051 break;
11052 case eCNE:
11053 nodeMask = 0;
11054 break;
11055 case eEQ:
11056 nodeMask = 0;
11057 break;
11058 case eNE:
11059 nodeMask = 0;
11060 break;
11061 case eRAND:
11062 nodeMask = 0;
11063 break;
11064 case eRNAND:
11065 nodeMask = 0;
11066 break;
11067 case eROR:
11068 nodeMask = 0;
11069 break;
11070 case eRNOR:
11071 nodeMask = 0;
11072 break;
11073 case eRXOR:
11074 nodeMask = 0;
11075 break;
11076 case eRXNOR:
11077 nodeMask = 0;
11078 break;
11079 case eHOOK:
11080 nodeMask = 0;
11081 break;
11082 case eINIT:
11083 nodeMask = 0;
11084 break;
11085 case eALWAYS:
11086 nodeMask = 0;
11087 break;
11088 case eALWAYS_LATCH:
11089 nodeMask = 0;
11090 break;
11091 case eALWAYS_FF:
11092 nodeMask = 0;
11093 break;
11094 case eALWAYS_COMB:
11095 nodeMask = 0;
11096 break;
11097 case eEVENT:
11098 nodeMask = 0;
11099 break;
11100 case eBLOCK_REF:
11101 nodeMask = 1;
11102 if(Arg<CBlock*>(0)) Arg<CBlock*>(0)->PostSubVisit1( func, data );
11103 break;
11104 case eSPECIFY_REF:
11105 nodeMask = 1;
11106 if(Arg<CSpecify*>(0)) Arg<CSpecify*>(0)->PostSubVisit1( func, data );
11107 break;
11108 case eASSIGN:
11109 nodeMask = 0;
11110 break;
11111 case eADD_ASSIGN:
11112 nodeMask = 0;
11113 break;
11114 case eSUB_ASSIGN:
11115 nodeMask = 0;
11116 break;
11117 case eMUL_ASSIGN:
11118 nodeMask = 0;
11119 break;
11120 case eDIV_ASSIGN:
11121 nodeMask = 0;
11122 break;
11123 case eMOD_ASSIGN:
11124 nodeMask = 0;
11125 break;
11126 case eAND_ASSIGN:
11127 nodeMask = 0;
11128 break;
11129 case eOR_ASSIGN:
11130 nodeMask = 0;
11131 break;
11132 case eXOR_ASSIGN:
11133 nodeMask = 0;
11134 break;
11135 case eLSH_ASSIGN:
11136 nodeMask = 0;
11137 break;
11138 case eRSH_ASSIGN:
11139 nodeMask = 0;
11140 break;
11141 case eLSHA_ASSIGN:
11142 nodeMask = 0;
11143 break;
11144 case eRSHA_ASSIGN:
11145 nodeMask = 0;
11146 break;
11147 case eFORCE:
11148 nodeMask = 0;
11149 break;
11150 case eRELEASE:
11151 nodeMask = 0;
11152 break;
11153 case eNBASSIGN:
11154 nodeMask = 0;
11155 break;
11156 case ePOSEDGE:
11157 nodeMask = 0;
11158 break;
11159 case eNEGEDGE:
11160 nodeMask = 0;
11161 break;
11162 case eEDGE:
11163 nodeMask = 2;
11164 break;
11165 case eEVOR:
11166 nodeMask = 0;
11167 break;
11168 case eDELAY:
11169 nodeMask = 0;
11170 break;
11171 case eMTM:
11172 nodeMask = 0;
11173 break;
11174 case eIF:
11175 nodeMask = 0;
11176 break;
11177 case eFOREVER:
11178 nodeMask = 0;
11179 break;
11180 case eREPEAT:
11181 nodeMask = 0;
11182 break;
11183 case eWHILE:
11184 nodeMask = 0;
11185 break;
11186 case eWAIT:
11187 nodeMask = 0;
11188 break;
11189 case eFOR:
11190 nodeMask = 0;
11191 break;
11192 case eCASE:
11193 nodeMask = 0;
11194 break;
11195 case eCASEX:
11196 nodeMask = 0;
11197 break;
11198 case eCASEZ:
11199 nodeMask = 0;
11200 break;
11201 case eCASEITEM:
11202 nodeMask = 0;
11203 break;
11204 case eCASSIGN:
11205 nodeMask = 1;
11206 break;
11207 case eARG:
11208 nodeMask = 1;
11209 break;
11210 case eFUNCTION_DEF:
11211 nodeMask = 1;
11212 if(Arg<CFunction*>(0)) Arg<CFunction*>(0)->PostSubVisit1( func, data );
11213 break;
11214 case eMODULE_DEF:
11215 nodeMask = 1;
11216 if(Arg<CModule*>(0)) Arg<CModule*>(0)->PostSubVisit1( func, data );
11217 break;
11218 case eREPEAT_CONTROL:
11219 nodeMask = 0;
11220 break;
11221 case eDELAY_CONTROL:
11222 nodeMask = 0;
11223 break;
11224 case eEVENT_CONTROL:
11225 nodeMask = 0;
11226 break;
11227 case eEXTERNAL_REF:
11228 nodeMask = 1;
11229 break;
11230 case ePORT_DEF:
11231 nodeMask = 1;
11232 if(Arg<CPort*>(0)) Arg<CPort*>(0)->PostSubVisit1( func, data );
11233 break;
11234 case eDEFPARAM:
11235 nodeMask = 0;
11236 break;
11237 case ePATH:
11238 nodeMask = 45;
11239 break;
11240 case ePATH_ASSIGN:
11241 nodeMask = 0;
11242 break;
11243 case eIFNONE_PATH_ASSIGN:
11244 nodeMask = 0;
11245 break;
11246 case eTRIGGER:
11247 nodeMask = 0;
11248 break;
11249 case ePASSIGN:
11250 nodeMask = 0;
11251 break;
11252 case eDEASSIGN:
11253 nodeMask = 0;
11254 break;
11255 case eDISABLE:
11256 nodeMask = 1;
11257 break;
11258 case eATTRIBUTE:
11259 nodeMask = 1;
11260 if(Arg<CAttr*>(0)) Arg<CAttr*>(0)->PostSubVisit1( func, data );
11261 break;
11262 case eGIF:
11263 nodeMask = 0;
11264 break;
11265 case eGFOR:
11266 nodeMask = 0;
11267 break;
11268 case eGCASE:
11269 nodeMask = 0;
11270 break;
11271 case eTABLE:
11272 nodeMask = 0;
11273 break;
11274 case eTABLE_ENTRY:
11275 nodeMask = 0;
11276 break;
11277 case eTABLE_SYMBOL:
11278 nodeMask = 1;
11279 break;
11280 case ePORTLIST_END:
11281 nodeMask = 0;
11282 break;
11283 case eMACRO_EXPR:
11284 nodeMask = 1;
11285 break;
11286 case eENUM_SPEC:
11287 nodeMask = 1;
11288 break;
11289 case eMEMBER:
11290 nodeMask = 2;
11291 break;
11292 case eRETURN:
11293 nodeMask = 0;
11294 break;
11295 case ePREINC:
11296 nodeMask = 0;
11297 break;
11298 case ePOSTINC:
11299 nodeMask = 0;
11300 break;
11301 case ePREDEC:
11302 nodeMask = 0;
11303 break;
11304 case ePOSTDEC:
11305 nodeMask = 0;
11306 break;
11307 case eCAST:
11308 nodeMask = 0;
11309 break;
11310 }
11311
11312
11313
11314
11315 if( GetOp() != eLIST ) {
11316 for( int i = 0; i < ArgCount(); i++ ) {
11317 if( Arg<CNode*>(i) && !((nodeMask>>i)&1) ) Arg<CNode*>(i) = Arg<CNode*>(i)->PostSubVisit1( func, data );
11318 }
11319 } else {
11320 std::stack<CNode*> visitLog;
11321 CNode* n = this;
11322 while( 1 ) {
11323 if( n->Arg<CNode*>(0) ) {
11324 n->Arg<CNode*>(0) = n->Arg<CNode*>(0)->
11325 PostSubVisit1( func, data );
11326 }
11327 if( !n->Arg<CNode*>(1) || n->Arg<CNode*>(1)->GetOp() != eLIST ) {
11328 break;
11329 }
11330 visitLog.push(n);
11331 n = n->Arg<CNode*>(1);
11332 if( n->GetAttributes() ) {
11333 n->SetAttributes( n->GetAttributes()->PostSubVisit1( func, data ) );
11334 }
11335 }
11336 if( n->Arg<CNode*>(1) ) {
11337 n->Arg<CNode*>(1) = n->Arg<CNode*>(1)->PostSubVisit1( func, data );
11338 }
11339 while( !visitLog.empty() ) {
11340 CNode* top = visitLog.top();
11341 if( top->Arg<CNode*>(1) ) {
11342 top->Arg<CNode*>(1) = (*func)(top->Arg<CNode*>(1),data);
11343 }
11344 visitLog.pop();
11345 }
11346 }
11347
11348 return (*func)( this, data );
11349 }
11350
11351
11352
11353
11354
11355
11356
11357
11358
11359 unsigned CNode::Hash()
11360 {
11361 unsigned result = GetOp();
11362 int nodeMask = 0;
11363 switch( GetOp() ) {
11364 case eERROR:
11365 nodeMask = 0;
11366 break;
11367 case eVCONSTANT:
11368 nodeMask = 1;
11369 result ^= Arg<CVector*>(0)->Hash();
11370 break;
11371 case eRCONSTANT:
11372 nodeMask = 1;
11373 result ^= strlen(Arg<char*>(0));
11374 break;
11375 case eCOMMENT:
11376 nodeMask = 1;
11377 result ^= strlen(Arg<char*>(0));
11378 break;
11379 case eVRQ:
11380 nodeMask = 1;
11381 result ^= strlen(Arg<char*>(0));
11382 break;
11383 case ePRAGMA:
11384 nodeMask = 1;
11385 result ^= strlen(Arg<char*>(0));
11386 break;
11387 case eELIST:
11388 nodeMask = 0;
11389 break;
11390 case eWIDTH:
11391 nodeMask = 0;
11392 break;
11393 case eNOP:
11394 nodeMask = 0;
11395 break;
11396 case eSUB:
11397 nodeMask = 0;
11398 break;
11399 case eMUL:
11400 nodeMask = 0;
11401 break;
11402 case eDIV:
11403 nodeMask = 0;
11404 break;
11405 case ePOW:
11406 nodeMask = 0;
11407 break;
11408 case eADD:
11409 nodeMask = 0;
11410 break;
11411 case eLSH:
11412 nodeMask = 0;
11413 break;
11414 case eRSH:
11415 nodeMask = 0;
11416 break;
11417 case eLSHA:
11418 nodeMask = 0;
11419 break;
11420 case eRSHA:
11421 nodeMask = 0;
11422 break;
11423 case eMOD:
11424 nodeMask = 0;
11425 break;
11426 case eOR:
11427 nodeMask = 0;
11428 break;
11429 case eAND:
11430 nodeMask = 0;
11431 break;
11432 case eANDANDAND:
11433 nodeMask = 0;
11434 break;
11435 case eXOR:
11436 nodeMask = 0;
11437 break;
11438 case eXNOR:
11439 nodeMask = 0;
11440 break;
11441 case eINSTANCE_REF:
11442 nodeMask = 1;
11443 result ^= Arg<unsigned long>(0);
11444 break;
11445 case eGATE_REF:
11446 nodeMask = 1;
11447 result ^= Arg<unsigned long>(0);
11448 break;
11449 case eTASK_ENABLE:
11450 nodeMask = 1;
11451 result ^= Arg<unsigned long>(0);
11452 break;
11453 case eSYSTASK_CALL:
11454 nodeMask = 1;
11455 result ^= Arg<unsigned long>(0);
11456 break;
11457 case eTIMING_CALL:
11458 nodeMask = 1;
11459 result ^= Arg<unsigned long>(0);
11460 break;
11461 case eFUNCTION_CALL:
11462 nodeMask = 5;
11463 result ^= Arg<unsigned long>(0);
11464 result ^= Arg<unsigned long>(2);
11465 break;
11466 case eARRAY:
11467 nodeMask = 0;
11468 break;
11469 case eNET_REF:
11470 nodeMask = 1;
11471 result ^= Arg<unsigned long>(0);
11472 break;
11473 case eVAR_REF:
11474 nodeMask = 1;
11475 result ^= Arg<unsigned long>(0);
11476 break;
11477 case ePARAM_REF:
11478 nodeMask = 1;
11479 result ^= Arg<unsigned long>(0);
11480 break;
11481 case ePORT_REF:
11482 nodeMask = 1;
11483 result ^= Arg<unsigned long>(0);
11484 break;
11485 case eFWD_REF:
11486 nodeMask = 1;
11487 result ^= Arg<unsigned long>(0);
11488 break;
11489 case eGENVAR_REF:
11490 nodeMask = 1;
11491 result ^= Arg<unsigned long>(0);
11492 break;
11493 case eENUM_REF:
11494 nodeMask = 1;
11495 result ^= Arg<unsigned long>(0);
11496 break;
11497 case eTYPE_REF:
11498 nodeMask = 1;
11499 result ^= Arg<unsigned long>(0);
11500 break;
11501 case eNET_DECL:
11502 nodeMask = 1;
11503 result ^= Arg<unsigned long>(0);
11504 break;
11505 case eVAR_DECL:
11506 nodeMask = 1;
11507 result ^= Arg<unsigned long>(0);
11508 break;
11509 case ePARAM_DECL:
11510 nodeMask = 1;
11511 result ^= Arg<unsigned long>(0);
11512 break;
11513 case eSPECPARAM_DECL:
11514 nodeMask = 1;
11515 result ^= Arg<unsigned long>(0);
11516 break;
11517 case ePORT_DECL:
11518 nodeMask = 1;
11519 result ^= Arg<unsigned long>(0);
11520 break;
11521 case eGENVAR_DECL:
11522 nodeMask = 1;
11523 result ^= Arg<unsigned long>(0);
11524 break;
11525 case eTYPEDEF_DECL:
11526 nodeMask = 1;
11527 result ^= Arg<unsigned long>(0);
11528 break;
11529 case eLIST:
11530 nodeMask = 0;
11531 break;
11532 case eRANGE:
11533 nodeMask = 0;
11534 break;
11535 case eSLICE:
11536 nodeMask = 0;
11537 break;
11538 case ePSLICE:
11539 nodeMask = 0;
11540 break;
11541 case eMSLICE:
11542 nodeMask = 0;
11543 break;
11544 case eCVRI:
11545 nodeMask = 0;
11546 break;
11547 case eCVIR:
11548 nodeMask = 0;
11549 break;
11550 case eREP:
11551 nodeMask = 0;
11552 break;
11553 case eCAT:
11554 nodeMask = 0;
11555 break;
11556 case eUCAT:
11557 nodeMask = 0;
11558 break;
11559 case eCOM:
11560 nodeMask = 0;
11561 break;
11562 case eNEG:
11563 nodeMask = 0;
11564 break;
11565 case ePLUS:
11566 nodeMask = 0;
11567 break;
11568 case eNOT:
11569 nodeMask = 0;
11570 break;
11571 case eGT:
11572 nodeMask = 0;
11573 break;
11574 case eGE:
11575 nodeMask = 0;
11576 break;
11577 case eLT:
11578 nodeMask = 0;
11579 break;
11580 case eLE:
11581 nodeMask = 0;
11582 break;
11583 case eLAND:
11584 nodeMask = 0;
11585 break;
11586 case eLOR:
11587 nodeMask = 0;
11588 break;
11589 case eCEQ:
11590 nodeMask = 0;
11591 break;
11592 case eCNE:
11593 nodeMask = 0;
11594 break;
11595 case eEQ:
11596 nodeMask = 0;
11597 break;
11598 case eNE:
11599 nodeMask = 0;
11600 break;
11601 case eRAND:
11602 nodeMask = 0;
11603 break;
11604 case eRNAND:
11605 nodeMask = 0;
11606 break;
11607 case eROR:
11608 nodeMask = 0;
11609 break;
11610 case eRNOR:
11611 nodeMask = 0;
11612 break;
11613 case eRXOR:
11614 nodeMask = 0;
11615 break;
11616 case eRXNOR:
11617 nodeMask = 0;
11618 break;
11619 case eHOOK:
11620 nodeMask = 0;
11621 break;
11622 case eINIT:
11623 nodeMask = 0;
11624 break;
11625 case eALWAYS:
11626 nodeMask = 0;
11627 break;
11628 case eALWAYS_LATCH:
11629 nodeMask = 0;
11630 break;
11631 case eALWAYS_FF:
11632 nodeMask = 0;
11633 break;
11634 case eALWAYS_COMB:
11635 nodeMask = 0;
11636 break;
11637 case eEVENT:
11638 nodeMask = 0;
11639 break;
11640 case eBLOCK_REF:
11641 nodeMask = 1;
11642 result ^= Arg<unsigned long>(0);
11643 break;
11644 case eSPECIFY_REF:
11645 nodeMask = 1;
11646 result ^= Arg<unsigned long>(0);
11647 break;
11648 case eASSIGN:
11649 nodeMask = 0;
11650 break;
11651 case eADD_ASSIGN:
11652 nodeMask = 0;
11653 break;
11654 case eSUB_ASSIGN:
11655 nodeMask = 0;
11656 break;
11657 case eMUL_ASSIGN:
11658 nodeMask = 0;
11659 break;
11660 case eDIV_ASSIGN:
11661 nodeMask = 0;
11662 break;
11663 case eMOD_ASSIGN:
11664 nodeMask = 0;
11665 break;
11666 case eAND_ASSIGN:
11667 nodeMask = 0;
11668 break;
11669 case eOR_ASSIGN:
11670 nodeMask = 0;
11671 break;
11672 case eXOR_ASSIGN:
11673 nodeMask = 0;
11674 break;
11675 case eLSH_ASSIGN:
11676 nodeMask = 0;
11677 break;
11678 case eRSH_ASSIGN:
11679 nodeMask = 0;
11680 break;
11681 case eLSHA_ASSIGN:
11682 nodeMask = 0;
11683 break;
11684 case eRSHA_ASSIGN:
11685 nodeMask = 0;
11686 break;
11687 case eFORCE:
11688 nodeMask = 0;
11689 break;
11690 case eRELEASE:
11691 nodeMask = 0;
11692 break;
11693 case eNBASSIGN:
11694 nodeMask = 0;
11695 break;
11696 case ePOSEDGE:
11697 nodeMask = 0;
11698 break;
11699 case eNEGEDGE:
11700 nodeMask = 0;
11701 break;
11702 case eEDGE:
11703 nodeMask = 2;
11704 result ^= (unsigned long)Arg<Edge_t>(1);
11705 break;
11706 case eEVOR:
11707 nodeMask = 0;
11708 break;
11709 case eDELAY:
11710 nodeMask = 0;
11711 break;
11712 case eMTM:
11713 nodeMask = 0;
11714 break;
11715 case eIF:
11716 nodeMask = 0;
11717 break;
11718 case eFOREVER:
11719 nodeMask = 0;
11720 break;
11721 case eREPEAT:
11722 nodeMask = 0;
11723 break;
11724 case eWHILE:
11725 nodeMask = 0;
11726 break;
11727 case eWAIT:
11728 nodeMask = 0;
11729 break;
11730 case eFOR:
11731 nodeMask = 0;
11732 break;
11733 case eCASE:
11734 nodeMask = 0;
11735 break;
11736 case eCASEX:
11737 nodeMask = 0;
11738 break;
11739 case eCASEZ:
11740 nodeMask = 0;
11741 break;
11742 case eCASEITEM:
11743 nodeMask = 0;
11744 break;
11745 case eCASSIGN:
11746 nodeMask = 1;
11747 result ^= Arg<unsigned long>(0);
11748 break;
11749 case eARG:
11750 nodeMask = 1;
11751 result ^= Arg<unsigned long>(0);
11752 break;
11753 case eFUNCTION_DEF:
11754 nodeMask = 1;
11755 result ^= Arg<unsigned long>(0);
11756 break;
11757 case eMODULE_DEF:
11758 nodeMask = 1;
11759 result ^= Arg<unsigned long>(0);
11760 break;
11761 case eREPEAT_CONTROL:
11762 nodeMask = 0;
11763 break;
11764 case eDELAY_CONTROL:
11765 nodeMask = 0;
11766 break;
11767 case eEVENT_CONTROL:
11768 nodeMask = 0;
11769 break;
11770 case eEXTERNAL_REF:
11771 nodeMask = 1;
11772 result ^= Arg<unsigned long>(0);
11773 break;
11774 case ePORT_DEF:
11775 nodeMask = 1;
11776 result ^= Arg<unsigned long>(0);
11777 break;
11778 case eDEFPARAM:
11779 nodeMask = 0;
11780 break;
11781 case ePATH:
11782 nodeMask = 45;
11783 result ^= Arg<int>(0);
11784 result ^= Arg<int>(2);
11785 result ^= Arg<int>(3);
11786 result ^= Arg<int>(5);
11787 break;
11788 case ePATH_ASSIGN:
11789 nodeMask = 0;
11790 break;
11791 case eIFNONE_PATH_ASSIGN:
11792 nodeMask = 0;
11793 break;
11794 case eTRIGGER:
11795 nodeMask = 0;
11796 break;
11797 case ePASSIGN:
11798 nodeMask = 0;
11799 break;
11800 case eDEASSIGN:
11801 nodeMask = 0;
11802 break;
11803 case eDISABLE:
11804 nodeMask = 1;
11805 result ^= Arg<unsigned long>(0);
11806 break;
11807 case eATTRIBUTE:
11808 nodeMask = 1;
11809 result ^= Arg<unsigned long>(0);
11810 break;
11811 case eGIF:
11812 nodeMask = 0;
11813 break;
11814 case eGFOR:
11815 nodeMask = 0;
11816 break;
11817 case eGCASE:
11818 nodeMask = 0;
11819 break;
11820 case eTABLE:
11821 nodeMask = 0;
11822 break;
11823 case eTABLE_ENTRY:
11824 nodeMask = 0;
11825 break;
11826 case eTABLE_SYMBOL:
11827 nodeMask = 1;
11828 result ^= strlen(Arg<char*>(0));
11829 break;
11830 case ePORTLIST_END:
11831 nodeMask = 0;
11832 break;
11833 case eMACRO_EXPR:
11834 nodeMask = 1;
11835 result ^= strlen(Arg<char*>(0));
11836 break;
11837 case eENUM_SPEC:
11838 nodeMask = 1;
11839 result ^= Arg<unsigned long>(0);
11840 break;
11841 case eMEMBER:
11842 nodeMask = 2;
11843 result ^= Arg<unsigned long>(1);
11844 break;
11845 case eRETURN:
11846 nodeMask = 0;
11847 break;
11848 case ePREINC:
11849 nodeMask = 0;
11850 break;
11851 case ePOSTINC:
11852 nodeMask = 0;
11853 break;
11854 case ePREDEC:
11855 nodeMask = 0;
11856 break;
11857 case ePOSTDEC:
11858 nodeMask = 0;
11859 break;
11860 case eCAST:
11861 nodeMask = 0;
11862 break;
11863 }
11864
11865 for( int i = 0; i < ArgCount(); i++ ) {
11866 if( !((nodeMask>>i)&1) ) result ^= Arg<CNode*>(i)->Hash();
11867 }
11868 return result;
11869 }
11870
11871
11872
11873
11874
11875
11876
11877
11878
11879
11880
11881
11882
11883 int Equivalent( CNode* a, CNode* b )
11884 {
11885
11886
11887
11888 if( a == b ) {
11889 return TRUE;
11890 }
11891
11892
11893
11894 if( a == NULL || b == NULL ) {
11895 return FALSE;
11896 }
11897
11898
11899
11900 if( a->GetOp() != b->GetOp() ) {
11901 return FALSE;
11902 }
11903
11904 int nodeMask = 0;
11905 switch( a->GetOp() ) {
11906 case eERROR:
11907 nodeMask = 0;
11908 break;
11909 case eVCONSTANT:
11910 nodeMask = 1;
11911 if( !(*a->Arg<CVector*>(0)==*b->Arg<CVector*>(0)) ) { return FALSE; }
11912 break;
11913 case eRCONSTANT:
11914 nodeMask = 1;
11915 if( !(!strcmp(a->Arg<char*>(0),b->Arg<char*>(0))) ) { return FALSE; }
11916 break;
11917 case eCOMMENT:
11918 nodeMask = 1;
11919 if( !(!strcmp(a->Arg<char*>(0),b->Arg<char*>(0))) ) { return FALSE; }
11920 break;
11921 case eVRQ:
11922 nodeMask = 1;
11923 if( !(!strcmp(a->Arg<char*>(0),b->Arg<char*>(0))) ) { return FALSE; }
11924 break;
11925 case ePRAGMA:
11926 nodeMask = 1;
11927 if( !(!strcmp(a->Arg<char*>(0),b->Arg<char*>(0))) ) { return FALSE; }
11928 break;
11929 case eELIST:
11930 nodeMask = 0;
11931 break;
11932 case eWIDTH:
11933 nodeMask = 0;
11934 break;
11935 case eNOP:
11936 nodeMask = 0;
11937 break;
11938 case eSUB:
11939 nodeMask = 0;
11940 break;
11941 case eMUL:
11942 nodeMask = 0;
11943 break;
11944 case eDIV:
11945 nodeMask = 0;
11946 break;
11947 case ePOW:
11948 nodeMask = 0;
11949 break;
11950 case eADD:
11951 nodeMask = 0;
11952 break;
11953 case eLSH:
11954 nodeMask = 0;
11955 break;
11956 case eRSH:
11957 nodeMask = 0;
11958 break;
11959 case eLSHA:
11960 nodeMask = 0;
11961 break;
11962 case eRSHA:
11963 nodeMask = 0;
11964 break;
11965 case eMOD:
11966 nodeMask = 0;
11967 break;
11968 case eOR:
11969 nodeMask = 0;
11970 break;
11971 case eAND:
11972 nodeMask = 0;
11973 break;
11974 case eANDANDAND:
11975 nodeMask = 0;
11976 break;
11977 case eXOR:
11978 nodeMask = 0;
11979 break;
11980 case eXNOR:
11981 nodeMask = 0;
11982 break;
11983 case eINSTANCE_REF:
11984 nodeMask = 1;
11985 if( !(a->Arg<CInstance*>(0)==b->Arg<CInstance*>(0)) ) { return FALSE; }
11986 break;
11987 case eGATE_REF:
11988 nodeMask = 1;
11989 if( !(a->Arg<CGate*>(0)==b->Arg<CGate*>(0)) ) { return FALSE; }
11990 break;
11991 case eTASK_ENABLE:
11992 nodeMask = 1;
11993 if( !(a->Arg<CSymbol*>(0)==b->Arg<CSymbol*>(0)) ) { return FALSE; }
11994 break;
11995 case eSYSTASK_CALL:
11996 nodeMask = 1;
11997 if( !(a->Arg<CSymbol*>(0)==b->Arg<CSymbol*>(0)) ) { return FALSE; }
11998 break;
11999 case eTIMING_CALL:
12000 nodeMask = 1;
12001 if( !(a->Arg<CSymbol*>(0)==b->Arg<CSymbol*>(0)) ) { return FALSE; }
12002 break;
12003 case eFUNCTION_CALL:
12004 nodeMask = 5;
12005 if( !(a->Arg<CSymbol*>(0)==b->Arg<CSymbol*>(0)) ) { return FALSE; }
12006 if( !(a->Arg<CScope*>(2)==b->Arg<CScope*>(2)) ) { return FALSE; }
12007 break;
12008 case eARRAY:
12009 nodeMask = 0;
12010 break;
12011 case eNET_REF:
12012 nodeMask = 1;
12013 if( !(a->Arg<CNet*>(0)==b->Arg<CNet*>(0)) ) { return FALSE; }
12014 break;
12015 case eVAR_REF:
12016 nodeMask = 1;
12017 if( !(a->Arg<CVar*>(0)==b->Arg<CVar*>(0)) ) { return FALSE; }
12018 break;
12019 case ePARAM_REF:
12020 nodeMask = 1;
12021 if( !(a->Arg<CParam*>(0)==b->Arg<CParam*>(0)) ) { return FALSE; }
12022 break;
12023 case ePORT_REF:
12024 nodeMask = 1;
12025 if( !(a->Arg<CPortDir*>(0)==b->Arg<CPortDir*>(0)) ) { return FALSE; }
12026 break;
12027 case eFWD_REF:
12028 nodeMask = 1;
12029 if( !(a->Arg<CFref*>(0)==b->Arg<CFref*>(0)) ) { return FALSE; }
12030 break;
12031 case eGENVAR_REF:
12032 nodeMask = 1;
12033 if( !(a->Arg<CGenvar*>(0)==b->Arg<CGenvar*>(0)) ) { return FALSE; }
12034 break;
12035 case eENUM_REF:
12036 nodeMask = 1;
12037 MASSERT(FALSE);
12038 break;
12039 case eTYPE_REF:
12040 nodeMask = 1;
12041 MASSERT(FALSE);
12042 break;
12043 case eNET_DECL:
12044 nodeMask = 1;
12045 if( !(a->Arg<CNet*>(0)==b->Arg<CNet*>(0)) ) { return FALSE; }
12046 break;
12047 case eVAR_DECL:
12048 nodeMask = 1;
12049 if( !(a->Arg<CVar*>(0)==b->Arg<CVar*>(0)) ) { return FALSE; }
12050 break;
12051 case ePARAM_DECL:
12052 nodeMask = 1;
12053 if( !(a->Arg<CParam*>(0)==b->Arg<CParam*>(0)) ) { return FALSE; }
12054 break;
12055 case eSPECPARAM_DECL:
12056 nodeMask = 1;
12057 if( !(a->Arg<CParam*>(0)==b->Arg<CParam*>(0)) ) { return FALSE; }
12058 break;
12059 case ePORT_DECL:
12060 nodeMask = 1;
12061 if( !(a->Arg<CPortDir*>(0)==b->Arg<CPortDir*>(0)) ) { return FALSE; }
12062 break;
12063 case eGENVAR_DECL:
12064 nodeMask = 1;
12065 if( !(a->Arg<CGenvar*>(0)==b->Arg<CGenvar*>(0)) ) { return FALSE; }
12066 break;
12067 case eTYPEDEF_DECL:
12068 nodeMask = 1;
12069 MASSERT(FALSE);
12070 break;
12071 case eLIST:
12072 nodeMask = 0;
12073 break;
12074 case eRANGE:
12075 nodeMask = 0;
12076 break;
12077 case eSLICE:
12078 nodeMask = 0;
12079 break;
12080 case ePSLICE:
12081 nodeMask = 0;
12082 break;
12083 case eMSLICE:
12084 nodeMask = 0;
12085 break;
12086 case eCVRI:
12087 nodeMask = 0;
12088 break;
12089 case eCVIR:
12090 nodeMask = 0;
12091 break;
12092 case eREP:
12093 nodeMask = 0;
12094 break;
12095 case eCAT:
12096 nodeMask = 0;
12097 break;
12098 case eUCAT:
12099 nodeMask = 0;
12100 break;
12101 case eCOM:
12102 nodeMask = 0;
12103 break;
12104 case eNEG:
12105 nodeMask = 0;
12106 break;
12107 case ePLUS:
12108 nodeMask = 0;
12109 break;
12110 case eNOT:
12111 nodeMask = 0;
12112 break;
12113 case eGT:
12114 nodeMask = 0;
12115 break;
12116 case eGE:
12117 nodeMask = 0;
12118 break;
12119 case eLT:
12120 nodeMask = 0;
12121 break;
12122 case eLE:
12123 nodeMask = 0;
12124 break;
12125 case eLAND:
12126 nodeMask = 0;
12127 break;
12128 case eLOR:
12129 nodeMask = 0;
12130 break;
12131 case eCEQ:
12132 nodeMask = 0;
12133 break;
12134 case eCNE:
12135 nodeMask = 0;
12136 break;
12137 case eEQ:
12138 nodeMask = 0;
12139 break;
12140 case eNE:
12141 nodeMask = 0;
12142 break;
12143 case eRAND:
12144 nodeMask = 0;
12145 break;
12146 case eRNAND:
12147 nodeMask = 0;
12148 break;
12149 case eROR:
12150 nodeMask = 0;
12151 break;
12152 case eRNOR:
12153 nodeMask = 0;
12154 break;
12155 case eRXOR:
12156 nodeMask = 0;
12157 break;
12158 case eRXNOR:
12159 nodeMask = 0;
12160 break;
12161 case eHOOK:
12162 nodeMask = 0;
12163 break;
12164 case eINIT:
12165 nodeMask = 0;
12166 break;
12167 case eALWAYS:
12168 nodeMask = 0;
12169 break;
12170 case eALWAYS_LATCH:
12171 nodeMask = 0;
12172 break;
12173 case eALWAYS_FF:
12174 nodeMask = 0;
12175 break;
12176 case eALWAYS_COMB:
12177 nodeMask = 0;
12178 break;
12179 case eEVENT:
12180 nodeMask = 0;
12181 break;
12182 case eBLOCK_REF:
12183 nodeMask = 1;
12184 if( !(a->Arg<CBlock*>(0)==b->Arg<CBlock*>(0)) ) { return FALSE; }
12185 break;
12186 case eSPECIFY_REF:
12187 nodeMask = 1;
12188 if( !(a->Arg<CSpecify*>(0)==b->Arg<CSpecify*>(0)) ) { return FALSE; }
12189 break;
12190 case eASSIGN:
12191 nodeMask = 0;
12192 break;
12193 case eADD_ASSIGN:
12194 nodeMask = 0;
12195 break;
12196 case eSUB_ASSIGN:
12197 nodeMask = 0;
12198 break;
12199 case eMUL_ASSIGN:
12200 nodeMask = 0;
12201 break;
12202 case eDIV_ASSIGN:
12203 nodeMask = 0;
12204 break;
12205 case eMOD_ASSIGN:
12206 nodeMask = 0;
12207 break;
12208 case eAND_ASSIGN:
12209 nodeMask = 0;
12210 break;
12211 case eOR_ASSIGN:
12212 nodeMask = 0;
12213 break;
12214 case eXOR_ASSIGN:
12215 nodeMask = 0;
12216 break;
12217 case eLSH_ASSIGN:
12218 nodeMask = 0;
12219 break;
12220 case eRSH_ASSIGN:
12221 nodeMask = 0;
12222 break;
12223 case eLSHA_ASSIGN:
12224 nodeMask = 0;
12225 break;
12226 case eRSHA_ASSIGN:
12227 nodeMask = 0;
12228 break;
12229 case eFORCE:
12230 nodeMask = 0;
12231 break;
12232 case eRELEASE:
12233 nodeMask = 0;
12234 break;
12235 case eNBASSIGN:
12236 nodeMask = 0;
12237 break;
12238 case ePOSEDGE:
12239 nodeMask = 0;
12240 break;
12241 case eNEGEDGE:
12242 nodeMask = 0;
12243 break;
12244 case eEDGE:
12245 nodeMask = 2;
12246 if( !(a->Arg<Edge_t>(1)==b->Arg<Edge_t>(1)) ) { return FALSE; }
12247 break;
12248 case eEVOR:
12249 nodeMask = 0;
12250 break;
12251 case eDELAY:
12252 nodeMask = 0;
12253 break;
12254 case eMTM:
12255 nodeMask = 0;
12256 break;
12257 case eIF:
12258 nodeMask = 0;
12259 break;
12260 case eFOREVER:
12261 nodeMask = 0;
12262 break;
12263 case eREPEAT:
12264 nodeMask = 0;
12265 break;
12266 case eWHILE:
12267 nodeMask = 0;
12268 break;
12269 case eWAIT:
12270 nodeMask = 0;
12271 break;
12272 case eFOR:
12273 nodeMask = 0;
12274 break;
12275 case eCASE:
12276 nodeMask = 0;
12277 break;
12278 case eCASEX:
12279 nodeMask = 0;
12280 break;
12281 case eCASEZ:
12282 nodeMask = 0;
12283 break;
12284 case eCASEITEM:
12285 nodeMask = 0;
12286 break;
12287 case eCASSIGN:
12288 nodeMask = 1;
12289 if( !(a->Arg<StrengthPair_t*>(0)==b->Arg<StrengthPair_t*>(0)) ) { return FALSE; }
12290 break;
12291 case eARG:
12292 nodeMask = 1;
12293 if( !(a->Arg<CSymbol*>(0)==b->Arg<CSymbol*>(0)) ) { return FALSE; }
12294 break;
12295 case eFUNCTION_DEF:
12296 nodeMask = 1;
12297 if( !(a->Arg<CFunction*>(0)==b->Arg<CFunction*>(0)) ) { return FALSE; }
12298 break;
12299 case eMODULE_DEF:
12300 nodeMask = 1;
12301 if( !(a->Arg<CModule*>(0)==b->Arg<CModule*>(0)) ) { return FALSE; }
12302 break;
12303 case eREPEAT_CONTROL:
12304 nodeMask = 0;
12305 break;
12306 case eDELAY_CONTROL:
12307 nodeMask = 0;
12308 break;
12309 case eEVENT_CONTROL:
12310 nodeMask = 0;
12311 break;
12312 case eEXTERNAL_REF:
12313 nodeMask = 1;
12314 if( !(a->Arg<CSymbol*>(0)==b->Arg<CSymbol*>(0)) ) { return FALSE; }
12315 break;
12316 case ePORT_DEF:
12317 nodeMask = 1;
12318 if( !(a->Arg<CPort*>(0)==b->Arg<CPort*>(0)) ) { return FALSE; }
12319 break;
12320 case eDEFPARAM:
12321 nodeMask = 0;
12322 break;
12323 case ePATH:
12324 nodeMask = 45;
12325 if( !(a->Arg<int>(0)==b->Arg<int>(0)) ) { return FALSE; }
12326 if( !(a->Arg<int>(2)==b->Arg<int>(2)) ) { return FALSE; }
12327 if( !(a->Arg<int>(3)==b->Arg<int>(3)) ) { return FALSE; }
12328 if( !(a->Arg<int>(5)==b->Arg<int>(5)) ) { return FALSE; }
12329 break;
12330 case ePATH_ASSIGN:
12331 nodeMask = 0;
12332 break;
12333 case eIFNONE_PATH_ASSIGN:
12334 nodeMask = 0;
12335 break;
12336 case eTRIGGER:
12337 nodeMask = 0;
12338 break;
12339 case ePASSIGN:
12340 nodeMask = 0;
12341 break;
12342 case eDEASSIGN:
12343 nodeMask = 0;
12344 break;
12345 case eDISABLE:
12346 nodeMask = 1;
12347 if( !(a->Arg<CSymbol*>(0)==b->Arg<CSymbol*>(0)) ) { return FALSE; }
12348 break;
12349 case eATTRIBUTE:
12350 nodeMask = 1;
12351 if( !(a->Arg<CAttr*>(0)==b->Arg<CAttr*>(0)) ) { return FALSE; }
12352 break;
12353 case eGIF:
12354 nodeMask = 0;
12355 break;
12356 case eGFOR:
12357 nodeMask = 0;
12358 break;
12359 case eGCASE:
12360 nodeMask = 0;
12361 break;
12362 case eTABLE:
12363 nodeMask = 0;
12364 break;
12365 case eTABLE_ENTRY:
12366 nodeMask = 0;
12367 break;
12368 case eTABLE_SYMBOL:
12369 nodeMask = 1;
12370 if( !(!strcmp(a->Arg<char*>(0),b->Arg<char*>(0))) ) { return FALSE; }
12371 break;
12372 case ePORTLIST_END:
12373 nodeMask = 0;
12374 break;
12375 case eMACRO_EXPR:
12376 nodeMask = 1;
12377 if( !(!strcmp(a->Arg<char*>(0),b->Arg<char*>(0))) ) { return FALSE; }
12378 break;
12379 case eENUM_SPEC:
12380 nodeMask = 1;
12381 if( !(a->Arg<CSymbol*>(0)==b->Arg<CSymbol*>(0)) ) { return FALSE; }
12382 break;
12383 case eMEMBER:
12384 nodeMask = 2;
12385 if( !(a->Arg<CSymbol*>(1)==b->Arg<CSymbol*>(1)) ) { return FALSE; }
12386 break;
12387 case eRETURN:
12388 nodeMask = 0;
12389 break;
12390 case ePREINC:
12391 nodeMask = 0;
12392 break;
12393 case ePOSTINC:
12394 nodeMask = 0;
12395 break;
12396 case ePREDEC:
12397 nodeMask = 0;
12398 break;
12399 case ePOSTDEC:
12400 nodeMask = 0;
12401 break;
12402 case eCAST:
12403 nodeMask = 0;
12404 break;
12405 }
12406
12407 for( int i = 0; i < a->ArgCount(); i++ ) {
12408 if( !((nodeMask>>i)&1) &&
12409 !Equivalent(a->Arg<CNode*>(i),b->Arg<CNode*>(i)) ) return FALSE;
12410 }
12411 return TRUE;
12412 }
12413
12414
12415
12416
12417
12418
12419 int CNode::IsEvaluateable()
12420 {
12421 switch( op ) {
12422 case eFUNCTION_CALL:
12423 return CFunction::Evaluateable(Arg<CSymbol*>(0),Arg<CNode*>(1),Arg<CBlock*>(2));;
12424 case ePARAM_REF:
12425 return Arg<CParam*>(0)->GetExpression()->IsEvaluateable();
12426 case eENUM_REF:
12427 return Arg<CParam*>(0)->GetExpression()->IsEvaluateable();
12428 case eMACRO_EXPR:
12429 return Arg<CNode*>(1) ? Arg<CNode*>(1)->IsEvaluateable() : FALSE;
12430 case eVCONSTANT:
12431 case eRCONSTANT:
12432 return TRUE;
12433 case eWIDTH:
12434 case eSUB:
12435 case eMUL:
12436 case eDIV:
12437 case ePOW:
12438 case eADD:
12439 case eLSH:
12440 case eRSH:
12441 case eLSHA:
12442 case eRSHA:
12443 case eMOD:
12444 case eOR:
12445 case eAND:
12446 case eXOR:
12447 case eXNOR:
12448 case eCVRI:
12449 case eCVIR:
12450 case eREP:
12451 case eCAT:
12452 case eUCAT:
12453 case eCOM:
12454 case eNEG:
12455 case ePLUS:
12456 case eNOT:
12457 case eGT:
12458 case eGE:
12459 case eLT:
12460 case eLE:
12461 case eLAND:
12462 case eLOR:
12463 case eCEQ:
12464 case eCNE:
12465 case eEQ:
12466 case eNE:
12467 case eRAND:
12468 case eRNAND:
12469 case eROR:
12470 case eRNOR:
12471 case eRXOR:
12472 case eRXNOR:
12473 case eHOOK:
12474 break;
12475 case eERROR:
12476 case eCOMMENT:
12477 case eVRQ:
12478 case ePRAGMA:
12479 case eELIST:
12480 case eNOP:
12481 case eANDANDAND:
12482 case eINSTANCE_REF:
12483 case eGATE_REF:
12484 case eTASK_ENABLE:
12485 case eSYSTASK_CALL:
12486 case eTIMING_CALL:
12487 case eARRAY:
12488 case eNET_REF:
12489 case eVAR_REF:
12490 case ePORT_REF:
12491 case eFWD_REF:
12492 case eGENVAR_REF:
12493 case eTYPE_REF:
12494 case eNET_DECL:
12495 case eVAR_DECL:
12496 case ePARAM_DECL:
12497 case eSPECPARAM_DECL:
12498 case ePORT_DECL:
12499 case eGENVAR_DECL:
12500 case eTYPEDEF_DECL:
12501 case eLIST:
12502 case eRANGE:
12503 case eSLICE:
12504 case ePSLICE:
12505 case eMSLICE:
12506 case eINIT:
12507 case eALWAYS:
12508 case eALWAYS_LATCH:
12509 case eALWAYS_FF:
12510 case eALWAYS_COMB:
12511 case eEVENT:
12512 case eBLOCK_REF:
12513 case eSPECIFY_REF:
12514 case eASSIGN:
12515 case eADD_ASSIGN:
12516 case eSUB_ASSIGN:
12517 case eMUL_ASSIGN:
12518 case eDIV_ASSIGN:
12519 case eMOD_ASSIGN:
12520 case eAND_ASSIGN:
12521 case eOR_ASSIGN:
12522 case eXOR_ASSIGN:
12523 case eLSH_ASSIGN:
12524 case eRSH_ASSIGN:
12525 case eLSHA_ASSIGN:
12526 case eRSHA_ASSIGN:
12527 case eFORCE:
12528 case eRELEASE:
12529 case eNBASSIGN:
12530 case ePOSEDGE:
12531 case eNEGEDGE:
12532 case eEDGE:
12533 case eEVOR:
12534 case eDELAY:
12535 case eMTM:
12536 case eIF:
12537 case eFOREVER:
12538 case eREPEAT:
12539 case eWHILE:
12540 case eWAIT:
12541 case eFOR:
12542 case eCASE:
12543 case eCASEX:
12544 case eCASEZ:
12545 case eCASEITEM:
12546 case eCASSIGN:
12547 case eARG:
12548 case eFUNCTION_DEF:
12549 case eMODULE_DEF:
12550 case eREPEAT_CONTROL:
12551 case eDELAY_CONTROL:
12552 case eEVENT_CONTROL:
12553 case eEXTERNAL_REF:
12554 case ePORT_DEF:
12555 case eDEFPARAM:
12556 case ePATH:
12557 case ePATH_ASSIGN:
12558 case eIFNONE_PATH_ASSIGN:
12559 case eTRIGGER:
12560 case ePASSIGN:
12561 case eDEASSIGN:
12562 case eDISABLE:
12563 case eATTRIBUTE:
12564 case eGIF:
12565 case eGFOR:
12566 case eGCASE:
12567 case eTABLE:
12568 case eTABLE_ENTRY:
12569 case eTABLE_SYMBOL:
12570 case ePORTLIST_END:
12571 case eENUM_SPEC:
12572 case eMEMBER:
12573 case eRETURN:
12574 case ePREINC:
12575 case ePOSTINC:
12576 case ePREDEC:
12577 case ePOSTDEC:
12578 case eCAST:
12579 return FALSE;
12580 default:
12581 MASSERT( FALSE );
12582 }
12583
12584 for( int i = 0; i < ArgCount(); i++ ) {
12585 if( !Arg<CNode*>(i)->IsEvaluateable() ) return FALSE;
12586 }
12587
12588 return TRUE;
12589 }
12590
12591
12592
12593
12594
12595
12596
12597
12598
12599
12600 void CNode::_EvalVector( CVector& v )
12601 {
12602 switch( op ) {
12603 case eVCONSTANT:
12604 { int width = v.GetWidth(); v.SetWidth(Arg<CVector*>(0)->GetWidth()); v = *Arg<CVector*>(0); v.SetWidth(width); };
12605 break;
12606 case eWIDTH:
12607 {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;};
12608 break;
12609 case eSUB:
12610 EVAL_VECTOR_BINARY(Sub);
12611 break;
12612 case eMUL:
12613 EVAL_VECTOR_BINARY(Mul);
12614 break;
12615 case eDIV:
12616 EVAL_VECTOR_BINARY(Div);
12617 break;
12618 case ePOW:
12619 EVAL_VECTOR_BINARY(Pow);
12620 break;
12621 case eADD:
12622 EVAL_VECTOR_BINARY(Add);
12623 break;
12624 case eLSH:
12625 EVAL_VECTOR_BINARY_SELF_RIGHT(Lsh);
12626 break;
12627 case eRSH:
12628 EVAL_VECTOR_BINARY_SELF_RIGHT(Rsh);
12629 break;
12630 case eLSHA:
12631 EVAL_VECTOR_BINARY_SELF_RIGHT(Lsha);
12632 break;
12633 case eRSHA:
12634 EVAL_VECTOR_BINARY_SELF_RIGHT(Rsha);
12635 break;
12636 case eMOD:
12637 EVAL_VECTOR_BINARY(Mod);
12638 break;
12639 case eOR:
12640 EVAL_VECTOR_BINARY(Or);
12641 break;
12642 case eAND:
12643 EVAL_VECTOR_BINARY(And);
12644 break;
12645 case eXOR:
12646 EVAL_VECTOR_BINARY(Xor);
12647 break;
12648 case eXNOR:
12649 EVAL_VECTOR_BINARY(Xnor);
12650 break;
12651 case eFUNCTION_CALL:
12652 CFunction::EvalVector(v,Arg<CSymbol*>(0),Arg<CNode*>(1),Arg<CBlock*>(2));;
12653 break;
12654 case ePARAM_REF:
12655 EVAL_VECTOR_PARAM_REF();
12656 break;
12657 case eENUM_REF:
12658 EVAL_VECTOR_ENUM_REF();
12659 break;
12660 case eCVRI:
12661 v.LoadReal( Arg<CNode*>(0)->_EvalReal() );
12662 break;
12663 case eREP:
12664 EVAL_VECTOR_BINARY(Rep);
12665 break;
12666 case eCAT:
12667 EVAL_VECTOR_BINARY(Cat);
12668 break;
12669 case eUCAT:
12670 { CVector vv(Arg<CNode*>(0)->width); Arg<CNode*>(0)->_EvalVector(vv); v = vv;};
12671 break;
12672 case eCOM:
12673 EVAL_VECTOR_UNARY(Com);
12674 break;
12675 case eNEG:
12676 EVAL_VECTOR_UNARY(Neg);
12677 break;
12678 case ePLUS:
12679 EVAL_VECTOR_UNARY(Plus);
12680 break;
12681 case eNOT:
12682 EVAL_VECTOR_UNARY(Not);
12683 break;
12684 case eGT:
12685 EVAL_RELATIONAL(Gt);
12686 break;
12687 case eGE:
12688 EVAL_RELATIONAL(Ge);
12689 break;
12690 case eLT:
12691 EVAL_RELATIONAL(Lt);
12692 break;
12693 case eLE:
12694 EVAL_RELATIONAL(Le);
12695 break;
12696 case eLAND:
12697 EVAL_VECTOR_BINARY(Land);
12698 break;
12699 case eLOR:
12700 EVAL_VECTOR_BINARY(Lor);
12701 break;
12702 case eCEQ:
12703 EVAL_RELATIONAL(Ceq);
12704 break;
12705 case eCNE:
12706 EVAL_RELATIONAL(Cne);
12707 break;
12708 case eEQ:
12709 EVAL_RELATIONAL(Eq);
12710 break;
12711 case eNE:
12712 EVAL_RELATIONAL(Ne);
12713 break;
12714 case eRAND:
12715 EVAL_VECTOR_UNARY_SELF(Rand);
12716 break;
12717 case eRNAND:
12718 EVAL_VECTOR_UNARY_SELF(Rnand);
12719 break;
12720 case eROR:
12721 EVAL_VECTOR_UNARY_SELF(Ror);
12722 break;
12723 case eRNOR:
12724 EVAL_VECTOR_UNARY_SELF(Rnor);
12725 break;
12726 case eRXOR:
12727 EVAL_VECTOR_UNARY_SELF(Rxor);
12728 break;
12729 case eRXNOR:
12730 EVAL_VECTOR_UNARY_SELF(Rxnor);
12731 break;
12732 case eHOOK:
12733 EVAL_VECTOR_HOOK();
12734 break;
12735 case eMACRO_EXPR:
12736 Arg<CNode*>(1)->EvalVector(v);
12737 break;
12738 default:
12739 MASSERT( FALSE );
12740 }
12741 }
12742
12743
12744
12745
12746
12747
12748
12749
12750
12751
12752 double CNode::_EvalReal()
12753 {
12754 double d;
12755 switch( op ) {
12756 case eRCONSTANT:
12757 d = s2d(Arg<char*>(0));
12758 break;
12759 case eSUB:
12760 EVAL_REAL_BINARY(Sub);
12761 break;
12762 case eMUL:
12763 EVAL_REAL_BINARY(Mul);
12764 break;
12765 case eDIV:
12766 EVAL_REAL_BINARY(Div);
12767 break;
12768 case ePOW:
12769 EVAL_REAL_BINARY(Pow);
12770 break;
12771 case eADD:
12772 EVAL_REAL_BINARY(Add);
12773 break;
12774 case eFUNCTION_CALL:
12775 d = CFunction::EvalReal(Arg<CSymbol*>(0),Arg<CNode*>(1),Arg<CBlock*>(2));;
12776 break;
12777 case ePARAM_REF:
12778 EVAL_REAL_PARAM_REF();
12779 break;
12780 case eENUM_REF:
12781 EVAL_REAL_ENUM_REF();
12782 break;
12783 case eCVIR:
12784 { CVector v(Arg<CNode*>(0)->width); v.Signed(Arg<CNode*>(0)->type == eS); Arg<CNode*>(0)->_EvalVector(v); d = v.GetReal(); };
12785 break;
12786 case eNEG:
12787 EVAL_REAL_UNARY(Neg);
12788 break;
12789 case ePLUS:
12790 EVAL_REAL_UNARY(Plus);
12791 break;
12792 case eHOOK:
12793 EVAL_REAL_HOOK();
12794 break;
12795 case eMACRO_EXPR:
12796 d = Arg<CNode*>(1)->EvalReal();
12797 break;
12798 default:
12799 MASSERT( FALSE );
12800 }
12801 return d;
12802 }
12803
12804
12805
12806
12807
12808 int CNode::ConditionalWiden()
12809 {
12810 switch( GetOp() ) {
12811 case eVCONSTANT:
12812 return 0;
12813 case eRCONSTANT:
12814 return 0;
12815 case eELIST:
12816 return 0;
12817 case eWIDTH:
12818 return 0;
12819 case eSUB:
12820 return 0;
12821 case eMUL:
12822 return 0;
12823 case eDIV:
12824 return 0;
12825 case ePOW:
12826 return 0;
12827 case eADD:
12828 return 0;
12829 case eLSH:
12830 return 0;
12831 case eRSH:
12832 return 0;
12833 case eLSHA:
12834 return 0;
12835 case eRSHA:
12836 return 0;
12837 case eMOD:
12838 return 0;
12839 case eOR:
12840 return 1;
12841 case eAND:
12842 return 1;
12843 case eANDANDAND:
12844 return 0;
12845 case eXOR:
12846 return 1;
12847 case eXNOR:
12848 return 1;
12849 case eSYSTASK_CALL:
12850 return 0;
12851 case eFUNCTION_CALL:
12852 return 0;
12853 case eARRAY:
12854 return 0;
12855 case eNET_REF:
12856 return 0;
12857 case eVAR_REF:
12858 return 0;
12859 case ePARAM_REF:
12860 return 0;
12861 case ePORT_REF:
12862 return 0;
12863 case eFWD_REF:
12864 return 0;
12865 case eGENVAR_REF:
12866 return 0;
12867 case eENUM_REF:
12868 return 0;
12869 case eTYPE_REF:
12870 return 0;
12871 case eRANGE:
12872 return 0;
12873 case eSLICE:
12874 return 0;
12875 case ePSLICE:
12876 return 0;
12877 case eMSLICE:
12878 return 0;
12879 case eCVRI:
12880 return 0;
12881 case eCVIR:
12882 return 0;
12883 case eREP:
12884 return 0;
12885 case eCAT:
12886 return 0;
12887 case eUCAT:
12888 return 0;
12889 case eCOM:
12890 return 0;
12891 case eNEG:
12892 return 0;
12893 case ePLUS:
12894 return 0;
12895 case eNOT:
12896 return 0;
12897 case eGT:
12898 return 0;
12899 case eGE:
12900 return 0;
12901 case eLT:
12902 return 0;
12903 case eLE:
12904 return 0;
12905 case eLAND:
12906 return 0;
12907 case eLOR:
12908 return 0;
12909 case eCEQ:
12910 return 0;
12911 case eCNE:
12912 return 0;
12913 case eEQ:
12914 return 0;
12915 case eNE:
12916 return 0;
12917 case eRAND:
12918 return 0;
12919 case eRNAND:
12920 return 0;
12921 case eROR:
12922 return 0;
12923 case eRNOR:
12924 return 0;
12925 case eRXOR:
12926 return 0;
12927 case eRXNOR:
12928 return 0;
12929 case eHOOK:
12930 return 0;
12931 case ePOSEDGE:
12932 return 0;
12933 case eNEGEDGE:
12934 return 0;
12935 case eEVOR:
12936 return 0;
12937 case eMTM:
12938 return 0;
12939 case eEXTERNAL_REF:
12940 return 0;
12941 case eATTRIBUTE:
12942 return 0;
12943 case eMACRO_EXPR:
12944 return 0;
12945 case eMEMBER:
12946 return 0;
12947 case ePREINC:
12948 return 0;
12949 case ePOSTINC:
12950 return 0;
12951 case ePREDEC:
12952 return 0;
12953 case ePOSTDEC:
12954 return 0;
12955 case eCAST:
12956 return 0;
12957 default:
12958 MASSERT( FALSE );
12959 }
12960 return 0;
12961 }
12962
12963
12964
12965
12966
12967
12968 unsigned CNode::NodeMask()
12969 {
12970 switch( GetOp() ) {
12971 case eERROR:
12972 return 0;
12973 case eVCONSTANT:
12974 return 0;
12975 case eRCONSTANT:
12976 return 0;
12977 case eCOMMENT:
12978 return 0;
12979 case eVRQ:
12980 return 0;
12981 case ePRAGMA:
12982 return 0;
12983 case eELIST:
12984 return 3;
12985 case eWIDTH:
12986 return 3;
12987 case eNOP:
12988 return 0;
12989 case eSUB:
12990 return 3;
12991 case eMUL:
12992 return 3;
12993 case eDIV:
12994 return 3;
12995 case ePOW:
12996 return 3;
12997 case eADD:
12998 return 3;
12999 case eLSH:
13000 return 3;
13001 case eRSH:
13002 return 3;
13003 case eLSHA:
13004 return 3;
13005 case eRSHA:
13006 return 3;
13007 case eMOD:
13008 return 3;
13009 case eOR:
13010 return 3;
13011 case eAND:
13012 return 3;
13013 case eANDANDAND:
13014 return 3;
13015 case eXOR:
13016 return 3;
13017 case eXNOR:
13018 return 3;
13019 case eINSTANCE_REF:
13020 return 0;
13021 case eGATE_REF:
13022 return 0;
13023 case eTASK_ENABLE:
13024 return 2;
13025 case eSYSTASK_CALL:
13026 return 2;
13027 case eTIMING_CALL:
13028 return 2;
13029 case eFUNCTION_CALL:
13030 return 2;
13031 case eARRAY:
13032 return 3;
13033 case eNET_REF:
13034 return 0;
13035 case eVAR_REF:
13036 return 0;
13037 case ePARAM_REF:
13038 return 0;
13039 case ePORT_REF:
13040 return 0;
13041 case eFWD_REF:
13042 return 0;
13043 case eGENVAR_REF:
13044 return 0;
13045 case eENUM_REF:
13046 return 0;
13047 case eTYPE_REF:
13048 return 0;
13049 case eNET_DECL:
13050 return 2;
13051 case eVAR_DECL:
13052 return 2;
13053 case ePARAM_DECL:
13054 return 0;
13055 case eSPECPARAM_DECL:
13056 return 0;
13057 case ePORT_DECL:
13058 return 0;
13059 case eGENVAR_DECL:
13060 return 0;
13061 case eTYPEDEF_DECL:
13062 return 0;
13063 case eLIST:
13064 return 3;
13065 case eRANGE:
13066 return 3;
13067 case eSLICE:
13068 return 3;
13069 case ePSLICE:
13070 return 3;
13071 case eMSLICE:
13072 return 3;
13073 case eCVRI:
13074 return 1;
13075 case eCVIR:
13076 return 1;
13077 case eREP:
13078 return 3;
13079 case eCAT:
13080 return 3;
13081 case eUCAT:
13082 return 1;
13083 case eCOM:
13084 return 1;
13085 case eNEG:
13086 return 1;
13087 case ePLUS:
13088 return 1;
13089 case eNOT:
13090 return 1;
13091 case eGT:
13092 return 3;
13093 case eGE:
13094 return 3;
13095 case eLT:
13096 return 3;
13097 case eLE:
13098 return 3;
13099 case eLAND:
13100 return 3;
13101 case eLOR:
13102 return 3;
13103 case eCEQ:
13104 return 3;
13105 case eCNE:
13106 return 3;
13107 case eEQ:
13108 return 3;
13109 case eNE:
13110 return 3;
13111 case eRAND:
13112 return 1;
13113 case eRNAND:
13114 return 1;
13115 case eROR:
13116 return 1;
13117 case eRNOR:
13118 return 1;
13119 case eRXOR:
13120 return 1;
13121 case eRXNOR:
13122 return 1;
13123 case eHOOK:
13124 return 7;
13125 case eINIT:
13126 return 1;
13127 case eALWAYS:
13128 return 1;
13129 case eALWAYS_LATCH:
13130 return 1;
13131 case eALWAYS_FF:
13132 return 1;
13133 case eALWAYS_COMB:
13134 return 1;
13135 case eEVENT:
13136 return 3;
13137 case eBLOCK_REF:
13138 return 2;
13139 case eSPECIFY_REF:
13140 return 2;
13141 case eASSIGN:
13142 return 7;
13143 case eADD_ASSIGN:
13144 return 7;
13145 case eSUB_ASSIGN:
13146 return 7;
13147 case eMUL_ASSIGN:
13148 return 7;
13149 case eDIV_ASSIGN:
13150 return 7;
13151 case eMOD_ASSIGN:
13152 return 7;
13153 case eAND_ASSIGN:
13154 return 7;
13155 case eOR_ASSIGN:
13156 return 7;
13157 case eXOR_ASSIGN:
13158 return 7;
13159 case eLSH_ASSIGN:
13160 return 7;
13161 case eRSH_ASSIGN:
13162 return 7;
13163 case eLSHA_ASSIGN:
13164 return 7;
13165 case eRSHA_ASSIGN:
13166 return 7;
13167 case eFORCE:
13168 return 3;
13169 case eRELEASE:
13170 return 1;
13171 case eNBASSIGN:
13172 return 7;
13173 case ePOSEDGE:
13174 return 1;
13175 case eNEGEDGE:
13176 return 1;
13177 case eEDGE:
13178 return 1;
13179 case eEVOR:
13180 return 3;
13181 case eDELAY:
13182 return 3;
13183 case eMTM:
13184 return 7;
13185 case eIF:
13186 return 7;
13187 case eFOREVER:
13188 return 1;
13189 case eREPEAT:
13190 return 3;
13191 case eWHILE:
13192 return 3;
13193 case eWAIT:
13194 return 3;
13195 case eFOR:
13196 return 15;
13197 case eCASE:
13198 return 3;
13199 case eCASEX:
13200 return 3;
13201 case eCASEZ:
13202 return 3;
13203 case eCASEITEM:
13204 return 3;
13205 case eCASSIGN:
13206 return 14;
13207 case eARG:
13208 return 2;
13209 case eFUNCTION_DEF:
13210 return 0;
13211 case eMODULE_DEF:
13212 return 0;
13213 case eREPEAT_CONTROL:
13214 return 3;
13215 case eDELAY_CONTROL:
13216 return 1;
13217 case eEVENT_CONTROL:
13218 return 1;
13219 case eEXTERNAL_REF:
13220 return 0;
13221 case ePORT_DEF:
13222 return 0;
13223 case eDEFPARAM:
13224 return 3;
13225 case ePATH:
13226 return 82;
13227 case ePATH_ASSIGN:
13228 return 7;
13229 case eIFNONE_PATH_ASSIGN:
13230 return 3;
13231 case eTRIGGER:
13232 return 1;
13233 case ePASSIGN:
13234 return 3;
13235 case eDEASSIGN:
13236 return 1;
13237 case eDISABLE:
13238 return 0;
13239 case eATTRIBUTE:
13240 return 0;
13241 case eGIF:
13242 return 7;
13243 case eGFOR:
13244 return 15;
13245 case eGCASE:
13246 return 3;
13247 case eTABLE:
13248 return 1;
13249 case eTABLE_ENTRY:
13250 return 1;
13251 case eTABLE_SYMBOL:
13252 return 0;
13253 case ePORTLIST_END:
13254 return 0;
13255 case eMACRO_EXPR:
13256 return 2;
13257 case eENUM_SPEC:
13258 return 6;
13259 case eMEMBER:
13260 return 1;
13261 case eRETURN:
13262 return 1;
13263 case ePREINC:
13264 return 1;
13265 case ePOSTINC:
13266 return 1;
13267 case ePREDEC:
13268 return 1;
13269 case ePOSTDEC:
13270 return 1;
13271 case eCAST:
13272 return 3;
13273 default:
13274 MASSERT( FALSE );
13275 }
13276 return 0;
13277 }
13278
13279
13280
13281
13282
13283
13284 int CNode::WidthFixed()
13285 {
13286 switch( GetOp() ) {
13287 case eVCONSTANT:
13288 return NodeMask()==0;
13289 case eRCONSTANT:
13290 return 1;
13291 case eELIST:
13292 return NodeMask()==0;
13293 case eWIDTH:
13294 return NodeMask()==0;
13295 case eSUB:
13296 return NodeMask()==0;
13297 case eMUL:
13298 return NodeMask()==0;
13299 case eDIV:
13300 return NodeMask()==0;
13301 case ePOW:
13302 return NodeMask()==0;
13303 case eADD:
13304 return NodeMask()==0;
13305 case eLSH:
13306 return NodeMask()==0;
13307 case eRSH:
13308 return NodeMask()==0;
13309 case eLSHA:
13310 return NodeMask()==0;
13311 case eRSHA:
13312 return NodeMask()==0;
13313 case eMOD:
13314 return NodeMask()==0;
13315 case eOR:
13316 return NodeMask()==0;
13317 case eAND:
13318 return NodeMask()==0;
13319 case eANDANDAND:
13320 return NodeMask()==0;
13321 case eXOR:
13322 return NodeMask()==0;
13323 case eXNOR:
13324 return NodeMask()==0;
13325 case eSYSTASK_CALL:
13326 return NodeMask()==0;
13327 case eFUNCTION_CALL:
13328 return NodeMask()==0;
13329 case eARRAY:
13330 return NodeMask()==0;
13331 case eNET_REF:
13332 return NodeMask()==0;
13333 case eVAR_REF:
13334 return NodeMask()==0;
13335 case ePARAM_REF:
13336 return NodeMask()==0;
13337 case ePORT_REF:
13338 return NodeMask()==0;
13339 case eFWD_REF:
13340 return NodeMask()==0;
13341 case eGENVAR_REF:
13342 return NodeMask()==0;
13343 case eENUM_REF:
13344 return NodeMask()==0;
13345 case eTYPE_REF:
13346 return 1;
13347 case eRANGE:
13348 return NodeMask()==0;
13349 case eSLICE:
13350 return NodeMask()==0;
13351 case ePSLICE:
13352 return NodeMask()==0;
13353 case eMSLICE:
13354 return NodeMask()==0;
13355 case eCVRI:
13356 return 1;
13357 case eCVIR:
13358 return 1;
13359 case eREP:
13360 return NodeMask()==0;
13361 case eCAT:
13362 return NodeMask()==0;
13363 case eUCAT:
13364 return NodeMask()==0;
13365 case eCOM:
13366 return NodeMask()==0;
13367 case eNEG:
13368 return NodeMask()==0;
13369 case ePLUS:
13370 return NodeMask()==0;
13371 case eNOT:
13372 return 1;
13373 case eGT:
13374 return 1;
13375 case eGE:
13376 return 1;
13377 case eLT:
13378 return 1;
13379 case eLE:
13380 return 1;
13381 case eLAND:
13382 return 1;
13383 case eLOR:
13384 return 1;
13385 case eCEQ:
13386 return 1;
13387 case eCNE:
13388 return 1;
13389 case eEQ:
13390 return 1;
13391 case eNE:
13392 return 1;
13393 case eRAND:
13394 return 1;
13395 case eRNAND:
13396 return 1;
13397 case eROR:
13398 return 1;
13399 case eRNOR:
13400 return 1;
13401 case eRXOR:
13402 return 1;
13403 case eRXNOR:
13404 return 1;
13405 case eHOOK:
13406 return NodeMask()==0;
13407 case ePOSEDGE:
13408 return NodeMask()==0;
13409 case eNEGEDGE:
13410 return NodeMask()==0;
13411 case eEVOR:
13412 return NodeMask()==0;
13413 case eMTM:
13414 return NodeMask()==0;
13415 case eEXTERNAL_REF:
13416 return NodeMask()==0;
13417 case eATTRIBUTE:
13418 return 1;
13419 case eMACRO_EXPR:
13420 return NodeMask()==0;
13421 case eMEMBER:
13422 return NodeMask()==0;
13423 case ePREINC:
13424 return NodeMask()==0;
13425 case ePOSTINC:
13426 return NodeMask()==0;
13427 case ePREDEC:
13428 return NodeMask()==0;
13429 case ePOSTDEC:
13430 return NodeMask()==0;
13431 case eCAST:
13432 return NodeMask()==0;
13433 default:
13434 MASSERT( FALSE );
13435 }
13436 return 0;
13437 }
13438
13439
13440
13441
13442
13443 struct LabelBitsInfo {
13444 int suppressErrorMessages;
13445 int error;
13446 };
13447
13448 void CNode::_LabelBits( CNode* n, void* arg )
13449 {
13450
13451
13452
13453
13454
13455
13456 if( labelCacheEnabled && (evalCount == 0 || !evalHeap.IsOwner(n)) ) {
13457 if( labelCache.find(n) != labelCache.end() ) {
13458 return;
13459 }
13460 labelCache[n] = 1;
13461 }
13462
13463
13464 LabelBitsInfo* info = (LabelBitsInfo*)arg;
13465 int suppressErrorMessages = info->suppressErrorMessages;
13466 unsigned nodeMask = n->NodeMask();
13467 int conditionalWiden = n->ConditionalWiden();
13468
13469 switch( n->GetOp() ) {
13470 case eVCONSTANT:
13471 n->type = n->Arg<CVector*>(0)->GetNodeType();
13472 break;
13473 case eRCONSTANT:
13474 if(1) {
13475 n->type = eR;
13476 }
13477 break;
13478 case eELIST:
13479 if( n->Arg<CNode*>(0)->type == eR ) {
13480 info->error = 1;
13481 if( !suppressErrorMessages ) {
13482 error(n->GetCoord(), "Illegal expression operand" );
13483 }
13484 } else if( n->Arg<CNode*>(1)->type == eR ) {
13485 info->error = 1;
13486 if( !suppressErrorMessages ) {
13487 error(n->GetCoord(), "Illegal expression operand" );
13488 }
13489 } else if(1) {
13490 n->type = eB;
13491 }
13492 break;
13493 case eWIDTH:
13494 if( n->Arg<CNode*>(1)->type == eS ) {
13495 n->type = eS;
13496 } else if(1) {
13497 n->type = eB;
13498 }
13499 break;
13500 case eSUB:
13501 if( n->Arg<CNode*>(0)->type == eR ) {
13502 n->type = eR;
13503 } else if( n->Arg<CNode*>(1)->type == eR ) {
13504 n->type = eR;
13505 } else if( n->Arg<CNode*>(0)->type == eS && n->Arg<CNode*>(1)->type == eS ) {
13506 n->type = eS;
13507 } else if(1) {
13508 n->type = eB;
13509 }
13510 break;
13511 case eMUL:
13512 if( n->Arg<CNode*>(0)->type == eR ) {
13513 n->type = eR;
13514 } else if( n->Arg<CNode*>(1)->type == eR ) {
13515 n->type = eR;
13516 } else if( n->Arg<CNode*>(0)->type == eS && n->Arg<CNode*>(1)->type == eS ) {
13517 n->type = eS;
13518 } else if(1) {
13519 n->type = eB;
13520 }
13521 break;
13522 case eDIV:
13523 if( n->Arg<CNode*>(0)->type == eR ) {
13524 n->type = eR;
13525 } else if( n->Arg<CNode*>(1)->type == eR ) {
13526 n->type = eR;
13527 } else if( n->Arg<CNode*>(0)->type == eS && n->Arg<CNode*>(1)->type == eS ) {
13528 n->type = eS;
13529 } else if(1) {
13530 n->type = eB;
13531 }
13532 break;
13533 case ePOW:
13534 if( n->Arg<CNode*>(0)->type == eR ) {
13535 n->type = eR;
13536 } else if( n->Arg<CNode*>(1)->type == eR ) {
13537 n->type = eR;
13538 } else if( n->Arg<CNode*>(0)->type == eS && n->Arg<CNode*>(1)->type == eS ) {
13539 n->type = eS;
13540 } else if(1) {
13541 n->type = eB;
13542 }
13543 break;
13544 case eADD:
13545 if( n->Arg<CNode*>(0)->type == eR ) {
13546 n->type = eR;
13547 } else if( n->Arg<CNode*>(1)->type == eR ) {
13548 n->type = eR;
13549 } else if( n->Arg<CNode*>(0)->type == eS && n->Arg<CNode*>(1)->type == eS ) {
13550 n->type = eS;
13551 } else if(1) {
13552 n->type = eB;
13553 }
13554 break;
13555 case eLSH:
13556 if( n->Arg<CNode*>(0)->type == eS ) {
13557 n->type = eS;
13558 } else if(1) {
13559 n->type = eB;
13560 }
13561 break;
13562 case eRSH:
13563 if( n->Arg<CNode*>(0)->type == eS ) {
13564 n->type = eS;
13565 } else if(1) {
13566 n->type = eB;
13567 }
13568 break;
13569 case eLSHA:
13570 if( n->Arg<CNode*>(0)->type == eS ) {
13571 n->type = eS;
13572 } else if(1) {
13573 n->type = eB;
13574 }
13575 break;
13576 case eRSHA:
13577 if( n->Arg<CNode*>(0)->type == eS ) {
13578 n->type = eS;
13579 } else if(1) {
13580 n->type = eB;
13581 }
13582 break;
13583 case eMOD:
13584 if( n->Arg<CNode*>(0)->type == eR ) {
13585 info->error = 1;
13586 if( !suppressErrorMessages ) {
13587 error(n->GetCoord(), "Illegal expression operand" );
13588 }
13589 } else if( n->Arg<CNode*>(1)->type == eR ) {
13590 info->error = 1;
13591 if( !suppressErrorMessages ) {
13592 error(n->GetCoord(), "Illegal expression operand" );
13593 }
13594 } else if( n->Arg<CNode*>(0)->type == eS && n->Arg<CNode*>(1)->type == eS ) {
13595 n->type = eS;
13596 } else if(1) {
13597 n->type = eB;
13598 }
13599 break;
13600 case eOR:
13601 if( n->Arg<CNode*>(0)->type == eR ) {
13602 info->error = 1;
13603 if( !suppressErrorMessages ) {
13604 error(n->GetCoord(), "Illegal expression operand" );
13605 }
13606 } else if( n->Arg<CNode*>(1)->type == eR ) {
13607 info->error = 1;
13608 if( !suppressErrorMessages ) {
13609 error(n->GetCoord(), "Illegal expression operand" );
13610 }
13611 } else if( n->Arg<CNode*>(0)->type == eS && n->Arg<CNode*>(1)->type == eS ) {
13612 n->type = eS;
13613 } else if(1) {
13614 n->type = eB;
13615 }
13616 break;
13617 case eAND:
13618 if( n->Arg<CNode*>(0)->type == eR ) {
13619 info->error = 1;
13620 if( !suppressErrorMessages ) {
13621 error(n->GetCoord(), "Illegal expression operand" );
13622 }
13623 } else if( n->Arg<CNode*>(1)->type == eR ) {
13624 info->error = 1;
13625 if( !suppressErrorMessages ) {
13626 error(n->GetCoord(), "Illegal expression operand" );
13627 }
13628 } else if( n->Arg<CNode*>(0)->type == eS && n->Arg<CNode*>(1)->type == eS ) {
13629 n->type = eS;
13630 } else if(1) {
13631 n->type = eB;
13632 }
13633 break;
13634 case eANDANDAND:
13635 if( n->Arg<CNode*>(0)->type == eR ) {
13636 info->error = 1;
13637 if( !suppressErrorMessages ) {
13638 error(n->GetCoord(), "Illegal expression operand" );
13639 }
13640 } else if( n->Arg<CNode*>(1)->type == eR ) {
13641 info->error = 1;
13642 if( !suppressErrorMessages ) {
13643 error(n->GetCoord(), "Illegal expression operand" );
13644 }
13645 } else if(1) {
13646 n->type = eB;
13647 }
13648 break;
13649 case eXOR:
13650 if( n->Arg<CNode*>(0)->type == eR ) {
13651 info->error = 1;
13652 if( !suppressErrorMessages ) {
13653 error(n->GetCoord(), "Illegal expression operand" );
13654 }
13655 } else if( n->Arg<CNode*>(1)->type == eR ) {
13656 info->error = 1;
13657 if( !suppressErrorMessages ) {
13658 error(n->GetCoord(), "Illegal expression operand" );
13659 }
13660 } else if( n->Arg<CNode*>(0)->type == eS && n->Arg<CNode*>(1)->type == eS ) {
13661 n->type = eS;
13662 } else if(1) {
13663 n->type = eB;
13664 }
13665 break;
13666 case eXNOR:
13667 if( n->Arg<CNode*>(0)->type == eR ) {
13668 info->error = 1;
13669 if( !suppressErrorMessages ) {
13670 error(n->GetCoord(), "Illegal expression operand" );
13671 }
13672 } else if( n->Arg<CNode*>(1)->type == eR ) {
13673 info->error = 1;
13674 if( !suppressErrorMessages ) {
13675 error(n->GetCoord(), "Illegal expression operand" );
13676 }
13677 } else if( n->Arg<CNode*>(0)->type == eS && n->Arg<CNode*>(1)->type == eS ) {
13678 n->type = eS;
13679 } else if(1) {
13680 n->type = eB;
13681 }
13682 break;
13683 case eSYSTASK_CALL:
13684 n->type = Systask::Type(n->Arg<CSymbol*>(0),n->Arg<CNode*>(1));
13685 break;
13686 case eFUNCTION_CALL:
13687 n->type = CFunction::Type(n->Arg<CSymbol*>(0),n->Arg<CNode*>(1),n->Arg<CScope*>(2));
13688 break;
13689 case eARRAY:
13690 n->type = Array::Type(n->Arg<CNode*>(0),n->Arg<CNode*>(1));
13691 break;
13692 case eNET_REF:
13693 n->type = n->Arg<CNet*>(0)->GetNodeType();
13694 break;
13695 case eVAR_REF:
13696 n->type = n->Arg<CVar*>(0)->GetNodeType();
13697 break;
13698 case ePARAM_REF:
13699 n->type = n->Arg<CParam*>(0)->GetNodeType();
13700 break;
13701 case ePORT_REF:
13702 n->type = n->Arg<CPortDir*>(0)->GetNodeType();
13703 break;
13704 case eFWD_REF:
13705 if(1) {
13706 n->type = eB;
13707 }
13708 break;
13709 case eGENVAR_REF:
13710 n->type = n->Arg<CGenvar*>(0)->GetNodeType();
13711 break;
13712 case eENUM_REF:
13713 n->type = n->Arg<CEnum*>(0)->GetNodeType();
13714 break;
13715 case eTYPE_REF:
13716 if(1) {
13717 n->type = eS;
13718 }
13719 break;
13720 case eRANGE:
13721 if( n->Arg<CNode*>(0)->type == eR ) {
13722 info->error = 1;
13723 if( !suppressErrorMessages ) {
13724 error(n->GetCoord(), "Illegal expression operand" );
13725 }
13726 } else if( n->Arg<CNode*>(1)->type == eR ) {
13727 info->error = 1;
13728 if( !suppressErrorMessages ) {
13729 error(n->GetCoord(), "Illegal expression operand" );
13730 }
13731 } else if(1) {
13732 n->type = eB;
13733 }
13734 break;
13735 case eSLICE:
13736 if( n->Arg<CNode*>(0)->type == eR ) {
13737 info->error = 1;
13738 if( !suppressErrorMessages ) {
13739 error(n->GetCoord(), "Illegal expression operand" );
13740 }
13741 } else if( n->Arg<CNode*>(1)->type == eR ) {
13742 info->error = 1;
13743 if( !suppressErrorMessages ) {
13744 error(n->GetCoord(), "Illegal expression operand" );
13745 }
13746 } else if(1) {
13747 n->type = eB;
13748 }
13749 break;
13750 case ePSLICE:
13751 if( n->Arg<CNode*>(1)->type == eR ) {
13752 info->error = 1;
13753 if( !suppressErrorMessages ) {
13754 error(n->GetCoord(), "Illegal expression operand" );
13755 }
13756 } else if(1) {
13757 n->type = eB;
13758 }
13759 break;
13760 case eMSLICE:
13761 if( n->Arg<CNode*>(1)->type == eR ) {
13762 info->error = 1;
13763 if( !suppressErrorMessages ) {
13764 error(n->GetCoord(), "Illegal expression operand" );
13765 }
13766 } else if(1) {
13767 n->type = eB;
13768 }
13769 break;
13770 case eCVRI:
13771 if(1) {
13772 n->type = eS;
13773 }
13774 break;
13775 case eCVIR:
13776 if(1) {
13777 n->type = eR;
13778 }
13779 break;
13780 case eREP:
13781 if( n->Arg<CNode*>(0)->type == eR ) {
13782 info->error = 1;
13783 if( !suppressErrorMessages ) {
13784 error(n->GetCoord(), "Illegal expression operand" );
13785 }
13786 } else if( n->Arg<CNode*>(1)->type == eR ) {
13787 info->error = 1;
13788 if( !suppressErrorMessages ) {
13789 error(n->GetCoord(), "Illegal expression operand" );
13790 }
13791 } else if(1) {
13792 n->type = eB;
13793 }
13794 break;
13795 case eCAT:
13796 if( n->Arg<CNode*>(0)->type == eR ) {
13797 info->error = 1;
13798 if( !suppressErrorMessages ) {
13799 error(n->GetCoord(), "Illegal expression operand" );
13800 }
13801 } else if( n->Arg<CNode*>(1)->type == eR ) {
13802 info->error = 1;
13803 if( !suppressErrorMessages ) {
13804 error(n->GetCoord(), "Illegal expression operand" );
13805 }
13806 } else if(1) {
13807 n->type = eB;
13808 }
13809 break;
13810 case eUCAT:
13811 if( n->Arg<CNode*>(0)->type == eR ) {
13812 info->error = 1;
13813 if( !suppressErrorMessages ) {
13814 error(n->GetCoord(), "Illegal expression operand" );
13815 }
13816 } else if(1) {
13817 n->type = eB;
13818 }
13819 break;
13820 case eCOM:
13821 if( n->Arg<CNode*>(0)->type == eR ) {
13822 info->error = 1;
13823 if( !suppressErrorMessages ) {
13824 error(n->GetCoord(), "Illegal expression operand" );
13825 }
13826 } else if( n->Arg<CNode*>(0)->type == eS ) {
13827 n->type = eS;
13828 } else if(1) {
13829 n->type = eB;
13830 }
13831 break;
13832 case eNEG:
13833 n->type = n->Arg<CNode*>(0)->type;
13834 break;
13835 case ePLUS:
13836 n->type = n->Arg<CNode*>(0)->type;
13837 break;
13838 case eNOT:
13839 if(1) {
13840 n->type = eB;
13841 }
13842 break;
13843 case eGT:
13844 if(1) {
13845 n->type = eB;
13846 }
13847 break;
13848 case eGE:
13849 if(1) {
13850 n->type = eB;
13851 }
13852 break;
13853 case eLT:
13854 if(1) {
13855 n->type = eB;
13856 }
13857 break;
13858 case eLE:
13859 if(1) {
13860 n->type = eB;
13861 }
13862 break;
13863 case eLAND:
13864 if(1) {
13865 n->type = eB;
13866 }
13867 break;
13868 case eLOR:
13869 if(1) {
13870 n->type = eB;
13871 }
13872 break;
13873 case eCEQ:
13874 if( n->Arg<CNode*>(0)->type == eR ) {
13875 info->error = 1;
13876 if( !suppressErrorMessages ) {
13877 error(n->GetCoord(), "Illegal expression operand" );
13878 }
13879 } else if( n->Arg<CNode*>(1)->type == eR ) {
13880 info->error = 1;
13881 if( !suppressErrorMessages ) {
13882 error(n->GetCoord(), "Illegal expression operand" );
13883 }
13884 } else if(1) {
13885 n->type = eB;
13886 }
13887 break;
13888 case eCNE:
13889 if( n->Arg<CNode*>(0)->type == eR ) {
13890 info->error = 1;
13891 if( !suppressErrorMessages ) {
13892 error(n->GetCoord(), "Illegal expression operand" );
13893 }
13894 } else if( n->Arg<CNode*>(1)->type == eR ) {
13895 info->error = 1;
13896 if( !suppressErrorMessages ) {
13897 error(n->GetCoord(), "Illegal expression operand" );
13898 }
13899 } else if(1) {
13900 n->type = eB;
13901 }
13902 break;
13903 case eEQ:
13904 if(1) {
13905 n->type = eB;
13906 }
13907 break;
13908 case eNE:
13909 if(1) {
13910 n->type = eB;
13911 }
13912 break;
13913 case eRAND:
13914 if( n->Arg<CNode*>(0)->type == eR ) {
13915 info->error = 1;
13916 if( !suppressErrorMessages ) {
13917 error(n->GetCoord(), "Illegal expression operand" );
13918 }
13919 } else if(1) {
13920 n->type = eB;
13921 }
13922 break;
13923 case eRNAND:
13924 if( n->Arg<CNode*>(0)->type == eR ) {
13925 info->error = 1;
13926 if( !suppressErrorMessages ) {
13927 error(n->GetCoord(), "Illegal expression operand" );
13928 }
13929 } else if(1) {
13930 n->type = eB;
13931 }
13932 break;
13933 case eROR:
13934 if( n->Arg<CNode*>(0)->type == eR ) {
13935 info->error = 1;
13936 if( !suppressErrorMessages ) {
13937 error(n->GetCoord(), "Illegal expression operand" );
13938 }
13939 } else if(1) {
13940 n->type = eB;
13941 }
13942 break;
13943 case eRNOR:
13944 if( n->Arg<CNode*>(0)->type == eR ) {
13945 info->error = 1;
13946 if( !suppressErrorMessages ) {
13947 error(n->GetCoord(), "Illegal expression operand" );
13948 }
13949 } else if(1) {
13950 n->type = eB;
13951 }
13952 break;
13953 case eRXOR:
13954 if( n->Arg<CNode*>(0)->type == eR ) {
13955 info->error = 1;
13956 if( !suppressErrorMessages ) {
13957 error(n->GetCoord(), "Illegal expression operand" );
13958 }
13959 } else if(1) {
13960 n->type = eB;
13961 }
13962 break;
13963 case eRXNOR:
13964 if( n->Arg<CNode*>(0)->type == eR ) {
13965 info->error = 1;
13966 if( !suppressErrorMessages ) {
13967 error(n->GetCoord(), "Illegal expression operand" );
13968 }
13969 } else if(1) {
13970 n->type = eB;
13971 }
13972 break;
13973 case eHOOK:
13974 if( n->Arg<CNode*>(1)->type == eR ) {
13975 n->type = eR;
13976 } else if( n->Arg<CNode*>(2)->type == eR ) {
13977 n->type = eR;
13978 } else if( n->Arg<CNode*>(1)->type == eS && n->Arg<CNode*>(2)->type == eS ) {
13979 n->type = eS;
13980 } else if(1) {
13981 n->type = eB;
13982 }
13983 break;
13984 case ePOSEDGE:
13985 if(1) {
13986 n->type = eE;
13987 }
13988 break;
13989 case eNEGEDGE:
13990 if(1) {
13991 n->type = eE;
13992 }
13993 break;
13994 case eEVOR:
13995 if(1) {
13996 n->type = eE;
13997 }
13998 break;
13999 case eMTM:
14000 if( n->Arg<CNode*>(0)->type == eR ) {
14001 n->type = eR;
14002 } else if( n->Arg<CNode*>(1)->type == eR ) {
14003 n->type = eR;
14004 } else if( n->Arg<CNode*>(2)->type == eR ) {
14005 n->type = eR;
14006 } else if( n->Arg<CNode*>(0)->type == eS && n->Arg<CNode*>(1)->type == eS && n->Arg<CNode*>(2)->type == eS ) {
14007 n->type = eS;
14008 } else if(1) {
14009 n->type = eB;
14010 }
14011 break;
14012 case eEXTERNAL_REF:
14013 n->type = External::Type(n->Arg<CSymbol*>(0));
14014 break;
14015 case eATTRIBUTE:
14016 if(1) {
14017 n->type = eU;
14018 }
14019 break;
14020 case eMACRO_EXPR:
14021 n->type = n->Arg<CNode*>(1)->type;
14022 break;
14023 case eMEMBER:
14024 n->type = Member::Type(n->Arg<CNode*>(0),n->Arg<CSymbol*>(1));
14025 break;
14026 case ePREINC:
14027 if( n->Arg<CNode*>(0)->type == eR ) {
14028 n->type = eR;
14029 } else if( n->Arg<CNode*>(0)->type == eS ) {
14030 n->type = eS;
14031 } else if(1) {
14032 n->type = eB;
14033 }
14034 break;
14035 case ePOSTINC:
14036 if( n->Arg<CNode*>(0)->type == eR ) {
14037 n->type = eR;
14038 } else if( n->Arg<CNode*>(0)->type == eS ) {
14039 n->type = eS;
14040 } else if(1) {
14041 n->type = eB;
14042 }
14043 break;
14044 case ePREDEC:
14045 if( n->Arg<CNode*>(0)->type == eR ) {
14046 n->type = eR;
14047 } else if( n->Arg<CNode*>(0)->type == eS ) {
14048 n->type = eS;
14049 } else if(1) {
14050 n->type = eB;
14051 }
14052 break;
14053 case ePOSTDEC:
14054 if( n->Arg<CNode*>(0)->type == eR ) {
14055 n->type = eR;
14056 } else if( n->Arg<CNode*>(0)->type == eS ) {
14057 n->type = eS;
14058 } else if(1) {
14059 n->type = eB;
14060 }
14061 break;
14062 case eCAST:
14063 if(1) {
14064 n->type = eB;
14065 }
14066 break;
14067 default:
14068 MASSERT( FALSE );
14069 }
14070
14071
14072
14073
14074 switch( n->type ) {
14075 case eU:
14076 case eE:
14077 case eR:
14078 n->width = 0;
14079 return;
14080 }
14081
14082
14083
14084
14085 switch( n->GetOp() ) {
14086 case eERROR:
14087 n->width = 0;
14088 break;
14089 case eVCONSTANT:
14090 n->width = (!n->Arg<CVector*>(0)->IsWidthEvaluateable()&&suppressErrorMessages) ? 0 : n->Arg<CVector*>(0)->GetWidth();
14091 break;
14092 case eRCONSTANT:
14093 n->width = 0;
14094 break;
14095 case eELIST:
14096 n->width = cADD(n->Arg<CNode*>(0)->width,n->Arg<CNode*>(1)->width);
14097 break;
14098 case eWIDTH:
14099 n->width = ((info->error |= !n->Arg<CNode*>(0)->IsEvaluateable())&&suppressErrorMessages) ? 0 : n->Arg<CNode*>(0)->EvalINT32();
14100 break;
14101 case eSUB:
14102 n->width = cMAX(n->Arg<CNode*>(0)->width,n->Arg<CNode*>(1)->width);
14103 break;
14104 case eMUL:
14105 n->width = cMAX(n->Arg<CNode*>(0)->width,n->Arg<CNode*>(1)->width);
14106 break;
14107 case eDIV:
14108 n->width = cMAX(n->Arg<CNode*>(0)->width,n->Arg<CNode*>(1)->width);
14109 break;
14110 case ePOW:
14111 n->width = n->Arg<CNode*>(0)->width;
14112 break;
14113 case eADD:
14114 n->width = cMAX(n->Arg<CNode*>(0)->width,n->Arg<CNode*>(1)->width);
14115 break;
14116 case eLSH:
14117 n->width = n->Arg<CNode*>(0)->width;
14118 break;
14119 case eRSH:
14120 n->width = n->Arg<CNode*>(0)->width;
14121 break;
14122 case eLSHA:
14123 n->width = n->Arg<CNode*>(0)->width;
14124 break;
14125 case eRSHA:
14126 n->width = n->Arg<CNode*>(0)->width;
14127 break;
14128 case eMOD:
14129 n->width = cMAX(n->Arg<CNode*>(0)->width,n->Arg<CNode*>(1)->width);
14130 break;
14131 case eOR:
14132 n->width = cMAX(n->Arg<CNode*>(0)->width,n->Arg<CNode*>(1)->width);
14133 break;
14134 case eAND:
14135 n->width = cMAX(n->Arg<CNode*>(0)->width,n->Arg<CNode*>(1)->width);
14136 break;
14137 case eANDANDAND:
14138 n->width = cMAX(n->Arg<CNode*>(0)->width,n->Arg<CNode*>(1)->width);
14139 break;
14140 case eXOR:
14141 n->width = cMAX(n->Arg<CNode*>(0)->width,n->Arg<CNode*>(1)->width);
14142 break;
14143 case eXNOR:
14144 n->width = cMAX(n->Arg<CNode*>(0)->width,n->Arg<CNode*>(1)->width);
14145 break;
14146 case eSYSTASK_CALL:
14147 n->width = Systask::Width(n->Arg<CSymbol*>(0),n->Arg<CNode*>(1));
14148 break;
14149 case eFUNCTION_CALL:
14150 n->width = CFunction::Width(n->Arg<CSymbol*>(0),n->Arg<CNode*>(1),n->Arg<CScope*>(2));
14151 break;
14152 case eARRAY:
14153 n->width = Array::Width(n->Arg<CNode*>(0),n->Arg<CNode*>(1));
14154 break;
14155 case eNET_REF:
14156 n->width = (!n->Arg<CNet*>(0)->IsWidthEvaluateable()&&suppressErrorMessages) ? 0 : n->Arg<CNet*>(0)->GetWidth();
14157 break;
14158 case eVAR_REF:
14159 n->width = (!n->Arg<CVar*>(0)->IsWidthEvaluateable()&&suppressErrorMessages) ? 0 : n->Arg<CVar*>(0)->GetWidth();
14160 break;
14161 case ePARAM_REF:
14162 n->width = (!n->Arg<CParam*>(0)->IsWidthEvaluateable()&&suppressErrorMessages) ? 0 : n->Arg<CParam*>(0)->GetWidth();
14163 break;
14164 case ePORT_REF:
14165 n->width = (!n->Arg<CPortDir*>(0)->IsWidthEvaluateable()&&suppressErrorMessages) ? 0 : n->Arg<CPortDir*>(0)->GetWidth();
14166 break;
14167 case eFWD_REF:
14168 n->width = (!n->Arg<CFref*>(0)->IsWidthEvaluateable()&&suppressErrorMessages) ? 0 : n->Arg<CFref*>(0)->GetWidth();
14169 break;
14170 case eGENVAR_REF:
14171 n->width = (!n->Arg<CGenvar*>(0)->IsWidthEvaluateable()&&suppressErrorMessages) ? 0 : n->Arg<CGenvar*>(0)->GetWidth();
14172 break;
14173 case eENUM_REF:
14174 n->width = (!n->Arg<CEnum*>(0)->IsWidthEvaluateable()&&suppressErrorMessages) ? 0 : n->Arg<CEnum*>(0)->GetWidth();
14175 break;
14176 case eTYPE_REF:
14177 n->width = 32;
14178 break;
14179 case eRANGE:
14180 n->width = cABSDIFFPLUS1(((info->error |= !n->Arg<CNode*>(0)->IsEvaluateable())&&suppressErrorMessages) ? 0: n->Arg<CNode*>(0)->EvalINT32(),((info->error |= !n->Arg<CNode*>(1)->IsEvaluateable())&&suppressErrorMessages) ? 0: n->Arg<CNode*>(1)->EvalINT32());
14181 break;
14182 case eSLICE:
14183 n->width = cABSDIFFPLUS1(((info->error |= !n->Arg<CNode*>(0)->IsEvaluateable())&&suppressErrorMessages) ? 0: n->Arg<CNode*>(0)->EvalINT32(),((info->error |= !n->Arg<CNode*>(1)->IsEvaluateable())&&suppressErrorMessages) ? 0: n->Arg<CNode*>(1)->EvalINT32());
14184 break;
14185 case ePSLICE:
14186 n->width = (!n->Arg<CNode*>(1)->IsEvaluateable()&&suppressErrorMessages) ? 0 : n->Arg<CNode*>(1)->EvalINT32();
14187 break;
14188 case eMSLICE:
14189 n->width = (!n->Arg<CNode*>(1)->IsEvaluateable()&&suppressErrorMessages) ? 0 : n->Arg<CNode*>(1)->EvalINT32();
14190 break;
14191 case eCVRI:
14192 n->width = 32;
14193 break;
14194 case eCVIR:
14195 n->width = 0;
14196 break;
14197 case eREP:
14198 n->width = cMUL(((info->error |= !n->Arg<CNode*>(0)->IsEvaluateable())&&suppressErrorMessages) ? 0: n->Arg<CNode*>(0)->EvalINT32(),n->Arg<CNode*>(1)->width);
14199 break;
14200 case eCAT:
14201 n->width = cADD(n->Arg<CNode*>(0)->width,n->Arg<CNode*>(1)->width);
14202 break;
14203 case eUCAT:
14204 n->width = n->Arg<CNode*>(0)->width;
14205 break;
14206 case eCOM:
14207 n->width = n->Arg<CNode*>(0)->width;
14208 break;
14209 case eNEG:
14210 n->width = n->Arg<CNode*>(0)->width;
14211 break;
14212 case ePLUS:
14213 n->width = n->Arg<CNode*>(0)->width;
14214 break;
14215 case eNOT:
14216 n->width = 1;
14217 break;
14218 case eGT:
14219 n->width = 1;
14220 break;
14221 case eGE:
14222 n->width = 1;
14223 break;
14224 case eLT:
14225 n->width = 1;
14226 break;
14227 case eLE:
14228 n->width = 1;
14229 break;
14230 case eLAND:
14231 n->width = 1;
14232 break;
14233 case eLOR:
14234 n->width = 1;
14235 break;
14236 case eCEQ:
14237 n->width = 1;
14238 break;
14239 case eCNE:
14240 n->width = 1;
14241 break;
14242 case eEQ:
14243 n->width = 1;
14244 break;
14245 case eNE:
14246 n->width = 1;
14247 break;
14248 case eRAND:
14249 n->width = 1;
14250 break;
14251 case eRNAND:
14252 n->width = 1;
14253 break;
14254 case eROR:
14255 n->width = 1;
14256 break;
14257 case eRNOR:
14258 n->width = 1;
14259 break;
14260 case eRXOR:
14261 n->width = 1;
14262 break;
14263 case eRXNOR:
14264 n->width = 1;
14265 break;
14266 case eHOOK:
14267 n->width = cMAX(n->Arg<CNode*>(1)->width,n->Arg<CNode*>(2)->width);
14268 break;
14269 case eMTM:
14270 n->width = cMAX(n->Arg<CNode*>(0)->width,n->Arg<CNode*>(1)->width,n->Arg<CNode*>(2)->width);
14271 break;
14272 case eEXTERNAL_REF:
14273 n->width = External::Width(n->Arg<CSymbol*>(0));
14274 break;
14275 case eATTRIBUTE:
14276 n->width = 0;
14277 break;
14278 case eMACRO_EXPR:
14279 n->width = n->Arg<CNode*>(1)->width;
14280 break;
14281 case eMEMBER:
14282 n->width = Member::Width(n->Arg<CNode*>(0),n->Arg<CSymbol*>(1));
14283 break;
14284 case ePREINC:
14285 n->width = n->Arg<CNode*>(0)->width;
14286 break;
14287 case ePOSTINC:
14288 n->width = n->Arg<CNode*>(0)->width;
14289 break;
14290 case ePREDEC:
14291 n->width = n->Arg<CNode*>(0)->width;
14292 break;
14293 case ePOSTDEC:
14294 n->width = n->Arg<CNode*>(0)->width;
14295 break;
14296 case eCAST:
14297 n->width = ((info->error |= !n->Arg<CNode*>(0)->IsEvaluateable())&&suppressErrorMessages) ? 0 : n->Arg<CNode*>(0)->EvalINT32();
14298 break;
14299 }
14300
14301
14302
14303
14304 n->FixedWidth(1);
14305 int operandWidth = -1;
14306 for( int i = 0; i < n->ArgCount(); i++ ) {
14307 if( ((nodeMask>>i)&1) && n->Arg<CNode*>(i) ) {
14308 int widthFixed = n->Arg<CNode*>(i)->WidthFixed() ||
14309 n->Arg<CNode*>(i)->FixedWidth();
14310
14311 if( n->ConditionalWiden() && !widthFixed ) {
14312 n->FixedWidth( 0 );
14313 break;
14314 } else if( !widthFixed ) {
14315 n->FixedWidth( 0 );
14316 break;
14317 } else {
14318 int w = n->Arg<CNode*>(i)->width;
14319 if( operandWidth != w ) {
14320 if( operandWidth >= 0 ) {
14321 n->FixedWidth( 0 );
14322 break;
14323 }
14324 operandWidth = w;
14325 }
14326 }
14327 }
14328 }
14329 if( !conditionalWiden && nodeMask != 0 ) {
14330 n->FixedWidth( 0 );
14331 }
14332 }
14333
14334
14335
14336
14337
14338
14339
14340
14341
14342
14343 CNode* CNode::FixBits( INT32 newWidth, NodeType_t newType )
14344 {
14345
14346 int calculateMax = 0;
14347 int realOp = 0;
14348 int conditionalWiden = ConditionalWiden();
14349 unsigned nodeMask = NodeMask();
14350 unsigned scalarMask = 0;
14351 unsigned selfDeterminedMask = 0;
14352 switch( GetOp() ) {
14353 case eERROR:
14354 realOp = 0;
14355 break;
14356 case eVCONSTANT:
14357 realOp = 0;
14358 break;
14359 case eRCONSTANT:
14360 realOp = 0;
14361 break;
14362 case eCOMMENT:
14363 realOp = 0;
14364 break;
14365 case eVRQ:
14366 realOp = 0;
14367 break;
14368 case ePRAGMA:
14369 realOp = 0;
14370 break;
14371 case eELIST:
14372 realOp = 0;
14373 selfDeterminedMask = nodeMask;
14374 break;
14375 case eWIDTH:
14376 realOp = 0;
14377 selfDeterminedMask = nodeMask;
14378 break;
14379 case eNOP:
14380 realOp = 0;
14381 break;
14382 case eSUB:
14383 realOp = 1;
14384 break;
14385 case eMUL:
14386 realOp = 1;
14387 break;
14388 case eDIV:
14389 realOp = 1;
14390 break;
14391 case ePOW:
14392 realOp = 1;
14393 selfDeterminedMask = 1<<1;
14394 break;
14395 case eADD:
14396 realOp = 1;
14397 break;
14398 case eLSH:
14399 realOp = 0;
14400 selfDeterminedMask = 1<<1;
14401 break;
14402 case eRSH:
14403 realOp = 0;
14404 selfDeterminedMask = 1<<1;
14405 break;
14406 case eLSHA:
14407 realOp = 0;
14408 selfDeterminedMask = 1<<1;
14409 break;
14410 case eRSHA:
14411 realOp = 0;
14412 selfDeterminedMask = 1<<1;
14413 break;
14414 case eMOD:
14415 realOp = 0;
14416 break;
14417 case eOR:
14418 realOp = 0;
14419 break;
14420 case eAND:
14421 realOp = 0;
14422 break;
14423 case eANDANDAND:
14424 realOp = 0;
14425 break;
14426 case eXOR:
14427 realOp = 0;
14428 break;
14429 case eXNOR:
14430 realOp = 0;
14431 break;
14432 case eINSTANCE_REF:
14433 realOp = 0;
14434 break;
14435 case eGATE_REF:
14436 realOp = 0;
14437 break;
14438 case eTASK_ENABLE:
14439 realOp = 0;
14440 break;
14441 case eSYSTASK_CALL:
14442 realOp = 0;
14443 selfDeterminedMask = nodeMask;
14444 break;
14445 case eTIMING_CALL:
14446 realOp = 0;
14447 break;
14448 case eFUNCTION_CALL:
14449 realOp = 0;
14450 selfDeterminedMask = nodeMask;
14451 break;
14452 case eARRAY:
14453 realOp = 0;
14454 selfDeterminedMask = 1<<1;
14455 break;
14456 case eNET_REF:
14457 realOp = 0;
14458 break;
14459 case eVAR_REF:
14460 realOp = 0;
14461 break;
14462 case ePARAM_REF:
14463 realOp = 0;
14464 break;
14465 case ePORT_REF:
14466 realOp = 0;
14467 break;
14468 case eFWD_REF:
14469 realOp = 0;
14470 break;
14471 case eGENVAR_REF:
14472 realOp = 0;
14473 break;
14474 case eENUM_REF:
14475 realOp = 0;
14476 break;
14477 case eTYPE_REF:
14478 realOp = 0;
14479 break;
14480 case eNET_DECL:
14481 realOp = 0;
14482 break;
14483 case eVAR_DECL:
14484 realOp = 0;
14485 break;
14486 case ePARAM_DECL:
14487 realOp = 0;
14488 break;
14489 case eSPECPARAM_DECL:
14490 realOp = 0;
14491 break;
14492 case ePORT_DECL:
14493 realOp = 0;
14494 break;
14495 case eGENVAR_DECL:
14496 realOp = 0;
14497 break;
14498 case eTYPEDEF_DECL:
14499 realOp = 0;
14500 break;
14501 case eLIST:
14502 realOp = 0;
14503 break;
14504 case eRANGE:
14505 realOp = 0;
14506 selfDeterminedMask = nodeMask;
14507 break;
14508 case eSLICE:
14509 realOp = 0;
14510 selfDeterminedMask = nodeMask;
14511 break;
14512 case ePSLICE:
14513 realOp = 0;
14514 selfDeterminedMask = nodeMask;
14515 break;
14516 case eMSLICE:
14517 realOp = 0;
14518 selfDeterminedMask = nodeMask;
14519 break;
14520 case eCVRI:
14521 realOp = 0;
14522 selfDeterminedMask = nodeMask;
14523 break;
14524 case eCVIR:
14525 realOp = 0;
14526 selfDeterminedMask = nodeMask;
14527 break;
14528 case eREP:
14529 realOp = 0;
14530 selfDeterminedMask = nodeMask;
14531 break;
14532 case eCAT:
14533 realOp = 0;
14534 selfDeterminedMask = nodeMask;
14535 break;
14536 case eUCAT:
14537 realOp = 0;
14538 selfDeterminedMask = nodeMask;
14539 break;
14540 case eCOM:
14541 realOp = 0;
14542 break;
14543 case eNEG:
14544 realOp = 0;
14545 break;
14546 case ePLUS:
14547 realOp = 0;
14548 break;
14549 case eNOT:
14550 realOp = 0;
14551 scalarMask = 1;
14552 break;
14553 case eGT:
14554 realOp = 0;
14555 calculateMax = 1;
14556 break;
14557 case eGE:
14558 realOp = 0;
14559 calculateMax = 1;
14560 break;
14561 case eLT:
14562 realOp = 0;
14563 calculateMax = 1;
14564 break;
14565 case eLE:
14566 realOp = 0;
14567 calculateMax = 1;
14568 break;
14569 case eLAND:
14570 realOp = 0;
14571 scalarMask = 3;
14572 break;
14573 case eLOR:
14574 realOp = 0;
14575 scalarMask = 3;
14576 break;
14577 case eCEQ:
14578 realOp = 0;
14579 calculateMax = 1;
14580 break;
14581 case eCNE:
14582 realOp = 0;
14583 calculateMax = 1;
14584 break;
14585 case eEQ:
14586 realOp = 0;
14587 calculateMax = 1;
14588 break;
14589 case eNE:
14590 realOp = 0;
14591 calculateMax = 1;
14592 break;
14593 case eRAND:
14594 realOp = 0;
14595 selfDeterminedMask = nodeMask;
14596 break;
14597 case eRNAND:
14598 realOp = 0;
14599 selfDeterminedMask = nodeMask;
14600 break;
14601 case eROR:
14602 realOp = 0;
14603 selfDeterminedMask = nodeMask;
14604 break;
14605 case eRNOR:
14606 realOp = 0;
14607 selfDeterminedMask = nodeMask;
14608 break;
14609 case eRXOR:
14610 realOp = 0;
14611 selfDeterminedMask = nodeMask;
14612 break;
14613 case eRXNOR:
14614 realOp = 0;
14615 selfDeterminedMask = nodeMask;
14616 break;
14617 case eHOOK:
14618 realOp = 1;
14619 scalarMask = 1;
14620 break;
14621 case eINIT:
14622 realOp = 0;
14623 break;
14624 case eALWAYS:
14625 realOp = 0;
14626 break;
14627 case eALWAYS_LATCH:
14628 realOp = 0;
14629 break;
14630 case eALWAYS_FF:
14631 realOp = 0;
14632 break;
14633 case eALWAYS_COMB:
14634 realOp = 0;
14635 break;
14636 case eEVENT:
14637 realOp = 0;
14638 break;
14639 case eBLOCK_REF:
14640 realOp = 0;
14641 break;
14642 case eSPECIFY_REF:
14643 realOp = 0;
14644 break;
14645 case eASSIGN:
14646 realOp = 0;
14647 break;
14648 case eADD_ASSIGN:
14649 realOp = 0;
14650 break;
14651 case eSUB_ASSIGN:
14652 realOp = 0;
14653 break;
14654 case eMUL_ASSIGN:
14655 realOp = 0;
14656 break;
14657 case eDIV_ASSIGN:
14658 realOp = 0;
14659 break;
14660 case eMOD_ASSIGN:
14661 realOp = 0;
14662 break;
14663 case eAND_ASSIGN:
14664 realOp = 0;
14665 break;
14666 case eOR_ASSIGN:
14667 realOp = 0;
14668 break;
14669 case eXOR_ASSIGN:
14670 realOp = 0;
14671 break;
14672 case eLSH_ASSIGN:
14673 realOp = 0;
14674 break;
14675 case eRSH_ASSIGN:
14676 realOp = 0;
14677 break;
14678 case eLSHA_ASSIGN:
14679 realOp = 0;
14680 break;
14681 case eRSHA_ASSIGN:
14682 realOp = 0;
14683 break;
14684 case eFORCE:
14685 realOp = 0;
14686 break;
14687 case eRELEASE:
14688 realOp = 0;
14689 break;
14690 case eNBASSIGN:
14691 realOp = 0;
14692 break;
14693 case ePOSEDGE:
14694 realOp = 0;
14695 break;
14696 case eNEGEDGE:
14697 realOp = 0;
14698 break;
14699 case eEDGE:
14700 realOp = 0;
14701 break;
14702 case eEVOR:
14703 realOp = 0;
14704 break;
14705 case eDELAY:
14706 realOp = 0;
14707 break;
14708 case eMTM:
14709 realOp = 1;
14710 break;
14711 case eIF:
14712 realOp = 0;
14713 break;
14714 case eFOREVER:
14715 realOp = 0;
14716 break;
14717 case eREPEAT:
14718 realOp = 0;
14719 break;
14720 case eWHILE:
14721 realOp = 0;
14722 break;
14723 case eWAIT:
14724 realOp = 0;
14725 break;
14726 case eFOR:
14727 realOp = 0;
14728 break;
14729 case eCASE:
14730 realOp = 0;
14731 break;
14732 case eCASEX:
14733 realOp = 0;
14734 break;
14735 case eCASEZ:
14736 realOp = 0;
14737 break;
14738 case eCASEITEM:
14739 realOp = 0;
14740 break;
14741 case eCASSIGN:
14742 realOp = 0;
14743 break;
14744 case eARG:
14745 realOp = 0;
14746 break;
14747 case eFUNCTION_DEF:
14748 realOp = 0;
14749 break;
14750 case eMODULE_DEF:
14751 realOp = 0;
14752 break;
14753 case eREPEAT_CONTROL:
14754 realOp = 0;
14755 break;
14756 case eDELAY_CONTROL:
14757 realOp = 0;
14758 break;
14759 case eEVENT_CONTROL:
14760 realOp = 0;
14761 break;
14762 case eEXTERNAL_REF:
14763 realOp = 0;
14764 break;
14765 case ePORT_DEF:
14766 realOp = 0;
14767 break;
14768 case eDEFPARAM:
14769 realOp = 0;
14770 break;
14771 case ePATH:
14772 realOp = 0;
14773 break;
14774 case ePATH_ASSIGN:
14775 realOp = 0;
14776 break;
14777 case eIFNONE_PATH_ASSIGN:
14778 realOp = 0;
14779 break;
14780 case eTRIGGER:
14781 realOp = 0;
14782 break;
14783 case ePASSIGN:
14784 realOp = 0;
14785 break;
14786 case eDEASSIGN:
14787 realOp = 0;
14788 break;
14789 case eDISABLE:
14790 realOp = 0;
14791 break;
14792 case eATTRIBUTE:
14793 realOp = 0;
14794 break;
14795 case eGIF:
14796 realOp = 0;
14797 break;
14798 case eGFOR:
14799 realOp = 0;
14800 break;
14801 case eGCASE:
14802 realOp = 0;
14803 break;
14804 case eTABLE:
14805 realOp = 0;
14806 break;
14807 case eTABLE_ENTRY:
14808 realOp = 0;
14809 break;
14810 case eTABLE_SYMBOL:
14811 realOp = 0;
14812 break;
14813 case ePORTLIST_END:
14814 realOp = 0;
14815 break;
14816 case eMACRO_EXPR:
14817 realOp = 0;
14818 break;
14819 case eENUM_SPEC:
14820 realOp = 0;
14821 break;
14822 case eMEMBER:
14823 realOp = 0;
14824 break;
14825 case eRETURN:
14826 realOp = 0;
14827 break;
14828 case ePREINC:
14829 realOp = 1;
14830 break;
14831 case ePOSTINC:
14832 realOp = 1;
14833 break;
14834 case ePREDEC:
14835 realOp = 1;
14836 break;
14837 case ePOSTDEC:
14838 realOp = 1;
14839 break;
14840 case eCAST:
14841 realOp = 0;
14842 selfDeterminedMask = nodeMask;
14843 break;
14844 default:
14845 MASSERT( FALSE );
14846 }
14847
14848
14849
14850 unsigned realMask = 0;
14851 unsigned forceRealMask = 0;
14852 int widthsDiffer = 0;
14853 int originalWidth = width;
14854 for( int i = 0; i < ArgCount(); i++ ) {
14855 if( ((nodeMask>>i)&1) && Arg<CNode*>(i)->type == eR ) {
14856 realMask |= 1<<i;
14857 }
14858 if( ((nodeMask>>i)&1) &&
14859 Arg<CNode*>(i)->type != eR &&
14860 (Arg<CNode*>(i)->GetOp() != eVCONSTANT ||
14861 Arg<CNode*>(i)->width != width) ) {
14862 widthsDiffer = 1;
14863 }
14864 }
14865
14866
14867
14868
14869 if( newType == eU && newWidth == 0 ) {
14870 newType = type;
14871 newWidth = width;
14872
14873
14874
14875
14876 } else if( (newType == eB || newType == eS || newType == eU) &&
14877 (type == eB || type == eS) ) {
14878 if( newWidth > width ) {
14879 width = newWidth;
14880 }
14881 if( newType == eU ) {
14882 newType = type;
14883 }
14884 }
14885
14886 MASSERT( newType != eR || newWidth == 0 );
14887 MASSERT( newType != eE || newWidth == 0 );
14888
14889
14890
14891
14892
14893 if( realMask ) {
14894 forceRealMask = (~realMask & nodeMask);
14895 }
14896
14897
14898
14899
14900
14901 int convertWidth = conditionalWiden && FixedWidth();
14902 if( convertWidth ) {
14903 width = originalWidth;
14904 }
14905 if( newType == eB && type == eS ) {
14906 type = eB;
14907 }
14908
14909
14910
14911 int cWidth = width;
14912 NodeType_t cType = type;
14913 if( calculateMax ) {
14914 cType = eS;
14915 int max = 0;
14916 int foundReal = 0;
14917 int foundUnsigned = 0;
14918 for( int i = 0; i < ArgCount(); i++ ) {
14919 if( (nodeMask>>i)&1 ) {
14920 switch( Arg<CNode*>(i)->type ) {
14921 case eB:
14922 foundUnsigned = 1;
14923 break;
14924 case eR:
14925 foundReal = 1;
14926 break;
14927 }
14928 if( Arg<CNode*>(i)->width > max ) {
14929 max = Arg<CNode*>(i)->width;
14930 }
14931 }
14932 }
14933 if( foundReal ) {
14934 cWidth = 0;
14935 cType = eR;
14936 } else if( foundUnsigned ) {
14937 cType = eB;
14938 cWidth = max;
14939 } else {
14940 cWidth = max;
14941 }
14942 }
14943
14944
14945
14946
14947 for( int i = 0; i < ArgCount(); i++ ) {
14948 if( (nodeMask>>i)&1 ) {
14949 if( (scalarMask>>i)&1 ) {
14950 if( Arg<CNode*>(i)->type == eR ) {
14951 CNode* node;
14952 Arg<CNode*>(i) = cNE( Arg<CNode*>(i), cREAL(0), &loc );
14953 Arg<CNode*>(i)->LabelBits();
14954 } else if( type == eR ) {
14955
14956 CNode* node;
14957 Arg<CNode*>(i) = cCNE( Arg<CNode*>(i), cINT32(0), &loc );
14958 Arg<CNode*>(i)->LabelBits();
14959 }
14960 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0, eU );
14961 } else if( (forceRealMask>>i)&1 ) {
14962 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0, eR );
14963 } else if( (selfDeterminedMask>>i)&1 ) {
14964 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( 0, eU );
14965 } else {
14966 Arg<CNode*>(i) = Arg<CNode*>(i)->FixBits( cWidth, cType );
14967 }
14968 }
14969 }
14970
14971
14972
14973
14974
14975
14976 if( newType != eR && convertWidth ) {
14977 CNode* nn = cWIDTH(cINT32(newWidth), this);
14978 nn->width = newWidth;
14979 nn->type = type;
14980 return nn;
14981 }
14982 if( newType == eR && (type == eB || type == eS) ) {
14983 CNode* nn = cCVIR( this );
14984 nn->width = 0;
14985 nn->type = eR;
14986 return nn;
14987
14988 } else if( (newType == eB || newType == eS) && type == eR ) {
14989 CNode* nn = cCVRI( this );
14990 nn->width = newWidth;
14991 nn->type = newType;
14992 return nn;
14993 }
14994
14995 return this;
14996 }
14997
14998
14999
15000
15001
15002 void CNode::Dump( FILE* f )
15003 {
15004 switch( GetOp() ) {
15005 case eERROR:
15006 fprintf( f, "???" );
15007 break;
15008 case eVCONSTANT:
15009 fprintf( f, "%s", Arg<CVector*>(0)->GetVString() );
15010 break;
15011 case eRCONSTANT:
15012 fprintf( f, "%s", (char*)Arg<char*>(0) );
15013 break;
15014 case ePRAGMA:
15015 fprintf( f, "%s", (char*)Arg<char*>(0) );
15016 break;
15017 case eELIST:
15018 fprintf( f, "" );
15019 Arg<CNode*>(0)->Dump( f );
15020 fprintf( f, "," );
15021 Arg<CNode*>(1)->Dump( f );
15022 fprintf( f, "" );
15023 break;
15024 case eWIDTH:
15025 fprintf( f, "WIDTH(" );
15026 fprintf( f, "%s", type==eS ? "S" : "U" );
15027 fprintf( f, "," );
15028 fprintf( f, "%d", width );
15029 fprintf( f, "," );
15030 Arg<CNode*>(0)->Dump( f );
15031 fprintf( f, "," );
15032 Arg<CNode*>(1)->Dump( f );
15033 fprintf( f, ")" );
15034 break;
15035 case eSUB:
15036 fprintf( f, "(" );
15037 Arg<CNode*>(0)->Dump( f );
15038 fprintf( f, ")-(" );
15039 Arg<CNode*>(1)->Dump( f );
15040 fprintf( f, ")" );
15041 break;
15042 case eMUL:
15043 fprintf( f, "(" );
15044 Arg<CNode*>(0)->Dump( f );
15045 fprintf( f, ")*(" );
15046 Arg<CNode*>(1)->Dump( f );
15047 fprintf( f, ")" );
15048 break;
15049 case eDIV:
15050 fprintf( f, "(" );
15051 Arg<CNode*>(0)->Dump( f );
15052 fprintf( f, ")/(" );
15053 Arg<CNode*>(1)->Dump( f );
15054 fprintf( f, ")" );
15055 break;
15056 case ePOW:
15057 fprintf( f, "(" );
15058 Arg<CNode*>(0)->Dump( f );
15059 fprintf( f, ")**(" );
15060 Arg<CNode*>(1)->Dump( f );
15061 fprintf( f, ")" );
15062 break;
15063 case eADD:
15064 fprintf( f, "(" );
15065 Arg<CNode*>(0)->Dump( f );
15066 fprintf( f, ")+(" );
15067 Arg<CNode*>(1)->Dump( f );
15068 fprintf( f, ")" );
15069 break;
15070 case eLSH:
15071 fprintf( f, "(" );
15072 Arg<CNode*>(0)->Dump( f );
15073 fprintf( f, ")<<(" );
15074 Arg<CNode*>(1)->Dump( f );
15075 fprintf( f, ")" );
15076 break;
15077 case eRSH:
15078 fprintf( f, "(" );
15079 Arg<CNode*>(0)->Dump( f );
15080 fprintf( f, ")>>(" );
15081 Arg<CNode*>(1)->Dump( f );
15082 fprintf( f, ")" );
15083 break;
15084 case eLSHA:
15085 fprintf( f, "(" );
15086 Arg<CNode*>(0)->Dump( f );
15087 fprintf( f, ")<<<(" );
15088 Arg<CNode*>(1)->Dump( f );
15089 fprintf( f, ")" );
15090 break;
15091 case eRSHA:
15092 fprintf( f, "(" );
15093 Arg<CNode*>(0)->Dump( f );
15094 fprintf( f, ")>>>(" );
15095 Arg<CNode*>(1)->Dump( f );
15096 fprintf( f, ")" );
15097 break;
15098 case eMOD:
15099 fprintf( f, "(" );
15100 Arg<CNode*>(0)->Dump( f );
15101 fprintf( f, ")%%(" );
15102 Arg<CNode*>(1)->Dump( f );
15103 fprintf( f, ")" );
15104 break;
15105 case eOR:
15106 fprintf( f, "(" );
15107 Arg<CNode*>(0)->Dump( f );
15108 fprintf( f, ")|(" );
15109 Arg<CNode*>(1)->Dump( f );
15110 fprintf( f, ")" );
15111 break;
15112 case eAND:
15113 fprintf( f, "(" );
15114 Arg<CNode*>(0)->Dump( f );
15115 fprintf( f, ")&(" );
15116 Arg<CNode*>(1)->Dump( f );
15117 fprintf( f, ")" );
15118 break;
15119 case eANDANDAND:
15120 fprintf( f, "(" );
15121 Arg<CNode*>(0)->Dump( f );
15122 fprintf( f, ")&&&(" );
15123 Arg<CNode*>(1)->Dump( f );
15124 fprintf( f, ")" );
15125 break;
15126 case eXOR:
15127 fprintf( f, "(" );
15128 Arg<CNode*>(0)->Dump( f );
15129 fprintf( f, ")^(" );
15130 Arg<CNode*>(1)->Dump( f );
15131 fprintf( f, ")" );
15132 break;
15133 case eXNOR:
15134 fprintf( f, "(" );
15135 Arg<CNode*>(0)->Dump( f );
15136 fprintf( f, ")~^(" );
15137 Arg<CNode*>(1)->Dump( f );
15138 fprintf( f, ")" );
15139 break;
15140 case eFUNCTION_CALL:
15141 fprintf( f, "" );
15142 fprintf( f, "%s", Arg<CSymbol*>(0)->GetName() );
15143 fprintf( f, "(" );
15144 Arg<CNode*>(1)->Dump( f );
15145 fprintf( f, ")" );
15146 break;
15147 case eARRAY:
15148 fprintf( f, "" );
15149 Arg<CNode*>(0)->Dump( f );
15150 fprintf( f, "[" );
15151 Arg<CNode*>(1)->Dump( f );
15152 fprintf( f, "]" );
15153 break;
15154 case eNET_REF:
15155 fprintf( f, "%s", Arg<CNet*>(0)->GetName() );
15156 break;
15157 case eVAR_REF:
15158 fprintf( f, "%s", Arg<CVar*>(0)->GetName() );
15159 break;
15160 case ePARAM_REF:
15161 fprintf( f, "%s", Arg<CParam*>(0)->GetName() );
15162 break;
15163 case ePORT_REF:
15164 fprintf( f, "%s", Arg<CPort*>(0)->GetName() );
15165 break;
15166 case eFWD_REF:
15167 fprintf( f, "%s", Arg<CFref*>(0)->GetName() );
15168 break;
15169 case eGENVAR_REF:
15170 fprintf( f, "%s", Arg<CGenvar*>(0)->GetName() );
15171 break;
15172 case eENUM_REF:
15173 fprintf( f, "%s", Arg<CEnum*>(0)->GetName() );
15174 break;
15175 case eTYPE_REF:
15176 fprintf( f, "%s", Arg<CTypedef*>(0)->GetName() );
15177 break;
15178 case eVAR_DECL:
15179 fprintf( f, "VarDecl" );
15180 break;
15181 case eLIST:
15182 fprintf( f, "(" );
15183 Arg<CNode*>(0)->Dump( f );
15184 fprintf( f, "," );
15185 Arg<CNode*>(1)->Dump( f );
15186 fprintf( f, ")" );
15187 break;
15188 case eRANGE:
15189 fprintf( f, "" );
15190 Arg<CNode*>(0)->Dump( f );
15191 fprintf( f, ":" );
15192 Arg<CNode*>(1)->Dump( f );
15193 fprintf( f, "" );
15194 break;
15195 case eSLICE:
15196 fprintf( f, "" );
15197 Arg<CNode*>(0)->Dump( f );
15198 fprintf( f, ":" );
15199 Arg<CNode*>(1)->Dump( f );
15200 fprintf( f, "" );
15201 break;
15202 case ePSLICE:
15203 fprintf( f, "" );
15204 Arg<CNode*>(0)->Dump( f );
15205 fprintf( f, "+:" );
15206 Arg<CNode*>(1)->Dump( f );
15207 fprintf( f, "" );
15208 break;
15209 case eMSLICE:
15210 fprintf( f, "" );
15211 Arg<CNode*>(0)->Dump( f );
15212 fprintf( f, "-:" );
15213 Arg<CNode*>(1)->Dump( f );
15214 fprintf( f, "" );
15215 break;
15216 case eCVRI:
15217 fprintf( f, "CVRI(" );
15218 Arg<CNode*>(0)->Dump( f );
15219 fprintf( f, ")" );
15220 break;
15221 case eCVIR:
15222 fprintf( f, "CVIR(" );
15223 Arg<CNode*>(0)->Dump( f );
15224 fprintf( f, ")" );
15225 break;
15226 case eREP:
15227 fprintf( f, "{" );
15228 Arg<CNode*>(0)->Dump( f );
15229 fprintf( f, "{" );
15230 Arg<CNode*>(1)->Dump( f );
15231 fprintf( f, "}}" );
15232 break;
15233 case eCAT:
15234 fprintf( f, "{" );
15235 Arg<CNode*>(0)->Dump( f );
15236 fprintf( f, "," );
15237 Arg<CNode*>(1)->Dump( f );
15238 fprintf( f, "}" );
15239 break;
15240 case eUCAT:
15241 fprintf( f, "{" );
15242 Arg<CNode*>(0)->Dump( f );
15243 fprintf( f, "}" );
15244 break;
15245 case eCOM:
15246 fprintf( f, "~(" );
15247 Arg<CNode*>(0)->Dump( f );
15248 fprintf( f, ")" );
15249 break;
15250 case eNEG:
15251 fprintf( f, "-(" );
15252 Arg<CNode*>(0)->Dump( f );
15253 fprintf( f, ")" );
15254 break;
15255 case ePLUS:
15256 fprintf( f, "+(" );
15257 Arg<CNode*>(0)->Dump( f );
15258 fprintf( f, ")" );
15259 break;
15260 case eNOT:
15261 fprintf( f, "!(" );
15262 Arg<CNode*>(0)->Dump( f );
15263 fprintf( f, ")" );
15264 break;
15265 case eGT:
15266 fprintf( f, "(" );
15267 Arg<CNode*>(0)->Dump( f );
15268 fprintf( f, ")>(" );
15269 Arg<CNode*>(1)->Dump( f );
15270 fprintf( f, ")" );
15271 break;
15272 case eGE:
15273 fprintf( f, "(" );
15274 Arg<CNode*>(0)->Dump( f );
15275 fprintf( f, ")>=(" );
15276 Arg<CNode*>(1)->Dump( f );
15277 fprintf( f, ")" );
15278 break;
15279 case eLT:
15280 fprintf( f, "(" );
15281 Arg<CNode*>(0)->Dump( f );
15282 fprintf( f, ")<(" );
15283 Arg<CNode*>(1)->Dump( f );
15284 fprintf( f, ")" );
15285 break;
15286 case eLE:
15287 fprintf( f, "(" );
15288 Arg<CNode*>(0)->Dump( f );
15289 fprintf( f, ")<=(" );
15290 Arg<CNode*>(1)->Dump( f );
15291 fprintf( f, ")" );
15292 break;
15293 case eLAND:
15294 fprintf( f, "(" );
15295 Arg<CNode*>(0)->Dump( f );
15296 fprintf( f, ")&&(" );
15297 Arg<CNode*>(1)->Dump( f );
15298 fprintf( f, ")" );
15299 break;
15300 case eLOR:
15301 fprintf( f, "(" );
15302 Arg<CNode*>(0)->Dump( f );
15303 fprintf( f, ")||(" );
15304 Arg<CNode*>(1)->Dump( f );
15305 fprintf( f, ")" );
15306 break;
15307 case eCEQ:
15308 fprintf( f, "(" );
15309 Arg<CNode*>(0)->Dump( f );
15310 fprintf( f, ")===(" );
15311 Arg<CNode*>(1)->Dump( f );
15312 fprintf( f, ")" );
15313 break;
15314 case eCNE:
15315 fprintf( f, "(" );
15316 Arg<CNode*>(0)->Dump( f );
15317 fprintf( f, ")!==(" );
15318 Arg<CNode*>(1)->Dump( f );
15319 fprintf( f, ")" );
15320 break;
15321 case eEQ:
15322 fprintf( f, "(" );
15323 Arg<CNode*>(0)->Dump( f );
15324 fprintf( f, ")==(" );
15325 Arg<CNode*>(1)->Dump( f );
15326 fprintf( f, ")" );
15327 break;
15328 case eNE:
15329 fprintf( f, "(" );
15330 Arg<CNode*>(0)->Dump( f );
15331 fprintf( f, ")!=(" );
15332 Arg<CNode*>(1)->Dump( f );
15333 fprintf( f, ")" );
15334 break;
15335 case eRAND:
15336 fprintf( f, "&(" );
15337 Arg<CNode*>(0)->Dump( f );
15338 fprintf( f, ")" );
15339 break;
15340 case eRNAND:
15341 fprintf( f, "~&(" );
15342 Arg<CNode*>(0)->Dump( f );
15343 fprintf( f, ")" );
15344 break;
15345 case eROR:
15346 fprintf( f, "|(" );
15347 Arg<CNode*>(0)->Dump( f );
15348 fprintf( f, ")" );
15349 break;
15350 case eRNOR:
15351 fprintf( f, "~|(" );
15352 Arg<CNode*>(0)->Dump( f );
15353 fprintf( f, ")" );
15354 break;
15355 case eRXOR:
15356 fprintf( f, "^(" );
15357 Arg<CNode*>(0)->Dump( f );
15358 fprintf( f, ")" );
15359 break;
15360 case eRXNOR:
15361 fprintf( f, "~^(" );
15362 Arg<CNode*>(0)->Dump( f );
15363 fprintf( f, ")" );
15364 break;
15365 case eHOOK:
15366 fprintf( f, "(" );
15367 Arg<CNode*>(0)->Dump( f );
15368 fprintf( f, ")?(" );
15369 Arg<CNode*>(1)->Dump( f );
15370 fprintf( f, "):(" );
15371 Arg<CNode*>(2)->Dump( f );
15372 fprintf( f, ")" );
15373 break;
15374 case eINIT:
15375 fprintf( f, "INIT(*)" );
15376 break;
15377 case ePOSEDGE:
15378 fprintf( f, "POSEDGE(" );
15379 Arg<CNode*>(0)->Dump( f );
15380 fprintf( f, ")" );
15381 break;
15382 case eNEGEDGE:
15383 fprintf( f, "NEGEDGE(" );
15384 Arg<CNode*>(0)->Dump( f );
15385 fprintf( f, ")" );
15386 break;
15387 case eEDGE:
15388 fprintf( f, "EDGE(" );
15389 Arg<CNode*>(0)->Dump( f );
15390 fprintf( f, ")" );
15391 break;
15392 case eMTM:
15393 fprintf( f, "(" );
15394 Arg<CNode*>(0)->Dump( f );
15395 fprintf( f, ":" );
15396 Arg<CNode*>(1)->Dump( f );
15397 fprintf( f, ":" );
15398 Arg<CNode*>(2)->Dump( f );
15399 fprintf( f, ")" );
15400 break;
15401 case eMODULE_DEF:
15402 fprintf( f, "MODULE_DEF" );
15403 break;
15404 case eMACRO_EXPR:
15405 fprintf( f, "" );
15406 fprintf( f, "%s", (const char*)Arg<const char*>(0) );
15407 fprintf( f, "<" );
15408 Arg<CNode*>(1)->Dump( f );
15409 fprintf( f, ">" );
15410 break;
15411 case eMEMBER:
15412 fprintf( f, "" );
15413 Arg<CNode*>(0)->Dump( f );
15414 fprintf( f, "." );
15415 fprintf( f, "%s", Arg<CSymbol*>(1)->GetName() );
15416 fprintf( f, "" );
15417 break;
15418 case ePREINC:
15419 fprintf( f, "++(" );
15420 Arg<CNode*>(0)->Dump( f );
15421 fprintf( f, ")" );
15422 break;
15423 case ePOSTINC:
15424 fprintf( f, "(" );
15425 Arg<CNode*>(0)->Dump( f );
15426 fprintf( f, ")++" );
15427 break;
15428 case ePREDEC:
15429 fprintf( f, "--(" );
15430 Arg<CNode*>(0)->Dump( f );
15431 fprintf( f, ")" );
15432 break;
15433 case ePOSTDEC:
15434 fprintf( f, "(" );
15435 Arg<CNode*>(0)->Dump( f );
15436 fprintf( f, ")--" );
15437 break;
15438 case eCAST:
15439 fprintf( f, "CAST(" );
15440 Arg<CNode*>(0)->Dump( f );
15441 fprintf( f, "," );
15442 Arg<CNode*>(1)->Dump( f );
15443 fprintf( f, ")" );
15444 break;
15445 case eCOMMENT:
15446 case eVRQ:
15447 case eNOP:
15448 case eINSTANCE_REF:
15449 case eGATE_REF:
15450 case eTASK_ENABLE:
15451 case eSYSTASK_CALL:
15452 case eTIMING_CALL:
15453 case eNET_DECL:
15454 case ePARAM_DECL:
15455 case eSPECPARAM_DECL:
15456 case ePORT_DECL:
15457 case eGENVAR_DECL:
15458 case eTYPEDEF_DECL:
15459 case eALWAYS:
15460 case eALWAYS_LATCH:
15461 case eALWAYS_FF:
15462 case eALWAYS_COMB:
15463 case eEVENT:
15464 case eBLOCK_REF:
15465 case eSPECIFY_REF:
15466 case eASSIGN:
15467 case eADD_ASSIGN:
15468 case eSUB_ASSIGN:
15469 case eMUL_ASSIGN:
15470 case eDIV_ASSIGN:
15471 case eMOD_ASSIGN:
15472 case eAND_ASSIGN:
15473 case eOR_ASSIGN:
15474 case eXOR_ASSIGN:
15475 case eLSH_ASSIGN:
15476 case eRSH_ASSIGN:
15477 case eLSHA_ASSIGN:
15478 case eRSHA_ASSIGN:
15479 case eFORCE:
15480 case eRELEASE:
15481 case eNBASSIGN:
15482 case eEVOR:
15483 case eDELAY:
15484 case eIF:
15485 case eFOREVER:
15486 case eREPEAT:
15487 case eWHILE:
15488 case eWAIT:
15489 case eFOR:
15490 case eCASE:
15491 case eCASEX:
15492 case eCASEZ:
15493 case eCASEITEM:
15494 case eCASSIGN:
15495 case eARG:
15496 case eFUNCTION_DEF:
15497 case eREPEAT_CONTROL:
15498 case eDELAY_CONTROL:
15499 case eEVENT_CONTROL:
15500 case eEXTERNAL_REF:
15501 case ePORT_DEF:
15502 case eDEFPARAM:
15503 case ePATH:
15504 case ePATH_ASSIGN:
15505 case eIFNONE_PATH_ASSIGN:
15506 case eTRIGGER:
15507 case ePASSIGN:
15508 case eDEASSIGN:
15509 case eDISABLE:
15510 case eATTRIBUTE:
15511 case eGIF:
15512 case eGFOR:
15513 case eGCASE:
15514 case eTABLE:
15515 case eTABLE_ENTRY:
15516 case eTABLE_SYMBOL:
15517 case ePORTLIST_END:
15518 case eENUM_SPEC:
15519 case eRETURN:
15520 fprintf( f, "%s(%p)", nodeOpName[GetOp()],this );
15521 break;
15522 }
15523 }
15524
15525 #endif // DEFINE_METHODS
15526
15527 #ifdef DEFINE_TEST_HARNESS
15528 void CNodeTestHarness()
15529 {
15530 for( int i = 0; i < 150; ++i ) {
15531 CNode* n = new(CNode::stack) CNode( NULL, (NodeOp_t)i );
15532 if( n->Precedence() != n->Precedence_1() ) {
15533 printf( "Fail %s\n", nodeOpName[i] );
15534 exit(1);
15535 }
15536 }
15537 }
15538 #endif // DEFINE_TEST_HARNESS