summaryrefslogtreecommitdiffstats
path: root/src/forth
diff options
context:
space:
mode:
Diffstat (limited to 'src/forth')
-rw-r--r--src/forth/compiler.rs4
-rw-r--r--src/forth/vm.rs6
2 files changed, 6 insertions, 4 deletions
diff --git a/src/forth/compiler.rs b/src/forth/compiler.rs
index 17f0113..97e94a9 100644
--- a/src/forth/compiler.rs
+++ b/src/forth/compiler.rs
@@ -1,4 +1,4 @@
-use super::vm::{ByteCode, OpCode, WordList};
+use super::vm::{ByteCode, DataStackType, OpCode, WordList};
use std::collections::HashMap;
use std::iter::{Enumerate, Iterator};
@@ -116,7 +116,7 @@ impl<'a> Compiler<'a> {
pub fn compile(&mut self) -> CompileResult<()> {
while let Some((word, start, end)) = self.next_word() {
let anno = Annotation { loc: (start, end) };
- if let Ok(i) = word.parse::<i32>() {
+ if let Ok(i) = word.parse::<DataStackType>() {
self.bc_push(OpCode::Num(i), anno);
} else if let Some(i) = self.wordalog.0.get(word) {
self.bc_push(OpCode::Call(*i), anno);
diff --git a/src/forth/vm.rs b/src/forth/vm.rs
index fe034a6..8cec0d2 100644
--- a/src/forth/vm.rs
+++ b/src/forth/vm.rs
@@ -2,9 +2,11 @@ use log::debug;
use std::ops::Index;
+pub type DataStackType = i32;
+
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum OpCode {
- Num(i32),
+ Num(DataStackType),
Str(usize, usize),
Call(usize),
TCall(usize), // tail call, really just ‘jmp’, but named to indicate desired usage.
@@ -85,7 +87,7 @@ impl Default for InstructionPointer {
}
#[derive(Debug)]
-pub struct DataStack(pub Vec<i32>);
+pub struct DataStack(pub Vec<DataStackType>);
#[derive(Debug)]
pub struct CallStack(pub Vec<InstructionPointer>);