class Opal::Nodes::BaseSuperNode
call.
body. This is then used by actual super calls, or a defined?(super) style
This base class is used just to child the find_super_dispatcher method
def args
def args arglist || s(:arglist) end
def compile_dispatcher
def compile_dispatcher if arglist or iter iter = expr(iter_sexp) else scope.uses_block! iter = '$iter' end if scope.def? scope.uses_block! scope_name = scope.identify! class_name = scope.parent.name ? "$#{scope.parent.name}" : 'self.$$class.$$proto' if scope.defs push "Opal.find_super_dispatcher(self, '#{scope.mid.to_s}', #{scope_name}, " push iter push ", #{class_name})" else push "Opal.find_super_dispatcher(self, '#{scope.mid.to_s}', #{scope_name}, " push iter push ")" end elsif scope.iter? chain, cur_defn, mid = scope.get_super_chain trys = chain.map { |c| "#{c}.$$def" }.join(' || ') push "Opal.find_iter_super_dispatcher(self, #{mid}, (#{trys} || #{cur_defn}), null)" else raise "Cannot call super() from outside a method block" end end
def iter_sexp
def iter_sexp iter || s(:js_tmp, 'null') end