aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/interface/StandardCompiler.h
blob: fc9c3a59463a01c15276e4cbbe639a97e8926ef3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
    This file is part of solidity.

    solidity is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    solidity is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with solidity.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @author Alex Beregszaszi
 * @date 2016
 * Standard JSON compiler interface.
 */

#pragma once

#include <libsolidity/interface/CompilerStack.h>

namespace dev
{

namespace solidity
{

/**
 * Standard JSON compiler interface, which expects a JSON input and returns a JSON output.
 * See docs/using-the-compiler#compiler-input-and-output-json-description.
 */
class StandardCompiler: boost::noncopyable
{
public:
    /// Creates a new StandardCompiler.
    /// @param _readFile callback to used to read files for import statements. Must return
    /// and must not emit exceptions.
    explicit StandardCompiler(ReadCallback::Callback const& _readFile = ReadCallback::Callback())
        : m_compilerStack(_readFile), m_readFile(_readFile)
    {
    }

    /// Sets all input parameters according to @a _input which conforms to the standardized input
    /// format, performs compilation and returns a standardized output.
    Json::Value compile(Json::Value const& _input) noexcept;
    /// Parses input as JSON and peforms the above processing steps, returning a serialized JSON
    /// output. Parsing errors are returned as regular errors.
    std::string compile(std::string const& _input) noexcept;

private:
    Json::Value compileInternal(Json::Value const& _input);

    CompilerStack m_compilerStack;
    ReadCallback::Callback m_readFile;
};

}
}