Assemble kernel on the client #1

Merged
cdo merged 72 commits from client-side-assembler into main 2026-03-18 15:21:33 +00:00
Showing only changes of commit e7affbf8b7 - Show all commits

23
asm.js
View File

@@ -106,6 +106,7 @@ const State = Object.freeze({
ELEM_TABLE: 33, ELEM_TABLE: 33,
ELEM_ELEM: 34, ELEM_ELEM: 34,
ELEM_LABEL: 35, ELEM_LABEL: 35,
ZERO: 36,
}); });
const Action = Object.freeze({ const Action = Object.freeze({
@@ -228,6 +229,7 @@ class Parser {
".type": State.TYPE_NAME, ".type": State.TYPE_NAME,
".table": State.TABLE_NAME, ".table": State.TABLE_NAME,
".elem": State.ELEM_TABLE, ".elem": State.ELEM_TABLE,
".zero": State.ZERO,
}; };
this.blocks = new Set(["block", "loop", "if"]); this.blocks = new Set(["block", "loop", "if"]);
this.handlers = { this.handlers = {
@@ -267,6 +269,7 @@ class Parser {
[State.ELEM_TABLE]: (token) => this.token_elem_table(token), [State.ELEM_TABLE]: (token) => this.token_elem_table(token),
[State.ELEM_ELEM]: (token) => this.token_elem_elem(token), [State.ELEM_ELEM]: (token) => this.token_elem_elem(token),
[State.ELEM_LABEL]: (token) => this.token_elem_label(token), [State.ELEM_LABEL]: (token) => this.token_elem_label(token),
[State.ZERO]: (token) => this.token_zero(token),
}; };
this.results = []; this.results = [];
@@ -821,6 +824,26 @@ class Parser {
return action; return action;
} }
token_zero(token) {
if (token == LINE_END) {
console.error(
"ERROR: Unexpected newline in .zero, expected count")
this.state = State.TOP;
return;
}
const count = this.integer(token);
if (count == null) {
console.error(
`ERROR: Unexpected token ${token} in .zero, expected count`);
this.state = State.TOP;
return;
}
this.state = State.TOP;
return { type: Action.DATA, size: count, value: 0 }
}
mem_action() { mem_action() {
const action = { const action = {
type: Action.MEM, type: Action.MEM,