The JIT that runs makepad apps from source: lexer, front end, type checker, lazy borrow checker (Gandalf; `--check-first` opts in), codegen, session and warm/cold caches keyed by compiler stamp, provided crates bound late, startup images, live patching. User-facing name is `makepad run` (binary `makepad`, MAKEPAD_RUN_* env, ~/.makepad-run); libs/relax stays the internal library name. `makepad check` reports rustc-style diagnostics with rustc error codes and checks a whole workspace (`--workspace`). Runs on macOS, Linux, Windows and Android. makepad-remote: one tool schema for apps and the WM (app/1): grabs, captures, traces, frame profiles and tweaks. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
30 lines
837 B
Rust
30 lines
837 B
Rust
// 3.12: adding a Drop impl changes needs_drop(T): every fn that drops a T (here Vec<T>::clear's
|
|
// drop glue) must be recompiled, so values made before the edit are counted when dropped after it.
|
|
// Each run clears the items the previous run pushed, prints the drop count, and pushes 3 more.
|
|
use std::cell::RefCell;
|
|
use std::sync::atomic::{AtomicU32, Ordering};
|
|
|
|
static DROPS: AtomicU32 = AtomicU32::new(0);
|
|
|
|
struct T(u32);
|
|
|
|
impl Drop for T {
|
|
fn drop(&mut self) {
|
|
DROPS.fetch_add(1 + self.0 * 0, Ordering::SeqCst);
|
|
}
|
|
}
|
|
|
|
thread_local! {
|
|
static ITEMS: RefCell<Vec<T>> = RefCell::new(Vec::new());
|
|
}
|
|
|
|
#[test]
|
|
fn run() {
|
|
ITEMS.with(|v| {
|
|
v.borrow_mut().clear();
|
|
println!("out drops {}", DROPS.load(Ordering::SeqCst));
|
|
for i in 0..3 {
|
|
v.borrow_mut().push(T(i));
|
|
}
|
|
});
|
|
}
|