♻️ refactor: extract module
parent
5466e6ec56
commit
448ecc08d2
|
@ -0,0 +1,65 @@
|
|||
#[derive (Debug, PartialEq)]
|
||||
pub enum Instruction {
|
||||
Add (u8, u8, u8),
|
||||
|
||||
Call (u8, u8, u8),
|
||||
Closure (u8, u32),
|
||||
|
||||
// Equals Constant?
|
||||
EqK (u8, u8, bool),
|
||||
|
||||
ExtraArg (u32),
|
||||
|
||||
// Get Immediate?
|
||||
GetI (u8, u8, u8),
|
||||
|
||||
// Get Table, Upvalue
|
||||
GetTabUp (u8, u8, u8),
|
||||
|
||||
GetUpVal (u8, u8),
|
||||
|
||||
// Jump
|
||||
Jmp (i32),
|
||||
|
||||
// Load F (Float?)
|
||||
LoadF (u8, i32),
|
||||
|
||||
LoadFalse (u8),
|
||||
|
||||
// Load Integer?
|
||||
LoadI (u8, i32),
|
||||
|
||||
// Load Constant
|
||||
LoadK (u8, u32),
|
||||
|
||||
LoadNil (u8),
|
||||
|
||||
LoadTrue (u8),
|
||||
|
||||
// MetaMethod, Binary
|
||||
MmBin (u8, u8, u8),
|
||||
|
||||
Move (u8, u8),
|
||||
|
||||
Mul (u8, u8, u8),
|
||||
|
||||
NewTable (u8),
|
||||
|
||||
Not (u8, u8),
|
||||
|
||||
// (A, B, _C, k) Return B - 1 registers starting with A
|
||||
Return (u8, u8, u8, bool),
|
||||
|
||||
Return0,
|
||||
|
||||
// Return just one register
|
||||
Return1 (u8),
|
||||
|
||||
SetTabUp (u8, u8, u8),
|
||||
|
||||
TailCall (u8, u8, u8, bool),
|
||||
|
||||
Test (u8, bool),
|
||||
|
||||
VarArgPrep (i32),
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
use std::io::Read;
|
||||
|
||||
use crate::state::{
|
||||
Block,
|
||||
Chunk,
|
||||
Instruction as Inst,
|
||||
use crate::{
|
||||
instruction::Instruction as Inst,
|
||||
state::{
|
||||
Block,
|
||||
Chunk,
|
||||
}
|
||||
};
|
||||
|
||||
/// Invoke `luac` as a subprocess
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
mod instruction;
|
||||
mod loader;
|
||||
mod state;
|
||||
mod value;
|
||||
|
|
77
src/state.rs
77
src/state.rs
|
@ -1,77 +1,14 @@
|
|||
use std::collections::HashMap;
|
||||
|
||||
use crate::value::{
|
||||
BogusClosure,
|
||||
Table,
|
||||
Value,
|
||||
use crate::{
|
||||
instruction::Instruction,
|
||||
value::{
|
||||
BogusClosure,
|
||||
Table,
|
||||
Value,
|
||||
},
|
||||
};
|
||||
|
||||
#[derive (Debug, PartialEq)]
|
||||
pub enum Instruction {
|
||||
Add (u8, u8, u8),
|
||||
|
||||
Call (u8, u8, u8),
|
||||
Closure (u8, u32),
|
||||
|
||||
// Equals Constant?
|
||||
EqK (u8, u8, bool),
|
||||
|
||||
ExtraArg (u32),
|
||||
|
||||
// Get Immediate?
|
||||
GetI (u8, u8, u8),
|
||||
|
||||
// Get Table, Upvalue
|
||||
GetTabUp (u8, u8, u8),
|
||||
|
||||
GetUpVal (u8, u8),
|
||||
|
||||
// Jump
|
||||
Jmp (i32),
|
||||
|
||||
// Load F (Float?)
|
||||
LoadF (u8, i32),
|
||||
|
||||
LoadFalse (u8),
|
||||
|
||||
// Load Integer?
|
||||
LoadI (u8, i32),
|
||||
|
||||
// Load Constant
|
||||
LoadK (u8, u32),
|
||||
|
||||
LoadNil (u8),
|
||||
|
||||
LoadTrue (u8),
|
||||
|
||||
// MetaMethod, Binary
|
||||
MmBin (u8, u8, u8),
|
||||
|
||||
Move (u8, u8),
|
||||
|
||||
Mul (u8, u8, u8),
|
||||
|
||||
NewTable (u8),
|
||||
|
||||
Not (u8, u8),
|
||||
|
||||
// (A, B, _C, k) Return B - 1 registers starting with A
|
||||
Return (u8, u8, u8, bool),
|
||||
|
||||
Return0,
|
||||
|
||||
// Return just one register
|
||||
Return1 (u8),
|
||||
|
||||
SetTabUp (u8, u8, u8),
|
||||
|
||||
TailCall (u8, u8, u8, bool),
|
||||
|
||||
Test (u8, bool),
|
||||
|
||||
VarArgPrep (i32),
|
||||
}
|
||||
|
||||
pub struct Block {
|
||||
pub instructions: Vec <Instruction>,
|
||||
pub constants: Vec <Value>,
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
use std::hash::Hash;
|
||||
|
||||
use crate::{
|
||||
instruction::Instruction as Inst,
|
||||
loader,
|
||||
state::{
|
||||
Block,
|
||||
Chunk,
|
||||
Instruction as Inst,
|
||||
State,
|
||||
},
|
||||
value::Value,
|
||||
|
|
Loading…
Reference in New Issue