code: func printFunctionSourceLine(w io.Writer, fn *node, assembly nodes, rpt *Report) {
  	if len(assembly) == 0 {
  		fmt.Fprintf(w,
  			"<span class=line> %6d</span> <span class=nop>  %10s %10s %s </span>\n",
  			fn.info.lineno,
  			valueOrDot(fn.flat, rpt), valueOrDot(fn.cum, rpt),
  			template.HTMLEscapeString(fn.info.name))
  		return
  	}
  
  	fmt.Fprintf(w,
  		"<span class=line> %6d</span> <span class=deadsrc>  %10s %10s %s </span>",
  		fn.info.lineno,
  		valueOrDot(fn.flat, rpt), valueOrDot(fn.cum, rpt),
  		template.HTMLEscapeString(fn.info.name))
  	fmt.Fprint(w, "<span class=asm>")
  	for _, an := range assembly {
  		var fileline string
  		class := "disasmloc"
  		if an.info.file != "" {
  			fileline = fmt.Sprintf("%s:%d", template.HTMLEscapeString(an.info.file), an.info.lineno)
  			if an.info.lineno != fn.info.lineno {
  				class = "unimportant"
  			}
  		}
  		fmt.Fprintf(w, " %8s %10s %10s %8x: %-48s <span class=%s>%s</span>\n", "",
  			valueOrDot(an.flat, rpt), valueOrDot(an.cum, rpt),
  			an.info.address,
  			template.HTMLEscapeString(an.info.name),
  			class,
  			template.HTMLEscapeString(fileline))
  	}
  	fmt.Fprintln(w, "</span>")
  }
docs: // printFunctionSourceLine prints a source line and the corresponding assembly.