/*
 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:   Task.h
 * Author: alain
 *
 * Created on February 21, 2019, 8:19 PM
 */

#ifndef TASK_H
#define TASK_H
#include <string>
#include "../SourceCompile/SymbolTable.h"
#include "../Design/FileContent.h"
#include "Function.h"

namespace SURELOG {

class Task : public Procedure {
public:
    Task(DesignComponent* parent, FileContent* fC, NodeId id, std::string name) : Procedure(parent, fC, id, name) {}
    bool    compile(CompileHelper& compile_helper);
    virtual ~Task();
private:
};

};

#endif /* TASK_H */


