refactor(samples): use stack helpers in dev calculator UI

This commit is contained in:
2026-04-24 21:55:58 +02:00
parent 9c61531820
commit 02e68dc1c7
+11 -12
View File
@@ -286,14 +286,18 @@
}); });
} }
function getStackValue(index) {
return calc.isValidIndex(index) ? calc.stack[index] : undefined;
}
function getLineValue(line) { function getLineValue(line) {
if (calc.isEditing) { if (calc.isEditing) {
if (line === 0) { if (line === 0) {
return calc.inputValue; return calc.inputValue;
} }
return calc.stack[line - 1]; return getStackValue(line - 1);
} }
return calc.stack[line]; return getStackValue(line);
} }
function render() { function render() {
@@ -317,11 +321,7 @@
if (!calc.isEditing) return; if (!calc.isEditing) return;
if (calc.inputValue !== '') { if (calc.inputValue !== '') {
const value = calc.parseInputValue(calc.inputValue); const value = calc.parseInputValue(calc.inputValue);
if (calc.stack.length >= calc.maxSize) { calc.push(value);
throw new Error('Stack overflow');
}
calc.stack.unshift(value);
if (calc.stack.length > 4) calc.stack.length = 4;
} }
calc.inputValue = ''; calc.inputValue = '';
calc.isEditing = false; calc.isEditing = false;
@@ -333,16 +333,15 @@
if (name === 'enter') { if (name === 'enter') {
if (calc.isEditing) { if (calc.isEditing) {
pushEditingValueIfNeeded(); pushEditingValueIfNeeded();
} else if (calc.stack.length >= 1) { } else if (calc.isValidIndex(0)) {
calc.push(calc.stack[0]); calc.push(getStackValue(0));
if (calc.stack.length > 4) calc.stack.length = 4;
} }
} else if (name === 'swap') { } else if (name === 'swap') {
pushEditingValueIfNeeded(); pushEditingValueIfNeeded();
if (calc.stack.length >= 2) calc.swap(0, 1); if (calc.isValidIndex(1)) calc.swap(0, 1);
} else if (name === 'drop') { } else if (name === 'drop') {
pushEditingValueIfNeeded(); pushEditingValueIfNeeded();
if (calc.stack.length >= 1) calc.remove(0); if (calc.isValidIndex(0)) calc.remove(0);
} else if (name === 'clear') { } else if (name === 'clear') {
calc.clear(); calc.clear();
} else { } else {