Sha256: 7d8d243cb56d8570899402159b9c26317f0aa25f97fbdbe3d1c93e200b04650f

Contents?: true

Size: 1.03 KB

Versions: 7

Compression:

Stored size: 1.03 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, arglist)
        recvr == s(:const, nil, :Opal) and 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-0.11.4 lib/opal/nodes/runtime_helpers.rb
opal-0.11.3 lib/opal/nodes/runtime_helpers.rb
opal-0.11.2 lib/opal/nodes/runtime_helpers.rb
opal-0.11.1 lib/opal/nodes/runtime_helpers.rb
opal-0.11.1.pre lib/opal/nodes/runtime_helpers.rb
opal-0.11.0 lib/opal/nodes/runtime_helpers.rb
opal-0.11.0.rc1 lib/opal/nodes/runtime_helpers.rb