23 lines
771 B
JavaScript
23 lines
771 B
JavaScript
import { S2_0, S2_1 } from "../symbol/S2.js"
|
|
|
|
/**
|
|
* @param { symbol } a
|
|
* @param { symbol } b
|
|
* @param { boolean } carry
|
|
* @returns { [value: symbol, carry: boolean] }
|
|
*/
|
|
export function add2B(a, b, carry) {
|
|
switch (a) {
|
|
case S2_0: switch (b) {
|
|
case S2_0: return carry ? [S2_1, false] : [S2_0, false];
|
|
case S2_1: return carry ? [S2_0, true ] : [S2_1, false];
|
|
default: throw new Error("unexpected symbol");
|
|
}
|
|
case S2_1: switch (b) {
|
|
case S2_0: return carry ? [S2_0, true] : [S2_1, false];
|
|
case S2_1: return carry ? [S2_1, true] : [S2_0, true ];
|
|
default: throw new Error("unexpected symbol");
|
|
}
|
|
default: throw new Error("unexpected symbol");
|
|
}
|
|
} |