Polaris: Assertion.cc Source File

Assertion.cc

Go to the documentation of this file.
00001 ///
00002 #ifdef POLARIS_GNU_PRAGMAS
00003 #pragma implementation "Assertion.h"
00004 #pragma implementation "ExpressionAssertion.h"
00005 #pragma implementation "ARDAssertion.h"
00006 #pragma implementation "StringAssertion.h"
00007 #pragma implementation "AssertionList.h"
00008 #pragma implementation "AssertComment.h"
00009 #pragma implementation "AssertCritical.h"
00010 #pragma implementation "AssertEpilogue.h"
00011 #pragma implementation "AssertInduction.h"
00012 #pragma implementation "AssertLastValue.h"
00013 #pragma implementation "AssertParallel.h"
00014 #pragma implementation "AssertPrivate.h"
00015 #pragma implementation "AssertPrologue.h"
00016 #pragma implementation "AssertReduction.h"
00017 #pragma implementation "AssertRelation.h"
00018 #pragma implementation "AssertSerial.h"
00019 #pragma implementation "AssertSubst.h"
00020 #pragma implementation "AssertLoopLabel.h"
00021 #pragma implementation "AssertMayMod.h"
00022 #pragma implementation "AssertNoMod.h"
00023 //Begin OpenMP Modification
00024 #pragma implementation "AssertNoWait.h"
00025 //End OpenMP Modification
00026 #pragma implementation "AssertShared.h"
00027 #pragma implementation "AssertFirstValue.h"
00028 #pragma implementation "AssertPrivateRefs.h"
00029 #pragma implementation "AssertReadOnlyRefs.h"
00030 #pragma implementation "AssertSharedRefs.h"
00031 #pragma implementation "AssertRTShadow.h"
00032 #pragma implementation "AssertDepIO.h"
00033 #pragma implementation "AssertInline.h"
00034 #pragma implementation "AssertRecursiveInline.h"
00035 #pragma implementation "AssertNoInline.h"
00036 #pragma implementation "AssertRunTimeTest.h"
00037 #pragma implementation "AssertNoPutGet.h"
00038 #pragma implementation "AssertSchedule.h"
00039 #pragma implementation "AssertDynLastValue.h"
00040 #pragma implementation "AssertRangeWritten.h"
00041 #pragma implementation "AssertNoDependence.h"
00042 #pragma implementation "AssertSideEffectFree.h"
00043 #pragma implementation "AssertPreamble.h"
00044 #pragma implementation "AssertPostamble.h"
00045 #pragma implementation "AssertParallelCondition.h"
00046 #pragma implementation "AssertSafeCondition.h"
00047 #pragma implementation "AssertOverlap.h"
00048 #pragma implementation "AssertOverlapSort.h"
00049 #pragma implementation "AssertPrivateDescr.h"
00050 #pragma implementation "AssertTestMonotone.h"
00051 #pragma implementation "AssertReductDescr.h"
00052 #pragma implementation "AssertDepOverlap.h"
00053 #pragma implementation "AssertDepROvsRW.h"
00054 #pragma implementation "AssertDepRWvsWF.h"
00055 #pragma implementation "AssertDepWFvsRO.h"
00056 #pragma implementation "AssertInstrument.h"
00057 #pragma implementation "AssertUnknownShared.h"
00058 #pragma implementation "AssertForward.h"
00059 //Guobin
00060 #pragma implementation "AssertPartialReduction.h"
00061 #pragma implementation "AssertPartialFirstValue.h"
00062 #endif
00063 ///
00064 #include "Assertion.h"
00065 #include "ARDAssertion.h"
00066 #include "ExpressionAssertion.h"
00067 #include "StringAssertion.h"
00068 #include "AssertionList.h"
00069 #include "AssertComment.h"
00070 #include "AssertCritical.h"
00071 #include "AssertEpilogue.h"
00072 #include "AssertInduction.h"
00073 #include "AssertLastValue.h"
00074 #include "AssertParallel.h"
00075 #include "AssertPrivate.h"
00076 #include "AssertPrologue.h"
00077 #include "AssertReduction.h"
00078 #include "AssertRelation.h"
00079 #include "AssertNoPutGet.h"
00080 #include "AssertSerial.h"
00081 #include "AssertSubst.h"
00082 #include "AssertLoopLabel.h"
00083 #include "AssertMayMod.h"
00084 #include "AssertNoMod.h"
00085 //Begin OpenMP Modification
00086 #include "AssertNoWait.h"
00087 //End OpenMP Modification
00088 #include "AssertShared.h"
00089 #include "AssertFirstValue.h"
00090 #include "AssertPrivateRefs.h"
00091 #include "AssertReadOnlyRefs.h"
00092 #include "AssertSharedRefs.h"
00093 #include "AssertRTShadow.h"
00094 #include "AssertDepIO.h"
00095 #include "AssertInline.h"
00096 #include "AssertRecursiveInline.h"
00097 #include "AssertNoInline.h"
00098 #include "AssertRunTimeTest.h"
00099 #include "AssertSchedule.h"
00100 #include "AssertDynLastValue.h"
00101 #include "AssertRangeWritten.h"
00102 #include "AssertNoDependence.h"
00103 #include "AssertSideEffectFree.h"
00104 #include "AssertPreamble.h"
00105 #include "AssertPostamble.h"
00106 #include "AssertParallelCondition.h"
00107 #include "AssertSafeCondition.h"
00108 #include "AssertOverlap.h"
00109 #include "AssertOverlapSort.h"
00110 #include "AssertPrivateDescr.h"
00111 #include "AssertTestMonotone.h"
00112 #include "AssertReductDescr.h"
00113 #include "AssertDepOverlap.h"
00114 #include "AssertDepROvsRW.h"
00115 #include "AssertDepRWvsWF.h"
00116 #include "AssertDepWFvsRO.h"
00117 #include "AssertInstrument.h"
00118 #include "AssertUnknownShared.h"
00119 #include "AssertForward.h"
00120 //Guobin
00121 #include "AssertPartialReduction.h"
00122 #include "AssertPartialFirstValue.h"
00123 
00124 #include "../Collection/Iterator.h"
00125 #include "../Collection/Mutator.h"
00126 #include "../Collection/RefSet.h"
00127 #include "../macros.h"
00128 #include "../p-assert.h"
00129 
00130 template class TypedCollection<Assertion>;
00131 template class List<Assertion>;
00132 template ostream & operator << (ostream &, const List<Assertion> &);
00133 template class RefList<Assertion>;
00134 template ostream & operator << (ostream &, const RefList<Assertion> &);
00135 template class RefSet<Assertion>;
00136 template ostream & operator << (ostream &, const RefSet<Assertion> &);
00137 template class Assign<Assertion>;
00138 
00139 template class Iterator<Assertion>;
00140 template class Mutator<Assertion>;
00141 
00142 
00143 
00144 Assertion::Assertion()
00145 {
00146     _type = AS_NONE;
00147     _assertion_list.clear();
00148 }
00149 
00150 Assertion::Assertion(const Assertion & a)
00151 {
00152     _type = a._type;
00153 
00154     _assertion_list.clear();
00155     _assertion_list = a._assertion_list;
00156 }
00157  
00158 AssertionType
00159 Assertion::type() const
00160 {
00161     return _type;
00162 }
00163 
00164 const List<Expression> & 
00165 Assertion::arg_list_guarded() const
00166 {
00167     p_abort( "Assertion::arg_list_guarded: can't get arg_list." );
00168     return *((const List<Expression> *) 0);
00169 }
00170 
00171 List<Expression> & 
00172 Assertion::arg_list_guarded()
00173 {
00174     p_abort( "Assertion::arg_list_guarded: can't get arg_list." );
00175     return *((List<Expression> *) 0);
00176 }
00177 
00178 Boolean
00179 Assertion::arg_list_valid() const
00180 {
00181     return False;
00182 }
00183 
00184 const List<StringElem> & 
00185 Assertion::string_arg_list_guarded() const
00186 {
00187     p_abort( "Assertion::string_arg_list_guarded: can't get arg_list." );
00188     return *((const List<StringElem> *) 0);
00189 }
00190 
00191 List<StringElem> & 
00192 Assertion::string_arg_list_guarded()
00193 {
00194     p_abort( "Assertion::string_arg_list_guarded: can't get arg_list." );
00195     return *((List<StringElem> *) 0);
00196 }
00197 
00198 Boolean
00199 Assertion::string_arg_list_valid() const
00200 {
00201     return False;
00202 }
00203 
00204 RefList<Assertion> & 
00205 Assertion::assertion_list() const
00206 {
00207     return CASTAWAY(RefList<Assertion> &) _assertion_list;
00208 }
00209 
00210 Assertion::~Assertion()
00211 {
00212     _assertion_list.clear();
00213 }
00214 
00215 void
00216 Assertion::print(ostream & NOTUSED(o)) const
00217 {
00218     p_abort( "Assertion::print: can't print assertion." );
00219 }
00220 
00221 Assertion & 
00222 Assertion::operator = (const Assertion &a) 
00223 {
00224     if (&a != this) {
00225         _type = a._type;
00226         _assertion_list.clear();
00227         _assertion_list = a._assertion_list;
00228     }
00229 
00230     return (*this);
00231 }
00232 
00233 Assertion *
00234 Assertion::clone() const
00235 {
00236     return new Assertion(*this);
00237 }
00238 
00239 Listable *
00240 Assertion::listable_clone() const
00241 {
00242     p_abort( "Assertion::listable_clone: can't clone assertion." );
00243     return 0;
00244 }
00245 
00246 
00247 
00248 StringAssertion::StringAssertion()
00249 {
00250     _type = AS_NONE;
00251 }
00252 
00253 StringAssertion::StringAssertion(const StringAssertion & a)
00254 {
00255     Assertion::operator = ( a );
00256 
00257     _string_arg_list = a._string_arg_list;
00258 }
00259 
00260 StringAssertion & 
00261 StringAssertion::operator = (const StringAssertion &a) 
00262 {
00263     if (&a != this) {
00264         Assertion::operator = ( a );
00265         _string_arg_list.clear();
00266         _string_arg_list = a._string_arg_list;
00267     }
00268 
00269     return (*this);
00270 }
00271 
00272 const List<StringElem> &
00273 StringAssertion::string_arg_list_guarded() const
00274 {
00275     return _string_arg_list;
00276 }
00277 
00278 List<StringElem> &
00279 StringAssertion::string_arg_list_guarded()
00280 {
00281     return _string_arg_list;
00282 }
00283 
00284 Boolean
00285 StringAssertion::string_arg_list_valid() const
00286 {
00287     return True;
00288 }
00289 
00290 Assertion *
00291 StringAssertion::clone() const
00292 {
00293     return new StringAssertion(*this);
00294 }
00295 
00296 StringAssertion::~StringAssertion()
00297 {
00298     /// ...  nothing to do
00299 }
00300 
00301 
00302 
00303 ExpressionAssertion::ExpressionAssertion()
00304 {
00305     _type = AS_NONE;
00306 }
00307 
00308 ExpressionAssertion::ExpressionAssertion(const ExpressionAssertion & a)
00309 {
00310     Assertion::operator = ( a );
00311 
00312     _arg_list       = a._arg_list;
00313 }
00314 
00315 ExpressionAssertion & 
00316 ExpressionAssertion::operator = (const ExpressionAssertion &a) 
00317 {
00318     if (&a != this) {
00319         Assertion::operator = ( a );
00320         _arg_list.clear();
00321         _arg_list = a._arg_list;
00322     }
00323 
00324     return (*this);
00325 }
00326  
00327 const List<Expression> &
00328 ExpressionAssertion::arg_list_guarded() const
00329 {
00330     return _arg_list;
00331 }
00332 
00333 List<Expression> & 
00334 ExpressionAssertion::arg_list_guarded()
00335 {
00336     return _arg_list;
00337 }
00338 
00339 Boolean
00340 ExpressionAssertion::arg_list_valid() const
00341 {
00342     return True;
00343 }
00344 
00345 Assertion *
00346 ExpressionAssertion::clone() const
00347 {
00348     return new ExpressionAssertion(*this);
00349 }
00350 
00351 ExpressionAssertion::~ExpressionAssertion()
00352 {
00353     /// ...  nothing to do
00354 }
00355 
00356 
00357 
00358 ARDAssertion::ARDAssertion()
00359 {
00360     _type = AS_NONE;
00361 }
00362 
00363 ARDAssertion::ARDAssertion(const ARDAssertion & a)
00364 {
00365     Assertion::operator = ( a );
00366 
00367     _descr_list       = a._descr_list;
00368 }
00369 
00370 ARDAssertion & 
00371 ARDAssertion::operator = (const ARDAssertion &a) 
00372 {
00373     if (&a != this) {
00374         Assertion::operator = ( a );
00375         _descr_list.clear();
00376         _descr_list = a._descr_list;
00377     }
00378 
00379     return (*this);
00380 }
00381  
00382 const List<AbstractAccess> &
00383 ARDAssertion::descr_list_guarded() const
00384 {
00385     return _descr_list;
00386 }
00387 
00388 List<AbstractAccess> & 
00389 ARDAssertion::descr_list_guarded()
00390 {
00391     return _descr_list;
00392 }
00393 
00394 Boolean
00395 ARDAssertion::descr_list_valid() const
00396 {
00397     return True;
00398 }
00399 
00400 void
00401 ARDAssertion::relink_aptrs( ProgramUnit &p )
00402 {
00403     for (Iterator<AbstractAccess> aa_iter = _descr_list; aa_iter.valid(); ++aa_iter)
00404         if (aa_iter.current_valid())
00405             aa_iter.current().relink_eptrs( p );
00406 }
00407 
00408 Assertion *
00409 ARDAssertion::clone() const
00410 {
00411     return new ARDAssertion(*this);
00412 }
00413 
00414 ARDAssertion::~ARDAssertion()
00415 {
00416     /// ...  nothing to do
00417 }
00418 
00419 
00420 
00421 AssertionList::AssertionList()
00422 {
00423     /// ...  nothing to do
00424 }
00425 
00426 AssertionList::AssertionList(Assertion *ap)
00427 {
00428     ins_first( ap );
00429 }
00430 
00431 AssertionList::AssertionList(const AssertionList & a)
00432 {
00433     clear();
00434     List<Assertion>::operator = ( a );
00435 }
00436 
00437 AssertionList::~AssertionList()
00438 {
00439     /// ...  nothing to do
00440 }
00441 
00442 void      
00443 AssertionList::print(ostream &o) const
00444 {
00445     for (Iterator<Assertion> iter = (*this); iter.valid(); ++iter) 
00446         iter.current().print(o);
00447 }
00448 
00449 void
00450 AssertionList::absorb(AssertionList *ap)
00451 {
00452     for (Mutator<Assertion> iter = (*ap); iter.valid(); ++iter) 
00453         ins_last( iter.grab() );
00454 
00455     delete ap;
00456 }
00457 
00458 AssertionList & 
00459 AssertionList::operator = (const AssertionList &a)
00460 {
00461     clear();
00462     List<Assertion>::operator = ( a );
00463 
00464     return (*this);
00465 }
00466 
00467 
00468 
00469 AssertPrivate::AssertPrivate()
00470 {
00471     _type = AS_PRIVATE;
00472 }
00473 
00474 AssertPrivate::AssertPrivate(const AssertPrivate & a)
00475 {
00476     ExpressionAssertion::operator = ( a );
00477 }
00478 
00479 AssertPrivate::~AssertPrivate()
00480 {
00481     /// ...  nothing to do
00482 }
00483 
00484 void
00485 AssertPrivate::print(ostream & o) const
00486 {
00487     o << "{ AS_PRIVATE ";
00488 
00489     Iterator<Expression> iter = arg_list_guarded();
00490 
00491     if (iter.valid()) {
00492         o << iter.current();
00493         for (++iter; iter.valid(); ++iter)
00494             o << ", " << iter.current();
00495     }
00496 
00497     o << " } "; 
00498 }
00499 
00500 AssertPrivate & 
00501 AssertPrivate::operator = (const AssertPrivate &a)
00502 {
00503     if (&a != this) 
00504         ExpressionAssertion::operator = ( a );
00505 
00506     return (*this);
00507 }
00508 
00509 Listable *
00510 AssertPrivate::listable_clone() const
00511 {
00512     return (Listable *) new AssertPrivate( *this );
00513 }
00514 
00515 Assertion *
00516 AssertPrivate::clone() const
00517 {
00518     return new AssertPrivate( *this );
00519 }
00520 
00521 
00522 
00523 AssertShared::AssertShared()
00524 {
00525     _type = AS_SHARED;
00526 }
00527 
00528 AssertShared::AssertShared(const AssertShared & a)
00529 {
00530     ExpressionAssertion::operator = ( a );
00531 }
00532 
00533 AssertShared::~AssertShared()
00534 {
00535     /// ...  nothing to do
00536 }
00537 
00538 void
00539 AssertShared::print(ostream & o) const
00540 {
00541     o << "{ AS_SHARED ";
00542 
00543     Iterator<Expression> iter = arg_list_guarded();
00544 
00545     if (iter.valid()) {
00546         o << iter.current();
00547         for (++iter; iter.valid(); ++iter)
00548             o << ", " << iter.current();
00549     }
00550 
00551     o << " } "; 
00552 }
00553 
00554 AssertShared & 
00555 AssertShared::operator = (const AssertShared &a)
00556 {
00557     if (&a != this) 
00558         ExpressionAssertion::operator = ( a );
00559 
00560     return (*this);
00561 }
00562 
00563 Listable *
00564 AssertShared::listable_clone() const
00565 {
00566     return (Listable *) new AssertShared( *this );
00567 }
00568 
00569 Assertion *
00570 AssertShared::clone() const
00571 {
00572     return new AssertShared( *this );
00573 }
00574 
00575 
00576 
00577 AssertLoopLabel::AssertLoopLabel()
00578 {
00579     _type = AS_LOOPLABEL;
00580 }
00581 
00582 AssertLoopLabel::AssertLoopLabel(const AssertLoopLabel & a)
00583 {
00584     StringAssertion::operator = ( a );
00585 }
00586 
00587 AssertLoopLabel::~AssertLoopLabel()
00588 {
00589     /// ...  nothing to do
00590 }
00591 
00592 void
00593 AssertLoopLabel::print(ostream & o) const
00594 {
00595     o << "{ AS_LOOPLABEL ";
00596 
00597     Iterator<StringElem> iter = string_arg_list_guarded();
00598 
00599     if (iter.valid()) {
00600         o << iter.current();
00601         for (++iter; iter.valid(); ++iter)
00602             o << ", " << iter.current();
00603     }
00604 
00605     o << " } "; 
00606 }
00607 
00608 AssertLoopLabel & 
00609 AssertLoopLabel::operator = (const AssertLoopLabel &a)
00610 {
00611     if (&a != this) 
00612         StringAssertion::operator = ( a );
00613 
00614     return (*this);
00615 }
00616 
00617 Listable *
00618 AssertLoopLabel::listable_clone() const
00619 {
00620     return (Listable *) new AssertLoopLabel( *this );
00621 }
00622 
00623 Assertion *
00624 AssertLoopLabel::clone() const
00625 {
00626     return new AssertLoopLabel( *this );
00627 }
00628 
00629 
00630 
00631 AssertSchedule::AssertSchedule()
00632 {
00633     _type = AS_SCHEDULE;
00634 }
00635 
00636 AssertSchedule::AssertSchedule(const AssertSchedule & a)
00637 {
00638     StringAssertion::operator = ( a );
00639 }
00640 
00641 AssertSchedule::~AssertSchedule()
00642 {
00643     /// ...  nothing to do
00644 }
00645 
00646 void
00647 AssertSchedule::print(ostream & o) const
00648 {
00649     o << "{ AS_SCHEDULE ";
00650 
00651     Iterator<StringElem> iter = string_arg_list_guarded();
00652 
00653     if (iter.valid()) {
00654         o << iter.current();
00655         for (++iter; iter.valid(); ++iter)
00656             o << ", " << iter.current();
00657     }
00658 
00659     o << " } "; 
00660 }
00661 
00662 AssertSchedule & 
00663 AssertSchedule::operator = (const AssertSchedule &a)
00664 {
00665     if (&a != this) 
00666         StringAssertion::operator = ( a );
00667 
00668     return (*this);
00669 }
00670 
00671 Listable *
00672 AssertSchedule::listable_clone() const
00673 {
00674     return (Listable *) new AssertSchedule( *this );
00675 }
00676 
00677 Assertion *
00678 AssertSchedule::clone() const
00679 {
00680     return new AssertSchedule( *this );
00681 }
00682 
00683 
00684 
00685 
00686 AssertSubst::AssertSubst()
00687 {
00688     _type = AS_SUBST;
00689 }
00690 
00691 AssertSubst::AssertSubst(const AssertSubst & a)
00692 {
00693     ExpressionAssertion::operator = ( a );
00694 }
00695 
00696 AssertSubst::~AssertSubst()
00697 {
00698     /// ...  nothing to do
00699 }
00700 
00701 void
00702 AssertSubst::print(ostream & o) const
00703 {
00704     o << "{ AS_SUBST ";
00705 
00706     Iterator<Expression> iter = arg_list_guarded();
00707 
00708     if (iter.valid()) {
00709         o << iter.current();
00710         for (++iter; iter.valid(); ++iter)
00711             o << ", " << iter.current();
00712     }
00713 
00714     o << "} ";
00715 }
00716 
00717 AssertSubst & 
00718 AssertSubst::operator = (const AssertSubst &a)
00719 {
00720     if (&a != this) 
00721         ExpressionAssertion::operator = ( a );
00722 
00723     return (*this);
00724 }
00725 
00726 Listable *
00727 AssertSubst::listable_clone() const
00728 {
00729     return (Listable *) new AssertSubst( *this );
00730 }
00731 
00732 Assertion *
00733 AssertSubst::clone() const
00734 {
00735     return new AssertSubst( *this );
00736 }
00737 
00738 
00739 
00740 AssertLastValue::AssertLastValue()
00741 {
00742     _type = AS_LASTVALUE;
00743 }
00744 
00745 AssertLastValue::AssertLastValue(const AssertLastValue & a)
00746 {
00747     ExpressionAssertion::operator = ( a );
00748 }
00749 
00750 AssertLastValue::~AssertLastValue()
00751 {
00752     /// ...  nothing to do
00753 }
00754 
00755 void
00756 AssertLastValue::print(ostream & o) const
00757 {
00758     o << "{ AS_LASTVALUE ";
00759 
00760     Iterator<Expression> iter = arg_list_guarded();
00761 
00762     if (iter.valid()) {
00763         o << iter.current();
00764         for (++iter; iter.valid(); ++iter)
00765             o << ", " << iter.current();
00766     }
00767 
00768     o << "} ";
00769 }
00770 
00771 AssertLastValue & 
00772 AssertLastValue::operator = (const AssertLastValue &a)
00773 {
00774     if (&a != this) 
00775         ExpressionAssertion::operator = ( a );
00776 
00777     return (*this);
00778 }
00779 
00780 Listable *
00781 AssertLastValue::listable_clone() const
00782 {
00783     return (Listable *) new AssertLastValue( *this );
00784 }
00785 
00786 Assertion *
00787 AssertLastValue::clone() const
00788 {
00789     return new AssertLastValue( *this );
00790 }
00791 
00792 
00793 
00794 AssertDynLastValue::AssertDynLastValue()
00795 {
00796     _type = AS_DYNLASTVALUE;
00797 }
00798 
00799 AssertDynLastValue::AssertDynLastValue(const AssertDynLastValue & a)
00800 {
00801     ExpressionAssertion::operator = ( a );
00802 }
00803 
00804 AssertDynLastValue::~AssertDynLastValue()
00805 {
00806     /// ...  nothing to do
00807 }
00808 
00809 void
00810 AssertDynLastValue::print(ostream & o) const
00811 {
00812     o << "{ AS_DYNLASTVALUE ";
00813 
00814     Iterator<Expression> iter = arg_list_guarded();
00815 
00816     if (iter.valid()) {
00817         o << iter.current();
00818         for (++iter; iter.valid(); ++iter)
00819             o << ", " << iter.current();
00820     }
00821 
00822     o << "} ";
00823 }
00824 
00825 AssertDynLastValue & 
00826 AssertDynLastValue::operator = (const AssertDynLastValue &a)
00827 {
00828     if (&a != this) 
00829         ExpressionAssertion::operator = ( a );
00830 
00831     return (*this);
00832 }
00833 
00834 Listable *
00835 AssertDynLastValue::listable_clone() const
00836 {
00837     return (Listable *) new AssertDynLastValue( *this );
00838 }
00839 
00840 Assertion *
00841 AssertDynLastValue::clone() const
00842 {
00843     return new AssertDynLastValue( *this );
00844 }
00845 
00846 
00847 
00848 AssertParallel::AssertParallel()
00849 {
00850     _type = AS_PARALLEL;
00851 }
00852 
00853 AssertParallel::AssertParallel(const AssertParallel & a)
00854 {
00855     ExpressionAssertion::operator = ( a );
00856 }
00857 
00858 AssertParallel::~AssertParallel()
00859 {
00860     /// ...  nothing to do
00861 }
00862 
00863 void
00864 AssertParallel::print(ostream & o) const
00865 {
00866     o << "{ AS_PARALLEL (";
00867 
00868     Iterator<Expression> iter = arg_list_guarded();
00869 
00870     if (iter.valid()) {
00871         o << iter.current();
00872         for (++iter; iter.valid(); ++iter)
00873             o << ", " << iter.current();
00874     }
00875 
00876     o << ") } ";
00877 }
00878 
00879 AssertParallel & 
00880 AssertParallel::operator = (const AssertParallel &a)
00881 {
00882     if (&a != this) 
00883         ExpressionAssertion::operator = ( a );
00884 
00885     return (*this);
00886 }
00887 
00888 Listable *
00889 AssertParallel::listable_clone() const
00890 {
00891     return (Listable *) new AssertParallel( *this );
00892 }
00893 
00894 Assertion *
00895 AssertParallel::clone() const
00896 {
00897     return new AssertParallel( *this );
00898 }
00899 
00900 
00901 
00902 AssertPrologue::AssertPrologue()
00903 {
00904     _type = AS_PROLOGUE;
00905 }
00906 
00907 AssertPrologue::AssertPrologue(const AssertPrologue & a)
00908 {
00909     ExpressionAssertion::operator = ( a );
00910 }
00911 
00912 AssertPrologue::~AssertPrologue()
00913 {
00914     /// ...  nothing to do
00915 }
00916 
00917 void
00918 AssertPrologue::print(ostream & o) const
00919 {
00920     o << "{ AS_PROLOGUE (";
00921 
00922     Iterator<Expression> iter = arg_list_guarded();
00923 
00924     if (iter.valid()) {
00925         o << iter.current();
00926         for (++iter; iter.valid(); ++iter)
00927             o << ", " << iter.current();
00928     }
00929 
00930     o << ") } ";
00931 }
00932 
00933 AssertPrologue & 
00934 AssertPrologue::operator = (const AssertPrologue &a)
00935 {
00936     if (&a != this) 
00937         ExpressionAssertion::operator = ( a );
00938 
00939     return (*this);
00940 }
00941 
00942 Listable *
00943 AssertPrologue::listable_clone() const
00944 {
00945     return (Listable *) new AssertPrologue( *this );
00946 }
00947 
00948 Assertion *
00949 AssertPrologue::clone() const
00950 {
00951     return new AssertPrologue( *this );
00952 }
00953 
00954 
00955 
00956 AssertEpilogue::AssertEpilogue()
00957 {
00958     _type = AS_EPILOGUE;
00959 }
00960 
00961 AssertEpilogue::AssertEpilogue(const AssertEpilogue & a)
00962 {
00963     ExpressionAssertion::operator = ( a );
00964 }
00965 
00966 AssertEpilogue::~AssertEpilogue()
00967 {
00968     /// ...  nothing to do
00969 }
00970 
00971 void
00972 AssertEpilogue::print(ostream & o) const
00973 {
00974     o << "{ AS_EPILOGUE (";
00975 
00976     Iterator<Expression> iter = arg_list_guarded();
00977 
00978     if (iter.valid()) {
00979         o << iter.current();
00980         for (++iter; iter.valid(); ++iter)
00981             o << ", " << iter.current();
00982     }
00983 
00984     o << ") } ";
00985 }
00986 
00987 AssertEpilogue & 
00988 AssertEpilogue::operator = (const AssertEpilogue &a)
00989 {
00990     if (&a != this) 
00991         ExpressionAssertion::operator = ( a );
00992 
00993     return (*this);
00994 }
00995 
00996 Listable *
00997 AssertEpilogue::listable_clone() const
00998 {
00999     return (Listable *) new AssertEpilogue( *this );
01000 }
01001 
01002 Assertion *
01003 AssertEpilogue::clone() const
01004 {
01005     return new AssertEpilogue( *this );
01006 }
01007 
01008 
01009 
01010 AssertReduction::AssertReduction()
01011 {
01012     _type = AS_REDUCTION;
01013 }
01014 
01015 AssertReduction::AssertReduction(const AssertReduction & a)
01016 {
01017     ExpressionAssertion::operator = ( a );
01018 }
01019 
01020 AssertReduction::~AssertReduction()
01021 {
01022     /// ...  nothing to do
01023 }
01024 
01025 void
01026 AssertReduction::print(ostream & o) const
01027 {
01028     o << "{ AS_REDUCTION ";
01029 
01030     Iterator<Expression> iter = arg_list_guarded();
01031 
01032     if (iter.valid()) {
01033         o << iter.current();
01034         for (++iter; iter.valid(); ++iter)
01035             o << ", " << iter.current();
01036     }
01037 
01038     o << "} ";
01039 }
01040 
01041 AssertReduction & 
01042 AssertReduction::operator = (const AssertReduction &a)
01043 {
01044     if (&a != this) 
01045         ExpressionAssertion::operator = ( a );
01046 
01047     return (*this);
01048 }
01049 
01050 Listable *
01051 AssertReduction::listable_clone() const
01052 {
01053     return (Listable *) new AssertReduction( *this );
01054 }
01055 
01056 Assertion *
01057 AssertReduction::clone() const
01058 {
01059     return new AssertReduction( *this );
01060 }
01061 
01062 
01063 //Guobin: AssertPartialReduction Definition
01064 
01065 AssertPartialReduction::AssertPartialReduction()
01066 {
01067    _type = AS_PARTIAL_REDUCTION;
01068 }
01069 
01070 AssertPartialReduction::AssertPartialReduction(const AssertPartialReduction & a)
01071 {
01072    ExpressionAssertion::operator = ( a );
01073 }
01074 
01075 AssertPartialReduction::AssertPartialReduction(IDExpr& a, IDExpr& b, IntConstExpr& c)
01076 {
01077    _arg_list.ins_last((Expression*)&a);
01078    _arg_list.ins_last((Expression*)&b);
01079    _arg_list.ins_last((Expression*)&c);
01080 
01081    _type = AS_PARTIAL_REDUCTION; 
01082 }
01083 
01084 AssertPartialReduction::~AssertPartialReduction()
01085 {
01086     /// ...  nothing to do
01087 }
01088 
01089 void
01090 AssertPartialReduction::print(ostream & o) const
01091 {
01092     o << "{ AS_PARTIAL_REDUCTION ";
01093 
01094     Iterator<Expression> iter = arg_list_guarded();
01095 
01096     if (iter.valid()) {
01097         o << iter.current();
01098         for (++iter; iter.valid(); ++iter)
01099             o << ", " << iter.current();
01100     }
01101 
01102     o << "} ";
01103 }
01104 
01105 AssertPartialReduction & 
01106 AssertPartialReduction::operator = (const AssertPartialReduction &a)
01107 {
01108     if (&a != this) 
01109         ExpressionAssertion::operator = ( a );
01110 
01111     return (*this);
01112 }
01113 
01114 Boolean AssertPartialReduction::arg_list_valid()
01115 {
01116    if(_arg_list.entries()!=3)
01117       return false;
01118    
01119    Expression& array_expr=_arg_list[0];
01120    Expression& rt_lmad_expr=_arg_list[1];
01121    Expression& case_expr=_arg_list[2];
01122 
01123    if(array_expr.op()!=ID_OP)
01124       return false;
01125 
01126    if(rt_lmad_expr.op()!=ID_OP)
01127       return false;
01128 
01129    if(case_expr.op()!=INTEGER_CONSTANT_OP)
01130       return false;
01131 
01132    return true;
01133 }
01134 
01135 Listable *
01136 AssertPartialReduction::listable_clone() const
01137 {
01138     return (Listable *) new AssertPartialReduction( *this );
01139 }
01140 
01141 Assertion *
01142 AssertPartialReduction::clone() const
01143 {
01144     return new AssertPartialReduction( *this );
01145 }
01146 
01147 
01148 //Guobin: AssertPartialFirstValue Definition, same as AssertPartialReduction
01149 
01150 AssertPartialFirstValue::AssertPartialFirstValue()
01151 {
01152    _type = AS_PARTIAL_REDUCTION;
01153 }
01154 
01155 AssertPartialFirstValue::AssertPartialFirstValue(const AssertPartialFirstValue & a)
01156 {
01157    ExpressionAssertion::operator = ( a );
01158 }
01159 
01160 AssertPartialFirstValue::AssertPartialFirstValue(IDExpr& a, IDExpr& b, IntConstExpr& c)
01161 {
01162    _arg_list.ins_last((Expression*)&a);
01163    _arg_list.ins_last((Expression*)&b);
01164    _arg_list.ins_last((Expression*)&c);
01165 
01166    _type = AS_PARTIAL_REDUCTION; 
01167 }
01168 
01169 AssertPartialFirstValue::~AssertPartialFirstValue()
01170 {
01171     /// ...  nothing to do
01172 }
01173 
01174 void
01175 AssertPartialFirstValue::print(ostream & o) const
01176 {
01177     o << "{ AS_PARTIAL_REDUCTION ";
01178 
01179     Iterator<Expression> iter = arg_list_guarded();
01180 
01181     if (iter.valid()) {
01182         o << iter.current();
01183         for (++iter; iter.valid(); ++iter)
01184             o << ", " << iter.current();
01185     }
01186 
01187     o << "} ";
01188 }
01189 
01190 AssertPartialFirstValue & 
01191 AssertPartialFirstValue::operator = (const AssertPartialFirstValue &a)
01192 {
01193     if (&a != this) 
01194         ExpressionAssertion::operator = ( a );
01195 
01196     return (*this);
01197 }
01198 
01199 Boolean AssertPartialFirstValue::arg_list_valid()
01200 {
01201    if(_arg_list.entries()!=3)
01202       return false;
01203    
01204    Expression& array_expr=_arg_list[0];
01205    Expression& rt_lmad_expr=_arg_list[1];
01206    Expression& case_expr=_arg_list[2];
01207 
01208    if(array_expr.op()!=ID_OP)
01209       return false;
01210 
01211    if(rt_lmad_expr.op()!=ID_OP)
01212       return false;
01213 
01214    if(case_expr.op()!=INTEGER_CONSTANT_OP)
01215       return false;
01216 
01217    return true;
01218 }
01219 
01220 Listable *
01221 AssertPartialFirstValue::listable_clone() const
01222 {
01223     return (Listable *) new AssertPartialFirstValue( *this );
01224 }
01225 
01226 Assertion *
01227 AssertPartialFirstValue::clone() const
01228 {
01229     return new AssertPartialFirstValue( *this );
01230 }
01231 
01232 
01233 
01234 
01235 AssertComment::AssertComment()
01236 {
01237     _type = AS_COMMENT;
01238 }
01239 
01240 AssertComment::AssertComment(const AssertComment & a)
01241 {
01242     StringAssertion::operator = ( a );
01243 }
01244 
01245 AssertComment::~AssertComment()
01246 {
01247     /// ...  nothing to do
01248 }
01249 
01250 void
01251 AssertComment::print(ostream & o) const
01252 {
01253     o << "{ AS_COMMENT ";
01254 
01255     Iterator<StringElem> iter = string_arg_list_guarded();
01256 
01257     const char *quote = "\"";
01258 
01259     if (iter.valid()) {
01260         o << quote << iter.current() << quote ;
01261         for (++iter; iter.valid(); ++iter)
01262             o << ", " << quote << iter.current() << quote;
01263     }
01264 
01265     o << "} ";
01266 }
01267 
01268 AssertComment & 
01269 AssertComment::operator = (const AssertComment &a)
01270 {
01271     if (&a != this) 
01272         StringAssertion::operator = ( a );
01273 
01274     return (*this);
01275 }
01276 
01277 Listable *
01278 AssertComment::listable_clone() const
01279 {
01280     return (Listable *) new AssertComment( *this );
01281 }
01282 
01283 Assertion *
01284 AssertComment::clone() const
01285 {
01286     return new AssertComment( *this );
01287 }
01288 
01289 
01290 
01291 void
01292 Assertion::relink_aptrs( ProgramUnit & NOTUSED(p) )
01293 {
01294     /// ...  Nothing to do
01295 }
01296 
01297 void
01298 ExpressionAssertion::relink_aptrs( ProgramUnit &p )
01299 {
01300     for (Iterator<Expression> e_iter = _arg_list; e_iter.valid(); ++e_iter)
01301         if (e_iter.current_valid())
01302             e_iter.current().relink_eptrs( p );
01303 }
01304 
01305 
01306 
01307 AssertSerial::AssertSerial()
01308 {
01309     _type = AS_SERIAL;
01310 }
01311 
01312 AssertSerial::AssertSerial(const AssertSerial & a)
01313 {
01314     ExpressionAssertion::operator = ( a );
01315 }
01316 
01317 AssertSerial::~AssertSerial()
01318 {
01319     /// ...  nothing to do
01320 }
01321 
01322 void
01323 AssertSerial::print(ostream & o) const
01324 {
01325     o << "{ AS_SERIAL (";
01326 
01327     Iterator<Expression> iter = arg_list_guarded();
01328 
01329     if (iter.valid()) {
01330         o << iter.current();
01331         for (++iter; iter.valid(); ++iter)
01332             o << ", " << iter.current();
01333     }
01334 
01335     o << ") } ";
01336 }
01337 
01338 AssertSerial & 
01339 AssertSerial::operator = (const AssertSerial &a)
01340 {
01341     if (&a != this) 
01342         ExpressionAssertion::operator = ( a );
01343 
01344     return (*this);
01345 }
01346 
01347 Listable *
01348 AssertSerial::listable_clone() const
01349 {
01350     return (Listable *) new AssertSerial( *this );
01351 }
01352 
01353 Assertion *
01354 AssertSerial::clone() const
01355 {
01356     return new AssertSerial( *this );
01357 }
01358 
01359 
01360 
01361 AssertCritical::AssertCritical()
01362 {
01363     _type = AS_CRITICAL;
01364 }
01365 
01366 AssertCritical::AssertCritical(const AssertCritical & a)
01367 {
01368     ExpressionAssertion::operator = ( a );
01369 }
01370 
01371 AssertCritical::~AssertCritical()
01372 {
01373     /// ...  nothing to do
01374 }
01375 
01376 void
01377 AssertCritical::print(ostream & o) const
01378 {
01379     o << "{ AS_CRITICAL (";
01380 
01381     Iterator<Expression> iter = arg_list_guarded();
01382 
01383     if (iter.valid()) {
01384         o << iter.current();
01385         for (++iter; iter.valid(); ++iter)
01386             o << ", " << iter.current();
01387     }
01388 
01389     o << ") } ";
01390 }
01391 
01392 AssertCritical & 
01393 AssertCritical::operator = (const AssertCritical &a)
01394 {
01395     if (&a != this) 
01396         ExpressionAssertion::operator = ( a );
01397 
01398     return (*this);
01399 }
01400 
01401 Listable *
01402 AssertCritical::listable_clone() const
01403 {
01404     return (Listable *) new AssertCritical( *this );
01405 }
01406 
01407 Assertion *
01408 AssertCritical::clone() const
01409 {
01410     return new AssertCritical( *this );
01411 }
01412 
01413 
01414 
01415 AssertRelation::AssertRelation()
01416 {
01417     _type = AS_RELATION;
01418 }
01419 
01420 AssertRelation::AssertRelation(const AssertRelation & a)
01421 {
01422     ExpressionAssertion::operator = ( a );
01423 }
01424 
01425 AssertRelation::~AssertRelation()
01426 {
01427     /// ...  nothing to do
01428 }
01429 
01430 void
01431 AssertRelation::print(ostream & o) const
01432 {
01433     o << "{ AS_RELATION (";
01434 
01435     Iterator<Expression> iter = arg_list_guarded();
01436 
01437     if (iter.valid()) {
01438         o << iter.current();
01439         for (++iter; iter.valid(); ++iter)
01440             o << ", " << iter.current();
01441     }
01442 
01443     o << ") } ";
01444 }
01445 
01446 AssertRelation & 
01447 AssertRelation::operator = (const AssertRelation &a)
01448 {
01449     if (&a != this) 
01450         ExpressionAssertion::operator = ( a );
01451 
01452     return (*this);
01453 }
01454 
01455 Listable *
01456 AssertRelation::listable_clone() const
01457 {
01458     return (Listable *) new AssertRelation( *this );
01459 }
01460 
01461 Assertion *
01462 AssertRelation::clone() const
01463 {
01464     return new AssertRelation( *this );
01465 }
01466 
01467 
01468 
01469 AssertSafeCondition::AssertSafeCondition()
01470 {
01471     _type = AS_SAFE_CONDITION;
01472 }
01473 
01474 AssertSafeCondition::AssertSafeCondition(const AssertSafeCondition & a)
01475 {
01476     ExpressionAssertion::operator = ( a );
01477 }
01478 
01479 AssertSafeCondition::~AssertSafeCondition()
01480 {
01481     /// ...  nothing to do
01482 }
01483 
01484 void
01485 AssertSafeCondition::print(ostream & o) const
01486 {
01487     o << "{ AS_SAFE_CONDITION (";
01488 
01489     Iterator<Expression> iter = arg_list_guarded();
01490 
01491     if (iter.valid()) {
01492         o << iter.current();
01493         for (++iter; iter.valid(); ++iter)
01494             o << ", " << iter.current();
01495     }
01496 
01497     o << ") } ";
01498 }
01499 
01500 AssertSafeCondition & 
01501 AssertSafeCondition::operator = (const AssertSafeCondition &a)
01502 {
01503     if (&a != this) 
01504         ExpressionAssertion::operator = ( a );
01505 
01506     return (*this);
01507 }
01508 
01509 Listable *
01510 AssertSafeCondition::listable_clone() const
01511 {
01512     return (Listable *) new AssertSafeCondition( *this );
01513 }
01514 
01515 Assertion *
01516 AssertSafeCondition::clone() const
01517 {
01518     return new AssertSafeCondition( *this );
01519 }
01520 
01521 
01522 
01523 AssertOverlap::AssertOverlap()
01524 {
01525     _type = AS_OVERLAP;
01526 }
01527 
01528 AssertOverlap::AssertOverlap(const AssertOverlap & a)
01529 {
01530     ARDAssertion::operator = ( a );
01531 }
01532 
01533 AssertOverlap::~AssertOverlap()
01534 {
01535     /// ...  nothing to do
01536 }
01537 
01538 void
01539 AssertOverlap::print(ostream & o) const
01540 {
01541     o << "{ AS_OVERLAP (";
01542 
01543     Iterator<AbstractAccess> iter = descr_list_guarded();
01544 
01545     if (iter.valid()) {
01546         o << iter.current();
01547         for (++iter; iter.valid(); ++iter)
01548             o << ", " << iter.current();
01549     }
01550 
01551     o << ") } ";
01552 }
01553 
01554 AssertOverlap & 
01555 AssertOverlap::operator = (const AssertOverlap &a)
01556 {
01557     if (&a != this) 
01558         ARDAssertion::operator = ( a );
01559 
01560     return (*this);
01561 }
01562 
01563 Listable *
01564 AssertOverlap::listable_clone() const
01565 {
01566     return (Listable *) new AssertOverlap( *this );
01567 }
01568 
01569 Assertion *
01570 AssertOverlap::clone() const
01571 {
01572     return new AssertOverlap( *this );
01573 }
01574 
01575 
01576 
01577 AssertOverlapSort::AssertOverlapSort()
01578 {
01579     _type = AS_OVERLAP_SORT;
01580 }
01581 
01582 AssertOverlapSort::AssertOverlapSort(const AssertOverlapSort & a)
01583 {
01584     ARDAssertion::operator = ( a );
01585 }
01586 
01587 AssertOverlapSort::~AssertOverlapSort()
01588 {
01589     /// ...  nothing to do
01590 }
01591 
01592 void
01593 AssertOverlapSort::print(ostream & o) const
01594 {
01595     o << "{ AS_OVERLAP_SORT (";
01596 
01597     Iterator<AbstractAccess> iter = descr_list_guarded();
01598 
01599     if (iter.valid()) {
01600         o << iter.current();
01601         for (++iter; iter.valid(); ++iter)
01602             o << ", " << iter.current();
01603     }
01604 
01605     o << ") } ";
01606 }
01607 
01608 AssertOverlapSort & 
01609 AssertOverlapSort::operator = (const AssertOverlapSort &a)
01610 {
01611     if (&a != this) 
01612         ARDAssertion::operator = ( a );
01613 
01614     return (*this);
01615 }
01616 
01617 Listable *
01618 AssertOverlapSort::listable_clone() const
01619 {
01620     return (Listable *) new AssertOverlapSort( *this );
01621 }
01622 
01623 Assertion *
01624 AssertOverlapSort::clone() const
01625 {
01626     return new AssertOverlapSort( *this );
01627 }
01628 
01629 
01630 
01631 AssertPrivateDescr::AssertPrivateDescr()
01632 {
01633     _type = AS_PRIVATE_DESCR;
01634 }
01635 
01636 AssertPrivateDescr::AssertPrivateDescr(const AssertPrivateDescr & a)
01637 {
01638     ARDAssertion::operator = ( a );
01639 }
01640 
01641 AssertPrivateDescr::~AssertPrivateDescr()
01642 {
01643     /// ...  nothing to do
01644 }
01645 
01646 void
01647 AssertPrivateDescr::print(ostream & o) const
01648 {
01649     o << "{ AS_PRIVATE_DESCR (";
01650 
01651     Iterator<AbstractAccess> iter = descr_list_guarded();
01652 
01653     if (iter.valid()) {
01654         o << iter.current();
01655         for (++iter; iter.valid(); ++iter)
01656             o << ", " << iter.current();
01657     }
01658 
01659     o << ") } ";
01660 }
01661 
01662 AssertPrivateDescr & 
01663 AssertPrivateDescr::operator = (const AssertPrivateDescr &a)
01664 {
01665     if (&a != this) 
01666         ARDAssertion::operator = ( a );
01667 
01668     return (*this);
01669 }
01670 
01671 Listable *
01672 AssertPrivateDescr::listable_clone() const
01673 {
01674     return (Listable *) new AssertPrivateDescr( *this );
01675 }
01676 
01677 Assertion *
01678 AssertPrivateDescr::clone() const
01679 {
01680     return new AssertPrivateDescr( *this );
01681 }
01682 
01683 
01684 
01685 AssertTestMonotone::AssertTestMonotone()
01686 {
01687     _type = AS_TEST_MONOTONE;
01688 }
01689 
01690 AssertTestMonotone::AssertTestMonotone(const AssertTestMonotone & a)
01691 {
01692     ARDAssertion::operator = ( a );
01693 }
01694 
01695 AssertTestMonotone::~AssertTestMonotone()
01696 {
01697     /// ...  nothing to do
01698 }
01699 
01700 void
01701 AssertTestMonotone::print(ostream & o) const
01702 {
01703     o << "{ AS_TEST_MONOTONE (";
01704 
01705     Iterator<AbstractAccess> iter = descr_list_guarded();
01706 
01707     if (iter.valid()) {
01708         o << iter.current();
01709         for (++iter; iter.valid(); ++iter)
01710             o << ", " << iter.current();
01711     }
01712 
01713     o << ") } ";
01714 }
01715 
01716 AssertTestMonotone & 
01717 AssertTestMonotone::operator = (const AssertTestMonotone &a)
01718 {
01719     if (&a != this) 
01720         ARDAssertion::operator = ( a );
01721 
01722     return (*this);
01723 }
01724 
01725 Listable *
01726 AssertTestMonotone::listable_clone() const
01727 {
01728     return (Listable *) new AssertTestMonotone( *this );
01729 }
01730 
01731 Assertion *
01732 AssertTestMonotone::clone() const
01733 {
01734     return new AssertTestMonotone( *this );
01735 }
01736 
01737 
01738 
01739 AssertReductDescr::AssertReductDescr()
01740 {
01741     _type = AS_REDUCT_DESCR;
01742 }
01743 
01744 AssertReductDescr::AssertReductDescr(const AssertReductDescr & a)
01745 {
01746     ARDAssertion::operator = ( a );
01747 }
01748 
01749 AssertReductDescr::~AssertReductDescr()
01750 {
01751     /// ...  nothing to do
01752 }
01753 
01754 void
01755 AssertReductDescr::print(ostream & o) const
01756 {
01757     o << "{ AS_REDUCT_DESCR (";
01758 
01759     Iterator<AbstractAccess> iter = descr_list_guarded();
01760 
01761     if (iter.valid()) {
01762         o << iter.current();
01763         for (++iter; iter.valid(); ++iter)
01764             o << ", " << iter.current();
01765     }
01766 
01767     o << ") } ";
01768 }
01769 
01770 AssertReductDescr & 
01771 AssertReductDescr::operator = (const AssertReductDescr &a)
01772 {
01773     if (&a != this) 
01774         ARDAssertion::operator = ( a );
01775 
01776     return (*this);
01777 }
01778 
01779 Listable *
01780 AssertReductDescr::listable_clone() const
01781 {
01782     return (Listable *) new AssertReductDescr( *this );
01783 }
01784 
01785 Assertion *
01786 AssertReductDescr::clone() const
01787 {
01788     return new AssertReductDescr( *this );
01789 }
01790 
01791 
01792 
01793 AssertDepROvsRW::AssertDepROvsRW()
01794 {
01795     _type = AS_DEP_RO_RW;
01796 }
01797 
01798 AssertDepROvsRW::AssertDepROvsRW(const AssertDepROvsRW & a)
01799 {
01800     ARDAssertion::operator = ( a );
01801 }
01802 
01803 AssertDepROvsRW::~AssertDepROvsRW()
01804 {
01805     /// ...  nothing to do
01806 }
01807 
01808 void
01809 AssertDepROvsRW::print(ostream & o) const
01810 {
01811     o << "{ AS_DEP_RO_RW (";
01812 
01813     Iterator<AbstractAccess> iter = descr_list_guarded();
01814 
01815     if (iter.valid()) {
01816         o << iter.current();
01817         for (++iter; iter.valid(); ++iter)
01818             o << ", " << iter.current();
01819     }
01820 
01821     o << ") } ";
01822 }
01823 
01824 AssertDepROvsRW & 
01825 AssertDepROvsRW::operator = (const AssertDepROvsRW &a)
01826 {
01827     if (&a != this) 
01828         ARDAssertion::operator = ( a );
01829 
01830     return (*this);
01831 }
01832 
01833 Listable *
01834 AssertDepROvsRW::listable_clone() const
01835 {
01836     return (Listable *) new AssertDepROvsRW( *this );
01837 }
01838 
01839 Assertion *
01840 AssertDepROvsRW::clone() const
01841 {
01842     return new AssertDepROvsRW( *this );
01843 }
01844 
01845 
01846 
01847 AssertDepRWvsWF::AssertDepRWvsWF()
01848 {
01849     _type = AS_DEP_RW_WF;
01850 }
01851 
01852 AssertDepRWvsWF::AssertDepRWvsWF(const AssertDepRWvsWF & a)
01853 {
01854     ARDAssertion::operator = ( a );
01855 }
01856 
01857 AssertDepRWvsWF::~AssertDepRWvsWF()
01858 {
01859     /// ...  nothing to do
01860 }
01861 
01862 void
01863 AssertDepRWvsWF::print(ostream & o) const
01864 {
01865     o << "{ AS_DEP_RW_WF (";
01866 
01867     Iterator<AbstractAccess> iter = descr_list_guarded();
01868 
01869     if (iter.valid()) {
01870         o << iter.current();
01871         for (++iter; iter.valid(); ++iter)
01872             o << ", " << iter.current();
01873     }
01874 
01875     o << ") } ";
01876 }
01877 
01878 AssertDepRWvsWF & 
01879 AssertDepRWvsWF::operator = (const AssertDepRWvsWF &a)
01880 {
01881     if (&a != this) 
01882         ARDAssertion::operator = ( a );
01883 
01884     return (*this);
01885 }
01886 
01887 Listable *
01888 AssertDepRWvsWF::listable_clone() const
01889 {
01890     return (Listable *) new AssertDepRWvsWF( *this );
01891 }
01892 
01893 Assertion *
01894 AssertDepRWvsWF::clone() const
01895 {
01896     return new AssertDepRWvsWF( *this );
01897 }
01898 
01899 
01900 
01901 AssertDepWFvsRO::AssertDepWFvsRO()
01902 {
01903     _type = AS_DEP_WF_RO;
01904 }
01905 
01906 AssertDepWFvsRO::AssertDepWFvsRO(const AssertDepWFvsRO & a)
01907 {
01908     ARDAssertion::operator = ( a );
01909 }
01910 
01911 AssertDepWFvsRO::~AssertDepWFvsRO()
01912 {
01913     /// ...  nothing to do
01914 }
01915 
01916 void
01917 AssertDepWFvsRO::print(ostream & o) const
01918 {
01919     o << "{ AS_DEP_WF_RO (";
01920 
01921     Iterator<AbstractAccess> iter = descr_list_guarded();
01922 
01923     if (iter.valid()) {
01924         o << iter.current();
01925         for (++iter; iter.valid(); ++iter)
01926             o << ", " << iter.current();
01927     }
01928 
01929     o << ") } ";
01930 }
01931 
01932 AssertDepWFvsRO & 
01933 AssertDepWFvsRO::operator = (const AssertDepWFvsRO &a)
01934 {
01935     if (&a != this) 
01936         ARDAssertion::operator = ( a );
01937 
01938     return (*this);
01939 }
01940 
01941 Listable *
01942 AssertDepWFvsRO::listable_clone() const
01943 {
01944     return (Listable *) new AssertDepWFvsRO( *this );
01945 }
01946 
01947 Assertion *
01948 AssertDepWFvsRO::clone() const
01949 {
01950     return new AssertDepWFvsRO( *this );
01951 }
01952 
01953 
01954 
01955 AssertDepOverlap::AssertDepOverlap()
01956 {
01957     _type = AS_DEP_OVERLAP;
01958 }
01959 
01960 AssertDepOverlap::AssertDepOverlap(const AssertDepOverlap & a)
01961 {
01962     ARDAssertion::operator = ( a );
01963 }
01964 
01965 AssertDepOverlap::~AssertDepOverlap()
01966 {
01967     /// ...  nothing to do
01968 }
01969 
01970 void
01971 AssertDepOverlap::print(ostream & o) const
01972 {
01973     o << "{ AS_DEP_OVERLAP (";
01974 
01975     Iterator<AbstractAccess> iter = descr_list_guarded();
01976 
01977     if (iter.valid()) {
01978         o << iter.current();
01979         for (++iter; iter.valid(); ++iter)
01980             o << ", " << iter.current();
01981     }
01982 
01983     o << ") } ";
01984 }
01985 
01986 AssertDepOverlap & 
01987 AssertDepOverlap::operator = (const AssertDepOverlap &a)
01988 {
01989     if (&a != this) 
01990         ARDAssertion::operator = ( a );
01991 
01992     return (*this);
01993 }
01994 
01995 Listable *
01996 AssertDepOverlap::listable_clone() const
01997 {
01998     return (Listable *) new AssertDepOverlap( *this );
01999 }
02000 
02001 Assertion *
02002 AssertDepOverlap::clone() const
02003 {
02004     return new AssertDepOverlap( *this );
02005 }
02006 
02007 
02008 
02009 AssertInstrument::AssertInstrument()
02010 {
02011     _type = AS_INSTRUMENT;
02012 }
02013 
02014 AssertInstrument::AssertInstrument(const AssertInstrument & a)
02015 {
02016     ExpressionAssertion::operator = ( a );
02017 }
02018 
02019 AssertInstrument::~AssertInstrument()
02020 {
02021     /// ...  nothing to do
02022 }
02023 
02024 void
02025 AssertInstrument::print(ostream & o) const
02026 {
02027     o << "{ AS_INSTRUMENT ";
02028 
02029     Iterator<Expression> iter = arg_list_guarded();
02030 
02031     if (iter.valid()) {
02032         o << iter.current();
02033         for (++iter; iter.valid(); ++iter)
02034             o << ", " << iter.current();
02035     }
02036 
02037     o << " } ";
02038 }
02039 
02040 AssertInstrument & 
02041 AssertInstrument::operator = (const AssertInstrument &a)
02042 {
02043     if (&a != this) 
02044         ExpressionAssertion::operator = ( a );
02045 
02046     return (*this);
02047 }
02048 
02049 Listable *
02050 AssertInstrument::listable_clone() const
02051 {
02052     return (Listable *) new AssertInstrument( *this );
02053 }
02054 
02055 Assertion *
02056 AssertInstrument::clone() const
02057 {
02058     return new AssertInstrument( *this );
02059 }
02060 
02061 
02062 
02063 AssertFirstValue::AssertFirstValue()
02064 {
02065     _type = AS_FIRSTVALUE;
02066 }
02067 
02068 AssertFirstValue::AssertFirstValue(const AssertFirstValue & a)
02069 {
02070     ExpressionAssertion::operator = ( a );
02071 }
02072 
02073 AssertFirstValue::~AssertFirstValue()
02074 {
02075     /// ...  nothing to do
02076 }
02077 
02078 void
02079 AssertFirstValue::print(ostream & o) const
02080 {
02081     o << "{ AS_FIRSTVALUE ";
02082 
02083     Iterator<Expression> iter = arg_list_guarded();
02084 
02085     if (iter.valid()) {
02086         o << iter.current();
02087         for (++iter; iter.valid(); ++iter)
02088             o << ", " << iter.current();
02089     }
02090 
02091     o << "} ";
02092 }
02093 
02094 AssertFirstValue & 
02095 AssertFirstValue::operator = (const AssertFirstValue &a)
02096 {
02097     if (&a != this) 
02098         ExpressionAssertion::operator = ( a );
02099 
02100     return (*this);
02101 }
02102 
02103 Listable *
02104 AssertFirstValue::listable_clone() const
02105 {
02106     return (Listable *) new AssertFirstValue( *this );
02107 }
02108 
02109 Assertion *
02110 AssertFirstValue::clone() const
02111 {
02112     return new AssertFirstValue( *this );
02113 }
02114 
02115 
02116 
02117 AssertRangeWritten::AssertRangeWritten()
02118 {
02119     _type = AS_RANGEWRITTEN;
02120 }
02121 
02122 AssertRangeWritten::AssertRangeWritten(const AssertRangeWritten & a)
02123 {
02124     ExpressionAssertion::operator = ( a );
02125 }
02126 
02127 AssertRangeWritten::~AssertRangeWritten()
02128 {
02129     /// ...  nothing to do
02130 }
02131 
02132 void
02133 AssertRangeWritten::print(ostream & o) const
02134 {
02135     o << "{ AS_RANGEWRITTEN ";
02136 
02137     Iterator<Expression> iter = arg_list_guarded();
02138 
02139     if (iter.valid()) {
02140         o << iter.current();
02141         for (++iter; iter.valid(); ++iter)
02142             o << ", " << iter.current();
02143     }
02144 
02145     o << "} ";
02146 }
02147 
02148 AssertRangeWritten & 
02149 AssertRangeWritten::operator = (const AssertRangeWritten &a)
02150 {
02151     if (&a != this) 
02152         ExpressionAssertion::operator = ( a );
02153 
02154     return (*this);
02155 }
02156 
02157 Listable *
02158 AssertRangeWritten::listable_clone() const
02159 {
02160     return (Listable *) new AssertRangeWritten( *this );
02161 }
02162 
02163 Assertion *
02164 AssertRangeWritten::clone() const
02165 {
02166     return new AssertRangeWritten( *this );
02167 }
02168 
02169 
02170 
02171 AssertPrivateRefs::AssertPrivateRefs()
02172 {
02173     _type = AS_PRIVATEREFS;
02174 }
02175 
02176 AssertPrivateRefs::AssertPrivateRefs(const AssertPrivateRefs & a)
02177 {
02178     ExpressionAssertion::operator = ( a );
02179 }
02180 
02181 AssertPrivateRefs::~AssertPrivateRefs()
02182 {
02183     /// ...  nothing to do
02184 }
02185 
02186 void
02187 AssertPrivateRefs::print(ostream & o) const
02188 {
02189     o << "{ AS_PRIVATEREFS ";
02190 
02191     Iterator<Expression> iter = arg_list_guarded();
02192 
02193     if (iter.valid()) {
02194     o << iter.current();
02195         for (++iter; iter.valid(); ++iter) {
02196             o << ", " << iter.current();
02197     }
02198     }
02199 
02200     o << " } "; 
02201 }
02202 
02203 AssertPrivateRefs & 
02204 AssertPrivateRefs::operator = (const AssertPrivateRefs &a)
02205 {
02206     if (&a != this) 
02207         ExpressionAssertion::operator = ( a );
02208 
02209     return (*this);
02210 }
02211 
02212 Listable *
02213 AssertPrivateRefs::listable_clone() const
02214 {
02215     return (Listable *) new AssertPrivateRefs( *this );
02216 }
02217 
02218 Assertion *
02219 AssertPrivateRefs::clone() const
02220 {
02221     return new AssertPrivateRefs( *this );
02222 }
02223 
02224 
02225 
02226 AssertReadOnlyRefs::AssertReadOnlyRefs()
02227 {
02228     _type = AS_READONLYREFS;
02229 }
02230 
02231 AssertReadOnlyRefs::AssertReadOnlyRefs(const AssertReadOnlyRefs & a)
02232 {
02233     ExpressionAssertion::operator = ( a );
02234 }
02235 
02236 AssertReadOnlyRefs::~AssertReadOnlyRefs()
02237 {
02238     /// ...  nothing to do
02239 }
02240 
02241 void
02242 AssertReadOnlyRefs::print(ostream & o) const
02243 {
02244     o << "{ AS_READONLYREFS ";
02245 
02246     Iterator<Expression> iter = arg_list_guarded();
02247 
02248     if (iter.valid()) {
02249     o << iter.current();
02250         for (++iter; iter.valid(); ++iter) {
02251             o << ", " << iter.current();
02252     }
02253     }
02254 
02255     o << " } "; 
02256 }
02257 
02258 AssertReadOnlyRefs & 
02259 AssertReadOnlyRefs::operator = (const AssertReadOnlyRefs &a)
02260 {
02261     if (&a != this) 
02262         ExpressionAssertion::operator = ( a );
02263 
02264     return (*this);
02265 }
02266 
02267 Listable *
02268 AssertReadOnlyRefs::listable_clone() const
02269 {
02270     return (Listable *) new AssertReadOnlyRefs( *this );
02271 }
02272 
02273 Assertion *
02274 AssertReadOnlyRefs::clone() const
02275 {
02276     return new AssertReadOnlyRefs( *this );
02277 }
02278 
02279 
02280 
02281 AssertSharedRefs::AssertSharedRefs()
02282 {
02283     _type = AS_SHAREDREFS;
02284 }
02285 
02286 AssertSharedRefs::AssertSharedRefs(const AssertSharedRefs & a)
02287 {
02288     ExpressionAssertion::operator = ( a );
02289 }
02290 
02291 AssertSharedRefs::~AssertSharedRefs()
02292 {
02293     /// ...  nothing to do
02294 }
02295 
02296 void
02297 AssertSharedRefs::print(ostream & o) const
02298 {
02299     o << "{ AS_SHAREDREFS ";
02300 
02301     Iterator<Expression> iter = arg_list_guarded();
02302 
02303     if (iter.valid()) {
02304     o << iter.current();
02305         for (++iter; iter.valid(); ++iter) {
02306             o << ", " << iter.current();
02307     }
02308     }
02309 
02310     o << " } "; 
02311 }
02312 
02313 AssertSharedRefs & 
02314 AssertSharedRefs::operator = (const AssertSharedRefs &a)
02315 {
02316     if (&a != this) 
02317         ExpressionAssertion::operator = ( a );
02318 
02319     return (*this);
02320 }
02321 
02322 Listable *
02323 AssertSharedRefs::listable_clone() const
02324 {
02325     return (Listable *) new AssertSharedRefs( *this );
02326 }
02327 
02328 Assertion *
02329 AssertSharedRefs::clone() const
02330 {
02331     return new AssertSharedRefs( *this );
02332 }
02333 
02334 
02335 
02336 AssertRTShadow::AssertRTShadow()
02337 {
02338     _type = AS_RTSHADOW;
02339 }
02340 
02341 AssertRTShadow::AssertRTShadow(const AssertRTShadow & a)
02342 {
02343     ExpressionAssertion::operator = ( a );
02344 }
02345 
02346 AssertRTShadow::~AssertRTShadow()
02347 {
02348     /// ...  nothing to do
02349 }
02350 
02351 void
02352 AssertRTShadow::print(ostream & o) const
02353 {
02354     o << "{ AS_RTSHADOW ";
02355 
02356     Iterator<Expression> iter = arg_list_guarded();
02357 
02358     if (iter.valid()) {
02359         o << iter.current();
02360         for (++iter; iter.valid(); ++iter)
02361             o << ", " << iter.current();
02362     }
02363 
02364     o << " } "; 
02365 }
02366 
02367 AssertRTShadow & 
02368 AssertRTShadow::operator = (const AssertRTShadow &a)
02369 {
02370     if (&a != this) 
02371         ExpressionAssertion::operator = ( a );
02372 
02373     return (*this);
02374 }
02375 
02376 Listable *
02377 AssertRTShadow::listable_clone() const
02378 {
02379     return (Listable *) new AssertRTShadow( *this );
02380 }
02381 
02382 Assertion *
02383 AssertRTShadow::clone() const
02384 {
02385     return new AssertRTShadow( *this );
02386 }
02387 
02388 
02389 
02390 AssertDepIO::AssertDepIO()
02391 {
02392     _type = AS_DEP_IO;
02393 }
02394 
02395 AssertDepIO::AssertDepIO(const AssertDepIO & a)
02396 {
02397     ExpressionAssertion::operator = ( a );
02398 }
02399 
02400 AssertDepIO::~AssertDepIO()
02401 {
02402     /// ...  nothing to do
02403 }
02404 
02405 void
02406 AssertDepIO::print(ostream & o) const
02407 {
02408     o << "{ AS_DEP_IO ";
02409 
02410     Iterator<Expression> iter = arg_list_guarded();
02411 
02412     if (iter.valid()) {
02413         o << iter.current();
02414         for (++iter; iter.valid(); ++iter)
02415             o << ", " << iter.current();
02416     }
02417 
02418     o << " } ";
02419 }
02420 
02421 AssertDepIO & 
02422 AssertDepIO::operator = (const AssertDepIO &a)
02423 {
02424     if (&a != this) 
02425         ExpressionAssertion::operator = ( a );
02426 
02427     return (*this);
02428 }
02429 
02430 Listable *
02431 AssertDepIO::listable_clone() const
02432 {
02433     return (Listable *) new AssertDepIO( *this );
02434 }
02435 
02436 Assertion *
02437 AssertDepIO::clone() const
02438 {
02439     return new AssertDepIO( *this );
02440 }
02441 
02442 
02443 
02444 AssertInline::AssertInline()
02445 {
02446     _type = AS_INLINE;
02447 }
02448 
02449 AssertInline::AssertInline(const AssertInline & a)
02450 {
02451     ExpressionAssertion::operator = ( a );
02452 }
02453 
02454 AssertInline::~AssertInline()
02455 {
02456     /// ...  nothing to do
02457 }
02458 
02459 void
02460 AssertInline::print(ostream & o) const
02461 {
02462     o << "{ AS_INLINE ";
02463 
02464     Iterator<Expression> iter = arg_list_guarded();
02465 
02466     if (iter.valid()) {
02467         o << iter.current();
02468         for (++iter; iter.valid(); ++iter)
02469             o << ", " << iter.current();
02470     }
02471 
02472     o << " } ";
02473 }
02474 
02475 AssertInline & 
02476 AssertInline::operator = (const AssertInline &a)
02477 {
02478     if (&a != this) 
02479         ExpressionAssertion::operator = ( a );
02480 
02481     return (*this);
02482 }
02483 
02484 Listable *
02485 AssertInline::listable_clone() const
02486 {
02487     return (Listable *) new AssertInline( *this );
02488 }
02489 
02490 Assertion *
02491 AssertInline::clone() const
02492 {
02493     return new AssertInline( *this );
02494 }
02495 
02496 
02497 
02498 AssertRecursiveInline::AssertRecursiveInline()
02499 {
02500     _type = AS_RECURSIVEINLINE;
02501 }
02502 
02503 AssertRecursiveInline::AssertRecursiveInline(const AssertRecursiveInline & a)
02504 {
02505     ExpressionAssertion::operator = ( a );
02506 }
02507 
02508 AssertRecursiveInline::~AssertRecursiveInline()
02509 {
02510     /// ...  nothing to do
02511 }
02512 
02513 void
02514 AssertRecursiveInline::print(ostream & o) const
02515 {
02516     o << "{ AS_RECURSIVEINLINE ";
02517 
02518     Iterator<Expression> iter = arg_list_guarded();
02519 
02520     if (iter.valid()) {
02521         o << iter.current();
02522         for (++iter; iter.valid(); ++iter)
02523             o << ", " << iter.current();
02524     }
02525 
02526     o << " } ";
02527 }
02528 
02529 AssertRecursiveInline & 
02530 AssertRecursiveInline::operator = (const AssertRecursiveInline &a)
02531 {
02532     if (&a != this) 
02533         ExpressionAssertion::operator = ( a );
02534 
02535     return (*this);
02536 }
02537 
02538 Listable *
02539 AssertRecursiveInline::listable_clone() const
02540 {
02541     return (Listable *) new AssertRecursiveInline( *this );
02542 }
02543 
02544 Assertion *
02545 AssertRecursiveInline::clone() const
02546 {
02547     return new AssertRecursiveInline( *this );
02548 }
02549 
02550 
02551 
02552 AssertNoInline::AssertNoInline()
02553 {
02554     _type = AS_NOINLINE;
02555 }
02556 
02557 AssertNoInline::AssertNoInline(const AssertNoInline & a)
02558 {
02559     ExpressionAssertion::operator = ( a );
02560 }
02561 
02562 AssertNoInline::~AssertNoInline()
02563 {
02564     /// ...  nothing to do
02565 }
02566 
02567 void
02568 AssertNoInline::print(ostream & o) const
02569 {
02570     o << "{ AS_NOINLINE ";
02571 
02572     Iterator<Expression> iter = arg_list_guarded();
02573 
02574     if (iter.valid()) {
02575         o << iter.current();
02576         for (++iter; iter.valid(); ++iter)
02577             o << ", " << iter.current();
02578     }
02579 
02580     o << " } ";
02581 }
02582 
02583 AssertNoInline & 
02584 AssertNoInline::operator = (const AssertNoInline &a)
02585 {
02586     if (&a != this) 
02587         ExpressionAssertion::operator = ( a );
02588 
02589     return (*this);
02590 }
02591 
02592 Listable *
02593 AssertNoInline::listable_clone() const
02594 {
02595     return (Listable *) new AssertNoInline( *this );
02596 }
02597 
02598 Assertion *
02599 AssertNoInline::clone() const
02600 {
02601     return new AssertNoInline( *this );
02602 }
02603 
02604 
02605 
02606 AssertNoPutGet::AssertNoPutGet()
02607 {
02608     _type = AS_NOPUTGET;
02609 }
02610 
02611 AssertNoPutGet::AssertNoPutGet(const AssertNoPutGet & a)
02612 {
02613     ExpressionAssertion::operator = ( a );
02614 }
02615 
02616 AssertNoPutGet::~AssertNoPutGet()
02617 {
02618     /// ...  nothing to do
02619 }
02620 
02621 void
02622 AssertNoPutGet::print(ostream & o) const
02623 {
02624     o << "{ AS_NOPUTGET ";
02625 
02626     Iterator<Expression> iter = arg_list_guarded();
02627 
02628     if (iter.valid()) {
02629         o << iter.current();
02630         for (++iter; iter.valid(); ++iter)
02631             o << ", " << iter.current();
02632     }
02633 
02634     o << " } ";
02635 }
02636 
02637 AssertNoPutGet & 
02638 AssertNoPutGet::operator = (const AssertNoPutGet &a)
02639 {
02640     if (&a != this) 
02641         ExpressionAssertion::operator = ( a );
02642 
02643     return (*this);
02644 }
02645 
02646 Listable *
02647 AssertNoPutGet::listable_clone() const
02648 {
02649     return (Listable *) new AssertNoPutGet( *this );
02650 }
02651 
02652 Assertion *
02653 AssertNoPutGet::clone() const
02654 {
02655     return new AssertNoPutGet( *this );
02656 }
02657 
02658 
02659 
02660 AssertRunTimeTest::AssertRunTimeTest()
02661 {
02662     _type = AS_RUNTIMETEST;
02663 }
02664 
02665 AssertRunTimeTest::AssertRunTimeTest(const AssertRunTimeTest & a)
02666 {
02667     ExpressionAssertion::operator = ( a );
02668 }
02669 
02670 AssertRunTimeTest::~AssertRunTimeTest()
02671 {
02672     /// ...  nothing to do
02673 }
02674 
02675 void
02676 AssertRunTimeTest::print(ostream & o) const
02677 {
02678     o << "{ AS_RUNTIMETEST ";
02679 
02680     Iterator<Expression> iter = arg_list_guarded();
02681 
02682     if (iter.valid()) {
02683         o << iter.current();
02684         for (++iter; iter.valid(); ++iter)
02685             o << ", " << iter.current();
02686     }
02687 
02688     o << " } ";
02689 }
02690 
02691 AssertRunTimeTest & 
02692 AssertRunTimeTest::operator = (const AssertRunTimeTest &a)
02693 {
02694     if (&a != this) 
02695         ExpressionAssertion::operator = ( a );
02696 
02697     return (*this);
02698 }
02699 
02700 Listable *
02701 AssertRunTimeTest::listable_clone() const
02702 {
02703     return (Listable *) new AssertRunTimeTest( *this );
02704 }
02705 
02706 Assertion *
02707 AssertRunTimeTest::clone() const
02708 {
02709     return new AssertRunTimeTest( *this );
02710 }
02711 
02712 
02713 
02714 AssertSideEffectFree::AssertSideEffectFree()
02715 {
02716     _type = AS_SIDE_EFFECT_FREE;
02717 }
02718 
02719 AssertSideEffectFree::AssertSideEffectFree(const AssertSideEffectFree & a)
02720 {
02721     ExpressionAssertion::operator = ( a );
02722 }
02723 
02724 AssertSideEffectFree::~AssertSideEffectFree()
02725 {
02726     /// ...  nothing to do
02727 }
02728 
02729 void
02730 AssertSideEffectFree::print(ostream & o) const
02731 {
02732     o << "{ AS_SIDE_EFFECT_FREE ";
02733 
02734     Iterator<Expression> iter = arg_list_guarded();
02735 
02736     if (iter.valid()) {
02737         o << iter.current();
02738         for (++iter; iter.valid(); ++iter)
02739             o << ", " << iter.current();
02740     }
02741 
02742     o << " } "; 
02743 }
02744 
02745 AssertSideEffectFree & 
02746 AssertSideEffectFree::operator = (const AssertSideEffectFree &a)
02747 {
02748     if (&a != this) 
02749         ExpressionAssertion::operator = ( a );
02750 
02751     return (*this);
02752 }
02753 
02754 Listable *
02755 AssertSideEffectFree::listable_clone() const
02756 {
02757     return (Listable *) new AssertSideEffectFree( *this );
02758 }
02759 
02760 Assertion *
02761 AssertSideEffectFree::clone() const
02762 {
02763     return new AssertSideEffectFree( *this );
02764 }
02765 
02766 
02767 
02768 AssertNoDependence::AssertNoDependence()
02769 {
02770     _type = AS_NODEPENDENCE;
02771 }
02772 
02773 AssertNoDependence::AssertNoDependence(const AssertNoDependence & a)
02774 {
02775     ExpressionAssertion::operator = ( a );
02776 }
02777 
02778 AssertNoDependence::~AssertNoDependence()
02779 {
02780     /// ...  nothing to do
02781 }
02782 
02783 void
02784 AssertNoDependence::print(ostream & o) const
02785 {
02786     o << "{ AS_NODEPENDENCE ";
02787 
02788     Iterator<Expression> iter = arg_list_guarded();
02789 
02790     if (iter.valid()) {
02791         o << iter.current();
02792         for (++iter; iter.valid(); ++iter)
02793             o << ", " << iter.current();
02794     }
02795 
02796     o << " } "; 
02797 }
02798 
02799 AssertNoDependence & 
02800 AssertNoDependence::operator = (const AssertNoDependence &a)
02801 {
02802     if (&a != this) 
02803         ExpressionAssertion::operator = ( a );
02804 
02805     return (*this);
02806 }
02807 
02808 Listable *
02809 AssertNoDependence::listable_clone() const
02810 {
02811     return (Listable *) new AssertNoDependence( *this );
02812 }
02813 
02814 Assertion *
02815 AssertNoDependence::clone() const
02816 {
02817     return new AssertNoDependence( *this );
02818 }
02819 
02820 
02821 
02822 AssertPreamble::AssertPreamble()
02823 {
02824     _type = AS_PREAMBLE;
02825 }
02826  
02827 AssertPreamble::AssertPreamble(const AssertPreamble & a)
02828 {
02829     ExpressionAssertion::operator = ( a );
02830 }
02831  
02832 AssertPreamble::~AssertPreamble()
02833 {
02834     /// ...  nothing to do
02835 }
02836  
02837 void
02838 AssertPreamble::print(ostream & o) const
02839 {
02840     o << "{ AS_PREAMBLE ";
02841  
02842     Iterator<Expression> iter = arg_list_guarded();
02843  
02844     if (iter.valid()) {
02845         o << iter.current();
02846         for (++iter; iter.valid(); ++iter)
02847             o << ", " << iter.current();
02848     }
02849  
02850     o << "} ";
02851 }
02852  
02853  
02854 AssertPreamble &
02855 AssertPreamble::operator = (const AssertPreamble &a)
02856 {
02857     if (&a != this)
02858         ExpressionAssertion::operator = ( a );
02859  
02860     return (*this);
02861 }
02862  
02863 Listable *
02864 AssertPreamble::listable_clone() const
02865 {
02866     return (Listable *) new AssertPreamble( *this );
02867 }
02868  
02869 Assertion *
02870 AssertPreamble::clone() const
02871 {
02872     return new AssertPreamble( *this );
02873 }
02874  
02875  
02876 AssertPostamble::AssertPostamble()
02877 {
02878     _type = AS_POSTAMBLE;
02879 }
02880  
02881 AssertPostamble::AssertPostamble(const AssertPostamble & a)
02882 {
02883     ExpressionAssertion::operator = ( a );
02884 }
02885  
02886 AssertPostamble::~AssertPostamble()
02887 {
02888     /// ...  nothing to do
02889 }
02890  
02891 void
02892 AssertPostamble::print(ostream & o) const
02893 {
02894     o << "{ AS_POSTAMBLE ";
02895  
02896     Iterator<Expression> iter = arg_list_guarded();
02897  
02898     if (iter.valid()) {
02899         o << iter.current();
02900         for (++iter; iter.valid(); ++iter)
02901             o << ", " << iter.current();
02902     }
02903  
02904     o << "} ";
02905 }
02906  
02907  
02908 AssertPostamble &
02909 AssertPostamble::operator = (const AssertPostamble &a)
02910 {
02911     if (&a != this)
02912         ExpressionAssertion::operator = ( a );
02913  
02914     return (*this);
02915 }
02916  
02917 Listable *
02918 AssertPostamble::listable_clone() const
02919 {
02920     return (Listable *) new AssertPostamble( *this );
02921 }
02922  
02923 Assertion *
02924 AssertPostamble::clone() const
02925 {
02926     return new AssertPostamble( *this );
02927 }
02928  
02929 
02930 
02931 AssertInduction::AssertInduction()
02932 {
02933     _type = AS_INDUCTION;
02934 }
02935 
02936 AssertInduction::AssertInduction(const AssertInduction & a)
02937 {
02938     ExpressionAssertion::operator = ( a );
02939 }
02940 
02941 AssertInduction::~AssertInduction()
02942 {
02943     /// ...  nothing to do
02944 }
02945 
02946 void
02947 AssertInduction::print(ostream & o) const
02948 {
02949     o << "{ AS_INDUCTION ";
02950 
02951     Iterator<Expression> iter = arg_list_guarded();
02952 
02953     if (iter.valid()) {
02954         o << "IV:" << iter.current();
02955     ++iter;
02956     }
02957     if (iter.valid()) {
02958     o << ", TYPE:" << iter.current();
02959     ++iter;
02960     }
02961     if (iter.valid()) {
02962     o << ", LO:" << iter.current();
02963     ++iter;
02964     }
02965     if (iter.valid()) {
02966     o << ", HI:" << iter.current();
02967     ++iter;
02968     }
02969     if (iter.valid()) {
02970     o << ", HDR:" << iter.current();
02971     ++iter;
02972     }
02973     if (iter.valid()) {
02974     o << ", EXPR:" << iter.current();
02975     ++iter;
02976     }
02977 
02978     o << " } "; 
02979 }
02980 
02981 AssertInduction & 
02982 AssertInduction::operator = (const AssertInduction &a)
02983 {
02984     if (&a != this) 
02985         ExpressionAssertion::operator = ( a );
02986 
02987     return (*this);
02988 }
02989 
02990 Listable *
02991 AssertInduction::listable_clone() const
02992 {
02993     return (Listable *) new AssertInduction( *this );
02994 }
02995 
02996 Assertion *
02997 AssertInduction::clone() const
02998 {
02999     return new AssertInduction( *this );
03000 }
03001 
03002 
03003 
03004 AssertParallelCondition::AssertParallelCondition()
03005 {
03006     _type = AS_PARCONDITION;
03007 }
03008 
03009 AssertParallelCondition::AssertParallelCondition(const AssertParallelCondition & a)
03010 {
03011     ExpressionAssertion::operator = ( a );
03012 }
03013 
03014 AssertParallelCondition::~AssertParallelCondition()
03015 {
03016     /// ...  nothing to do
03017 }
03018 
03019 void
03020 AssertParallelCondition::print(ostream & o) const
03021 {
03022     o << "{ AS_PARCONDITION ";
03023 
03024     Iterator<Expression> iter = arg_list_guarded();
03025 
03026     if (iter.valid()) {
03027         o << "Boolean Expression:" << iter.current();
03028     }
03029     o << " } "; 
03030 }
03031 
03032 AssertParallelCondition & 
03033 AssertParallelCondition::operator = (const AssertParallelCondition &a)
03034 {
03035     if (&a != this) 
03036         ExpressionAssertion::operator = ( a );
03037 
03038     return (*this);
03039 }
03040 
03041 Listable *
03042 AssertParallelCondition::listable_clone() const
03043 {
03044     return (Listable *) new AssertParallelCondition( *this );
03045 }
03046 
03047 Assertion *
03048 AssertParallelCondition::clone() const
03049 {
03050     return new AssertParallelCondition( *this );
03051 }
03052 
03053 
03054 
03055 AssertMayMod::AssertMayMod()
03056 {
03057     _type = AS_MAYMOD;
03058 }
03059 
03060 AssertMayMod::AssertMayMod(const AssertMayMod & a)
03061 {
03062     ExpressionAssertion::operator = ( a );
03063 }
03064 
03065 AssertMayMod::~AssertMayMod()
03066 {
03067     /// ...  nothing to do
03068 }
03069 
03070 void
03071 AssertMayMod::print(ostream & o) const
03072 {
03073     o << "{ AS_MAYMOD ";
03074 
03075     Iterator<Expression> iter = arg_list_guarded();
03076 
03077     if (iter.valid()) {
03078     o << iter.current();
03079         for (++iter; iter.valid(); ++iter) {
03080             o << ", " << iter.current();
03081     }
03082     }
03083 
03084     o << " } "; 
03085 }
03086 
03087 AssertMayMod & 
03088 AssertMayMod::operator = (const AssertMayMod &a)
03089 {
03090     if (&a != this) 
03091         ExpressionAssertion::operator = ( a );
03092 
03093     return (*this);
03094 }
03095 
03096 Listable *
03097 AssertMayMod::listable_clone() const
03098 {
03099     return (Listable *) new AssertMayMod( *this );
03100 }
03101 
03102 Assertion *
03103 AssertMayMod::clone() const
03104 {
03105     return new AssertMayMod( *this );
03106 }
03107 
03108 
03109 AssertNoMod::AssertNoMod()
03110 {
03111     _type = AS_NOMOD;
03112 }
03113 
03114 AssertNoMod::AssertNoMod(const AssertNoMod & a)
03115 {
03116     ExpressionAssertion::operator = ( a );
03117 }
03118 
03119 AssertNoMod::~AssertNoMod()
03120 {
03121     /// ...  nothing to do
03122 }
03123 
03124 void
03125 AssertNoMod::print(ostream & o) const
03126 {
03127     o << "{ AS_NOMOD ";
03128 
03129     Iterator<Expression> iter = arg_list_guarded();
03130 
03131     if (iter.valid()) {
03132     o << iter.current();
03133         for (++iter; iter.valid(); ++iter) {
03134             o << ", " << iter.current();
03135     }
03136     }
03137 
03138     o << " } "; 
03139 }
03140 
03141 AssertNoMod & 
03142 AssertNoMod::operator = (const AssertNoMod &a)
03143 {
03144     if (&a != this) 
03145         ExpressionAssertion::operator = ( a );
03146 
03147     return (*this);
03148 }
03149 
03150 Listable *
03151 AssertNoMod::listable_clone() const
03152 {
03153     return (Listable *) new AssertNoMod( *this );
03154 }
03155 
03156 Assertion *
03157 AssertNoMod::clone() const
03158 {
03159     return new AssertNoMod( *this );
03160 }
03161 
03162 
03163 
03164 AssertUnknownShared::AssertUnknownShared()
03165 {
03166     _type = AS_UNKNOWN_SHARED;
03167 }
03168 
03169 AssertUnknownShared::AssertUnknownShared(const AssertUnknownShared & a)
03170 {
03171     ExpressionAssertion::operator = ( a );
03172 }
03173 
03174 AssertUnknownShared::~AssertUnknownShared()
03175 {
03176     /// ...  nothing to do
03177 }
03178 
03179 void
03180 AssertUnknownShared::print(ostream & o) const
03181 {
03182     o << "{ AS_UNKNOWN_SHARED ";
03183 
03184     Iterator<Expression> iter = arg_list_guarded();
03185 
03186     if (iter.valid()) {
03187         o << iter.current();
03188         for (++iter; iter.valid(); ++iter)
03189             o << ", " << iter.current();
03190     }
03191 
03192     o << " } "; 
03193 }
03194 
03195 AssertUnknownShared & 
03196 AssertUnknownShared::operator = (const AssertUnknownShared &a)
03197 {
03198     if (&a != this) 
03199         ExpressionAssertion::operator = ( a );
03200 
03201     return (*this);
03202 }
03203 
03204 Listable *
03205 AssertUnknownShared::listable_clone() const
03206 {
03207     return (Listable *) new AssertUnknownShared( *this );
03208 }
03209 
03210 Assertion *
03211 AssertUnknownShared::clone() const
03212 {
03213     return new AssertUnknownShared( *this );
03214 }
03215 
03216 
03217 
03218 AssertForward::AssertForward()
03219 {
03220     _type = AS_FORWARD;
03221 }
03222 
03223 AssertForward::AssertForward(const AssertForward & a)
03224 {
03225     ExpressionAssertion::operator = ( a );
03226 }
03227 
03228 AssertForward::~AssertForward()
03229 {
03230     /// ...  nothing to do
03231 }
03232 
03233 void
03234 AssertForward::print(ostream & o) const
03235 {
03236     o << "{ AS_FORWARD ";
03237 
03238     Iterator<Expression> iter = arg_list_guarded();
03239 
03240     if (iter.valid()) {
03241         o << iter.current();
03242         for (++iter; iter.valid(); ++iter)
03243             o << ", " << iter.current();
03244     }
03245 
03246     o << "} ";
03247 }
03248 
03249 AssertForward & 
03250 AssertForward::operator = (const AssertForward &a)
03251 {
03252     if (&a != this) 
03253         ExpressionAssertion::operator = ( a );
03254 
03255     return (*this);
03256 }
03257 
03258 Listable *
03259 AssertForward::listable_clone() const
03260 {
03261     return (Listable *) new AssertForward( *this );
03262 }
03263 
03264 Assertion *
03265 AssertForward::clone() const
03266 {
03267     return new AssertForward( *this );
03268 }
03269 
03270 
03271 
03272 
03273 /// Begin OpenMP Modification
03274 
03275 AssertNoWait::AssertNoWait() {
03276   _type = AS_NOWAIT;
03277 }
03278 
03279 AssertNoWait::AssertNoWait(const AssertNoWait & a) {
03280   ExpressionAssertion::operator = ( a );
03281 }
03282 
03283 AssertNoWait::~AssertNoWait() {
03284 /// nothing to do
03285 }
03286 
03287 void
03288 AssertNoWait::print(ostream & o) const {
03289   o << "{ AS_NOWAIT (";
03290 
03291   Iterator<Expression> iter = arg_list_guarded();
03292 
03293   if (iter.valid()) {
03294     o << iter.current();
03295     for (++iter; iter.valid(); ++iter)
03296       o << ", " << iter.current();
03297   }
03298   o << ") } ";
03299 }
03300 
03301 AssertNoWait &
03302 AssertNoWait::operator = (const AssertNoWait &a) {
03303   if (&a != this)
03304     ExpressionAssertion::operator = ( a );
03305 
03306   return (*this);
03307 }
03308 
03309 Listable *
03310 AssertNoWait::listable_clone() const {
03311   return (Listable *) new AssertNoWait( *this );
03312 }
03313 
03314 Assertion *
03315 AssertNoWait::clone() const {
03316     return new AssertNoWait( *this );
03317 }
03318 
03319 /// End OpenMP Modification
 © 1995-2005 University of Illinois, Urbana-Champaign. All rights reserved.  Fri Mar 25 23:05:39 2005