Sha256: 35cf502ddd9a6c251dcb90a2440ffd18152ac91cb45cb280f143b6d1b1e284ea

Contents?: true

Size: 1.79 KB

Versions: 7

Compression:

Stored size: 1.79 KB

Contents

require_relative '../components/interpreters'
require_relative '../logic/interpreter'
require_relative 'state'
require_relative '../dsl/errors'

module Controller
  Interpreter = {
    handle!: ->(api, options = {}) {
      component = {}

      component[:interpreter] = Interpreter[:elect_interpreter!].(
        api, options
      )

      component = Interpreter[:build_meta!].(component, options)
      component = Interpreter[:build_runtime!].(api, component, options)

      component
    },

    build_meta!: ->(component, options) {
      component[:meta] = {
        options: options,
        elected: {
          interpreter: component[:interpreter][:version]
        },
        runtime: {}
      }

      component
    },

    build_runtime!: ->(api, component, _options) {
      state = State[:create!].(api[:api], component[:interpreter])[:state]

      result = State[:eval!].(
        api[:api], component[:interpreter], state, 'return _VERSION;'
      )

      is_jit = State[:get!].(
        api[:api], component[:interpreter], state, 'jit', 'version'
      )[:output]

      State[:destroy!].(api[:api], component[:interpreter], state)

      component[:meta][:runtime][:lua] = if is_jit
                                           "#{is_jit} (#{result[:output]})"
                                         else
                                           result[:output]
                                         end

      component
    },

    elect_interpreter!: ->(api, options) {
      result = Logic::Interpreter[:elect].(
        api[:signatures], api[:meta][:elected][:api_reference], options
      )

      unless result[:compatible]
        raise SweetMoon::Errors::SweetMoonError,
              result[:error]
      end

      return Component::Interpreters[result[:version]][:interpreter]
    }
  }
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
sweet-moon-0.0.7 controllers/interpreter.rb
sweet-moon-0.0.6 controllers/interpreter.rb
sweet-moon-0.0.5 controllers/interpreter.rb
sweet-moon-0.0.4 controllers/interpreter.rb
sweet-moon-0.0.3 controllers/interpreter.rb
sweet-moon-0.0.2 controllers/interpreter.rb
sweet-moon-0.0.1 controllers/interpreter.rb