feat(tazjin/rlox): Intern all string constants
This is again a step closer to the book, but there are some notable differences: * Only constants encountered by the compiler are interned, all other string operations (well, concatenation) happen with heap objects. * OpReturn will always ensure that a returned string value is newly heap allocated and does not reference the interner. Change-Id: If4f04309446e01b8ff2db51094e9710d465dbc50 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2582 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
This commit is contained in:
parent
bcea8e0d16
commit
432e7a7ddd
4 changed files with 65 additions and 19 deletions
|
|
@ -1,9 +1,29 @@
|
|||
use super::interner::InternedStr;
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub enum Value {
|
||||
Nil,
|
||||
Bool(bool),
|
||||
Number(f64),
|
||||
String(String),
|
||||
String(LoxString),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub enum LoxString {
|
||||
Heap(String),
|
||||
Interned(InternedStr),
|
||||
}
|
||||
|
||||
impl From<String> for LoxString {
|
||||
fn from(s: String) -> Self {
|
||||
LoxString::Heap(s)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<InternedStr> for LoxString {
|
||||
fn from(s: InternedStr) -> Self {
|
||||
LoxString::Interned(s)
|
||||
}
|
||||
}
|
||||
|
||||
impl Value {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue