1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
//@beginlicenses@
//@license{chiba-tokyo}{}@
//@license{contributors}{}@
//
// Copyright (C) 1997-2001 Shigeru Chiba, Tokyo Institute of Technology.
//
// Permission to use, copy, distribute and modify this software and
// its documentation for any purpose is hereby granted without fee,
// provided that the above copyright notice appears in all copies and that
// both that copyright notice and this permission notice appear in
// supporting documentation.
//
// Shigeru Chiba makes no representations about the suitability of this
// software for any purpose. It is provided "as is" without express or
// implied warranty.
//
// -----------------------------------------------------------------
//
// Permission to use, copy, distribute and modify this software and its
// documentation for any purpose is hereby granted without fee, provided that
// the above copyright notice appears in all copies and that both that copyright
// notice and this permission notice appear in supporting documentation.
//
// Other Contributors (see file AUTHORS) make(s) no representations about the suitability of this
// software for any purpose. It is provided "as is" without express or implied
// warranty.
//
// Copyright (C) Other Contributors (see file AUTHORS)
//
//@endlicenses@
#include <opencxx/TemplateClass.h>
#include <opencxx/Walker.h>
#include <opencxx/PtreeTypeUtil.h>
namespace Opencxx
{
void TemplateClass::InitializeInstance(Ptree* def, Ptree* margs)
{
Class::InitializeInstance(GetClassInTemplate(def), margs);
template_definition = def;
}
/*
This is needed because TemplateClass may be instantiated for a class.
*/
Ptree* TemplateClass::GetClassInTemplate(Ptree* def)
{
Ptree* decl = PtreeUtil::Nth(def, 4);
if(decl == 0)
return def;
Ptree* cdef = PtreeTypeUtil::GetClassTemplateSpec(decl);
if(cdef == 0)
return def;
else
return cdef;
}
bool TemplateClass::Initialize()
{
return true;
}
char* TemplateClass::MetaclassName()
{
return "TemplateClass";
}
Ptree* TemplateClass::TemplateArguments()
{
return PtreeUtil::Third(template_definition);
}
bool TemplateClass::AcceptTemplate()
{
return true;
}
/**
Translate a template instantiation.
*/
Ptree* TemplateClass::TranslateInstantiation(Environment*, Ptree* spec)
{
return spec;
}
}
|