Files
clang-p2996/clang/lib/Analysis/FlowSensitive/HTMLLogger.html
martinboehme e54b0bef53 [clang][dataflow] Various formatting tweaks to HTMLLogger. (#68392)
*  Ensure timeline entries don't have linebreaks by setting
   `min-width: max-content`.

* Give the timeline header some padding on the right so it doesn't run
into the
   "Function" header.

* Put some padding around the iteration choosers so they don't run into
each
   other.

* Eliminate the "Iteration" text from the iteration choosers, which took
up a
lot of space. It should be clear what these are without the "Iteration"
text. (This makes the above problem of iteration choosers running into
each
   other less likely, but also add the padding nonetheless.)

Before:


![html_logger_before](https://github.com/llvm/llvm-project/assets/29098113/b938360f-c943-4552-829f-7b4857260959)

After:


![html_logger_after](https://github.com/llvm/llvm-project/assets/29098113/fecf4eab-7992-4e7d-a6e1-451887b699ab)
2023-10-12 13:12:21 +02:00

119 lines
3.9 KiB
HTML

<!doctype html>
<html>
<!-- HTMLLogger.cpp ----------------------------------------------------
Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
See https://llvm.org/LICENSE.txt for license information.
SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//===------------------------------------------------------------------------>
<head>
<?INJECT?>
<template id="value-template">
<details class="value" open>
<summary>
<span>{{v.kind}}
<template data-if="v.value_id"><span class="address">#{{v.value_id}}</span></template>
</span>
<template data-if="v.location">
<span class="location">{{v.type}} <span class="address">@{{v.location}}</span></span>
</template>
</summary>
<template
data-for="kv in Object.entries(v)"
data-if="['kind', 'value_id', 'type', 'location'].indexOf(kv[0]) < 0">
<div class="property"><span class="key">{{kv[0]}}</span>
<template data-if="typeof(kv[1]) != 'object'">{{kv[1]}}</template>
<template data-if="typeof(kv[1]) == 'object'" data-let="v = kv[1]">
<template data-use="value-template"></template>
</template>
</div>
</template>
</details>
</template>
</head>
<body>
<section id="timeline" data-selection="">
<header>Timeline</header>
<template data-for="entry in timeline">
<div id="{{entry.block}}:{{entry.iter}}" data-bb="{{entry.block}}" class="entry">
{{entry.block}}
<template data-if="entry.post_visit">(post-visit)</template>
<template data-if="!entry.post_visit">({{entry.iter}})</template>
<template data-if="entry.converged"> &#x2192;&#x7c;<!--Rightwards arrow, vertical line--></template>
</div>
</template>
</section>
<section id="function" data-selection="">
<header>Function</header>
<div id="code"></div>
<div id="cfg"></div>
</section>
<section id="block" data-selection="bb">
<header><template>Block {{selection.bb}}</template></header>
<div id="iterations">
<template data-for="iter in cfg[selection.bb].iters">
<a class="chooser {{selection.bb}}:{{iter.iter}}" data-iter="{{selection.bb}}:{{iter.iter}}">
<template data-if="iter.post_visit">Post-visit</template>
<template data-if="!iter.post_visit">{{iter.iter}}</template>
<template data-if="iter.converged"> &#x2192;&#x7c;<!--Rightwards arrow, vertical line--></template>
</a>
</template>
</div>
<table id="bb-elements">
<template>
<tr id="{{selection.bb}}.0">
<td class="{{selection.bb}}">{{selection.bb}}.0</td>
<td>(initial state)</td>
</tr>
</template>
<template data-for="elt in cfg[selection.bb].elements">
<tr id="{{selection.bb}}.{{elt_index+1}}">
<td class="{{selection.bb}}">{{selection.bb}}.{{elt_index+1}}</td>
<td>{{elt}}</td>
</tr>
</template>
</table>
</section>
<section id="element" data-selection="iter,elt">
<template data-let="state = states[selection.iter + '_' + selection.elt]">
<header>
<template data-if="state.element == 0">{{state.block}} initial state</template>
<template data-if="state.element != 0">Element {{selection.elt}}</template>
<template data-if="state.post_visit"> (post-visit)</template>
<template data-if="!state.post_visit"> (iteration {{state.iter}})</template>
</header>
<template data-if="state.value" data-let="v = state.value">
<h2>Value</h2>
<template data-use="value-template"></template>
</template>
<template data-if="state.logs">
<h2>Logs</h2>
<pre>{{state.logs}}</pre>
</template>
<h2>Built-in lattice</h2>
<pre>{{state.builtinLattice}}</pre>
</template>
</section>
<script>
addBBColors(Object.keys(HTMLLoggerData.cfg).length);
watchSelection(HTMLLoggerData);
updateSelection({}, HTMLLoggerData);
// Copy code and cfg from <template>s into the body.
for (tmpl of document.querySelectorAll('template[data-copy]'))
document.getElementById(tmpl.dataset.copy).replaceChildren(
...tmpl.content.cloneNode(/*deep=*/true).childNodes);
</script>
</body>
</html>