From 0ea5fc66924303d1bf73ba283a383e2aadee02f2 Mon Sep 17 00:00:00 2001 From: neodarz Date: Sat, 11 Aug 2018 20:21:34 +0200 Subject: Initial commit --- docs/doxygen/nel/var__control_8cpp-source.html | 724 +++++++++++++++++++++++++ 1 file changed, 724 insertions(+) create mode 100644 docs/doxygen/nel/var__control_8cpp-source.html (limited to 'docs/doxygen/nel/var__control_8cpp-source.html') diff --git a/docs/doxygen/nel/var__control_8cpp-source.html b/docs/doxygen/nel/var__control_8cpp-source.html new file mode 100644 index 00000000..d82e284d --- /dev/null +++ b/docs/doxygen/nel/var__control_8cpp-source.html @@ -0,0 +1,724 @@ + + + + nevrax.org : docs + + + + + + + + + + + + + + +
# Home   # nevrax.com   
+ + + + +
Nevrax
+ + + + + + + + + + +
+ + +
+ Nevrax.org
+ + + + + + + +
#News
#Mailing-list
#Documentation
#CVS
#Bugs
#License
+
+ + +
+ + +
+Docs + +
+  + + + + + +
Documentation 
+ +
+Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages   Search  
+

var_control.cpp

Go to the documentation of this file.
00001 
+00006 /* Copyright, 2000 Nevrax Ltd.
+00007  *
+00008  * This file is part of NEVRAX NEL.
+00009  * NEVRAX NEL is free software; you can redistribute it and/or modify
+00010  * it under the terms of the GNU General Public License as published by
+00011  * the Free Software Foundation; either version 2, or (at your option)
+00012  * any later version.
+00013 
+00014  * NEVRAX NEL is distributed in the hope that it will be useful, but
+00015  * WITHOUT ANY WARRANTY; without even the implied warranty of
+00016  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+00017  * General Public License for more details.
+00018 
+00019  * You should have received a copy of the GNU General Public License
+00020  * along with NEVRAX NEL; see the file COPYING. If not, write to the
+00021  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+00022  * MA 02111-1307, USA.
+00023  */
+00024 #include "nel/ai/script/compilateur.h"
+00025 #include "nel/ai/script/constraint.h"
+00026 #include "nel/ai/script/type_def.h"
+00027 #include "nel/ai/script/constraint_stack_component.h"
+00028 #include "nel/ai/script/object_unknown.h"
+00029 #include "nel/ai/agent/performative.h"
+00030 #include "nel/ai/script/param_container.h"
+00031 
+00032 namespace NLAISCRIPT
+00033 {
+00034         bool CCompilateur::caseRunMsg()
+00035         {
+00036                 if(isRunMsg && !haveReturn)
+00037                 {
+00038                         isRunMsg = false;
+00039                         char text[4096];
+00040                         strcpy(text,"run message methode must return an message value");
+00041                         yyerror(text);                  
+00042                         return false;
+00043                 }
+00044                 isRunMsg = false;
+00045                 haveReturn = false;
+00046                 return true;
+00047         }
+00048 
+00049         bool CCompilateur::classIsAnOperator()
+00050         {               
+00051                 return true;
+00052         }
+00053         
+00054         sint32 CCompilateur::castVariable(const NLAIAGENT::CStringVarName &v,NLAIAGENT::CStringVarName &t)
+00055         {
+00056                 NLAIAGENT::IObjectIA *var = getVar(v.getString());
+00057                 if(var != NULL)
+00058                 {
+00059                         try
+00060                         {
+00061                                 NLAIC::CIdentType id(t.getString());
+00062                                 IOpType * c= new COperandSimple(new NLAIC::CIdentType(id));
+00063                                 CObjectUnknown *o = (CObjectUnknown *)((CVarPStackParam *)var)->getObject();                            
+00064                                 o->setBaseType(c);
+00065                                 return true;
+00066                         }
+00067                         catch(NLAIE::IException &)
+00068                         {
+00069                                 std::string text;
+00070                                 text = NLAIC::stringGetBuild("can't find %s object in the class factory",t.getString());
+00071                                 yyerror((char *)text.c_str());
+00072                                 return false;
+00073                         }
+00074                         
+00075                 }
+00076                 else
+00077                 {
+00078                         yyerror("cast service is reseved to the local variable");
+00079                         return false;
+00080                 }               
+00081         }
+00082         sint32 CCompilateur::processingVar()
+00083         {
+00084                 if(_LasVarStr.size() >= 1)
+00085                 {
+00086                         NLAIAGENT::IObjectIA *var;
+00087                         var = getVar(_LasVarStr.front().data());
+00088                         if(_LasVarStr.size() == 1)
+00089                         {
+00090                                 if(var == NULL)
+00091                                 {
+00092                                         sint32 i = ((IClassInterpret *)_SelfClass.get())->getStaticMemberIndex(NLAIAGENT::CStringVarName(_LasVarStr.front().data()));
+00093                                         if(i >= 0)
+00094                                         {
+00095                                                 _LastFact.Member.clear();
+00096                                                 _LastFact.Member.push_back(i /*+ getCompementShift((IClassInterpret *)_SelfClass.get())*/);
+00097                                                 _LastFact.ValueVar = NULL;                                              
+00098                                                 _LastFact.VarType = varTypeMember;
+00099                                                 _LastFact.IsUsed = false;                                               
+00100                                                 try
+00101                                                 {                                                       
+00102                                                         if(_FlotingExpressionType != NULL) delete _FlotingExpressionType;
+00103                                                         _FlotingExpressionType = new COperandSimple(new NLAIC::CIdentType ((_SelfClass.get())->getStaticMember(i)->getType()));
+00104                                                 }
+00105                                                 catch(NLAIE::IException &a)
+00106                                                 {                                                       
+00107                                                         yyerror((char *)a.what());
+00108                                                         return 0;
+00109                                                 }
+00110                                         }
+00111                                         else
+00112                                         {
+00113                                                 if(_TypeList.size())
+00114                                                 {
+00115                                                         IOpType *type = _TypeList.back();
+00116                                                         _TypeList.pop_back();
+00117                                                         _LastFact.Member.clear();
+00118                                                         _LastFact.MemberName.clear();
+00119 
+00120                                                         if(_FlotingExpressionType != NULL) _FlotingExpressionType->release();
+00121 
+00122 
+00123                                                         if(type->satisfied())
+00124                                                         {
+00125                                                                 NLAIAGENT::IObjectIA *c = (NLAIAGENT::IObjectIA *)((NLAIC::IClassFactory *)type->getConstraintTypeOf()->getFactory())->getClass();
+00126                                                                 sint32 i = c->getStaticMemberIndex(NLAIAGENT::CStringVarName(_LasVarStr.front().data()));
+00127                                                                 if(i >= 0)
+00128                                                                 {       
+00129                                                                         /*if(((const NLAIC::CTypeOfObject &)*c->getType()) & NLAIC::CTypeOfObject::tAgentInterpret)
+00130                                                                         {
+00131                                                                                 _LastFact.Member.push_back(i + getCompementShift((IClassInterpret *)c));
+00132                                                                         }
+00133                                                                         else*/
+00134                                                                         {
+00135                                                                                 _LastFact.Member.push_back(i);
+00136                                                                         }
+00137                                                                         
+00138                                                                 }
+00139                                                                 else
+00140                                                                 {
+00141                                                                         type->release();                                                                        
+00142                                                                         yyerror("attribut is not define");
+00143                                                                         return 0;
+00144                                                                 }                                                                       
+00145                                                                 NLAIC::CIdentType *id = new NLAIC::CIdentType (c->getType());
+00146                                                                 _FlotingExpressionType = new COperandSimple(id);                                                                                                                                
+00147                                                                 type->release();
+00148                                                         }
+00149                                                         else
+00150                                                         {
+00151                                                                 _LastFact.MemberName = _LasVarStr;
+00152                                                                 type->incRef();
+00153                                                                 IOpType *constr = (IOpType *)getMethodConstraint(CConstraintStackComp(CConstraintStackComp::stackCall,0,_LastFact.MemberName ,type,0,0));
+00154                                                                 if(constr == NULL)
+00155                                                                 {
+00156                                                                         constr = new CConstraintStackComp(CConstraintStackComp::stackCall,0,_LastFact.MemberName,type,yyLine,yyColone);                                                                 
+00157                                                                 }
+00158                                                                 _FlotingExpressionType = constr;
+00159                                                         }                                                       
+00160 
+00161                                                         if(_LastFact.TypeStack) _LastFact.TypeStack->release();
+00162                                                         _LastFact.TypeStack = _FlotingExpressionType;
+00163                                                         _LastFact.TypeStack->incRef();
+00164                                                         _LastFact.ValueVar = NULL;      
+00165                                                         _LastFact.VarType = varTypeStackMember;
+00166                                                         _LastFact.IsUsed = false;
+00167                                                         
+00168                                                 }
+00169                                                 else 
+00170                                                 {
+00171                                                         yyerror("variable used but never declared");                                            
+00172                                                         return 0;
+00173                                                 }
+00174                                         }
+00175                                 }
+00176                                 else
+00177                                 {
+00178                                         _LastFact.ValueVar = var;
+00179                                         _LastFact.VarType = varTypeLocal;
+00180                                         _LastFact.IsUsed = false;
+00181                                         _LasVarStr.clear();                                     
+00182                                         if(var->getType() == CVarPStackParam::IdVarPStackParam)
+00183                                         {       
+00184                                                 if(_FlotingExpressionType != NULL) _FlotingExpressionType->release();
+00185                                                 try
+00186                                                 {
+00187                                                         _FlotingExpressionType = new COperandSimple(new NLAIC::CIdentType(((CVarPStackParam *)var)->getVarType()));
+00188                                                 }       
+00189                                                 catch(NLAIE::CExceptionUnReference &)
+00190                                                 {
+00191                                                         _FlotingExpressionType = (IOpType *)((const CObjectUnknown *)((CVarPStackParam *)var)->getObject())->getClassType();
+00192                                                         _FlotingExpressionType->incRef();
+00193                                                 }                                               
+00194                                         }
+00195                                         else
+00196                                         {                                                                                                       
+00197                                                 if(_FlotingExpressionType != NULL) _FlotingExpressionType->release();
+00198                                                 _FlotingExpressionType = new COperandSimple(new NLAIC::CIdentType(var->getType()));                                             
+00199                                         }                                       
+00200                                 }
+00201                         }
+00202                         else
+00203                         {
+00204 
+00205                                 CConstraintStackComp::OpCodeType opCodeType = CConstraintStackComp::stackCall;
+00206                                 sint32 posStack = 0;                            
+00207                                 NLAIAGENT::CStringVarName varName(_LasVarStr.back().data());
+00208                                 if(var != NULL)
+00209                                 {
+00210                                         _LasVarStr.pop_front();
+00211                                         IOpType *cont = (IOpType *)((const CObjectUnknown *)((CVarPStackParam *)var)->getObject())->getBaseType();
+00212                                         if(cont->satisfied())
+00213                                         {
+00214                                                 const NLAIC::CIdentType &id = *cont->getConstraintTypeOf();
+00215                                                 IClassInterpret *cl;
+00216 
+00217                                                 if(strcmp((const char *)id,((IClassInterpret *)_SelfClass.get())->getClassName()->getString()) == 0)
+00218                                                 {
+00219                                                         cl = (IClassInterpret *)_SelfClass.get();
+00220                                                 }
+00221                                                 else cl = (IClassInterpret *)((CClassInterpretFactory *)id.getFactory())->getClass();
+00222                                                 IOpType *c;                             
+00223                                                 _LastFact.Member.clear();
+00224                                                 if(!isValidateVarName(cl,_LastFact.Member,_LasVarStr,c))
+00225                                                 {
+00226                                                         if(c) c->release();
+00227                                                         std::string text;
+00228                                                         text = NLAIC::stringGetBuild("var '%s' is not define",varName.getString());
+00229                                                         yyerror((char *)text.c_str());
+00230                                                         return false;
+00231                                                 }                                               
+00232                                                 _FlotingExpressionType = c;
+00233                                                 if(_LastFact.TypeStack) _LastFact.TypeStack->release();
+00234                                                 _LastFact.TypeStack = _FlotingExpressionType;
+00235                                                 _LastFact.TypeStack->incRef();
+00236                                                 _LastFact.ValueVar = var;       
+00237                                                 _LastFact.VarType = varTypeHeapMember;
+00238                                                 _LastFact.IsUsed = false;
+00239 #ifdef NL_DEBUG
+00240         std::list<sint32>::iterator i_dbg = _LastFact.Member.begin();
+00241         while(i_dbg != _LastFact.Member.end())
+00242         {
+00243                 int k = *i_dbg++; 
+00244         }
+00245 
+00246 #endif
+00247                                                 return true;                                            
+00248                                         }
+00249                                         else
+00250                                         {
+00251                                                 opCodeType = CConstraintStackComp::heapCall;
+00252                                                 posStack = ((CVarPStackParam *)var)->getIndex();
+00253                                                 cont->incRef();
+00254                                                 _TypeList.push_back(cont);
+00255                                         }
+00256                                         
+00257                                 }
+00258 
+00259                                 if(!_TypeList.size())
+00260                                 {                               
+00261                                         _LastFact.Member.clear();
+00262                                         IOpType *c;                                     
+00263                                         if(!isValidateVarName(_LastFact.Member,_LasVarStr,c))
+00264                                         {
+00265                                                 if(c) c->release();
+00266                                                 std::string text;
+00267                                                 text = NLAIC::stringGetBuild("var '%s' is not define",varName.getString());
+00268                                                 yyerror((char *)text.c_str());
+00269                                                 return false;
+00270                                         }
+00271                                         _LastFact.ValueVar = NULL;                                              
+00272                                         _LastFact.VarType = varTypeMember;
+00273                                         _LastFact.IsUsed = false;
+00274                                         if(_FlotingExpressionType != NULL) _FlotingExpressionType->release();
+00275                                         _FlotingExpressionType = (IOpType *)c;
+00276                                 }
+00277                                 else
+00278                                 {
+00279                                         IOpType *type = _TypeList.back();
+00280                                         _TypeList.pop_back();
+00281                                         _LastFact.Member.clear();
+00282                                         _LastFact.MemberName.clear();
+00283 
+00284                                         if(_FlotingExpressionType != NULL) _FlotingExpressionType->release();
+00285                                         
+00286                                         if(type->satisfied())
+00287                                         {
+00288                                                 IClassInterpret *cl = (IClassInterpret *)type->getConstraintTypeOf()->allocClass();
+00289                                                 IOpType *c;
+00290                                                 if(!isValidateVarName(cl,_LastFact.Member,_LasVarStr,c))
+00291                                                 {
+00292                                                         if(c) c->release();
+00293                                                         type->release();
+00294                                                         cl->release();
+00295                                                         std::string text;
+00296                                                         text = NLAIC::stringGetBuild("var '%s' is not define",varName.getString());
+00297                                                         yyerror((char *)text.c_str());
+00298                                                         return false;
+00299                                                 }                                               
+00300                                                 _FlotingExpressionType = (IOpType *)c;
+00301                                                 type->release();
+00302                                                 cl->release();
+00303                                         }
+00304                                         else
+00305                                         {
+00306                                                 _LastFact.MemberName = _LasVarStr;
+00307                                                 type->incRef();
+00308                                                 IOpType *constr = (IOpType *)getMethodConstraint(CConstraintStackComp(opCodeType,posStack,_LastFact.MemberName ,type,0,0));
+00309                                                 if(constr == NULL)
+00310                                                 {
+00311                                                         constr = new CConstraintStackComp(opCodeType,posStack,_LastFact.MemberName,type,yyLine,yyColone);                                                                       
+00312                                                 }
+00313                                                 else
+00314                                                 {
+00315                                                         constr->incRef();
+00316                                                 }
+00317                                                 _FlotingExpressionType = constr;                                                
+00318                                         }                                       
+00319 
+00320                                         if(_LastFact.TypeStack) _LastFact.TypeStack->release();
+00321                                         _LastFact.TypeStack = _FlotingExpressionType;
+00322                                         _LastFact.TypeStack->incRef();
+00323                                         _LastFact.ValueVar = NULL;      
+00324                                         _LastFact.VarType = varTypeStackMember;
+00325                                         _LastFact.IsUsed = false;
+00326                                 }
+00327                         }
+00328                 }
+00329                 else
+00330                 {
+00331                         yyerror("erreur de definition de variable");
+00332                         return 0;
+00333                 }
+00334                 return true;
+00335         }
+00336         
+00337         bool CCompilateur::setParamVarName()
+00338         {
+00339                 try
+00340                 {
+00341                         NLAIC::CIdentType idType = getTypeOfClass(_LastString);
+00342                         NLAIAGENT::IObjectIA *i;
+00343 
+00344                         if(_BaseObjectDef)
+00345                         {                                               
+00346                                 NLAIC::CIdentType idBase = getTypeOfClass(_LastBaseObjectDef);
+00347                                 COperandSimple *t = new COperandSimple(new NLAIC::CIdentType(idType));
+00348                                 COperandSimple *b = new COperandSimple(new NLAIC::CIdentType(idBase));                  
+00349                                 _Param.back()->push(t);
+00350                                 t->incRef();                    
+00351                                 i = new CObjectUnknown(t,b);
+00352                         }
+00353                         else
+00354                         {                       
+00355                                 COperandSimple *c = new COperandSimple(new NLAIC::CIdentType(idType));
+00356                                 _Param.back()->push(c);
+00357                                 c->incRef();
+00358                                 i = new CObjectUnknown(c);//(NLAIAGENT::IObjectIA *)NLAIC::createInstance(id);
+00359                         }
+00360                                         
+00361                         NLAIAGENT::IVarName *s = new NLAIAGENT::CStringVarName (LastyyText[1]);
+00362                         _Attrib.push_back(pairType(s,i));
+00363                                         
+00364                         i->incRef();
+00365                         _Heap[(int)_Heap] = i;
+00366                         _Heap ++;
+00367                 }
+00368                 catch(NLAIE::IException &e)
+00369                 {
+00370                         std::string text;
+00371                         text = NLAIC::stringGetBuild("Bad reference or class reference undefined '%s'", e.what());
+00372                         yyerror((char *)text.c_str());
+00373                         return 0;
+00374                 }
+00375                 return true;
+00376                 
+00377         }
+00378 
+00379         void CCompilateur::addParamRuleCont()
+00380         {
+00381                 _LastBloc->addCode(new CLdbOpCode (NLAIAGENT::CGroupType()));
+00382         }
+00383 
+00384         void CCompilateur::addParamCont()
+00385         {
+00386                 _LastBloc->addCode(new CLdbOpCode (CPramContainer()));          
+00387         }
+00388 
+00389         void CCompilateur::pushParamExpression()
+00390         {
+00391                 _LastBloc->addCode((new CAddOpCode));
+00392                 _Param.back()->push(_ExpressionType);
+00393                 if(!_ExpressionType->satisfied())
+00394                 {
+00395                         _ConstraintType.push_back(_ExpressionType);
+00396                         _ExpressionType->incRef();
+00397                 }
+00398                 _ExpressionType = NULL;
+00399         }
+00400 
+00401         void CCompilateur::setPerformative(NLAIAGENT::IMessageBase::TPerformatif p)
+00402         {
+00403                 if(_LastFact.Value != NULL) 
+00404                                                         _LastFact.Value->release();
+00405                 switch(p)
+00406                 {
+00407                 case NLAIAGENT::IMessageBase::PExec:
+00408                         _LastFact.Value = new NLAIAGENT::CPExec();
+00409                         break;
+00410                 case NLAIAGENT::IMessageBase::PAchieve:
+00411                         _LastFact.Value = new NLAIAGENT::CPAchieve();
+00412                         break;
+00413                 case NLAIAGENT::IMessageBase::PAsk:
+00414                         _LastFact.Value = new NLAIAGENT::CPAsk();
+00415                         break;
+00416                 case NLAIAGENT::IMessageBase::PBreak:
+00417                         _LastFact.Value = new NLAIAGENT::CPBreak();
+00418                         break;
+00419                 case NLAIAGENT::IMessageBase::PTell:
+00420                         _LastFact.Value = new NLAIAGENT::CPTell();
+00421                         break;
+00422                 case NLAIAGENT::IMessageBase::PKill:
+00423                         _LastFact.Value = new NLAIAGENT::CPKill();
+00424                         break;
+00425                 case NLAIAGENT::IMessageBase::PError:
+00426                         _LastFact.Value = new NLAIAGENT::CPError();
+00427                         break;
+00428                 case NLAIAGENT::IMessageBase::PEven:
+00429                         _LastFact.Value = new NLAIAGENT::CPEven();
+00430                         break;
+00431                 default: break;
+00432                 }               
+00433                 _LastFact.VarType = varTypeImediate;
+00434                 _LastFact.IsUsed = false;               
+00435                 if(_FlotingExpressionType != NULL) _FlotingExpressionType->release();
+00436                 _FlotingExpressionType = new COperandSimple(new NLAIC::CIdentType(_LastFact.Value->getType()));
+00437         }
+00438 
+00439         void CCompilateur::setImediateVarNill()
+00440         {
+00441                 if(_LastFact.Value != NULL) 
+00442                                                         _LastFact.Value->release();
+00443                 
+00444                 _LastFact.Value = &NLAIAGENT::DigitalType::NullOperator;
+00445                 _LastFact.Value->incRef();
+00446                 _LastFact.VarType = varTypeImediate;
+00447                 _LastFact.IsUsed = false;               
+00448                 if(_FlotingExpressionType != NULL) _FlotingExpressionType->release();
+00449                 _FlotingExpressionType = new COperandSimple(new NLAIC::CIdentType(_LastFact.Value->getType()));
+00450         }
+00451 
+00452         void CCompilateur::setImediateVar()
+00453         {
+00454                 if(_LastFact.Value != NULL) 
+00455                                                         _LastFact.Value->release();
+00456                 _LastFact.Value = new NLAIAGENT::DDigitalType(LastyyNum);
+00457                 _LastFact.VarType = varTypeImediate;
+00458                 _LastFact.IsUsed = false;               
+00459                 if(_FlotingExpressionType != NULL) _FlotingExpressionType->release();
+00460                 _FlotingExpressionType = new COperandSimple(new NLAIC::CIdentType(_LastFact.Value->getType()));
+00461         }
+00462 
+00463         void CCompilateur::setListVar()
+00464         {
+00465                 _LastBloc->addCode(new CLdbOpCode (NLAIAGENT::CGroupType()));                                                           
+00466                 NLAIAGENT::CGroupType l;
+00467                 if(_FlotingExpressionType != NULL) _FlotingExpressionType->release();
+00468                 _FlotingExpressionType = new COperandSimple(new NLAIC::CIdentType(l.getType()));
+00469         }
+00470 
+00471         void CCompilateur::setChaineVar()
+00472         {
+00473                 if(_LastFact.Value != NULL) 
+00474                                                         _LastFact.Value->release();
+00475                 _LastFact.Value = new NLAIAGENT::CStringType(NLAIAGENT::CStringVarName(LastyyText[1]));         
+00476                 _LastFact.VarType = varTypeImediate;
+00477                 _LastFact.IsUsed = false;                                                               
+00478                 if(_FlotingExpressionType != NULL) _FlotingExpressionType->release();
+00479                 _FlotingExpressionType = new COperandSimple(new NLAIC::CIdentType(_LastFact.Value->getType()));
+00480         }
+00481 
+00482         void CCompilateur::setStackVar(const NLAIC::CIdentType &type)
+00483         {
+00484                 if(_LastFact.Value != NULL) 
+00485                                                         _LastFact.Value->release();
+00486                 _LastFact.VarType = varForFunc;
+00487                 _LastFact.IsUsed = false;                                                               
+00488                 if(_FlotingExpressionType != NULL) _FlotingExpressionType->release();
+00489                 _FlotingExpressionType = new COperandSimple(new NLAIC::CIdentType(type) );
+00490         }
+00491 
+00492         void CCompilateur::setMethodVar()
+00493         {
+00494 
+00495 #ifdef NL_DEBUG
+00496         std::string mName;
+00497         std::string pName;
+00498         _LastStringParam.back()->getDebugString(mName);
+00499         _Param.back()->getDebugString(pName);
+00500 #endif
+00501                 if(_LastFact.Value != NULL) 
+00502                                                         _LastFact.Value->release();
+00503                 _LastFact.Value = NULL;         
+00504                 _LastFact.VarType = varForFunc;
+00505                 _LastFact.IsUsed = false;               
+00506 
+00507                 if(_FlotingExpressionType != NULL)
+00508                 {
+00509                         _FlotingExpressionType->release();
+00510                         _FlotingExpressionType = NULL;
+00511                 }
+00512                 _LastStringParam.back()->incRef();
+00513                 _Param.back()->incRef();
+00514                 if(_LastbaseClass != NULL)_LastbaseClass->incRef();
+00515                 IConstraint *c = getMethodConstraint(CConstraintMethode((CConstraintMethode::TCallTypeOpCode) _LastTypeCall,_LastPosHeap,_LastbaseClass,_LastStringParam.back(),_Param.back(),0,0));
+00516                 if(c == NULL)
+00517                 {
+00518                         _LastStringParam.back()->incRef();
+00519                         _Param.back()->incRef();
+00520                         if(_LastbaseClass != NULL)_LastbaseClass->incRef();
+00521                         c = new CConstraintMethode((CConstraintMethode::TCallTypeOpCode) _LastTypeCall,_LastPosHeap,_LastbaseClass,_LastStringParam.back(),_Param.back(),yyLine,yyColone);
+00522                         _MethodConstraint.push_back(c);                 
+00523                 }
+00524                 c->incRef();            
+00525                 IConstraint *cm = new CConstraintChkMethodeType(c,0,0); 
+00526                 _FlotingExpressionType = new COperandUnknown(cm);                       
+00527                 
+00528                 _LastStringParam.back()->release();
+00529                 _LastStringParam.pop_back();
+00530                 _Param.back()->release();
+00531                 _Param.pop_back();
+00532 #ifdef NL_DEBUG
+00533         if(_LastStringParam.size()) _LastStringParam.back()->getDebugString(mName);
+00534         if(_Param.size())_Param.back()->getDebugString(pName);
+00535                 
+00536 #endif          
+00537         }
+00538 
+00539         bool CCompilateur::buildObject()
+00540         {                               
+00541                 NLAIAGENT::CStringType *s = (NLAIAGENT::CStringType *)_LastStringParam.back()->get();
+00542                 if(_LastStringParam.back()->size() == 1)
+00543                 {               
+00544                         
+00545                         try
+00546                         {
+00547                                 NLAIC::CIdentType id(s->getStr().getString());
+00548                                 if(_FlotingExpressionType) _FlotingExpressionType->release();
+00549                                 _FlotingExpressionType = new COperandSimple(new NLAIC::CIdentType (id));                                
+00550 
+00551                                 NLAIAGENT::IObjectIA *i = (NLAIAGENT::IObjectIA *)NLAIC::createInstance(id);
+00552                                 
+00553                                 _LastBloc->addCode( new CLdbOpCode( *i ) );
+00554                                 _LastBloc->addCode(new CHaltOpCode());
+00555                                 CBagOfCode *b = _LastBloc->getBagOfCode();
+00556                                 
+00557 
+00558                                 NLAIAGENT::IBaseGroupType *g = new NLAIAGENT::CGroupType();
+00559                                 g->cpy(NLAIAGENT::CStringType(NLAIAGENT::CStringVarName(_CONSTRUCTOR_)));
+00560 
+00561                                 _Param.back()->incRef();                                        
+00562                                 _FlotingExpressionType->incRef();
+00563                                 CConstraintMethode *cm = new CConstraintMethode(CConstraintMethode::newCall,0,_FlotingExpressionType,g,_Param.back(),0,0);
+00564                                 IConstraint *c = getMethodConstraint(*cm);                                      
+00565                                 if(c == NULL)
+00566                                 {
+00567                                         c = cm;
+00568                                         _MethodConstraint.push_back(c);                                         
+00569                                 }
+00570                                 else
+00571                                 {
+00572                                         cm->release();
+00573                                 }
+00574                                 b->addConstraint(c);
+00575                                 i->release();                           
+00576                                 _LastStringParam.back()->release();
+00577                                 _LastStringParam.pop_back();
+00578                                 _Param.back()->release();
+00579                                 _Param.pop_back();              
+00580                         }
+00581                         catch(NLAIE::IException &)
+00582                         {
+00583                                 std::string text;
+00584                                 text = NLAIC::stringGetBuild("can't find '%s'",s->getStr().getString());
+00585                                 yyerror((char *)text.c_str());  
+00586                                 return false;                                   
+00587                         }
+00588                         return true;
+00589                 }
+00590                 return false;
+00591         }
+00592 
+00593         void CCompilateur::setTypeExpression()
+00594         {
+00595                 if(_ExpressionType)
+00596                 {                                                               
+00597                         COperandUnknown *gd = new COperandUnknown(_ExpressionType);
+00598                         _ExpressionType = gd;
+00599                 }
+00600                 else
+00601                 {
+00602                         _ExpressionType = new COperandUnknown(_FlotingExpressionType);
+00603                         _FlotingExpressionType = NULL;
+00604                 }
+00605         }
+00606 
+00607         void CCompilateur::setTypeExpression(NLAIC::CTypeOfOperator::TTypeOp op,const char *txtOp)
+00608         {
+00609                 if ( _ExpressionType )
+00610                 {                                       
+00611                         COperationType *gd = new COperationType;
+00612                         gd->setOperand(_ExpressionType);
+00613                         gd->setOp(op);
+00614                         _ExpressionType = gd;
+00615                 }
+00616                 else
+00617                 {
+00618                         _ExpressionType = new COperationType;           
+00619                         ((COperationType *)_ExpressionType)->setOperand(_FlotingExpressionType);
+00620                         ((COperationType *)_ExpressionType)->setOp(op);
+00621                         _FlotingExpressionType = NULL;
+00622                 }
+00623         }
+00624         
+00625         void CCompilateur::setTypeExpressionG()
+00626         {               
+00627                 if(_ExpressionType)
+00628                 {                                       
+00629                         COperationTypeGD *gd = new COperationTypeGD;
+00630                         gd->setOperationG(_ExpressionType);
+00631                         _ExpressionType = gd;
+00632                 }
+00633                 else
+00634                 {
+00635                         _ExpressionType = new COperationTypeGD;
+00636                         ((COperationTypeGD *)_ExpressionType)->setOperationG(_FlotingExpressionType);
+00637                         _FlotingExpressionType = NULL;
+00638                 }
+00639                 _ExpressionOp.push_back(_ExpressionType);
+00640                 _ExpressionType = NULL;
+00641         }
+00642 
+00643         void CCompilateur::setTypeExpressionD(NLAIC::CTypeOfOperator::TTypeOp op,const char *txtOp)
+00644         {
+00645                 if(_ExpressionType != NULL && _FlotingExpressionType == NULL) _FlotingExpressionType = _ExpressionType;
+00646                 //else if(_ExpressionType == NULL && _FlotingExpressionType != NULL) _FlotingExpressionType = _ExpressionType;
+00647                 _ExpressionType = _ExpressionOp.back();
+00648                 _ExpressionOp.pop_back();
+00649 
+00650                 ((COperationTypeGD *)_ExpressionType)->setOperationD(_FlotingExpressionType);
+00651                 ((COperationTypeGD *)_ExpressionType)->setOp(op);
+00652                 _FlotingExpressionType = NULL;
+00653         }
+00654 }
+
+ + +
                                                                                                                                                                    +
+ + -- cgit v1.2.1