def method_missing(name , *args)
      super if args.length != 0
      name = name.to_s
      return @names[name] if @names.has_key?(name)
      if name == "message"
        return Risc.message_reg.set_builder(self)
      end
      if name.index("label")
        reg = Risc.label( @source , "#{name}_#{object_id}")
        @source_used = true
      else
        last_char = name[-1]
        name = name[0 ... -1]
        if last_char == "!" or last_char == "?"
          if @names.has_key?(name)
            return @names[name] if last_char == "?"
            raise "Name exists (#{@names.keys})before creating it #{name}#{last_char}"
          end
        else
          raise "Must create (with ! or ?) before using #{name}#{last_char}"
        end
        type = infer_type(name )
        reg = @compiler.use_reg( type.object_class.name ).set_builder(self)
      end
      @names[name] = reg
      reg
    end
def method_missing(name , *args)
      super if args.length != 0
      name = name.to_s
      return @names[name] if @names.has_key?(name)
      if name == "message"
        return Risc.message_reg.set_builder(self)
      end
      if name.index("label")
        reg = Risc.label( @source , "#{name}_#{object_id}")
        @source_used = true
      else
        last_char = name[-1]
        name = name[0 ... -1]
        if last_char == "!" or last_char == "?"
          if @names.has_key?(name)
            return @names[name] if last_char == "?"
            raise "Name exists (#{@names.keys})before creating it #{name}#{last_char}"
          end
        else
          raise "Must create (with ! or ?) before using #{name}#{last_char}"
        end
        type = infer_type(name )
        reg = @compiler.use_reg( type.object_class.name ).set_builder(self)
      end
      @names[name] = reg
      reg
    end
pass a compiler, to which instruction are added (usually)
 second arg determines weather instructions are added (default true)
 call build with a block to build
 make the magic: convert incoming names into registers that have the
 type set according to the name (using resolve_type)
 names are stored, so subsequent calls use the same register