-
Elemer Lelik authoredElemer Lelik authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
CompField.cc 5.29 KiB
/******************************************************************************
* Copyright (c) 2000-2016 Ericsson Telecom AB
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Balasko, Jeno
* Raduly, Csaba
*
******************************************************************************/
#include "CompField.hh"
#include "Type.hh"
#include "Value.hh"
#include "CompilerError.hh"
namespace Common {
// =================================
// ===== CompField
// =================================
CompField::CompField(Identifier *p_name, Type *p_type, bool p_is_optional,
Value *p_defval)
: Node(), Location(), name(p_name), type(p_type),
is_optional(p_is_optional), defval(p_defval), rawattrib(0)
{
if(!p_name || !p_type)
FATAL_ERROR("NULL parameter: Common::CompField::CompField()");
type->set_ownertype(Type::OT_COMP_FIELD, this);
}
CompField::CompField(const CompField& p)
: Node(p), Location(p), is_optional(p.is_optional), rawattrib(0)
{
name=p.name->clone();
type=p.type->clone();
type->set_ownertype(Type::OT_COMP_FIELD, this);
defval=p.defval?p.defval->clone():0;
}
CompField::~CompField()
{
delete name;
delete type;
delete defval;
delete rawattrib;
}
CompField *CompField::clone() const
{
return new CompField(*this);
}
void CompField::set_fullname(const string& p_fullname)
{
string base_name(p_fullname + "." + name->get_dispname());
Node::set_fullname(base_name);
type->set_fullname(base_name);
if (defval) defval->set_fullname(base_name + ".<defval>");
}
void CompField::set_my_scope(Scope *p_scope)
{
type->set_my_scope(p_scope);
if (defval) defval->set_my_scope(p_scope);
}
void CompField::set_raw_attrib(RawAST* r_attr)