Class: Opal::Nodes::TopNode
- Defined in:
- opal/lib/opal/nodes/top.rb
Overview
Generates code for an entire file, i.e. the base sexp
Instance Attribute Summary
Attributes inherited from ScopeNode
#await_encountered, #block_name, #catch_return, #defs, #gvars, #has_break, #has_retry, #identity, #ivars, #locals, #methods, #mid, #name, #parent, #rescue_else_sexp, #scope_name
Attributes inherited from Base
Instance Method Summary collapse
- 
  
    
      #absolute_const  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns '$$$', but also ensures that the '$$$' variable is set. 
- #add_used_helpers ⇒ Object
- #closing ⇒ Object
- #compile ⇒ Object
- 
  
    
      #compile_end_construct  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Any special END content in code. 
- #compile_irb_vars ⇒ Object
- #compile_method_stubs ⇒ Object
- #opening ⇒ Object
- #stmts ⇒ Object
- #version_comment ⇒ Object
Methods inherited from ScopeNode
#accepts_using?, #add_arg, #add_proto_ivar, #add_scope_gvar, #add_scope_ivar, #add_scope_local, #add_scope_temp, #class?, #class_scope?, #collect_refinements_temps, #current_rescue, #def?, #def_in_class?, #defines_lambda, #find_parent_def, #gen_retry_id, #has_local?, #has_rescue_else?, #has_temp?, #identify!, #in_ensure, #in_ensure?, #in_resbody, #in_resbody?, #in_rescue, #in_scope, #in_while?, #initialize, #is_lambda!, #iter?, #lambda?, #lambda_definition?, #module?, #nesting, #new_refinements_temp, #new_temp, #next_temp, #pop_while, #prepare_block, #push_while, #queue_temp, #refinements_temp, #relative_access, #sclass?, #scope_locals, #self, #super_chain, #to_vars, #top?, #uses_block!, #uses_block?
Methods inherited from Base
#add_gvar, #add_ivar, #add_local, #add_temp, #children, children, #class_variable_owner, #class_variable_owner_nesting_level, #comments, #compile_to_fragments, #error, #expr, #expr?, #expr_or_nil, #fragment, handle, handlers, #has_rescue_else?, #helper, #in_ensure, #in_ensure?, #in_resbody, #in_resbody?, #in_rescue, #in_while?, #initialize, #process, #push, #recv, #recv?, #s, #scope, #source_location, #stmt, #stmt?, #top_scope, truthy_optimize?, #unshift, #while_loop, #with_temp, #wrap
Methods included from Helpers
#conditional_send, #current_indent, #empty_line, #indent, #js_truthy, #js_truthy_optimize, #line, #mid_to_jsid, #property, #valid_name?
Constructor Details
This class inherits a constructor from Opal::Nodes::ScopeNode
Instance Method Details
#absolute_const ⇒ Object
Returns '$$$', but also ensures that the '$$$' variable is set
| 84 85 86 87 | # File 'opal/lib/opal/nodes/top.rb', line 84 def absolute_const @define_absolute_const = true '$$$' end | 
#add_used_helpers ⇒ Object
| 95 96 97 | # File 'opal/lib/opal/nodes/top.rb', line 95 def add_used_helpers compiler.helpers.to_a.each { |h| add_temp "$#{h} = Opal.#{h}" } end | 
#closing ⇒ Object
| 69 70 71 72 73 74 75 76 77 | # File 'opal/lib/opal/nodes/top.rb', line 69 def closing if compiler.requirable? line "};\n" elsif compiler.eval? line "})(Opal, self);" else line "});\n" end end | 
#compile ⇒ Object
| 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | # File 'opal/lib/opal/nodes/top.rb', line 15 def compile compiler.top_scope = self push version_comment in_scope do if body == s(:nil) # A shortpath for empty (stub?) modules. line 'return Opal.nil;' else line '"use strict";' if compiler.use_strict? body_code = stmt(stmts) body_code = [body_code] unless body_code.is_a?(Array) if compiler.eval? add_temp '$nesting = self.$$is_a_module ? [self] : [self.$$class]' if @define_nesting else add_temp 'self = Opal.top' if @define_self add_temp '$nesting = []' if @define_nesting end add_temp '$$ = Opal.$r($nesting)' if @define_relative_access add_temp 'nil = Opal.nil' add_temp '$$$ = Opal.$$$' if @define_absolute_const add_used_helpers line scope.to_vars compile_method_stubs compile_irb_vars compile_end_construct line body_code end end opening closing end | 
#compile_end_construct ⇒ Object
Any special END content in code
| 108 109 110 111 112 113 | # File 'opal/lib/opal/nodes/top.rb', line 108 def compile_end_construct if content = compiler.eof_content line 'var $__END__ = Opal.Object.$new();' line "$__END__.$read = function() { return #{content.inspect}; };" end end | 
#compile_irb_vars ⇒ Object
| 89 90 91 92 93 | # File 'opal/lib/opal/nodes/top.rb', line 89 def compile_irb_vars if compiler.irb? line 'if (!Opal.irb_vars) { Opal.irb_vars = {}; }' end end | 
#compile_method_stubs ⇒ Object
| 99 100 101 102 103 104 105 | # File 'opal/lib/opal/nodes/top.rb', line 99 def compile_method_stubs if compiler.method_missing? calls = compiler.method_calls stubs = calls.to_a.map(&:to_s).join(',') line "Opal.add_stubs('#{stubs}');" unless stubs.empty? end end | 
#opening ⇒ Object
| 55 56 57 58 59 60 61 62 63 64 65 66 67 | # File 'opal/lib/opal/nodes/top.rb', line 55 def opening async_prefix = "async " if await_encountered if compiler.requirable? unshift "Opal.modules[#{Opal::Compiler.module_name(compiler.file).inspect}] = #{async_prefix}function(Opal) {" elsif compiler.eval? unshift "(#{async_prefix}function(Opal, self) {" elsif compiler.esm? unshift "export default Opal.queue(#{async_prefix}function(Opal) {" else unshift "Opal.queue(#{async_prefix}function(Opal) {" end end | 
#stmts ⇒ Object
| 79 80 81 | # File 'opal/lib/opal/nodes/top.rb', line 79 def stmts compiler.returns(body) end |