Sha256: a4785286baf6cf0449ca1b2b542d8f9463b291d08801960557ac6b687896a4cf

Contents?: true

Size: 906 Bytes

Versions: 11

Compression:

Stored size: 906 Bytes

Contents

# frozen_string_literal: true

require 'opal/nodes/scope'

module Opal
  module Nodes
    class ModuleNode < ScopeNode
      handle :module

      children :cid, :body

      def compile
        name, base = name_and_base
        helper :module

        push '(function($base, $parent_nesting) {'
        line "  var self = $module($base, '#{name}');"

        in_scope do
          scope.name = name
          add_temp '$nesting = [self].concat($parent_nesting)'

          body_code = stmt(body || s(:nil))
          empty_line

          line scope.to_vars
          line body_code
        end

        line '})(', base, ', $nesting)'
      end

      # cid is always s(:const, scope_sexp_or_nil, :ConstName)
      def name_and_base
        base, name = cid.children

        if base.nil?
          [name, '$nesting[0]']
        else
          [name, expr(base)]
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
opal-1.1.1 lib/opal/nodes/module.rb
opal-1.1.1.rc1 lib/opal/nodes/module.rb
opal-1.1.0 lib/opal/nodes/module.rb
opal-1.1.0.rc1 lib/opal/nodes/module.rb
opal-1.0.5 lib/opal/nodes/module.rb
opal-1.0.4 lib/opal/nodes/module.rb
opal-1.0.3 lib/opal/nodes/module.rb
opal-1.0.2 lib/opal/nodes/module.rb
opal-1.0.1 lib/opal/nodes/module.rb
opal-1.0.0 lib/opal/nodes/module.rb
opal-1.0.0.beta1 lib/opal/nodes/module.rb