module SlotMachine class MacroMaker # a list of instructions attr_reader :instructions # load slot code from a file, in a subdir code/ + filename # use load_string to compile the content def self.load_file(relative_name) path = File.expand_path( "../code/#{relative_name}" , __FILE__) load_string( File.read(path)) end # compile the given SlotLanguage source # the compiler returns an array of Makers which a new MacroMaker # instance stores # return the MacroMaker that represents the source def self.load_string(source_code) MacroMaker.new( SlotCompiler.compile(source_code) ) end # must initialize with an array of Makers, which is stored def initialize( instructions ) @instructions = instructions raise "undefined source #{instructions}" unless instructions.is_a?(Instruction) end end end