3aaefc3000
Change-Id: I53202e93938bede421c8f1c98901e4c67544e257 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6069 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
26 lines
609 B
Rust
26 lines
609 B
Rust
use crate::opcode::{CodeIdx, ConstantIdx, OpCode};
|
|
use crate::value::Value;
|
|
|
|
#[derive(Debug, Default)]
|
|
pub struct Chunk {
|
|
pub code: Vec<OpCode>,
|
|
constants: Vec<Value>,
|
|
}
|
|
|
|
impl Chunk {
|
|
pub fn add_op(&mut self, data: OpCode) -> CodeIdx {
|
|
let idx = self.code.len();
|
|
self.code.push(data);
|
|
CodeIdx(idx)
|
|
}
|
|
|
|
pub fn add_constant(&mut self, data: Value) -> ConstantIdx {
|
|
let idx = self.constants.len();
|
|
self.constants.push(data);
|
|
ConstantIdx(idx)
|
|
}
|
|
|
|
pub fn constant(&self, idx: ConstantIdx) -> &Value {
|
|
&self.constants[idx.0]
|
|
}
|
|
}
|