class Opal::Nodes::Base
def self.children(*names)
def self.children(*names) names.each_with_index do |name, idx| define_method(name) do @sexp[idx + 1] end end end
def self.handle(*types)
def self.handle(*types) types.each do |type| Base.handlers[type] = self end end
def self.handlers
def self.handlers @handlers ||= {} end
def add_gvar(name)
def add_gvar(name) scope.add_scope_gvar name end
def add_ivar(name)
def add_ivar(name) scope.add_scope_ivar name end
def add_local(name)
def add_local(name) scope.add_scope_local name.to_sym end
def add_temp(temp)
def add_temp(temp) scope.add_scope_temp temp end
def children
def children @sexp[1..-1] end
def compile
def compile raise "Not Implemented" end
def compile_to_fragments
def compile_to_fragments return @fragments if defined?(@fragments) @fragments = [] self.compile @fragments end
def error(msg)
def error(msg) @compiler.error msg end
def expr(sexp)
def expr(sexp) @compiler.process sexp, :expr end
def expr?
def expr? @level == :expr end
def expr_or_nil(sexp)
def expr_or_nil(sexp) sexp ? expr(sexp) : "nil" end
def fragment(str)
def fragment(str) Opal::Fragment.new str, @sexp end
def helper(name)
def helper(name) @compiler.helper name end
def in_while?
def in_while? @compiler.in_while? end
def initialize(sexp, level, compiler)
def initialize(sexp, level, compiler) @sexp = sexp @type = sexp.type @level = level @compiler = compiler end
def process(sexp, level = :expr)
def process(sexp, level = :expr) @compiler.process sexp, level end
def push(*strs)
def push(*strs) strs.each do |str| str = fragment(str) if str.is_a?(String) @fragments << str end end
def recv(sexp)
def recv(sexp) @compiler.process sexp, :recv end
def recv?
def recv? @level == :recv end
def s(*args)
def s(*args) @compiler.s(*args) end
def scope
def scope @compiler.scope end
def stmt(sexp)
def stmt(sexp) @compiler.process sexp, :stmt end
def stmt?
def stmt? @level == :stmt end
def unshift(*strs)
def unshift(*strs) strs.reverse.each do |str| str = fragment(str) if str.is_a?(String) @fragments.unshift str end end
def while_loop
def while_loop @compiler.instance_variable_get(:@while_loop) end
def with_temp(&block)
def with_temp(&block) @compiler.with_temp(&block) end
def wrap(pre, post)
def wrap(pre, post) unshift pre push post end