/*
 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:   TestbenchElaboration.h
 * Author: alain
 *
 * Created on February 6, 2019, 9:01 PM
 */

#ifndef TESTBENCHELABORATION_H
#define TESTBENCHELABORATION_H


#include "ElaborationStep.h"

namespace SURELOG  {
    class Variable;
    class Procedure;
class TestbenchElaboration : public ElaborationStep {
public:
    TestbenchElaboration(CompileDesign* compileDesign) : ElaborationStep(compileDesign) {}
    
    TestbenchElaboration(const TestbenchElaboration& orig);

    virtual ~TestbenchElaboration();

protected:

    bool      bindTypedefs_();
    bool      checkForMultipleDefinition_();
    bool      bindClasses_();
    bool      bindBaseClasses_();
    bool      bindDataTypes_();
    bool      bindFunctions_();
    bool      bindTasks_();
    bool      bindFunctionReturnTypesAndParamaters_();
    bool      bindFunctionBodies_();
    bool      bindSubRoutineCall_(ClassDefinition* classDefinition, Statement* stmt, Design* design, SymbolTable* symbols, ErrorContainer* errors);
    bool      bindForeachLoop_(ClassDefinition* classDefinition, Statement* stmt, ForeachLoopStmt* st);
    bool      bindForLoop_(ClassDefinition* classDefinition, Statement* stmt, ForLoopStmt* st);
    
};

}


#endif /* TESTBENCHELABORATION_H */


