feat: less clone on symbol
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
use std::collections::HashMap;
|
||||
|
||||
use ecow::EcoString;
|
||||
|
||||
use crate::ty::internal::{Const, Param};
|
||||
@@ -11,10 +13,10 @@ pub enum OpCode {
|
||||
/// load a constant onto stack
|
||||
Const { value: Const },
|
||||
/// load a dynamic var onto stack
|
||||
LookUp { sym: EcoString },
|
||||
LookUp { sym: usize },
|
||||
/// load a thunk lazily onto stack
|
||||
LoadThunk { idx: usize },
|
||||
/// TODO:
|
||||
/// let TOS capture current environment
|
||||
CaptureEnv,
|
||||
/// force TOS to value
|
||||
ForceValue,
|
||||
@@ -40,7 +42,7 @@ pub enum OpCode {
|
||||
/// finalize the recursive attribute set at TOS
|
||||
FinalizeRec,
|
||||
/// [ .. set value ] consume 1 element, push a static kv pair (`name`, `value`) into `set`
|
||||
PushStaticAttr { name: EcoString },
|
||||
PushStaticAttr { name: usize },
|
||||
/// [ .. set name value ] consume 2 elements, push a dynamic kv pair (`name`, `value`) in to `set`
|
||||
PushDynamicAttr,
|
||||
|
||||
@@ -59,13 +61,13 @@ pub enum OpCode {
|
||||
/// [ .. a ] consume 1 element, perform a unary operation `op` `a`
|
||||
UnOp { op: UnOp },
|
||||
/// set TOS to the bool value of whether TOS contains `sym`
|
||||
HasAttr { sym: EcoString },
|
||||
HasAttr { sym: usize },
|
||||
/// [ .. set sym ] consume 2 elements, set TOS to the bool value of whether `set` contains `sym`
|
||||
HasDynamicAttr,
|
||||
/// [ .. set ] select `sym` from `set`
|
||||
Select { sym: EcoString },
|
||||
Select { sym: usize },
|
||||
/// [ .. set default ] select `sym` from `set` or `default`
|
||||
SelectOrDefault { sym: EcoString },
|
||||
SelectOrDefault { sym: usize },
|
||||
/// [ .. set sym ] select `sym` from `set`
|
||||
SelectDynamic,
|
||||
/// [ .. set sym default ] select `sym` from `set` or `default`
|
||||
@@ -82,15 +84,20 @@ pub enum OpCode {
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub enum BinOp {
|
||||
Add,
|
||||
Sub,
|
||||
Mul,
|
||||
Div,
|
||||
And,
|
||||
Or,
|
||||
Eq,
|
||||
Lt,
|
||||
Con,
|
||||
Upd,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub enum UnOp {
|
||||
Neg,
|
||||
Not,
|
||||
}
|
||||
|
||||
@@ -105,4 +112,6 @@ pub struct Program {
|
||||
pub top_level: OpCodes,
|
||||
pub thunks: Slice<OpCodes>,
|
||||
pub funcs: Slice<Func>,
|
||||
pub symbols: Vec<EcoString>,
|
||||
pub symmap: HashMap<EcoString, usize>,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user