Changeset 814548d in tol


Ignore:
Timestamp:
Mar 24, 2011, 3:35:30 PM (16 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
76b1443f
Parents:
72a07d0
Message:

In InheritesFrom a class inherites from itself

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@3346 be4846ae-f051-483a-831f-b64e7d08527f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tol/btol/bgrammar/class.cpp

    r72a07d0 r814548d  
    666666//--------------------------------------------------------------------
    667667{
    668   if(!isGood_ || !ascentHash_) { return(false); }
     668  if(!isGood_ || !ascentHash_ || !name.HasName()) { return(false); }
     669  if(name==getName()) { return(true); }
    669670  BClassByNameHash::const_iterator found = ascentHash_->find(name);
    670671  return(found!=ascentHash_->end());
    … …  
    676677//--------------------------------------------------------------------
    677678{
     679  if(!parent) { return(false); }
     680  if(this==parent) { return(true); }
    678681  return(InheritesFrom(parent->getFullNameRef()));
    679682//return(InheritesFrom(parent->Name()));
    … …  
    11211124  BClassByNameHash& par = *(parentHash_);
    11221125  bool ok = true;
     1126  for(iterC=par.begin(); iterC!=par.end(); iterC++)
     1127  {
     1128    BClass* parent = iterC->second;
     1129    ok &= parent->DestroyInstance(instance);
     1130  }
    11231131  if(__destroy)
    11241132  {
    … …  
    11301138    BSyntaxObject* result = dstryr->Evaluator(args);
    11311139    if(!result) { ok = false; }
    1132     else { ok = (bool)Real(result); }
     1140    else { ok = Real(result)!=0.0; }
    11331141    dstryr->PutNameBlock(old);
    11341142    DESTROY(result);
    11351143  }
    1136   for(iterC=par.begin(); iterC!=par.end(); iterC++)
    1137   {
    1138     BClass* parent = iterC->second;
    1139     ok &= parent->DestroyInstance(instance);
    1140   }
    11411144  return(ok);
    11421145}
    … …  
    11521155//--------------------------------------------------------------------
    11531156{
    1154   return(BParser::Unparse(tree_,"","\n"));
     1157//return(BParser::Unparse(tree_,"","\n"));
     1158  BText dump;
     1159  dump+="\n///////////////////////////////////////////////////////////////////////////////\n"; 
     1160  dump+=BText("Class ")+FullName()+"\n";
     1161  int n;
     1162  if(parentHash_)
     1163  {
     1164    BClassByNameHash::const_iterator iterC;
     1165    BClassByNameHash& par = *(parentHash_);
     1166    n=0;
     1167    for(iterC=par.begin(); iterC!=par.end(); iterC++, n++)
     1168    {
     1169      if(iterC->second)
     1170      {
     1171        if(n) { dump+=", "; }
     1172        else  { dump+=": "; }
     1173        dump += iterC->second->FullName();
     1174        n++;
     1175      }
     1176    }
     1177  }
     1178  dump+="\n///////////////////////////////////////////////////////////////////////////////\n"; 
     1179  if(ascentHash_)
     1180  {
     1181    BClassByNameHash::const_iterator iterC;
     1182    BClassByNameHash& par = *(ascentHash_);
     1183    n=0;
     1184    for(iterC=par.begin(); iterC!=par.end(); iterC++, n++)
     1185    {
     1186      if(!n)
     1187      {
     1188        dump+="\n/*\n"; 
     1189        dump += BText("Inherites directly or indirectly from these classes:\n  ");
     1190      }
     1191      if(iterC->second)
     1192      {
     1193        if(n) { dump+="\n  "; }
     1194        dump += iterC->second->FullName();
     1195        n++;
     1196      }
     1197    }
     1198    dump+="\n*/  \n"; 
     1199  } 
     1200  dump += BText("{\n  ");
     1201  if(memberHash_)
     1202  {
     1203    BMbrNumByNameHash::const_iterator iterM;
     1204    BMbrNumByNameHash& mbr = *(memberHash_);
     1205    n=0;
     1206    for(iterM=mbr.begin(); iterM!=mbr.end(); iterM++, n++)
     1207    {
     1208      if(iterM->second)
     1209      {
     1210        const BMember* mbr = iterM->second->member_;
     1211        if(!mbr) { continue; }
     1212        const BText& name = mbr->name_;
     1213        if((name[0]=='_')&&(name[1]!='.')) { continue; }
     1214        if(name.BeginWith("_.autodoc.member.")) { continue; }
     1215        if(n) { dump+=";\n"; }
     1216        BSyntaxObject* adm = FindStaticMember(BText("_.autodoc.member.")+name, false);
     1217        dump+="\n/* ////////////////////////////////////////////////////////////////////////////\n"; 
     1218        dump +=
     1219          BText((mbr->isStatic_)?"Static":"Non static")+ " "+
     1220          BText((mbr->isMethod_)?"method":"member")+
     1221          " defined at " + ((BClass*)(mbr->parent_))->FullName()+"\n";
     1222        if(adm) { dump+=Text(adm); }
     1223        dump+="\n//////////////////////////////////////////////////////////////////////////// */\n";
     1224        dump+=mbr->declaration_;
     1225        if(mbr->definition_.HasName() && !(mbr->isMethod_))
     1226        {
     1227          dump+=BText(" = ")+ mbr->definition_;
     1228        }
     1229        n++;
     1230      }
     1231    }
     1232  }
     1233  dump += BText("\n};\n");
     1234  return(dump);
    11551235}
    11561236//--------------------------------------------------------------------
    … …  
    15831663
    15841664//--------------------------------------------------------------------
    1585 BSyntaxObject* BClass::FindStaticMemeber(const BText& memberName, bool fullAccess) const
     1665BSyntaxObject* BClass::FindStaticMember(const BText& memberName, bool fullAccess) const
    15861666//--------------------------------------------------------------------
    15871667{
Note: See TracChangeset for help on using the changeset viewer.