class Haml::Compiler

def push_silent(text, can_suppress = false)

does not output the result.
Evaluates `text` in the context of the scope object, but
def push_silent(text, can_suppress = false)
  flush_merged_text
  return if can_suppress && @options.suppress_eval?
  newline = (text == "end") ? ";" : "\n"
  @temple << [:code, "#{resolve_newlines}#{text}#{newline}"]
  @output_line = @output_line + text.count("\n") + newline.count("\n")
end