diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/main.rs b/src/main.rs index 5ee8d68..8ecb03e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -72,7 +72,7 @@ fn print_value(v: &Value) { #[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] -enum Mode { +pub enum Mode { Integer, Decimal, Str, @@ -113,15 +113,7 @@ fn main() { registers: baseline_registers(), stack: Vec::new(), mode: Mode::CommandChar, - readtables: BTreeMap::from([ - (Mode::Integer, make_integer_readtable()), - (Mode::Decimal, make_decimal_readtable()), - (Mode::Str, make_string_readtable()), - (Mode::CommandChar, make_command_character_readtable()), - (Mode::CommandNamed, make_command_string_readtable()), - (Mode::RegisterChar, make_register_character_readtable()), - (Mode::RegisterStr, make_register_string_readtable()), - ]), + readtables: make_default_readtables(), wip_str: String::from(""), // TODO: I don't think we need a return stack // But this the closest thing we have right now @@ -165,7 +157,7 @@ fn usize_to_decimal(input: usize) -> Decimal { type ReadAction = Rc<dyn Fn(char, &mut RPState) -> Result<(), Exit>>; -struct ReadTable { +pub struct ReadTable { action_map: BTreeMap<char, ReadAction>, default_action: ReadAction, } @@ -223,6 +215,18 @@ struct RPState { // Err(err_msg("(shuf) not implemented yet!".into())) // } +pub fn make_default_readtables() -> BTreeMap<Mode, ReadTable> { + BTreeMap::from([ + (Mode::Integer, make_integer_readtable()), + (Mode::Decimal, make_decimal_readtable()), + (Mode::Str, make_string_readtable()), + (Mode::CommandChar, make_command_character_readtable()), + (Mode::CommandNamed, make_command_string_readtable()), + (Mode::RegisterChar, make_register_character_readtable()), + (Mode::RegisterStr, make_register_string_readtable()), + ]) +} + fn make_command_string_readtable() -> ReadTable { let mut result = ReadTable::new(move |c, state| { state.wip_str.push(c); |