Sha256: f9ede68523cd982615b1e843eaa51c9cec4e35f8a89f6fa93413fc8e22322a8d

Contents?: true

Size: 886 Bytes

Versions: 2

Compression:

Stored size: 886 Bytes

Contents

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

        in_scope do
          scope.name = name
          add_temp "#{scope.proto} = $#{name}._proto"
          add_temp "$scope = $#{name}._scope"

          body_code = self.body_code
          empty_line

          line scope.to_vars
          line body_code
        end

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

2 entries across 2 versions & 1 rubygems

Version Path
opal-0.5.5 lib/opal/nodes/class.rb
opal-0.5.4 lib/opal/nodes/class.rb