feat(tvix/eval): add mechanism for emitting warnings from compiler
These can be used predominantly to emit warnings about things that the compiler can infer, such as deprecated language features. Change-Id: I3649c625459d7f3f95cdf42d5c651d23d66569ec Reviewed-on: https://cl.tvl.fyi/c/depot/+/6174 Reviewed-by: grfn <grfn@gws.fyi> Tested-by: BuildkiteCI
This commit is contained in:
parent
5512108ca7
commit
7e77972d71
4 changed files with 39 additions and 5 deletions
|
|
@ -17,12 +17,22 @@ use crate::chunk::Chunk;
|
|||
use crate::errors::EvalResult;
|
||||
use crate::opcode::{CodeIdx, OpCode};
|
||||
use crate::value::Value;
|
||||
use crate::warnings::EvalWarning;
|
||||
|
||||
use rnix;
|
||||
use rnix::types::{BinOpKind, EntryHolder, TokenWrapper, TypedNode, Wrapper};
|
||||
|
||||
/// Represents the result of compiling a piece of Nix code. If
|
||||
/// compilation was successful, the resulting bytecode can be passed
|
||||
/// to the VM.
|
||||
pub struct CompilationResult {
|
||||
pub chunk: Chunk,
|
||||
pub warnings: Vec<EvalWarning>,
|
||||
}
|
||||
|
||||
struct Compiler {
|
||||
chunk: Chunk,
|
||||
warnings: Vec<EvalWarning>,
|
||||
}
|
||||
|
||||
impl Compiler {
|
||||
|
|
@ -573,12 +583,16 @@ impl Compiler {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn compile(ast: rnix::AST) -> EvalResult<Chunk> {
|
||||
pub fn compile(ast: rnix::AST) -> EvalResult<CompilationResult> {
|
||||
let mut c = Compiler {
|
||||
chunk: Chunk::default(),
|
||||
warnings: vec![],
|
||||
};
|
||||
|
||||
c.compile(ast.node())?;
|
||||
|
||||
Ok(c.chunk)
|
||||
Ok(CompilationResult {
|
||||
chunk: c.chunk,
|
||||
warnings: c.warnings,
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue