# File lib/uglifier.rb, line 60
  def compile(source)
    source = source.respond_to?(:read) ? source.read : source.to_s

    js = []
    js << "var result = '';"
    js << "var source = #{json_encode(source)};"
    js << "var ast = UglifyJS.parser.parse(source);"

    if @options[:lift_vars]
      js << "ast = UglifyJS.uglify.ast_lift_variables(ast);"
    end

    if @options[:copyright]
      js << "var comments = UglifyJS.parser.tokenizer(source)().comments_before;\nfor (var i = 0; i < comments.length; i++) {\nvar c = comments[i];\nresult += (c.type == \"comment1\") ? \"//\"+c.value+\"\\\\n\" : \"/*\"+c.value+\"*/\\\\n\";\n}\n"
    end

    js << "ast = UglifyJS.uglify.ast_mangle(ast, #{json_encode(mangle_options)});"

    if @options[:squeeze]
      js << "ast = UglifyJS.uglify.ast_squeeze(ast, #{json_encode(squeeze_options)});"
    end

    if @options[:unsafe]
      js << "ast = UglifyJS.uglify.ast_squeeze_more(ast);"
    end

    js << "result += UglifyJS.uglify.gen_code(ast, #{json_encode(gen_code_options)});"

    if !@options[:beautify] && @options[:max_line_length]
      js << "result = UglifyJS.uglify.split_lines(result, #{@options[:max_line_length].to_i})"
    end

    js << "return result + ';';"

    @context.exec js.join("\n")
  end