use std::ops::Deref;
use starlark_derive::StarlarkPagable;
use crate as starlark;
use crate::eval::runtime::frame_span::FrameSpan;
use crate::pagable::StarlarkPagable;
#[derive(Clone, Copy, Debug, StarlarkPagable)]
#[starlark_pagable(bound = "T: StarlarkPagable")]
pub(crate) struct IrSpanned<T> {
pub(crate) span: FrameSpan,
pub(crate) node: T,
}
impl<T> IrSpanned<T> {
pub fn map<U>(&self, f: impl FnOnce(&T) -> U) -> IrSpanned<U> {
IrSpanned {
node: f(&self.node),
span: self.span,
}
}
}
impl<T> Deref for IrSpanned<T> {
type Target = T;
fn deref(&self) -> &T {
&self.node
}
}