class Opal::Nodes::Base
Attributes
compiler[R]
sexp[R]
type[R]
Public Class Methods
children(*names)
click to toggle source
# File lib/opal/nodes/base.rb, line 22 def self.children(*names) names.each_with_index do |name, idx| define_method(name) do @sexp.children[idx] end end end
handle(*types)
click to toggle source
# File lib/opal/nodes/base.rb, line 16 def self.handle(*types) types.each do |type| Base.handlers[type] = self end end
handlers()
click to toggle source
# File lib/opal/nodes/base.rb, line 12 def self.handlers @handlers ||= {} end
new(sexp, level, compiler)
click to toggle source
# File lib/opal/nodes/base.rb, line 36 def initialize(sexp, level, compiler) @sexp = sexp @type = sexp.type @level = level @compiler = compiler @compiler.top_scope ||= self end
truthy_optimize?()
click to toggle source
# File lib/opal/nodes/base.rb, line 30 def self.truthy_optimize? false end
Public Instance Methods
add_gvar(name)
click to toggle source
# File lib/opal/nodes/base.rb, line 143 def add_gvar(name) scope.add_scope_gvar name end
add_ivar(name)
click to toggle source
# File lib/opal/nodes/base.rb, line 139 def add_ivar(name) scope.add_scope_ivar name end
add_local(name)
click to toggle source
# File lib/opal/nodes/base.rb, line 135 def add_local(name) scope.add_scope_local name.to_sym end
add_temp(temp)
click to toggle source
# File lib/opal/nodes/base.rb, line 147 def add_temp(temp) scope.add_scope_temp temp end
children()
click to toggle source
# File lib/opal/nodes/base.rb, line 44 def children @sexp.children end
class_variable_owner()
click to toggle source
# File lib/opal/nodes/base.rb, line 207 def class_variable_owner if scope "#{scope.nesting}[#{class_variable_owner_nesting_level}]" else 'Opal.Object' end end
class_variable_owner_nesting_level()
click to toggle source
# File lib/opal/nodes/base.rb, line 191 def class_variable_owner_nesting_level cvar_scope = scope nesting_level = 0 while cvar_scope && !cvar_scope.class_scope? # Needs only `class << self`, `module`, and `class` # can increase nesting, but `class` & `module` are # covered by `class_scope?`. nesting_level += 1 if cvar_scope.sclass? cvar_scope = cvar_scope.parent end nesting_level end
comments()
click to toggle source
# File lib/opal/nodes/base.rb, line 215 def comments compiler.comments[@sexp.loc] end
compile()
click to toggle source
# File lib/opal/nodes/base.rb, line 56 def compile raise 'Not Implemented' end
compile_to_fragments()
click to toggle source
# File lib/opal/nodes/base.rb, line 48 def compile_to_fragments return @fragments if defined?(@fragments) @fragments = [] compile @fragments end
error(msg)
click to toggle source
# File lib/opal/nodes/base.rb, line 83 def error(msg) @compiler.error msg end
expr(sexp)
click to toggle source
# File lib/opal/nodes/base.rb, line 115 def expr(sexp) @compiler.process sexp, :expr end
expr?()
click to toggle source
# File lib/opal/nodes/base.rb, line 99 def expr? @level == :expr end
expr_or_empty(sexp)
click to toggle source
# File lib/opal/nodes/base.rb, line 131 def expr_or_empty(sexp) sexp && sexp.type != :nil ? expr(sexp) : '' end
expr_or_nil(sexp)
click to toggle source
# File lib/opal/nodes/base.rb, line 127 def expr_or_nil(sexp) sexp ? expr(sexp) : 'nil' end
fragment(str, loc: true)
click to toggle source
# File lib/opal/nodes/base.rb, line 79 def fragment(str, loc: true) Opal::Fragment.new str, scope, loc && @sexp end
has_rescue_else?()
click to toggle source
# File lib/opal/nodes/base.rb, line 167 def has_rescue_else? scope.has_rescue_else? end
helper(name)
click to toggle source
# File lib/opal/nodes/base.rb, line 151 def helper(name) @compiler.helper name end
in_ensure(&block)
click to toggle source
# File lib/opal/nodes/base.rb, line 171 def in_ensure(&block) scope.in_ensure(&block) end
in_ensure?()
click to toggle source
# File lib/opal/nodes/base.rb, line 175 def in_ensure? scope.in_ensure? end
in_resbody(&block)
click to toggle source
# File lib/opal/nodes/base.rb, line 179 def in_resbody(&block) scope.in_resbody(&block) end
in_resbody?()
click to toggle source
# File lib/opal/nodes/base.rb, line 183 def in_resbody? scope.in_resbody? end
in_rescue(node, &block)
click to toggle source
# File lib/opal/nodes/base.rb, line 187 def in_rescue(node, &block) scope.in_rescue(node, &block) end
in_while?()
click to toggle source
# File lib/opal/nodes/base.rb, line 159 def in_while? @compiler.in_while? end
process(sexp, level = :expr)
click to toggle source
# File lib/opal/nodes/base.rb, line 111 def process(sexp, level = :expr) @compiler.process sexp, level end
push(*strs)
click to toggle source
# File lib/opal/nodes/base.rb, line 60 def push(*strs) strs.each do |str| str = fragment(str) if str.is_a?(String) @fragments << str end end
recv(sexp)
click to toggle source
# File lib/opal/nodes/base.rb, line 119 def recv(sexp) @compiler.process sexp, :recv end
recv?()
click to toggle source
# File lib/opal/nodes/base.rb, line 103 def recv? @level == :recv end
s(type, *children)
click to toggle source
# File lib/opal/nodes/base.rb, line 95 def s(type, *children) ::Opal::AST::Node.new(type, children, location: @sexp.loc) end
scope()
click to toggle source
# File lib/opal/nodes/base.rb, line 87 def scope @compiler.scope end
source_location()
click to toggle source
# File lib/opal/nodes/base.rb, line 219 def source_location expr = @sexp.loc.expression if expr.respond_to? :source_buffer file = expr.source_buffer.name file = "<internal:#{file}>" if file.start_with?("corelib/") file = "<js:#{file}>" if file.end_with?(".js") else file = "(eval)" end line = @sexp.loc.line "['#{file}', #{line}]" end
stmt(sexp)
click to toggle source
# File lib/opal/nodes/base.rb, line 123 def stmt(sexp) @compiler.process sexp, :stmt end
stmt?()
click to toggle source
# File lib/opal/nodes/base.rb, line 107 def stmt? @level == :stmt end
top_scope()
click to toggle source
# File lib/opal/nodes/base.rb, line 91 def top_scope @compiler.top_scope end
unshift(*strs)
click to toggle source
# File lib/opal/nodes/base.rb, line 67 def unshift(*strs) strs.reverse_each do |str| str = fragment(str) if str.is_a?(String) @fragments.unshift str end end
while_loop()
click to toggle source
# File lib/opal/nodes/base.rb, line 163 def while_loop @compiler.instance_variable_get(:@while_loop) end
with_temp(&block)
click to toggle source
# File lib/opal/nodes/base.rb, line 155 def with_temp(&block) @compiler.with_temp(&block) end
wrap(pre, post)
click to toggle source
# File lib/opal/nodes/base.rb, line 74 def wrap(pre, post) unshift pre push post end