Changeset 11f1f94 in tol
- Timestamp:
- May 31, 2011, 7:50:30 AM (15 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- 1b18f14
- Parents:
- 344d264
- Location:
- tol/btol/bgrammar
- Files:
-
- 4 edited
-
class.cpp (modified) (22 diffs)
-
nameblock.cpp (modified) (2 diffs)
-
spfuninst.cpp (modified) (2 diffs)
-
tol_bclass.h (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tol/btol/bgrammar/class.cpp
r344d264 r11f1f94 61 61 isMethod_ (false), 62 62 method_ (NULL), 63 firstParent_ (NULL), 63 64 parent_ (NULL), 64 65 deleteBranch_(false), 65 66 isStatic_ (false), 66 static_ (NULL) 67 static_ (NULL), 68 description_ ("") 67 69 { 68 70 } … … 78 80 isMethod_ (false), 79 81 method_ (NULL), 82 firstParent_ (NULL), 80 83 parent_ (NULL), 81 84 deleteBranch_(false), 82 85 isStatic_ (false), 83 static_ (NULL) 86 static_ (NULL), 87 description_ ("") 84 88 { 85 89 Copy(mbr); … … 95 99 isMethod_ (false), 96 100 method_ (NULL), 101 firstParent_ (NULL), 97 102 parent_ (NULL), 98 103 deleteBranch_(false), 99 104 isStatic_ (false), 100 static_ (NULL) 105 static_ (NULL), 106 description_ ("") 101 107 { 102 108 List* cdr; 103 109 BCore* car; 110 firstParent_ = parent; 104 111 parent_ = parent; 105 112 isGood_ = true; … … 319 326 if(!cls) { return(dump); } 320 327 if((name[0]=='_')&&(name[1]!='.')) { return(dump); } 321 if(name.BeginWith("_.autodoc.member.")) { return(dump); }322 BSyntaxObject* adm = cls->FindStaticMember(BText("_.autodoc.member.")+name, false);323 328 dump += BText("//")+ 324 329 BText((isStatic_)?"Static":"Non static")+ " "+ … … 326 331 BText((isMethod_)?"method":"member")+ 327 332 " defined at " + cls->FullName()+"\n"; 328 if( adm)333 if(description_.HasName()) 329 334 { 330 335 dump+="/* "; 331 dump+= Text(adm);336 dump+=description_; 332 337 dump+=" */\n"; 333 338 } … … 350 355 definition_ = mbr.definition_; 351 356 isMethod_ = mbr.isMethod_; 357 firstParent_ = mbr.firstParent_; 352 358 parent_ = mbr.parent_; 353 359 method_ = mbr.method_; … … 507 513 memberHash_ (NULL), 508 514 lastPosition_(0), 509 notImplementedMethods_(0) 515 notImplementedMethods_(0), 516 docMbrHash_(NULL), 517 docMbr_(0) 510 518 { 511 519 } … … 522 530 memberHash_ (NULL), 523 531 lastPosition_(0), 524 notImplementedMethods_(0) 532 notImplementedMethods_(0), 533 docMbrHash_(NULL), 534 docMbr_(0) 525 535 { 526 536 Copy(mbrOwn); … … 551 561 mbrDefHash_ = new BMemberByNameHash; 552 562 memberHash_ = new BMbrNumByNameHash; 563 docMbrHash_ = new BAutodocMemberHash; 553 564 SetEmptyKey ((*mbrDecHash_), NULL); 554 565 SetEmptyKey ((*mbrDefHash_), NULL); 555 566 SetEmptyKey ((*memberHash_), NULL); 567 SetEmptyKey ((*docMbrHash_), NULL); 556 568 SetDeletedKey((*mbrDecHash_), name_del_key()); 557 569 SetDeletedKey((*mbrDefHash_), name_del_key()); 558 570 SetDeletedKey((*memberHash_), name_del_key()); 571 SetDeletedKey((*docMbrHash_), name_del_key()); 559 572 } 560 573 … … 633 646 } 634 647 } 648 for(n=0; n<=docMbr_.Size(); n++) 649 { 650 delete docMbr_[n]; 651 } 635 652 if(mbrDecHash_) { delete mbrDecHash_; } 636 653 if(mbrDefHash_) { delete mbrDefHash_; } 637 654 if(memberHash_) { delete memberHash_; } 655 if(docMbrHash_) { delete docMbrHash_; } 638 656 mbrDecHash_ = NULL; 639 657 mbrDefHash_ = NULL; 640 658 memberHash_ = NULL; 659 docMbrHash_ = NULL; 641 660 } 642 661 … … 763 782 764 783 //-------------------------------------------------------------------- 784 bool BMemberOwner::AddAutodocMember( 785 const BText& name, const BText& desc, const BMemberOwner* parent) 786 //-------------------------------------------------------------------- 787 { 788 return(true); 789 } 790 791 //-------------------------------------------------------------------- 792 bool BMemberOwner::AddAutodocMember(BMember* mbrPtr) 793 //-------------------------------------------------------------------- 794 { 795 return(true); 796 } 797 798 799 //-------------------------------------------------------------------- 765 800 bool BMemberOwner::AddMember(BMember* newMember) 766 801 //! Adds a new member if it's compatible with existant ones … … 771 806 const BText& name = newMember->name_; 772 807 assert(name.HasName()&& dec.HasName()); 808 809 if(OwnerType()==BCLASS) 810 { 811 if(name.BeginWith("_.autodoc.member.")) 812 { 813 bool ok = AddAutodocMember(newMember); 814 delete newMember; 815 return(ok); 816 } 817 } 773 818 #ifndef USE_STATIC_INHERITAGE 774 819 if(newMember->isStatic_ && (newMember->parent_!=this)) … … 838 883 (*memberHash_)[name] = newMbrNum; 839 884 (*mbrDefHash_)[dec ] = newMember; 885 newMember->firstParent_ = mbrDef->firstParent_; 840 886 } 841 887 else if(mbrDec) … … 854 900 notImplementedMethods_--; 855 901 } 902 newMember->firstParent_ = mbrDec->firstParent_; 856 903 } 857 904 } … … 877 924 I2(" by declaration ", " por la declaración ")+ 878 925 "\n"+newMember->FullExpression()+"\n"); 926 } 927 else 928 { 929 newMember->firstParent_ = mbrDef->firstParent_; 879 930 } 880 931 } … … 913 964 (*parentHash_)[name] = parent; 914 965 //Adds parent members to 915 n=0;916 966 for(n=0; n<parent->member_.Size(); n++) 917 967 { 918 968 ok = ok && AddMember(parent->member_[n]->member_); 969 } 970 for(n=0; n<parent->docMbr_.Size(); n++) 971 { 972 BAutoDocInf& a = *(parent->docMbr_[n]); 973 ok = ok && AddAutodocMember(a.name_,a.desc_,a.parent_); 919 974 } 920 975 } … … 1096 1151 } 1097 1152 1153 1098 1154 //-------------------------------------------------------------------- 1099 1155 BText BNameBlockMemberOwner::getFullName() const … … 1394 1450 1395 1451 //-------------------------------------------------------------------- 1452 bool BClass::AddAutodocMember(const BText& name, const BText& desc, const BMemberOwner* parent) 1453 //! Adds a new member if it's compatible with existant ones 1454 //-------------------------------------------------------------------- 1455 { 1456 bool ok = true; 1457 BAutodocMemberHash::const_iterator found = docMbrHash_->find(name); 1458 if(found!=docMbrHash_->end()) 1459 { 1460 int s = found->second; 1461 BClass* cls = (BClass*)parent; 1462 BClass* oldCls = (BClass*)docMbr_[s]->parent_; 1463 if(cls==oldCls) 1464 { 1465 Error(I2("Special documentation member ", 1466 "El miembro especial de documentación ")+ 1467 cls->getFullNameRef()+"::"+name+ 1468 I2(" is already defined.", 1469 " ya está definido.")); 1470 ok=false; 1471 } 1472 else 1473 { 1474 /* 1475 Std(BText("TRACE Changing inherited _.autodoc_member from ")+ 1476 oldCls->getFullNameRef()+"::"+name+"='"+docMbr_[s]->desc_+"' to "+ 1477 cls->getFullNameRef()+"::"+name+"='"+desc+"'\n"); 1478 */ 1479 docMbr_[s]->desc_ = desc; 1480 docMbr_[s]->parent_ = parent; 1481 } 1482 } 1483 else 1484 { 1485 int s = docMbr_.Size(); 1486 /* 1487 BClass* cls = (BClass*)parent; 1488 Std(BText("TRACE Adding [")+s+"] _.autodoc_member "+ 1489 cls->getFullNameRef()+"::"+name+"='"+desc+"'\n"); 1490 */ 1491 docMbr_.Add(new BAutoDocInf(name, desc, parent)); 1492 (*docMbrHash_)[docMbr_[s]->name_] = s; 1493 } 1494 return(ok); 1495 } 1496 1497 //-------------------------------------------------------------------- 1498 bool BClass::AddAutodocMember(BMember* mbrPtr) 1499 //! Adds a new member if it's compatible with existant ones 1500 //-------------------------------------------------------------------- 1501 { 1502 BMember& mbr = *mbrPtr; 1503 bool ok = true; 1504 if(!mbr.static_) 1505 { 1506 Error(I2("Special documentation member ", 1507 "El miembro especial de documentación ")+ 1508 getFullNameRef()+"::"+mbr.name_+ 1509 I2(" is corrupted or it didn't have declared as static.", 1510 " está corrupto o no se declaró como static.")); 1511 ok = false; 1512 } 1513 else if(mbr.static_->Grammar()!=GraText()) 1514 { 1515 Error(I2("Special documentation member ", 1516 "El miembro especial de documentación ")+ 1517 getFullNameRef()+"::"+mbr.name_+ 1518 I2(" should be a Text instead of a ", 1519 " debería ser un Text en lugar de un ")+ 1520 mbr.static_->Grammar()->Name()); 1521 ok = false; 1522 } 1523 else 1524 { 1525 BText desc = Text(mbr.static_); 1526 BText name = mbr.name_.SubString(17,mbr.name_.Length()); 1527 ok = AddAutodocMember(name, desc, this); 1528 } 1529 return(true); 1530 } 1531 1532 //-------------------------------------------------------------------- 1533 bool BClass::PutMemberDescription( 1534 const BText& name, 1535 const BText& desc, 1536 bool autodoc) 1537 //-------------------------------------------------------------------- 1538 { 1539 bool ok = true; 1540 BMember* mbr = FindMember(name); 1541 if(!mbr) 1542 { 1543 ok = false; 1544 if(autodoc) 1545 { 1546 Warning(I2("Special documentation member ", 1547 "El miembro especial de documentación ")+ 1548 getFullNameRef()+"::_.autodoc.member."+name+ 1549 I2(" is irrelevant due it doesn't exist a member nor method called ", 1550 " es irrelevante porque no existe ningún miembro ni método llamado ")+ 1551 name); 1552 } 1553 else 1554 { 1555 Warning(I2("Cannot apply PutDescription to inexistent member ", 1556 "No se puede aplicar PutDescription al miembro inexistente ")+ 1557 getFullNameRef()+"::"+name); 1558 } 1559 } 1560 else 1561 { 1562 BSyntaxObject* obj = NULL; 1563 /* 1564 if(mbr->description_.HasName()) 1565 { 1566 Warning(I2("Description of member ","La descripción del miembro ")+ 1567 getFullNameRef()+"::"+name+ 1568 I2(" is already defined in"," ya ha sido definida en ")+ 1569 parent->getFullNameRef()); 1570 } 1571 else 1572 { 1573 mbr->description_ = desc; 1574 } 1575 */ 1576 BClass* parent = (BClass*)mbr->parent_; 1577 BClass* firstParent = (BClass*)mbr->firstParent_; 1578 if(( mbr->method_ && (parent ==this)) || 1579 (!mbr->method_ && (firstParent==mbr->parent_)) ) 1580 1581 { 1582 mbr->description_ = desc; 1583 if(mbr->method_) { obj = mbr->method_; } 1584 else if(mbr->static_) { obj = mbr->static_; } 1585 if(obj) 1586 { 1587 obj->PutDescription(desc); 1588 } 1589 } 1590 else 1591 { 1592 if(!mbr->method_) 1593 { 1594 mbr->description_ = firstParent->FindMember(name)->description_; 1595 } 1596 else 1597 { 1598 mbr->description_ = desc; 1599 } 1600 ok = false; 1601 if(mbr->method_) 1602 { 1603 Warning(I2("Cannot change to non overloaded method ", 1604 "No se puede cambiar la descripción de un método no sobrecargado ")+ 1605 getFullNameRef()+"::"+name+ 1606 I2(" inherited from "," heredado de ")+ 1607 parent->getFullNameRef()+"::"+name); 1608 } 1609 else 1610 { 1611 Warning(I2("Cannot change to non method member ", 1612 "No se puede cambiar la descripción de un miembro que no es un método ")+ 1613 getFullNameRef()+"::"+name+ 1614 I2(" originally inherited from "," heredado originalmente de ")+ 1615 firstParent->getFullNameRef()+"::"+name); 1616 } 1617 } 1618 } 1619 return(ok); 1620 }; 1621 1622 //-------------------------------------------------------------------- 1396 1623 bool BClass::CheckAutoDoc() 1397 1624 //-------------------------------------------------------------------- … … 1399 1626 bool ok = true; 1400 1627 int n=0; 1401 for(n=0; ok && (n<member_.Size()); n++) 1402 { 1403 if(!member_[n]) { continue; } 1404 BMember& mbr = *(member_[n]->member_); 1405 BSyntaxObject* obj = NULL; 1406 if(mbr.name_.BeginWith("_.autodoc.member.")) 1407 { 1408 if(!mbr.static_) 1409 { 1410 Error(I2("Special documentation member ", 1411 "El miembro especial de documentación ")+ 1412 getFullNameRef()+"::"+mbr.name_+ 1413 I2(" is corrupted or it didn't have declared as static.", 1414 " está corrupto o no se declaró como static.")); 1415 ok = false; 1416 } 1417 else if(mbr.static_->Grammar()!=GraText()) 1418 { 1419 Error(I2("Special documentation member ", 1420 "El miembro especial de documentación ")+ 1421 getFullNameRef()+"::"+mbr.name_+ 1422 I2(" should be a Text instead of a ", 1423 " debería ser un Text en lugar de un ")+ 1424 mbr.static_->Grammar()->Name()); 1425 ok = false; 1426 } 1427 else 1428 { 1429 BText& desc = Text(mbr.static_); 1430 BText auxName = mbr.name_.SubString(17,mbr.name_.Length()); 1431 BMember* auxMember = FindMember(auxName); 1432 if(!auxMember) 1433 { 1434 Warning(I2("Special documentation member ", 1435 "El miembro especial de documentación ")+ 1436 getFullNameRef()+"::"+mbr.name_+ 1437 I2(" is irrelevant due it doesn't exist a member nor method called ", 1438 " es irrelevante porque no existe ningún miembro ni método llamado ")+ 1439 auxName); 1440 } 1441 else 1442 { 1443 if(auxMember->method_) { obj = auxMember->method_; } 1444 else if(auxMember->static_) { obj = auxMember->static_; } 1445 if(obj) 1446 { 1447 obj->PutDescription(desc); 1448 } 1449 } 1450 } 1451 } 1452 } 1628 BAutodocMemberHash::const_iterator iterC; 1629 BAutodocMemberHash& dmh = *docMbrHash_; 1630 for(iterC=dmh.begin(); iterC!=dmh.end(); iterC++, n++) 1631 { 1632 int s = iterC->second; 1633 const BText& name = docMbr_[s]->name_; 1634 const BText& desc = docMbr_[s]->desc_; 1635 PutMemberDescription(name, desc, true); 1636 }; 1453 1637 return(ok); 1454 1638 }; … … 1893 2077 } 1894 2078 const BText& name = mbr->name_; 1895 if(name.BeginWith("_.autodoc.member.")) { continue; }2079 //if(name.BeginWith("_.autodoc.member.")) { continue; } 1896 2080 BSet reg; 1897 2081 reg.PrepareStore(6); … … 1913 2097 definedAtClass = mbr->parent_->getFullName(); 1914 2098 } 1915 1916 BText desc ="";1917 BSyntaxObject* adoc = cls->FindStaticMember(BText("_.autodoc.member.")+name, false);1918 if(adoc) { desc = Text(adoc); }1919 2099 1920 2100 reg.AddElement(new BContensDat ("",mbr->isStatic_,"")); … … 1924 2104 reg.AddElement(new BContensText("",access,"")); 1925 2105 reg.AddElement(new BContensText("",definedAtClass,"")); 1926 reg.AddElement(new BContensText("", desc,""));2106 reg.AddElement(new BContensText("",mbr->description_,"")); 1927 2107 1928 2108 reg.PutStruct(strClassMemberInfo_); -
tol/btol/bgrammar/nameblock.cpp
r344d264 r11f1f94 823 823 if(!dsc.HasName()) 824 824 { 825 BText autodocName = BText("_.autodoc.member.")+obj->Name();826 BSyntaxObject* autodoc = NULL;827 825 if(class_) 828 826 { 829 autodoc = class_->FindStaticMember(autodocName,-1); 827 BMember* mbr = class_->FindMember(obj->Name()); 828 if(mbr) { obj->PutDescription(mbr->description_); } 830 829 } 831 830 else 832 831 { 832 BText autodocName = BText("_.autodoc.member.")+obj->Name(); 833 BSyntaxObject* autodoc = NULL; 833 834 autodoc = Member(autodocName); 834 }835 if(autodoc && autodoc->Grammar()==GraText())836 {837 BText& desc = Text(autodoc);838 obj->PutDescription(desc);835 if(autodoc && autodoc->Grammar()==GraText()) 836 { 837 BText& desc = Text(autodoc); 838 obj->PutDescription(desc); 839 } 839 840 } 840 841 } … … 846 847 if(!dsc.HasName()) 847 848 { 848 BText autodocName = BText("_.autodoc.member.")+obj->Name();849 BSyntaxObject* autodoc = NULL;850 849 if(class_) 851 850 { 852 autodoc = class_->FindStaticMember(autodocName,-1); 851 BMember* mbr = class_->FindMember(obj->Name()); 852 if(mbr) { obj->PutDescription(mbr->description_); } 853 853 } 854 854 else 855 855 { 856 BText autodocName = BText("_.autodoc.member.")+obj->Name(); 857 BSyntaxObject* autodoc = NULL; 856 858 autodoc = Member(autodocName); 857 }858 if(autodoc && autodoc->Grammar()==GraText())859 {860 BText& desc = Text(autodoc);861 obj->PutDescription(desc);859 if(autodoc && autodoc->Grammar()==GraText()) 860 { 861 BText& desc = Text(autodoc); 862 obj->PutDescription(desc); 863 } 862 864 } 863 865 } -
tol/btol/bgrammar/spfuninst.cpp
r344d264 r11f1f94 1020 1020 memberName = memberName.SubString(1,memberName.Length()); 1021 1021 BClass* cls = (BClass*)obj; 1022 BMember* mbr = cls->FindMember(memberName); 1023 if(!mbr) 1024 { 1025 Error(third_arg_error); 1022 if(!cls->PutMemberDescription(memberName, desc, false)) 1023 { 1024 BSpecialFunction::TestResult(_name_,NIL,tre,NIL,BTRUE); 1026 1025 } 1027 else 1028 { 1029 BSyntaxObject* adoc = cls->FindStaticMember(BText("_.autodoc.member.")+memberName, false); 1030 if(adoc) { Text(adoc)=desc; } 1031 if(mbr->method_) { obj=mbr->method_; } 1032 else if(mbr->static_) { obj=mbr->static_; } 1033 } 1026 SAFE_DESTROY(desObj,obj); 1027 return(NULL); 1034 1028 } 1035 1029 else … … 2243 2237 2244 2238 AddInstance("PutDescription", 2245 I2("(Text newDescription, Anything object )",2246 "(Text nuevaDescripción, Anything objeto )"),2239 I2("(Text newDescription, Anything object [, Text member])", 2240 "(Text nuevaDescripción, Anything objeto [, Text miembro])"), 2247 2241 I2("Puts a new description to an object. " 2248 2242 "You also can modify description of a Struct or a Class by " -
tol/btol/bgrammar/tol_bclass.h
r344d264 r11f1f94 35 35 class TOL_API BClass; 36 36 struct TOL_API BMbrNum; 37 38 class TOL_API BAutoDocInf 39 { 40 public: 41 BText name_; 42 BText desc_; 43 const BMemberOwner* parent_; 44 BAutoDocInf(const BText& name, const BText& desc, const BMemberOwner* parent) 45 : name_(name), desc_(desc), parent_(parent) 46 { } 47 BAutoDocInf(const BAutoDocInf* a) 48 : name_(a->name_), desc_(a->desc_), parent_(a->parent_) 49 { } 50 }; 51 37 52 template class TOL_API BArray<BClass*>; 38 53 template class TOL_API BArray<BMember*>; 39 54 template class TOL_API BArray<BMbrNum*>; 55 template class TOL_API BArray<BMemberOwner*>; 56 template class TOL_API BArray<BAutoDocInf*>; 57 40 58 //template class TOL_API BArray<BMember*>; 41 59 … … 54 72 List* branch_; //!< Parser branch of the member 55 73 bool isGood_; //!< False when there are some error 74 BMemberOwner* firstParent_; //!< First Member owner (Class or NameBlock) 56 75 BMemberOwner* parent_; //!< Member owner (Class or NameBlock) 57 76 BText name_; //!< Member name … … 63 82 BSyntaxObject* method_; //!< Store for Class member 64 83 BSyntaxObject* static_; //!< Store for Class static member or method 84 BText description_; //!< Store for Class member description 65 85 public: 66 86 // Constructors and destructors: bgrammar\class.cpp … … 100 120 //! Type for store searchable and sortable members 101 121 typedef hash_map_by_name<BMbrNum*>::dense_ BMbrNumByNameHash; 122 123 //! Type for store searchable and sortable names 124 typedef hash_map_by_name<int>::dense_ BAutodocMemberHash; 125 102 126 103 127 //! Type of member owner … … 105 129 106 130 List* tree_; //!< Parser branch of the Class 107 bool isGood_; //!< False when there are som error 108 BClassByNameHash* parentHash_; //!< Classes which inherites from 109 BClassByNameHash* ascentHash_; //!< Classes which recursively inherites from 110 BMemberByNameHash* mbrDecHash_; //!< Members with just declaration 111 BMemberByNameHash* mbrDefHash_; //!< Members with default value 112 BMbrNumByNameHash* memberHash_; //!< All members hashed by name 113 BArray<BMbrNum*> member_; 131 bool isGood_; //!< False when there are som error 132 BClassByNameHash* parentHash_; //!< Classes which inherites from 133 BClassByNameHash* ascentHash_; //!< Classes which recursively inherites from 134 BMemberByNameHash* mbrDecHash_; //!< Members with just declaration 135 BMemberByNameHash* mbrDefHash_; //!< Members with default value 136 BMbrNumByNameHash* memberHash_; //!< All members hashed by name 137 BAutodocMemberHash* docMbrHash_; //!< Autodoc members 138 BArray<BMbrNum*> member_; 139 BArray<BAutoDocInf*> docMbr_; 114 140 int notImplementedMethods_; 115 141 public: … … 148 174 //! Searchs a member with given declaration without default value 149 175 BMember* FindDecMember (const BText& declaration) const; 176 //! Adds a new autodoc member 177 virtual bool AddAutodocMember(const BText& name, const BText& desc, const BMemberOwner* parent); 178 virtual bool AddAutodocMember(BMember* mbrPtr); 150 179 //! Adds a new member 151 180 bool AddMember(BMember* member); … … 197 226 ~BClass(); 198 227 228 //! Adds a new autodoc member 229 bool AddAutodocMember(const BText& name, const BText& desc, const BMemberOwner* parent); 230 bool AddAutodocMember(BMember* mbrPtr); 231 199 232 // Access & Manipulation: inline 200 233 BOwnerType OwnerType() const { return(BCLASS); } … … 226 259 int GetSortedMethods(BArray<const BMember*>& arr) const; 227 260 261 bool PutMemberDescription( 262 const BText& name, 263 const BText& desc, 264 bool autodoc); 265 228 266 DeclareClassNewDelete(BClass); 229 267 };
Note: See TracChangeset
for help on using the changeset viewer.
