Changeset 299cfe9 in tol
- Timestamp:
- Apr 3, 2009, 2:41:06 PM (18 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- 589249e
- Parents:
- a4edbdf
- Location:
- tol/btol/bgrammar
- Files:
-
- 4 edited
-
class.cpp (modified) (16 diffs)
-
nameblock.cpp (modified) (1 diff)
-
spfuninst.cpp (modified) (1 diff)
-
tol_bclass.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
tol/btol/bgrammar/class.cpp
ra4edbdf r299cfe9 196 196 //-------------------------------------------------------------------- 197 197 { 198 return(definition_.HasName() );198 return(definition_.HasName()!=0); 199 199 } 200 200 … … 215 215 : isGood_ (true), 216 216 tree_ (NULL), 217 parentHash_ ( new BClassByNameHash),218 ascentHash_ ( new BClassByNameHash),219 mbrDecHash_ ( new BMemberByNameHash),220 mbrDefHash_ ( new BMemberByNameHash),221 memberHash_ ( new BMbrNumByNameHash),217 parentHash_ (NULL), 218 ascentHash_ (NULL), 219 mbrDecHash_ (NULL), 220 mbrDefHash_ (NULL), 221 memberHash_ (NULL), 222 222 lastPosition_(0) 223 223 { 224 //Reset hash_map's225 SetEmptyKey ((*parentHash_), NULL);226 SetEmptyKey ((*ascentHash_), NULL);227 SetEmptyKey ((*mbrDecHash_), NULL);228 SetEmptyKey ((*mbrDefHash_), NULL);229 SetEmptyKey ((*memberHash_), NULL);230 SetDeletedKey((*mbrDecHash_), name_del_key());231 SetDeletedKey((*mbrDefHash_), name_del_key());232 SetDeletedKey((*memberHash_), name_del_key());233 224 } 234 225 … … 252 243 //-------------------------------------------------------------------- 253 244 { 245 DestroyAll(); 246 } 247 248 //-------------------------------------------------------------------- 249 void BMemberOwner::DestroyAll() 250 //-------------------------------------------------------------------- 251 { 252 DestroyMemberStore(); 253 DestroyParentHashes(); 254 DESTROY(tree_); 255 } 256 257 //-------------------------------------------------------------------- 258 void BMemberOwner::CreateMemberHashes() 259 //-------------------------------------------------------------------- 260 { 261 //Reset hash_map's 262 mbrDecHash_ = new BMemberByNameHash; 263 mbrDefHash_ = new BMemberByNameHash; 264 memberHash_ = new BMbrNumByNameHash; 265 SetEmptyKey ((*mbrDecHash_), NULL); 266 SetEmptyKey ((*mbrDefHash_), NULL); 267 SetEmptyKey ((*memberHash_), NULL); 268 SetDeletedKey((*mbrDecHash_), name_del_key()); 269 SetDeletedKey((*mbrDefHash_), name_del_key()); 270 SetDeletedKey((*memberHash_), name_del_key()); 271 } 272 273 //-------------------------------------------------------------------- 274 void BMemberOwner::CreateParentHashes() 275 //-------------------------------------------------------------------- 276 { 277 //Reset hash_map's 278 parentHash_ = new BClassByNameHash; 279 ascentHash_ = new BClassByNameHash; 280 SetEmptyKey ((*parentHash_), NULL); 281 SetEmptyKey ((*ascentHash_), NULL); 282 } 283 284 //-------------------------------------------------------------------- 285 void BMemberOwner::Copy(const BMemberOwner& mbrOwn) 286 //-------------------------------------------------------------------- 287 { 254 288 int n=0; 255 DestroyMemberStore(); 256 //Std(BText("\n")+Name()+"::~BClass()"); 257 //Frees parent classes 258 BClassByNameHash::const_iterator iterC; 259 if(parentHash_) 260 { 261 BClassByNameHash& par = *parentHash_; 289 if(!mbrOwn.isGood_) 290 { 291 Error(I2("FATAL: Cannot copy corrupted BMemberOwner ", 292 "FATAL: No se puede copiar un BMemberOwner corrupto")); 293 return; 294 } 295 DestroyAll(); 296 297 tree_ = (mbrOwn.tree_)?mbrOwn.tree_->duplicate():NULL; 298 299 if(mbrOwn.parentHash_) 300 { 301 CreateParentHashes(); 302 BClassByNameHash::const_iterator iterC; 303 BClassByNameHash& par = *(mbrOwn.parentHash_); 262 304 for(iterC=par.begin(); iterC!=par.end(); iterC++, n++) 263 305 { 264 BClass* parent = iterC->second; 265 parent->DecNRefs(); 266 DESTROY(parent); 267 }; 268 delete parentHash_; 269 } 270 if(ascentHash_) { delete ascentHash_; } 271 272 //Destroy parsed tree 273 DESTROY(tree_); 306 AddParent(iterC->second); 307 } 308 } 309 if(mbrOwn.memberHash_) 310 { 311 BMbrNumByNameHash::const_iterator iterM; 312 BMbrNumByNameHash& mbr = *(mbrOwn.memberHash_); 313 for(iterM=mbr.begin(); iterM!=mbr.end(); iterM++, n++) 314 { 315 AddMember(iterM->second->member_); 316 } 317 } 318 lastPosition_ = mbrOwn.lastPosition_; 274 319 } 275 320 … … 306 351 mbrDefHash_ = NULL; 307 352 memberHash_ = NULL; 353 } 354 355 //-------------------------------------------------------------------- 356 void BMemberOwner::DestroyParentHashes() 357 //-------------------------------------------------------------------- 358 { 359 if(parentHash_) 360 { 361 int n=0; 362 BClassByNameHash::const_iterator iterC; 363 BClassByNameHash& par = *parentHash_; 364 for(iterC=par.begin(); iterC!=par.end(); iterC++, n++) 365 { 366 BClass* parent = iterC->second; 367 parent->DecNRefs(); 368 DESTROY(parent); 369 }; 370 delete parentHash_; 371 } 372 if(ascentHash_) { delete ascentHash_; } 373 } 374 375 //-------------------------------------------------------------------- 376 void BMemberOwner::PutTree(List* tree) 377 //-------------------------------------------------------------------- 378 { 379 tree_ = tree; 308 380 } 309 381 … … 335 407 336 408 //-------------------------------------------------------------------- 337 void BMemberOwner::Copy(const BMemberOwner& mbrOwn)338 //--------------------------------------------------------------------339 {340 isGood_ = mbrOwn.isGood_;341 tree_ = (mbrOwn.tree_)?mbrOwn.tree_->duplicate():NULL;342 parentHash_ = new BClassByNameHash (*mbrOwn.parentHash_);343 ascentHash_ = new BClassByNameHash (*mbrOwn.ascentHash_);344 mbrDecHash_ = new BMemberByNameHash(*mbrOwn.mbrDecHash_);345 mbrDefHash_ = new BMemberByNameHash(*mbrOwn.mbrDefHash_);346 memberHash_ = new BMbrNumByNameHash(*mbrOwn.memberHash_);347 lastPosition_ = mbrOwn. lastPosition_;348 }349 350 //--------------------------------------------------------------------351 void BMemberOwner::PutTree(List* tree)352 //--------------------------------------------------------------------353 {354 tree_ = tree;355 }356 357 //--------------------------------------------------------------------358 409 bool BMemberOwner::InheritesFrom(const BText& name) const 359 410 //! True if inherites from a Class called as given name 360 411 //-------------------------------------------------------------------- 361 412 { 362 if(!isGood_ ) { return(false); }413 if(!isGood_ || !ascentHash_) { return(false); } 363 414 BClassByNameHash::const_iterator found = ascentHash_->find(name); 364 415 return(found!=ascentHash_->end()); … … 377 428 //-------------------------------------------------------------------- 378 429 { 379 if(!isGood_ ) { return(NULL); }430 if(!isGood_ || !memberHash_) { return(NULL); } 380 431 BMbrNumByNameHash::const_iterator found; 381 432 found = memberHash_->find(name); … … 398 449 //-------------------------------------------------------------------- 399 450 { 400 if(!isGood_ ) { return(NULL); }451 if(!isGood_ || !memberHash_) { return(NULL); } 401 452 BMemberByNameHash::const_iterator found; 402 453 found = mbrDefHash_->find(declaration); … … 410 461 //-------------------------------------------------------------------- 411 462 { 412 if(!isGood_ ) { return(NULL); }463 if(!isGood_ || !memberHash_) { return(NULL); } 413 464 BMemberByNameHash::const_iterator found; 414 465 found = mbrDecHash_->find(declaration); … … 423 474 { 424 475 if(!isGood_) { return(false); } 476 if(!memberHash_) { CreateMemberHashes(); } 425 477 BMbrNum* newMbrNum = new BMbrNum; 426 478 newMbrNum->member_ = newMember; … … 521 573 if(!isGood_) { return(false); } 522 574 if(!parent) { return(true); } 575 if(!parentHash_) { CreateParentHashes(); } 523 576 //Std(BText("\n")+Name()+"::AddParent("+parent->Name()+")"); 524 577 bool ok = true; … … 568 621 { 569 622 if(!isGood_) { return(false); } 623 if(!parentHash_) { CreateParentHashes(); } 570 624 int n; 571 625 bool ok = true; … … 583 637 //-------------------------------------------------------------------- 584 638 { 585 if(!isGood_) { return(false); } 639 if(!isGood_ ) { return(false); } 640 if(!memberHash_) { CreateMemberHashes(); } 586 641 bool ok = true; 587 642 BMember* mbr = NULL; … … 595 650 while(ok && lst) 596 651 { 597 if(ok = lst->car()->IsListClass() )652 if(ok = lst->car()->IsListClass()!=0) 598 653 { 599 654 mbr = new BMember(this, (List*)lst->car()); … … 619 674 while(ok && lst) 620 675 { 621 if(ok = lst->car()->IsListClass() )676 if(ok = lst->car()->IsListClass()!=0) 622 677 { 623 678 mbr = new BMember(this, (List*)lst->car()); … … 658 713 BMemberOwner() 659 714 { 715 CreateMemberHashes(); 716 CreateParentHashes(); 660 717 } 661 718 … … 668 725 { 669 726 PutTree(tree_); 727 CreateMemberHashes(); 728 CreateParentHashes(); 670 729 //Adds object to language searchers 671 730 BGrammar::AddObject(this); -
tol/btol/bgrammar/nameblock.cpp
ra4edbdf r299cfe9 162 162 //-------------------------------------------------------------------- 163 163 { 164 Copy(ns);164 BMemberOwner::Copy(ns); 165 165 PutName(ns.Name()); 166 localName_ = ns.LocalName(); 166 167 owner_ = NULL; 167 set_ = ns.Set();168 168 father_ = ns.Father(); 169 public_ = ns.Public(); 170 private_ = ns.Private(); 171 localName_ = ns.LocalName(); 172 //VBR: La copia de NameBlock tiene un problema si los miembros 173 //referenciados en ambos son los mismos, ¿cuál es su padre? 169 Fill(ns.Set()); 170 Build(); 174 171 return(*this); 175 172 } 173 176 174 177 175 //-------------------------------------------------------------------- -
tol/btol/bgrammar/spfuninst.cpp
ra4edbdf r299cfe9 867 867 BUserTimeSerieDo* s1 = (BUserTimeSerieDo*)result; 868 868 BUserTimeSerieDo* s2 = (BUserTimeSerieDo*)val; 869 s1->PutContens(s2); 870 #ifdef __USE_TC__ 871 } else if(type==GraCSeries()) { 872 BUserCTimeSeriesDo* s1 = (BUserCTimeSeriesDo*)result; 873 BUserCTimeSeriesDo* s2 = (BUserCTimeSeriesDo*)val; 874 s1->PutContens(s2); 875 #endif /* __USE_TC__ */ 876 } else if(type==GraNameBlock()) { 869 s1->PutContens(s2); } 870 else if(type==GraNameBlock()) { 871 /* 877 872 Error(I2("Cannot apply PutValue (nor :=) to NameBlock variables", 878 873 "No se puede aplicar la función PutValue (ni :=) a variables NameBlock")); 879 874 result = NULL; 880 } else { 875 */ 876 ((BUserNameBlock*)(result))->PutContens(((BUserNameBlock*)(val))->Contens()); 877 } 878 #ifdef __USE_TC__ 879 else if(type==GraCSeries()) { 880 BUserCTimeSeriesDo* s1 = (BUserCTimeSeriesDo*)result; 881 BUserCTimeSeriesDo* s2 = (BUserCTimeSeriesDo*)val; 882 s1->PutContens(s2); } 883 #endif /* __USE_TC__ */ 884 else { 881 885 TestResult(_name_,NIL,tre,NIL,BTRUE, 882 886 I2("Incompatible types: ", -
tol/btol/bgrammar/tol_bclass.h
ra4edbdf r299cfe9 113 113 ~BMemberOwner(); 114 114 115 void CreateMemberHashes(); 116 void CreateParentHashes(); 115 117 void DestroyMemberStore(); 118 void DestroyParentHashes(); 119 void DestroyAll(); 116 120 const BMemberOwner& operator = (const BMemberOwner& mbrOwn) 117 121 {
Note: See TracChangeset
for help on using the changeset viewer.
