Sha256: 650c5039bf6228d0fd01bf44f1d0709dd7ae874ba6523cb4995cceb694d12943

Contents?: true

Size: 1.68 KB

Versions: 18

Compression:

Stored size: 1.68 KB

Contents

//
// Created by Alex Snaps on 2016-11-29.
//

#include "script_runner.hpp"
#include "error.hpp"
#include <mruby/proc.h>

script_runner::script_runner(me_mruby_engine &engine, timer &timer)
    : engine_(engine), timer_(timer) { }

bool script_runner::run(script_data &script, data_writer &writer, unsigned int instruction_quota_start) {
  auto success = true;
  mruby_data_writer engine_writer(writer, engine_, script.size());
  try {
    engine_.limit_instructions = !instruction_quota_start;
    mrb_value value;
    {
      auto timing = timer_.measure("decode");
      value = script.input(engine_);
    }
    {
      auto t2 = timer_.measure("inject");
      engine_.inject("@input", value);
    }

    {
      auto timing = timer_.measure("lib");
      auto &data = script.library();
      if (data.size() > 0) {
        engine_.load_instruction_sequence(data);
      }
    }

    unsigned int index = 0;
    for (auto &&source : script.sources()) {
      if (++index > instruction_quota_start && !engine_.limit_instructions) {
        engine_.limit_instructions = true;
      }
      try {
        RProc *pProc;
        {
          auto timing = timer_.measure("compile");
          pProc = engine_.generate_code(source);
        }

        {
          auto timing = timer_.measure("eval");
          engine_.eval(pProc);
        }
      } catch (error_base &err) {
        success = false;
        err.pack_into(writer.packer);
      }
    }

    {
      auto timing = timer_.measure("out");
      engine_writer.emit_output();
    }
  } catch (error_base &err) {
    engine_.limit_instructions = true;
    err.pack_into(writer.packer);
    return false;
  }

  engine_.limit_instructions = true;
  return success;
}

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
script_core-0.3.2 ext/enterprise_script_service/script_runner.cpp
script_core-0.3.0 ext/enterprise_script_service/script_runner.cpp
script_core-0.2.7 ext/enterprise_script_service/script_runner.cpp
script_core-0.2.6 ext/enterprise_script_service/script_runner.cpp
script_core-0.2.5 ext/enterprise_script_service/script_runner.cpp
script_core-0.2.4 ext/enterprise_script_service/script_runner.cpp
script_core-0.2.3 ext/enterprise_script_service/script_runner.cpp
script_core-0.2.2 ext/enterprise_script_service/script_runner.cpp
script_core-0.2.1 ext/enterprise_script_service/script_runner.cpp
script_core-0.2.0 ext/enterprise_script_service/script_runner.cpp
script_core-0.1.1 ext/enterprise_script_service/script_runner.cpp
script_core-0.1.0 ext/enterprise_script_service/script_runner.cpp
script_core-0.0.6 ext/enterprise_script_service/script_runner.cpp
script_core-0.0.5 ext/enterprise_script_service/script_runner.cpp
script_core-0.0.4 ext/enterprise_script_service/script_runner.cpp
script_core-0.0.3 ext/enterprise_script_service/script_runner.cpp
script_core-0.0.2 ext/enterprise_script_service/script_runner.cpp
script_core-0.0.1 ext/enterprise_script_service/script_runner.cpp