mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-05 03:15:07 -04:00
169 lines
3.5 KiB
C++
169 lines
3.5 KiB
C++
/**
|
|
* PANDA 3D SOFTWARE
|
|
* Copyright (c) Carnegie Mellon University. All rights reserved.
|
|
*
|
|
* All use of this software is subject to the terms of the revised BSD
|
|
* license. You should have received a copy of this license along
|
|
* with this source code in a file named "LICENSE."
|
|
*
|
|
* @file cppTemplateScope.cxx
|
|
* @author drose
|
|
* @date 1999-10-28
|
|
*/
|
|
|
|
#include "cppTemplateScope.h"
|
|
#include "cppExtensionType.h"
|
|
#include "cppClassTemplateParameter.h"
|
|
#include "cppIdentifier.h"
|
|
#include "cppTypedefType.h"
|
|
|
|
/**
|
|
*
|
|
*/
|
|
CPPTemplateScope::
|
|
CPPTemplateScope(CPPScope *parent_scope) :
|
|
CPPScope(parent_scope, CPPNameComponent("template"), V_public)
|
|
{
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void CPPTemplateScope::
|
|
add_declaration(CPPDeclaration *decl, CPPScope *global_scope,
|
|
CPPPreprocessor *preprocessor,
|
|
const cppyyltype &pos) {
|
|
decl->_template_scope = this;
|
|
assert(_parent_scope != NULL);
|
|
_parent_scope->add_declaration(decl, global_scope, preprocessor, pos);
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void CPPTemplateScope::
|
|
add_enum_value(CPPInstance *inst) {
|
|
inst->_template_scope = this;
|
|
assert(_parent_scope != NULL);
|
|
_parent_scope->add_enum_value(inst);
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void CPPTemplateScope::
|
|
define_typedef_type(CPPTypedefType *type, CPPPreprocessor *error_sink) {
|
|
type->_template_scope = this;
|
|
assert(_parent_scope != NULL);
|
|
_parent_scope->define_typedef_type(type, error_sink);
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void CPPTemplateScope::
|
|
define_extension_type(CPPExtensionType *type, CPPPreprocessor *error_sink) {
|
|
type->_template_scope = this;
|
|
assert(_parent_scope != NULL);
|
|
_parent_scope->define_extension_type(type, error_sink);
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void CPPTemplateScope::
|
|
define_namespace(CPPNamespace *scope) {
|
|
assert(_parent_scope != NULL);
|
|
_parent_scope->define_namespace(scope);
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void CPPTemplateScope::
|
|
add_using(CPPUsing *using_decl, CPPScope *global_scope,
|
|
CPPPreprocessor *error_sink) {
|
|
assert(_parent_scope != NULL);
|
|
_parent_scope->add_using(using_decl, global_scope, error_sink);
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void CPPTemplateScope::
|
|
add_template_parameter(CPPDeclaration *param) {
|
|
_parameters._parameters.push_back(param);
|
|
CPPClassTemplateParameter *cl = param->as_class_template_parameter();
|
|
if (cl != NULL) {
|
|
// Create an implicit typedef for this class parameter.
|
|
string name = cl->_ident->get_local_name();
|
|
_types[name] = cl;
|
|
}
|
|
|
|
CPPInstance *inst = param->as_instance();
|
|
if (inst != NULL) {
|
|
// Register the variable for this value parameter.
|
|
string name = inst->get_local_name();
|
|
if (!name.empty()) {
|
|
_variables[name] = inst;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns true if this declaration is an actual, factual declaration, or
|
|
* false if some part of the declaration depends on a template parameter which
|
|
* has not yet been instantiated.
|
|
*/
|
|
bool CPPTemplateScope::
|
|
is_fully_specified() const {
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
string CPPTemplateScope::
|
|
get_simple_name() const {
|
|
assert(_parent_scope != NULL);
|
|
return _parent_scope->get_simple_name();
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
string CPPTemplateScope::
|
|
get_local_name(CPPScope *scope) const {
|
|
assert(_parent_scope != NULL);
|
|
return _parent_scope->get_local_name(scope);
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
string CPPTemplateScope::
|
|
get_fully_scoped_name() const {
|
|
assert(_parent_scope != NULL);
|
|
return _parent_scope->get_fully_scoped_name();
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void CPPTemplateScope::
|
|
output(ostream &out, CPPScope *scope) const {
|
|
CPPScope::output(out, scope);
|
|
out << "< ";
|
|
_parameters.output(out, scope);
|
|
out << " >";
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
CPPTemplateScope *CPPTemplateScope::
|
|
as_template_scope() {
|
|
return this;
|
|
}
|