Sha256: 03ad6649eb702fecec55b0b7fdfb6815cdd57a00084304d5b7e56019af361ba4

Contents?: true

Size: 957 Bytes

Versions: 7

Compression:

Stored size: 957 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 "  function $#{name}(){};"
        line "  var self = $#{name} = $klass($base, $super, '#{name}', $#{name});"

        in_scope do
          scope.name = name
          add_temp "#{scope.proto} = self.$$proto"
          add_temp '$nesting = [self].concat($parent_nesting)'

          body_code = self.body_code
          empty_line

          line scope.to_vars
          line body_code
        end

        line "})(", base, ", ", self.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

7 entries across 7 versions & 1 rubygems

Version Path
opal-0.11.4 lib/opal/nodes/class.rb
opal-0.11.3 lib/opal/nodes/class.rb
opal-0.11.2 lib/opal/nodes/class.rb
opal-0.11.1 lib/opal/nodes/class.rb
opal-0.11.1.pre lib/opal/nodes/class.rb
opal-0.11.0 lib/opal/nodes/class.rb
opal-0.11.0.rc1 lib/opal/nodes/class.rb