Sha256: 81a4740ae1deb2e2068c026bd4d0bb83604a249cea97d657aae866e008348853

Contents?: true

Size: 1.02 KB

Versions: 7

Compression:

Stored size: 1.02 KB

Contents

# frozen_string_literal: true

require 'set'
require 'opal/nodes/base'

module Opal
  module Nodes
    class RuntimeHelpers < Base
      HELPERS = Set.new

      children :recvr, :meth, :arglist

      def self.s(type, *children)
        ::Opal::AST::Node.new(type, children)
      end

      def self.compatible?(recvr, meth)
        recvr == s(:const, nil, :Opal) && HELPERS.include?(meth.to_sym)
      end

      def self.helper(name, &block)
        HELPERS << name
        define_method("compile_#{name}", &block)
      end

      def compile
        if HELPERS.include?(meth.to_sym)
          __send__("compile_#{meth}")
        else
          raise "Helper not supported: #{meth}"
        end
      end

      helper :truthy? do
        unless sexp = arglist.children[0]
          raise 'truthy? requires an object'
        end

        js_truthy(sexp)
      end

      helper :falsy? do
        unless sexp = arglist.children[0]
          raise 'falsy? requires an object'
        end

        js_falsy(sexp)
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
opal-1.0.5 lib/opal/nodes/runtime_helpers.rb
opal-1.0.4 lib/opal/nodes/runtime_helpers.rb
opal-1.0.3 lib/opal/nodes/runtime_helpers.rb
opal-1.0.2 lib/opal/nodes/runtime_helpers.rb
opal-1.0.1 lib/opal/nodes/runtime_helpers.rb
opal-1.0.0 lib/opal/nodes/runtime_helpers.rb
opal-1.0.0.beta1 lib/opal/nodes/runtime_helpers.rb