aboutsummaryrefslogtreecommitdiff
path: root/examples/selfpatch.zc
blob: e3f821d3ff5fbc4f9bafaaec29577d474e3bb4aa (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// code is data: find the literal 'A' inside f's compiled words and rewrite it.
// on the jit the store lands on translated code, which gets dropped and
// retranslated on the next call.
fn f() { put_c('A'); return 0; }
fn litw(v) { return v + v + 1; }	// how the vm encodes a literal push
fn main() {
	let p = f;
	f();
	while (*p != litw('A')) p++;
	*p = litw('B');
	f();
	*p = litw('C');
	f();
	put_c(10);
	return 0;
}