This commit is contained in:
crumbtoo
2024-04-30 14:48:05 -06:00
parent b0a04c255c
commit 5416de8ee5
2 changed files with 90 additions and 12 deletions

View File

@@ -124,3 +124,33 @@ body
; flex-shrink: 0
}
.heap-view
{
}
.heap-entry-container
{ display: flex
; flex-direction: column
}
.heap-entry-container > .heap-entry:nth-of-type(even)
{ background: #0000007f
; color: white
}
.heap-entry
{ display: flex
; flex-direction: row
; justify-content: space-between
; font-family: monospace;
}
.heap-entry-addr
{ white-space: nowrap
}
/* .heap-entry-container.odd > .heap-entry:nth-of-type(odd) */
/* { background: #0000007f */
/* ; color: white */
/* } */

View File

@@ -1,5 +1,6 @@
(ns ui
(:require
[clojure.pprint :refer (cl-format)]
[wscljs.client :as ws]
[wscljs.format :as fmt]
[clojure.string :as str]
@@ -22,6 +23,21 @@
;------------------------------------------------------------------------------;
(defn gen-key []
(js/self.crypto.randomUUID))
(defn add-key [e]
(let [uuid (js/self.crypto.randomUUID)]
(match e
[tag props & children] (concat [tag (assoc props :key uuid)] children))))
;------------------------------------------------------------------------------;
(declare ppr-node)
(declare ppr-node*)
;------------------------------------------------------------------------------;
(defn Root [props & children]
[:> Resplit.Root (assoc props :class "split-root")
[:<> children]])
@@ -44,17 +60,22 @@
[:div {:class "pane-content dump-view"}
[Header "Dump"]])
(defn Heap []
;------------------------------------------------------------------------------;
(defn HeapEntry [heap addr-key]
(let [addr (js/Number (name addr-key))]
[:div {:class "heap-entry"
:key (gen-key)}
[:div {:class "heap-entry-addr"}
(cl-format nil "&~3D" addr)]
[:div {:class "heap-entry-node"}
(ppr-node heap addr)]]))
(defn Heap [heap]
[:div {:class "pane-content heap-view"}
[Header "Heap"]])
(defn gen-key []
(js/self.crypto.randomUUID))
(defn add-key [e]
(let [uuid (js/self.crypto.randomUUID)]
(match e
[tag props & children] (concat [tag (assoc props :key uuid)] children))))
[Header "Heap"]
[:div {:class "heap-entry-container"}
[:<> (map (partial HeapEntry heap) (keys heap))]]])
;------------------------------------------------------------------------------;
@@ -77,6 +98,14 @@
(def app-prec+1 11)
(def app-prec-1 9)
(defn ppr-list [heap addrs]
(match addrs
[] "[]"
_ (str "[" (->> addrs
(map (partial ppr-node* 0 heap))
(interpose ", ")
(concat)) "]")))
(defn ppr-node* [p heap addr]
(match (deref-addr heap addr)
{:tag "NGlobal" :contents [arity code]}
@@ -85,7 +114,7 @@
{:tag "NNum" :contents k}
(maybe-parens (> p 0)
(words "Num" k))
(words "Number" k))
{:tag "NAp" :contents [f x]}
(maybe-parens (> p app-prec)
@@ -93,6 +122,25 @@
"@"
(ppr-node* app-prec+1 heap x)))
{:tag "NConstr" :contents [tag as]}
(maybe-parens (> p 0)
(words "Constructor"
tag
(ppr-list heap as)))
{:tag "NInd" :contents addr*}
(maybe-parens (> p 0)
(words "Indirection"
(ppr-node* app-prec+1 heap addr*)))
{:tag "NUninitialised"}
"<Uninitialised>"
{:tag "NMarked" :contents node*}
(maybe-parens (> p 0)
(words "Marked"
"<node>"))
nil (str "<broken pointer: &" addr ">")
a (str "other" a)))
@@ -158,7 +206,7 @@
heap :_gmHeap}]
[Root {:direction "horizontal"}
[Pane {:order 0 :initialSize "0.333fr"}
[Heap]]
[Heap heap]]
[Splitter {:order 1 :size +split-width+}]
[Pane {:order 2 :initialSize "0.333fr"}
[Root {:direction "vertical"}