use super::ErrorKind;
use crate::{
environment::lexical_environment::{Environment, EnvironmentType},
gc::{Finalize, Trace},
Value,
};
use std::fmt::Debug;
pub trait EnvironmentRecordTrait: Debug + Trace + Finalize {
fn has_binding(&self, name: &str) -> bool;
fn create_mutable_binding(
&mut self,
name: String,
deletion: bool,
allow_name_reuse: bool,
) -> Result<(), ErrorKind>;
fn create_immutable_binding(&mut self, name: String, strict: bool) -> Result<(), ErrorKind>;
fn initialize_binding(&mut self, name: &str, value: Value) -> Result<(), ErrorKind>;
fn set_mutable_binding(
&mut self,
name: &str,
value: Value,
strict: bool,
) -> Result<(), ErrorKind>;
fn get_binding_value(&self, name: &str, strict: bool) -> Result<Value, ErrorKind>;
fn delete_binding(&mut self, name: &str) -> bool;
fn has_this_binding(&self) -> bool;
fn get_this_binding(&self) -> Result<Value, ErrorKind>;
fn has_super_binding(&self) -> bool;
fn with_base_object(&self) -> Value;
fn get_outer_environment(&self) -> Option<Environment>;
fn set_outer_environment(&mut self, env: Environment);
fn get_environment_type(&self) -> EnvironmentType;
fn get_global_object(&self) -> Option<Value>;
}