/*
 Copyright 2019 Alain Dargelas
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
 
 http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 */

/* 
 * File:   DefParam.cpp
 * Author: alain
 * 
 * Created on January 7, 2018, 8:55 PM
 */

#include "../SourceCompile/SymbolTable.h"
#include "../Library/Library.h"
#include "FileContent.h"
#include "DefParam.h"

using namespace SURELOG;

DefParam::~DefParam () { }

std::string DefParam::getFullName() {
  std::string name;
  std::vector<std::string> chunks;
  DefParam* parent = this;
  while (parent)
    {
      chunks.push_back (parent->m_name);
      parent = parent->m_parent;
    }
  name = chunks[chunks.size() - 1];
  for (int i = chunks.size() - 2; i >= 0; i--)
    {
      name += "." + chunks[i];
    }
  return name;
}

