/*
 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:   Scope.cpp
 * Author: alain
 * 
 * Created on August 31, 2019, 11:24 AM
 */

#include "Scope.h"

using namespace SURELOG;

Variable* Scope::getVariable(std::string name) {
  VariableMap::iterator itr = m_variables.find(name);
  if (itr == m_variables.end())
    {
      if (m_parentScope) 
        {
          Variable* var =  m_parentScope->getVariable(name);
          if (var)
            return var;
        }
      return NULL;
    }
  else 
    {
      return (*itr).second;
    }
}

DataType* Scope::getUsedDataType(const std::string& name) {
  DataTypeMap::iterator itr = m_usedDataTypes.find(name);
  if (itr == m_usedDataTypes.end ())
    {
        return NULL;
    }
  else 
    {
      return (*itr).second;
    }
}

