use crate::{
environment::lexical_environment::{Environment, EnvironmentType},
Value,
};
use gc::{Finalize, Trace};
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);
fn create_immutable_binding(&mut self, name: String, strict: bool) -> bool;
fn initialize_binding(&mut self, name: &str, value: Value);
fn set_mutable_binding(&mut self, name: &str, value: Value, strict: bool);
fn get_binding_value(&self, name: &str, strict: bool) -> Value;
fn delete_binding(&mut self, name: &str) -> bool;
fn has_this_binding(&self) -> bool;
fn get_this_binding(&self) -> Value;
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>;
}