# File kwartz.rb, line 193
    def self.compile(input_filename, output_filename, plogic_filename=nil, lang='ruby', toppings={})
        ## check argument
        if !input_filename || input_filename.empty?
            raise ArgumentError.new("input_filename required.")
        end
        if !output_filename || output_filename.empty?
            raise ArgumentError.new("output_filename required.")
        end

        ## check timestamp;
        ## do nothing if output file is newer than input file and plogic file
        if test(?f, output_filename) &&
           (out_mtime = File.mtime(output_filename)) >= File.mtime(input_filename)  &&
           ( !plogic_filename || !test(?f, plogic_filename) || (out_mtime >= File.mtime(plogic_filename)) )
            return nil
        end
        return compile!(input_filename, output_filename, plogic_filename, lang, toppings)
        ####
        #dummy_loop = true
        #while dummy_loop
        #    break if !test(?f, output_filename)
        #    break if File.mtime(input_filename) > File.mtime(output_filename)
        #    break if test(?f, plogic_filename) && File.mtime(input_filename) > File.mtime(plogic_filename)
        #    return nil
        #end
        #return compile!(input_filename, output_filename, plogic_filename, lang)
        ####
    end