ROOT logo
/* /% C++ %/ */
/***********************************************************************
 * cint (C/C++ interpreter)
 ************************************************************************
 * Source file Method.cxx
 ************************************************************************
 * Description:
 *  Extended Run Time Type Identification API
 ************************************************************************
 * Author                  Masaharu Goto
 * Copyright(c) 1995~2005  Masaharu Goto
 *
 * For the licensing terms see the file COPYING
 *
 ************************************************************************/

#include "Api.h"
#include "Dict.h"
#include "common.h"
#include "fproto.h"

using namespace Cint::Internal;
using namespace std;

//______________________________________________________________________________
static char G__buf[G__LONGLINE];

//______________________________________________________________________________
Cint::G__MethodInfo::~G__MethodInfo()
{
   delete fClassInfo;
   fClassInfo = 0;
   delete fTypeInfo;
   fTypeInfo = 0;
}

//______________________________________________________________________________
Cint::G__MethodInfo::G__MethodInfo() : fIndex(0), fUsingIndex(0), fClassInfo(0), fTypeInfo(0)
{
   Init();
}

//______________________________________________________________________________
Cint::G__MethodInfo::G__MethodInfo(G__ClassInfo& a) : fIndex(0), fUsingIndex(0), fClassInfo(0), fTypeInfo(0)
{
   Init(a);
}

//______________________________________________________________________________
Cint::G__MethodInfo::G__MethodInfo(const G__MethodInfo& mi) : fScope(mi.fScope), fIndex(mi.fIndex), fUsingIndex(mi.fUsingIndex), fClassInfo(0), fFunc(mi.fFunc), fTypeInfo(0)
{
}

#if 0
//______________________________________________________________________________
Cint::G__MethodInfo::G__MethodInfo(const ::Reflex::Member& m) : fScope(m.DeclaringScope()), fFunc(m), fIndex(-1), fUsingIndex(0), fClassInfo(0), fTypeInfo(0)
{
}
#endif // 0

//______________________________________________________________________________
G__MethodInfo& Cint::G__MethodInfo::operator=(const G__MethodInfo& mi)
{
   if (this != &mi) {
      fScope = mi.fScope;
      fIndex = mi.fIndex;
      fUsingIndex = mi.fUsingIndex;
      fClassInfo = 0;
      fFunc = mi.fFunc;
      fTypeInfo = 0;
   }
   return *this;
}

//______________________________________________________________________________
void Cint::G__MethodInfo::Init()
{
   fScope = ::Reflex::Scope::GlobalScope();
   fIndex = -1;
   fUsingIndex = -1;
   delete fClassInfo;
   fClassInfo = 0;
   fFunc = ::Reflex::Member();
   delete fTypeInfo;
   fTypeInfo = 0;
}

//______________________________________________________________________________
void Cint::G__MethodInfo::Init(G__ClassInfo& a)
{
   fScope = Reflex::Scope();
   fIndex = -1;
   fUsingIndex = -1;
   delete fClassInfo;
   fClassInfo = 0;
   fFunc = ::Reflex::Member();
   delete fTypeInfo;
   fTypeInfo = 0;
   if (a.IsValid()) {
      fScope = G__Dict::GetDict().GetScope((int) a.Tagnum());
      G__incsetup_memfunc((int) a.Tagnum());
   }
}

//______________________________________________________________________________
void Cint::G__MethodInfo::Init(long handlein, long indexin, G__ClassInfo* /*belongingclassin*/)
{
   fScope = Reflex::Scope();
   fIndex = -1;
   fUsingIndex = -1;
   delete fClassInfo;
   fClassInfo = 0;
   fFunc = Reflex::Member();
   delete fTypeInfo;
   fTypeInfo = 0;
   if (handlein) {
      fFunc = ::Reflex::Member(reinterpret_cast<const Reflex::MemberBase*>(handlein));
      fScope = fFunc.DeclaringScope();
      fIndex = indexin;
      //fClassInfo = new G__ClassInfo(belongingclassin);
      fClassInfo = new G__ClassInfo(G__get_tagnum(fScope)); // FIXME: What if fScope is the global scope?
      // TODO: Remove use of friendship.
      ::Reflex::Type ty = fFunc.TypeOf().ReturnType();
      fTypeInfo = new G__TypeInfo();
      G__get_cint5_type_tuple_long(ty, &fTypeInfo->fType, &fTypeInfo->fTagnum, &fTypeInfo->fTypenum, &fTypeInfo->fReftype, &fTypeInfo->fIsconst);
      fTypeInfo->fClassProperty = 0L;
   }
}

//______________________________________________________________________________
void Cint::G__MethodInfo::Init(G__ClassInfo* belongingclassin, long funcpage, long /*indexin*/)
{
   delete fClassInfo;
   fClassInfo = 0;
   fScope = Reflex::Scope::GlobalScope();
   if (belongingclassin && belongingclassin->IsValid()) { // member function
      fScope = G__Dict::GetDict().GetScope(belongingclassin->Tagnum());
   }
   delete fTypeInfo;
   fTypeInfo = 0;
   fFunc = fScope.FunctionMemberAt(funcpage);
   if (fFunc) {
      fIndex = funcpage;
   }
   else {
      fScope = Reflex::Scope();
      fFunc = Reflex::Member();
      fIndex = -1;
   }
}

//______________________________________________________________________________
const char* Cint::G__MethodInfo::Name()
{
   if (IsValid()) {
      strcpy(G__buf, fFunc.Name().c_str()); // FIXME: Possible buffer overflow here!
      return G__buf;
   }
   return 0;
}

//______________________________________________________________________________
int Cint::G__MethodInfo::Hash()
{
   if (IsValid()) {
      return 0; // FIXME: Should we caculate the hash code here?
   }
   return 0;
}

//______________________________________________________________________________
G__ifunc_table* Cint::G__MethodInfo::ifunc()
{
   if (IsValid()) {
      return (G__ifunc_table*) fScope.Id();
   }
   return 0;
}

//______________________________________________________________________________
long Cint::G__MethodInfo::Handle()
{
   return (long) fScope.Id();
}

#if 0
//______________________________________________________________________________
::Reflex::Member Cint::G__MethodInfo::ReflexFunction() const
{
   return fFunc;
}
#endif // 0

//______________________________________________________________________________
int Cint::G__MethodInfo::Index()
{
   return (int) fIndex;
}

//______________________________________________________________________________
const char* Cint::G__MethodInfo::Title()
{
   static char buf[G__INFO_TITLELEN];
   buf[0] = '\0';
   if (IsValid()) {
      G__getcomment(buf, &G__get_funcproperties(fFunc)->comment, G__get_tagnum(fScope));
      return buf;
   }
   return 0;
}

//______________________________________________________________________________
G__TypeInfo* Cint::G__MethodInfo::Type()
{
   if (!fTypeInfo) {
      // TODO: Remove use of friendship.
      ::Reflex::Type ty = fFunc.TypeOf().ReturnType();
      fTypeInfo = new G__TypeInfo();
      G__get_cint5_type_tuple_long(ty, &fTypeInfo->fType, &fTypeInfo->fTagnum, &fTypeInfo->fTypenum, &fTypeInfo->fReftype, &fTypeInfo->fIsconst);
      fTypeInfo->fClassProperty = 0L;
   }
   return fTypeInfo;
}

//______________________________________________________________________________
long Cint::G__MethodInfo::Property()
{
   if (!IsValid()) {
      return 0;
   }
   long property = 0L;
   switch (G__get_access(fFunc)) {
      case G__PUBLIC:
         property |= G__BIT_ISPUBLIC;
         break;
      case G__PROTECTED:
         property |= G__BIT_ISPROTECTED;
         break;
      case G__PRIVATE:
         property |= G__BIT_ISPRIVATE;
         break;
   }
   if (G__get_isconst(fFunc.TypeOf()) & G__CONSTFUNC) {
      property |= (G__BIT_ISCONSTANT | G__BIT_ISMETHCONSTANT);
   }
   if (G__get_isconst(fFunc.TypeOf()) & G__CONSTVAR) {
      property |= G__BIT_ISCONSTANT;
   }
   if (G__get_isconst(fFunc.TypeOf()) & G__PCONSTVAR) {
      property |= G__BIT_ISPCONSTANT;
   }
   if (isupper(G__get_type(fFunc.TypeOf().ReturnType()))) {
      property |= G__BIT_ISPOINTER;
   }
   if (fFunc.IsStatic()) {
      property |= G__BIT_ISSTATIC;
   }
   if (fFunc.IsVirtual()) {
      property |= G__BIT_ISVIRTUAL;
   }
   if (fFunc.IsAbstract()) {
      property |= G__BIT_ISPUREVIRTUAL;
   }
   if (G__get_funcproperties(fFunc)->entry.size < 0) {
      property |= G__BIT_ISCOMPILED;
   }
   if (G__get_funcproperties(fFunc)->entry.bytecode) {
      property |= G__BIT_ISBYTECODE;
   }
   if (fFunc.IsExplicit()) {
      property |= G__BIT_ISEXPLICIT;
   }
   return property;
}

//______________________________________________________________________________
int Cint::G__MethodInfo::NArg()
{
   if (IsValid()) {
      return fFunc.FunctionParameterSize();
   }
   return -1;
}

//______________________________________________________________________________
int Cint::G__MethodInfo::NDefaultArg()
{
   if (IsValid()) {
      return fFunc.FunctionParameterSize() - fFunc.FunctionParameterSize(true);
   }
   return -1;
}

//______________________________________________________________________________
int Cint::G__MethodInfo::HasVarArgs()
{
   if (IsValid()) {
      return (2 == G__get_funcproperties(fFunc)->entry.ansi ? 1 : 0);
   }
   return -1;
}

//______________________________________________________________________________
G__InterfaceMethod Cint::G__MethodInfo::InterfaceMethod()
{
   G__LockCriticalSection();
   if (IsValid()) {
      int ret = G__get_funcproperties(fFunc)->entry.size;
      if (ret == -1) { // this means compiled class
         G__UnlockCriticalSection();
         return (G__InterfaceMethod) G__get_funcproperties(fFunc)->entry.p; // FIXME: Wrong, cannot unlock before fetching value!!!
      }
      else {
         G__UnlockCriticalSection();
         return 0;
      }
   }
   G__UnlockCriticalSection();
   return 0;
}

#ifdef G__ASM_WHOLEFUNC
//______________________________________________________________________________
G__bytecodefunc* G__MethodInfo::GetBytecode()
{
   if (IsValid()) {
      int store_asm_loopcompile = G__asm_loopcompile;
      G__asm_loopcompile = 4;
      if (
         !G__get_funcproperties(fFunc)->entry.bytecode &&
         (G__get_funcproperties(fFunc)->entry.size != -1) &&
         (G__get_funcproperties(fFunc)->entry.bytecodestatus == G__BYTECODE_NOTYET) &&
         (G__asm_loopcompile > 3)
      ) {
         G__compile_function_bytecode(fFunc);
      }
      G__asm_loopcompile = store_asm_loopcompile;
      return G__get_funcproperties(fFunc)->entry.bytecode;
   }
   return 0;
}
#endif // G__ASM_WHOLEFUNC

//______________________________________________________________________________
Cint::G__DataMemberInfo Cint::G__MethodInfo::GetLocalVariable()
{
   G__DataMemberInfo localvar;
   localvar.Init(0L, -1L, 0);
   if (!IsValid()) {
      return localvar;
   }
   int store_fixedscope = G__fixedscope;
   G__xrefflag = 1;
   G__fixedscope = 1;
   G__bytecodefunc* pbc = GetBytecode();
   G__xrefflag = 0;
   G__fixedscope = store_fixedscope;
   if (!pbc) {
      if (Property() & G__BIT_ISCOMPILED) {
         G__fprinterr(G__serr, "Limitation: can not get local variable information for compiled function %s\n", Name());
      }
      else {
         G__fprinterr(G__serr, "Limitation: function %s , failed to get local variable information\n", Name());
      }
      return localvar;
   }
   localvar.Init((long) pbc->frame.Id(), -1L, 0);
   return localvar;
}

#ifdef G__TRUEP2F
//______________________________________________________________________________
void* Cint::G__MethodInfo::PointerToFunc()
{
   if (IsValid()) {
      if (
         (G__get_funcproperties(fFunc)->entry.size != -1) &&
         (G__get_funcproperties(fFunc)->entry.bytecodestatus == G__BYTECODE_NOTYET) &&
         (G__asm_loopcompile > 3)
      ) {
         G__compile_function_bytecode(fFunc);
      }
      if (G__get_funcproperties(fFunc)->entry.bytecodestatus == G__BYTECODE_SUCCESS) {
         return (void*) G__get_funcproperties(fFunc)->entry.bytecode;
      }
      return G__get_funcproperties(fFunc)->entry.tp2f;
   }
   return 0;
}
#endif // G__TRUEP2F

//______________________________________________________________________________
G__ClassInfo* Cint::G__MethodInfo::MemberOf()
{
   // Return a G__ClassInfo representing the declaring fScope.
   if (!fClassInfo) {
      fClassInfo = new G__ClassInfo(G__get_tagnum(fScope)); // FIXME: What if fScope is the global scope?
   }
   return fClassInfo;
}

//______________________________________________________________________________
int Cint::G__MethodInfo::GetDefiningScopeTagnum()
{
   if (IsValid()) {
      return G__get_tagnum(fFunc.DeclaringScope());
   }
   return -1;
}

//______________________________________________________________________________
G__friendtag* Cint::G__MethodInfo::GetFriendInfo()
{
   if (IsValid()) {
      return G__get_funcproperties(fFunc)->entry.friendtag;
   }
   return 0;
}

//______________________________________________________________________________
void Cint::G__MethodInfo::SetGlobalcomp(int globalcomp)
{
   if (IsValid()) {
      G__get_funcproperties(fFunc)->globalcomp = globalcomp;
   }
}

//______________________________________________________________________________
void Cint::G__MethodInfo::SetForceStub()
{
   // FIXME: This needs to be implemented!
}

//______________________________________________________________________________
int Cint::G__MethodInfo::IsValid()
{
   return (bool) fFunc;
}

//______________________________________________________________________________
int Cint::G__MethodInfo::SetFilePos(const char* fname)
{
   G__dictposition* dict = G__get_dictpos((char*)fname);
   if (!dict) {
      return 0;
   }
   fIndex = dict->ifn - 1;
   delete fClassInfo;
   fClassInfo = 0;
   fScope = dict->ifunc;
   delete fTypeInfo;
   fTypeInfo = 0;
   fFunc = fScope.DataMemberAt(fIndex);
   return 1;
}

//______________________________________________________________________________
int Cint::G__MethodInfo::Next()
{
   if (!fScope) {
      return 0;
   }
   if ((fIndex == -1) && fFunc) {
      for (fIndex = 0; fIndex < (int) fScope.FunctionMemberSize(); ++fIndex) {
         if (fFunc == fScope.FunctionMemberAt(fIndex)) {
            break;
         }
      }
   }
   ++fIndex;
   delete fTypeInfo;
   fTypeInfo = 0;
   if (fIndex < (int) fScope.FunctionMemberSize()) {
      fFunc = fScope.FunctionMemberAt(fIndex);
   }
   else {
      fIndex = -1;
      fFunc = ::Reflex::Member();
   }
   if (!fFunc && !fScope && (fUsingIndex < G__globalusingnamespace.basen)) {
      ++fUsingIndex;
      G__incsetup_memfunc(G__globalusingnamespace.basetagnum[fUsingIndex]);
      delete fClassInfo;
      fClassInfo = 0;
      fScope = G__Dict::GetDict().GetScope(G__globalusingnamespace.basetagnum[fUsingIndex]);
      return Next();
   }
   return (bool) fFunc;
}

//______________________________________________________________________________
const char* Cint::G__MethodInfo::FileName()
{
   if (IsValid()) {
      if (G__get_funcproperties(fFunc)->filenum >= 0) {
         return G__srcfile[G__get_funcproperties(fFunc)->filenum].filename;
      }
      return "(compiled)";
   }
   return 0;
}

//______________________________________________________________________________
int Cint::G__MethodInfo::LineNumber()
{
   if (IsValid()) {
      if (
         (G__get_funcproperties(fFunc)->filenum >= 0) &&
         (G__get_funcproperties(fFunc)->entry.size >= 0)
      ) {
         return G__get_funcproperties(fFunc)->linenum;
      }
      return 0;
   }
   return -1;
}

//______________________________________________________________________________
int Cint::G__MethodInfo::Size()
{
   if (IsValid()) {
      if (G__get_funcproperties(fFunc)->entry.size >= 0) {
         return G__get_funcproperties(fFunc)->entry.size;
      }
      return 0;
   }
   return -1;
}

//______________________________________________________________________________
int Cint::G__MethodInfo::IsBusy()
{
   if (IsValid()) {
      return G__get_funcproperties(fFunc)->entry.busy;
   }
   return -1;
}

//______________________________________________________________________________
FILE* Cint::G__MethodInfo::FilePointer()
{
   if (IsValid()) {
      if (
         (G__get_funcproperties(fFunc)->filenum >= 0) &&
         (G__get_funcproperties(fFunc)->entry.size >= 0)
      ) {
         return(G__srcfile[G__get_funcproperties(fFunc)->filenum].fp);
      }
   }
   return 0;
}

//______________________________________________________________________________
long Cint::G__MethodInfo::FilePosition()
{
   // returns  'type fname(type p1,type p2)'
   //                      ^
   long invalid = 0L;
   if (IsValid()) {
      if (
         (G__get_funcproperties(fFunc)->filenum >= 0) &&
         (G__get_funcproperties(fFunc)->entry.size >= 0)
      ) {
         // --
#if defined(G__NONSCALARFPOS2)
         return (long) G__get_funcproperties(fFunc)->entry.pos.__pos;
#elif defined(G__NONSCALARFPOS_QNX)
         return (long) G__get_funcproperties(fFunc)->entry.pos._Off;
#else // G__NONSCALARFPOSxxx
         return (long) G__get_funcproperties(fFunc)->entry.pos;
#endif // G__NONSCALARFPOSxxx
         // --
      }
   }
   return invalid;
}

//______________________________________________________________________________
char* Cint::G__MethodInfo::GetPrototype()
{
   if (!IsValid()) {
      return 0;
   }
   strcpy(G__buf, Type()->Name());
   strcat(G__buf, " ");
   if (fScope && !fScope.IsTopScope()) {
      strcat(G__buf, fScope.Name(::Reflex::SCOPED).c_str());
      strcat(G__buf, "::");
   }
   strcat(G__buf, fFunc.Name().c_str());
   strcat(G__buf, "(");
   G__MethodArgInfo arg(*this);
   int flag = 0;
   while (arg.Next()) {
      if (flag) strcat(G__buf, ",");
      flag = 1;
      strcat(G__buf, arg.Type()->Name());
      strcat(G__buf, " ");
      if (arg.Name()) strcat(G__buf, arg.Name());
      if (arg.DefaultValue()) {
         strcat(G__buf, "=");
         strcat(G__buf, arg.DefaultValue());
      }
   }
   strcat(G__buf, ")");
   return G__buf;
}

//______________________________________________________________________________
char* Cint::G__MethodInfo::GetMangledName()
{
   if (!IsValid()) {
      return 0;
   }
   return G__map_cpp_name(GetPrototype());
}

//______________________________________________________________________________
int Cint::G__MethodInfo::LoadDLLDirect(const char* filename, const char* funcname)
{
   void* p2f = G__FindSym(filename, funcname);
   if (p2f) {
      G__RflxFuncProperties* prop = G__get_funcproperties(fFunc);
      prop->entry.tp2f = p2f;
      prop->entry.p = (void*) G__DLL_direct_globalfunc;
      prop->entry.size = -1;
      prop->linenum = -1;
      return 1;
   }
   return 0;
}

//______________________________________________________________________________
void Cint::G__MethodInfo::SetVtblIndex(int vtblindex)
{
   if (!IsValid()) {
      return;
   }
   G__get_funcproperties(fFunc)->entry.vtblindex = (short) vtblindex;
}

//______________________________________________________________________________
void Cint::G__MethodInfo::SetIsVirtual(int /*isvirtual*/)
{
   if (!IsValid()) {
      return;
   }
   fprintf(stderr, "Cint::G__MethodInfo::SetIsVirtual: Reflex is read-only\n");
   assert(0); // FIXME: Production code should never just abort!  Error message, error codes, something.
   //ifunc->isvirtual[index] = isvirtual;
}

//______________________________________________________________________________
void Cint::G__MethodInfo::SetVtblBasetagnum(int basetagnum)
{
   if (!IsValid()) {
      return;
   }
   G__get_funcproperties(fFunc)->entry.vtblbasetagnum = (short) basetagnum;
}

//______________________________________________________________________________
void Cint::G__MethodInfo::SetUserParam(void* user)
{
   if (IsValid()) {
      G__get_funcproperties(fFunc)->entry.userparam = user;
   }
}

//______________________________________________________________________________
void* Cint::G__MethodInfo::GetUserParam()
{
   if (IsValid()) {
      return G__get_funcproperties(fFunc)->entry.userparam;
   }
   return 0;
}

//______________________________________________________________________________
long Cint::G__MethodInfo::GetThisPointerOffset()
{
   // Return: Return the this-pointer offset, to adjust it in case of non left-most multiple inheritance
   if (IsValid()) {
      return G__get_funcproperties(fFunc)->entry.ptradjust;
   }
   return 0;
}

//______________________________________________________________________________
//______________________________________________________________________________
//
//  FIXME: What are these functions doing in this file?
//

//______________________________________________________________________________
int Cint::G__SetGlobalcomp(char* funcname, char* param, int globalcomp)
{
   G__ClassInfo globalscope;
   G__MethodInfo method;
   long dummy = 0;
   G__StrBuf classname_sb(G__LONGLINE);
   char* classname = classname_sb;
   // Actually find the last :: to get the full classname, including
   // namespace and/or containing classes.
   strcpy(classname, funcname);
   char* fname = 0;
   char* tmp = classname;
   while ((tmp = strstr(tmp, "::"))) {
      fname = tmp;
      tmp += 2;
   }
   if (fname) {
      *fname = 0;
      fname += 2;
      globalscope.Init(classname);
   }
   else {
      fname = funcname;
   }
   if (!strcmp(fname, "*")) {
      method.Init(globalscope);
      while (method.Next()) {
         method.SetGlobalcomp(globalcomp);
      }
      return 0;
   }
   method = globalscope.GetMethod(fname, param, &dummy);
   if (method.IsValid()) {
      method.SetGlobalcomp(globalcomp);
      return 0;
   }
   G__fprinterr(G__serr, "Warning: #pragma link, function %s(%s) not found", fname, param);
   G__printlinenum();
   return 1;
}

//______________________________________________________________________________
int Cint::G__ForceBytecodecompilation(char* funcname, char* param)
{
   G__ClassInfo globalscope;
   G__MethodInfo method;
   long dummy = 0;
   G__StrBuf classname_sb(G__LONGLINE);
   char* classname = classname_sb;
   // Actually find the last :: to get the full classname, including
   // namespace and/or containing classes.
   strcpy(classname, funcname);
   char* fname = 0;
   char* tmp = classname;
   while ((tmp = strstr(tmp, "::"))) {
      fname = tmp;
      tmp += 2;
   }
   if (fname) {
      *fname = 0;
      fname += 2;
      globalscope.Init(classname);
   }
   else {
      fname = funcname;
   }
   method = globalscope.GetMethod(fname, param, &dummy);
   if (method.IsValid()) {
      G__ifunc_table* ifunc = method.ifunc();
      int ifn = method.Index();
      int stat;
      int store_asm_loopcompile = G__asm_loopcompile;
      int store_asm_loopcompile_mode = G__asm_loopcompile_mode;
      G__asm_loopcompile_mode = G__asm_loopcompile = 4;
      stat = G__compile_bytecode(ifunc, ifn);
      G__asm_loopcompile = store_asm_loopcompile;
      G__asm_loopcompile_mode = store_asm_loopcompile_mode;
      if (stat) {
         return 0;
      }
      return 1;
   }
   G__fprinterr(G__serr, "Warning: function %s(%s) not found", fname, param);
   G__printlinenum();
   return 1;
}

 Method.cxx:1
 Method.cxx:2
 Method.cxx:3
 Method.cxx:4
 Method.cxx:5
 Method.cxx:6
 Method.cxx:7
 Method.cxx:8
 Method.cxx:9
 Method.cxx:10
 Method.cxx:11
 Method.cxx:12
 Method.cxx:13
 Method.cxx:14
 Method.cxx:15
 Method.cxx:16
 Method.cxx:17
 Method.cxx:18
 Method.cxx:19
 Method.cxx:20
 Method.cxx:21
 Method.cxx:22
 Method.cxx:23
 Method.cxx:24
 Method.cxx:25
 Method.cxx:26
 Method.cxx:27
 Method.cxx:28
 Method.cxx:29
 Method.cxx:30
 Method.cxx:31
 Method.cxx:32
 Method.cxx:33
 Method.cxx:34
 Method.cxx:35
 Method.cxx:36
 Method.cxx:37
 Method.cxx:38
 Method.cxx:39
 Method.cxx:40
 Method.cxx:41
 Method.cxx:42
 Method.cxx:43
 Method.cxx:44
 Method.cxx:45
 Method.cxx:46
 Method.cxx:47
 Method.cxx:48
 Method.cxx:49
 Method.cxx:50
 Method.cxx:51
 Method.cxx:52
 Method.cxx:53
 Method.cxx:54
 Method.cxx:55
 Method.cxx:56
 Method.cxx:57
 Method.cxx:58
 Method.cxx:59
 Method.cxx:60
 Method.cxx:61
 Method.cxx:62
 Method.cxx:63
 Method.cxx:64
 Method.cxx:65
 Method.cxx:66
 Method.cxx:67
 Method.cxx:68
 Method.cxx:69
 Method.cxx:70
 Method.cxx:71
 Method.cxx:72
 Method.cxx:73
 Method.cxx:74
 Method.cxx:75
 Method.cxx:76
 Method.cxx:77
 Method.cxx:78
 Method.cxx:79
 Method.cxx:80
 Method.cxx:81
 Method.cxx:82
 Method.cxx:83
 Method.cxx:84
 Method.cxx:85
 Method.cxx:86
 Method.cxx:87
 Method.cxx:88
 Method.cxx:89
 Method.cxx:90
 Method.cxx:91
 Method.cxx:92
 Method.cxx:93
 Method.cxx:94
 Method.cxx:95
 Method.cxx:96
 Method.cxx:97
 Method.cxx:98
 Method.cxx:99
 Method.cxx:100
 Method.cxx:101
 Method.cxx:102
 Method.cxx:103
 Method.cxx:104
 Method.cxx:105
 Method.cxx:106
 Method.cxx:107
 Method.cxx:108
 Method.cxx:109
 Method.cxx:110
 Method.cxx:111
 Method.cxx:112
 Method.cxx:113
 Method.cxx:114
 Method.cxx:115
 Method.cxx:116
 Method.cxx:117
 Method.cxx:118
 Method.cxx:119
 Method.cxx:120
 Method.cxx:121
 Method.cxx:122
 Method.cxx:123
 Method.cxx:124
 Method.cxx:125
 Method.cxx:126
 Method.cxx:127
 Method.cxx:128
 Method.cxx:129
 Method.cxx:130
 Method.cxx:131
 Method.cxx:132
 Method.cxx:133
 Method.cxx:134
 Method.cxx:135
 Method.cxx:136
 Method.cxx:137
 Method.cxx:138
 Method.cxx:139
 Method.cxx:140
 Method.cxx:141
 Method.cxx:142
 Method.cxx:143
 Method.cxx:144
 Method.cxx:145
 Method.cxx:146
 Method.cxx:147
 Method.cxx:148
 Method.cxx:149
 Method.cxx:150
 Method.cxx:151
 Method.cxx:152
 Method.cxx:153
 Method.cxx:154
 Method.cxx:155
 Method.cxx:156
 Method.cxx:157
 Method.cxx:158
 Method.cxx:159
 Method.cxx:160
 Method.cxx:161
 Method.cxx:162
 Method.cxx:163
 Method.cxx:164
 Method.cxx:165
 Method.cxx:166
 Method.cxx:167
 Method.cxx:168
 Method.cxx:169
 Method.cxx:170
 Method.cxx:171
 Method.cxx:172
 Method.cxx:173
 Method.cxx:174
 Method.cxx:175
 Method.cxx:176
 Method.cxx:177
 Method.cxx:178
 Method.cxx:179
 Method.cxx:180
 Method.cxx:181
 Method.cxx:182
 Method.cxx:183
 Method.cxx:184
 Method.cxx:185
 Method.cxx:186
 Method.cxx:187
 Method.cxx:188
 Method.cxx:189
 Method.cxx:190
 Method.cxx:191
 Method.cxx:192
 Method.cxx:193
 Method.cxx:194
 Method.cxx:195
 Method.cxx:196
 Method.cxx:197
 Method.cxx:198
 Method.cxx:199
 Method.cxx:200
 Method.cxx:201
 Method.cxx:202
 Method.cxx:203
 Method.cxx:204
 Method.cxx:205
 Method.cxx:206
 Method.cxx:207
 Method.cxx:208
 Method.cxx:209
 Method.cxx:210
 Method.cxx:211
 Method.cxx:212
 Method.cxx:213
 Method.cxx:214
 Method.cxx:215
 Method.cxx:216
 Method.cxx:217
 Method.cxx:218
 Method.cxx:219
 Method.cxx:220
 Method.cxx:221
 Method.cxx:222
 Method.cxx:223
 Method.cxx:224
 Method.cxx:225
 Method.cxx:226
 Method.cxx:227
 Method.cxx:228
 Method.cxx:229
 Method.cxx:230
 Method.cxx:231
 Method.cxx:232
 Method.cxx:233
 Method.cxx:234
 Method.cxx:235
 Method.cxx:236
 Method.cxx:237
 Method.cxx:238
 Method.cxx:239
 Method.cxx:240
 Method.cxx:241
 Method.cxx:242
 Method.cxx:243
 Method.cxx:244
 Method.cxx:245
 Method.cxx:246
 Method.cxx:247
 Method.cxx:248
 Method.cxx:249
 Method.cxx:250
 Method.cxx:251
 Method.cxx:252
 Method.cxx:253
 Method.cxx:254
 Method.cxx:255
 Method.cxx:256
 Method.cxx:257
 Method.cxx:258
 Method.cxx:259
 Method.cxx:260
 Method.cxx:261
 Method.cxx:262
 Method.cxx:263
 Method.cxx:264
 Method.cxx:265
 Method.cxx:266
 Method.cxx:267
 Method.cxx:268
 Method.cxx:269
 Method.cxx:270
 Method.cxx:271
 Method.cxx:272
 Method.cxx:273
 Method.cxx:274
 Method.cxx:275
 Method.cxx:276
 Method.cxx:277
 Method.cxx:278
 Method.cxx:279
 Method.cxx:280
 Method.cxx:281
 Method.cxx:282
 Method.cxx:283
 Method.cxx:284
 Method.cxx:285
 Method.cxx:286
 Method.cxx:287
 Method.cxx:288
 Method.cxx:289
 Method.cxx:290
 Method.cxx:291
 Method.cxx:292
 Method.cxx:293
 Method.cxx:294
 Method.cxx:295
 Method.cxx:296
 Method.cxx:297
 Method.cxx:298
 Method.cxx:299
 Method.cxx:300
 Method.cxx:301
 Method.cxx:302
 Method.cxx:303
 Method.cxx:304
 Method.cxx:305
 Method.cxx:306
 Method.cxx:307
 Method.cxx:308
 Method.cxx:309
 Method.cxx:310
 Method.cxx:311
 Method.cxx:312
 Method.cxx:313
 Method.cxx:314
 Method.cxx:315
 Method.cxx:316
 Method.cxx:317
 Method.cxx:318
 Method.cxx:319
 Method.cxx:320
 Method.cxx:321
 Method.cxx:322
 Method.cxx:323
 Method.cxx:324
 Method.cxx:325
 Method.cxx:326
 Method.cxx:327
 Method.cxx:328
 Method.cxx:329
 Method.cxx:330
 Method.cxx:331
 Method.cxx:332
 Method.cxx:333
 Method.cxx:334
 Method.cxx:335
 Method.cxx:336
 Method.cxx:337
 Method.cxx:338
 Method.cxx:339
 Method.cxx:340
 Method.cxx:341
 Method.cxx:342
 Method.cxx:343
 Method.cxx:344
 Method.cxx:345
 Method.cxx:346
 Method.cxx:347
 Method.cxx:348
 Method.cxx:349
 Method.cxx:350
 Method.cxx:351
 Method.cxx:352
 Method.cxx:353
 Method.cxx:354
 Method.cxx:355
 Method.cxx:356
 Method.cxx:357
 Method.cxx:358
 Method.cxx:359
 Method.cxx:360
 Method.cxx:361
 Method.cxx:362
 Method.cxx:363
 Method.cxx:364
 Method.cxx:365
 Method.cxx:366
 Method.cxx:367
 Method.cxx:368
 Method.cxx:369
 Method.cxx:370
 Method.cxx:371
 Method.cxx:372
 Method.cxx:373
 Method.cxx:374
 Method.cxx:375
 Method.cxx:376
 Method.cxx:377
 Method.cxx:378
 Method.cxx:379
 Method.cxx:380
 Method.cxx:381
 Method.cxx:382
 Method.cxx:383
 Method.cxx:384
 Method.cxx:385
 Method.cxx:386
 Method.cxx:387
 Method.cxx:388
 Method.cxx:389
 Method.cxx:390
 Method.cxx:391
 Method.cxx:392
 Method.cxx:393
 Method.cxx:394
 Method.cxx:395
 Method.cxx:396
 Method.cxx:397
 Method.cxx:398
 Method.cxx:399
 Method.cxx:400
 Method.cxx:401
 Method.cxx:402
 Method.cxx:403
 Method.cxx:404
 Method.cxx:405
 Method.cxx:406
 Method.cxx:407
 Method.cxx:408
 Method.cxx:409
 Method.cxx:410
 Method.cxx:411
 Method.cxx:412
 Method.cxx:413
 Method.cxx:414
 Method.cxx:415
 Method.cxx:416
 Method.cxx:417
 Method.cxx:418
 Method.cxx:419
 Method.cxx:420
 Method.cxx:421
 Method.cxx:422
 Method.cxx:423
 Method.cxx:424
 Method.cxx:425
 Method.cxx:426
 Method.cxx:427
 Method.cxx:428
 Method.cxx:429
 Method.cxx:430
 Method.cxx:431
 Method.cxx:432
 Method.cxx:433
 Method.cxx:434
 Method.cxx:435
 Method.cxx:436
 Method.cxx:437
 Method.cxx:438
 Method.cxx:439
 Method.cxx:440
 Method.cxx:441
 Method.cxx:442
 Method.cxx:443
 Method.cxx:444
 Method.cxx:445
 Method.cxx:446
 Method.cxx:447
 Method.cxx:448
 Method.cxx:449
 Method.cxx:450
 Method.cxx:451
 Method.cxx:452
 Method.cxx:453
 Method.cxx:454
 Method.cxx:455
 Method.cxx:456
 Method.cxx:457
 Method.cxx:458
 Method.cxx:459
 Method.cxx:460
 Method.cxx:461
 Method.cxx:462
 Method.cxx:463
 Method.cxx:464
 Method.cxx:465
 Method.cxx:466
 Method.cxx:467
 Method.cxx:468
 Method.cxx:469
 Method.cxx:470
 Method.cxx:471
 Method.cxx:472
 Method.cxx:473
 Method.cxx:474
 Method.cxx:475
 Method.cxx:476
 Method.cxx:477
 Method.cxx:478
 Method.cxx:479
 Method.cxx:480
 Method.cxx:481
 Method.cxx:482
 Method.cxx:483
 Method.cxx:484
 Method.cxx:485
 Method.cxx:486
 Method.cxx:487
 Method.cxx:488
 Method.cxx:489
 Method.cxx:490
 Method.cxx:491
 Method.cxx:492
 Method.cxx:493
 Method.cxx:494
 Method.cxx:495
 Method.cxx:496
 Method.cxx:497
 Method.cxx:498
 Method.cxx:499
 Method.cxx:500
 Method.cxx:501
 Method.cxx:502
 Method.cxx:503
 Method.cxx:504
 Method.cxx:505
 Method.cxx:506
 Method.cxx:507
 Method.cxx:508
 Method.cxx:509
 Method.cxx:510
 Method.cxx:511
 Method.cxx:512
 Method.cxx:513
 Method.cxx:514
 Method.cxx:515
 Method.cxx:516
 Method.cxx:517
 Method.cxx:518
 Method.cxx:519
 Method.cxx:520
 Method.cxx:521
 Method.cxx:522
 Method.cxx:523
 Method.cxx:524
 Method.cxx:525
 Method.cxx:526
 Method.cxx:527
 Method.cxx:528
 Method.cxx:529
 Method.cxx:530
 Method.cxx:531
 Method.cxx:532
 Method.cxx:533
 Method.cxx:534
 Method.cxx:535
 Method.cxx:536
 Method.cxx:537
 Method.cxx:538
 Method.cxx:539
 Method.cxx:540
 Method.cxx:541
 Method.cxx:542
 Method.cxx:543
 Method.cxx:544
 Method.cxx:545
 Method.cxx:546
 Method.cxx:547
 Method.cxx:548
 Method.cxx:549
 Method.cxx:550
 Method.cxx:551
 Method.cxx:552
 Method.cxx:553
 Method.cxx:554
 Method.cxx:555
 Method.cxx:556
 Method.cxx:557
 Method.cxx:558
 Method.cxx:559
 Method.cxx:560
 Method.cxx:561
 Method.cxx:562
 Method.cxx:563
 Method.cxx:564
 Method.cxx:565
 Method.cxx:566
 Method.cxx:567
 Method.cxx:568
 Method.cxx:569
 Method.cxx:570
 Method.cxx:571
 Method.cxx:572
 Method.cxx:573
 Method.cxx:574
 Method.cxx:575
 Method.cxx:576
 Method.cxx:577
 Method.cxx:578
 Method.cxx:579
 Method.cxx:580
 Method.cxx:581
 Method.cxx:582
 Method.cxx:583
 Method.cxx:584
 Method.cxx:585
 Method.cxx:586
 Method.cxx:587
 Method.cxx:588
 Method.cxx:589
 Method.cxx:590
 Method.cxx:591
 Method.cxx:592
 Method.cxx:593
 Method.cxx:594
 Method.cxx:595
 Method.cxx:596
 Method.cxx:597
 Method.cxx:598
 Method.cxx:599
 Method.cxx:600
 Method.cxx:601
 Method.cxx:602
 Method.cxx:603
 Method.cxx:604
 Method.cxx:605
 Method.cxx:606
 Method.cxx:607
 Method.cxx:608
 Method.cxx:609
 Method.cxx:610
 Method.cxx:611
 Method.cxx:612
 Method.cxx:613
 Method.cxx:614
 Method.cxx:615
 Method.cxx:616
 Method.cxx:617
 Method.cxx:618
 Method.cxx:619
 Method.cxx:620
 Method.cxx:621
 Method.cxx:622
 Method.cxx:623
 Method.cxx:624
 Method.cxx:625
 Method.cxx:626
 Method.cxx:627
 Method.cxx:628
 Method.cxx:629
 Method.cxx:630
 Method.cxx:631
 Method.cxx:632
 Method.cxx:633
 Method.cxx:634
 Method.cxx:635
 Method.cxx:636
 Method.cxx:637
 Method.cxx:638
 Method.cxx:639
 Method.cxx:640
 Method.cxx:641
 Method.cxx:642
 Method.cxx:643
 Method.cxx:644
 Method.cxx:645
 Method.cxx:646
 Method.cxx:647
 Method.cxx:648
 Method.cxx:649
 Method.cxx:650
 Method.cxx:651
 Method.cxx:652
 Method.cxx:653
 Method.cxx:654
 Method.cxx:655
 Method.cxx:656
 Method.cxx:657
 Method.cxx:658
 Method.cxx:659
 Method.cxx:660
 Method.cxx:661
 Method.cxx:662
 Method.cxx:663
 Method.cxx:664
 Method.cxx:665
 Method.cxx:666
 Method.cxx:667
 Method.cxx:668
 Method.cxx:669
 Method.cxx:670
 Method.cxx:671
 Method.cxx:672
 Method.cxx:673
 Method.cxx:674
 Method.cxx:675
 Method.cxx:676
 Method.cxx:677
 Method.cxx:678
 Method.cxx:679
 Method.cxx:680
 Method.cxx:681
 Method.cxx:682
 Method.cxx:683
 Method.cxx:684
 Method.cxx:685
 Method.cxx:686
 Method.cxx:687
 Method.cxx:688
 Method.cxx:689
 Method.cxx:690
 Method.cxx:691
 Method.cxx:692
 Method.cxx:693
 Method.cxx:694
 Method.cxx:695
 Method.cxx:696
 Method.cxx:697
 Method.cxx:698
 Method.cxx:699
 Method.cxx:700
 Method.cxx:701
 Method.cxx:702
 Method.cxx:703
 Method.cxx:704
 Method.cxx:705
 Method.cxx:706
 Method.cxx:707
 Method.cxx:708
 Method.cxx:709
 Method.cxx:710
 Method.cxx:711
 Method.cxx:712
 Method.cxx:713
 Method.cxx:714
 Method.cxx:715
 Method.cxx:716
 Method.cxx:717
 Method.cxx:718
 Method.cxx:719
 Method.cxx:720
 Method.cxx:721
 Method.cxx:722
 Method.cxx:723
 Method.cxx:724
 Method.cxx:725
 Method.cxx:726
 Method.cxx:727
 Method.cxx:728
 Method.cxx:729
 Method.cxx:730
 Method.cxx:731
 Method.cxx:732
 Method.cxx:733
 Method.cxx:734
 Method.cxx:735
 Method.cxx:736
 Method.cxx:737
 Method.cxx:738
 Method.cxx:739
 Method.cxx:740
 Method.cxx:741
 Method.cxx:742
 Method.cxx:743
 Method.cxx:744
 Method.cxx:745
 Method.cxx:746
 Method.cxx:747
 Method.cxx:748
 Method.cxx:749
 Method.cxx:750
 Method.cxx:751
 Method.cxx:752
 Method.cxx:753
 Method.cxx:754
 Method.cxx:755
 Method.cxx:756
 Method.cxx:757
 Method.cxx:758
 Method.cxx:759
 Method.cxx:760
 Method.cxx:761
 Method.cxx:762
 Method.cxx:763
 Method.cxx:764
 Method.cxx:765
 Method.cxx:766
 Method.cxx:767
 Method.cxx:768
 Method.cxx:769
 Method.cxx:770
 Method.cxx:771
 Method.cxx:772
 Method.cxx:773
 Method.cxx:774
 Method.cxx:775
 Method.cxx:776
 Method.cxx:777
 Method.cxx:778
 Method.cxx:779
 Method.cxx:780
 Method.cxx:781
 Method.cxx:782