/*
 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:   VObject.cpp
 * Author: alain
 *
 * Created on June 14, 2017, 10:58 PM
 */
#include <string>
#include "SourceCompile/SymbolTable.h"
#include "Design/VObject.h"

using namespace SURELOG;

VObject::~VObject() {}

std::string VObject::print(SymbolTable* symbols, unsigned int uniqueId,
                           NodeId definitionFile) {
  std::string text;
  std::string symbol = symbols->getSymbol(m_name);
  if (symbol == symbols->getBadSymbol()) {
    text += "n<>";
  } else {
    text = "n<" + symbols->getSymbol(m_name) + ">";
  }

  text += " ";
  text += "u<" + std::to_string(uniqueId) + ">";
  text += " ";
  std::string type = getTypeName(m_type);
  type.erase(0, 2);
  text += "t<" + type + ">";
  if (m_parent) {
    text += " ";
    text += "p<" + std::to_string(m_parent) + ">";
  }
  if (m_definition) {
    text += " ";
    text += "d<" + std::to_string(m_definition) + ">";
  }
  if (definitionFile) {
    text += " ";
    text += "df<" + std::to_string(definitionFile) + ">";
  }
  if (m_child) {
    text += " ";
    text += "c<" + std::to_string(m_child) + ">";
  }
  if (m_sibling) {
    text += " ";
    text += "s<" + std::to_string(m_sibling) + ">";
  }
  text += " ";
  text += "l<" + std::to_string(m_line) + ">";
  return text;
}
