# Copyright 2014 Josh Burroughs # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. defmodule Quaff.Debug do def start() do :debugger.start() end def load(module) do load(module,[]) end def load(module, options) when is_atom(module) do case Atom.to_string(module) do "Elixir."<>_ -> load_ex(module,options) _ -> call_i(module,options) end end def load(src, options) when is_binary(src) do case String.reverse(src) do "xe."<>_ -> load_ex(src,options) _ -> call_i(src,options) end end def nload(module) do nload(module,[]) end def nload(module, options) do load(module,Keyword.put(options,:all_nodes,true)) end defp load_ex(module, options) when is_atom(module) do mod_info = module.module_info() compiled_src = mod_info[:compile][:source] {^module,beam_bin,beam_file} = :code.get_object_code(module) #TODO: use code path to search for src --OR-- # add source option #basename = :filename.basename(compiled_src) call_i({module,compiled_src,beam_file,beam_bin},options) end defp load_ex(src, options) when is_binary(src) do mods = Code.load_file(src) Enum.map(mods, fn({mod,beam_bin}) -> call_i({mod,String.to_charlist(src), Atom.to_charlist(mod)++'.beam',beam_bin},options) end) end defp call_i(arg,options) do case Keyword.get(options,:all_nodes,false) do true -> :int.ni(arg) false -> :int.i(arg) end end end