View in context in the libbitcoin Slack #general mirror.
interpreter::run() method, which runs the script:
TEMPLATE
code CLASS::
run() NOEXCEPT
{
// Enforce initial limits, determine early success or failure.
if (const auto ec = state::initialize())
return (ec == error::prevalid_script) ? error::script_success : ec;
for (auto it = state::begin(); it != state::end(); ++it)
{
const auto& op = *it;
if (op.is_oversized())
return error::invalid_push_data_size;
if (!state::ops_increment(op))
return error::invalid_operation_count;
if (state::if_(op))
{
if (const auto ec = run_op(it))
return ec;
if (state::is_stack_overflow())
return error::invalid_stack_size;
}
}
return state::is_balanced() ? error::script_success :
error::invalid_stack_scope;
}