Sha256: 4eb9c4fc7f323a6a9cb90d47f035e5ef851d76b3b2a59df7da234f26a9d77589
Contents?: true
Size: 1.64 KB
Versions: 6
Compression:
Stored size: 1.64 KB
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 if body.nil? # Simplified compile for empty body if stmt? unshift '$module(', base, ", '#{name}')" else unshift '($module(', base, ", '#{name}'), nil)" end else line " var self = $module($base, '#{name}');" in_scope do scope.name = name compile_body end if await_encountered await_begin = '(await ' await_end = ')' async = 'async ' parent.await_encountered = true else await_begin, await_end, async = '', '', '' end unshift "#{await_begin}(#{async}function($base#{', $parent_nesting' if @define_nesting}) {" line '})(', base, "#{', ' + scope.nesting if @define_nesting})#{await_end}" end end private # cid is always s(:const, scope_sexp_or_nil, :ConstName) def name_and_base base, name = cid.children if base.nil? [name, "#{scope.nesting}[0]"] else [name, expr(base)] end end def compile_body body_code = stmt(compiler.returns(body)) empty_line add_temp "$nesting = [self].concat($parent_nesting)" if @define_nesting add_temp '$$ = Opal.$r($nesting)' if @define_relative_access line scope.to_vars line body_code end end end end
Version data entries
6 entries across 6 versions & 1 rubygems