Sha256: a64b2c7325e6907390571c6f255ddc08d4fb6e33a481e76463e8e5434b352932

Contents?: true

Size: 841 Bytes

Versions: 11

Compression:

Stored size: 841 Bytes

Contents

# frozen_string_literal: true

require 'opal/nodes/module'

module Opal
  module Nodes
    class ClassNode < ModuleNode
      handle :class

      children :cid, :sup, :body

      def compile
        name, base = name_and_base
        helper :klass

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

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

          body_code = self.body_code
          empty_line

          line scope.to_vars
          line body_code
        end

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

      def super_code
        sup ? expr(sup) : 'null'
      end

      def body_code
        stmt(compiler.returns(body || s(:nil)))
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

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