Finish parser refactor, simplifying code and diagnostics handling.
This commit is contained in:
parent
4e3f1677be
commit
2dfd8e8a29
@ -105,14 +105,10 @@ fn compile_statement(
|
|||||||
register_count: usize,
|
register_count: usize,
|
||||||
constants_table: &mut ConstantsTable,
|
constants_table: &mut ConstantsTable,
|
||||||
) -> Result<Function, Diagnostics> {
|
) -> Result<Function, Diagnostics> {
|
||||||
let maybe_statement = parse_statement(input);
|
let parse_result = parse_statement(input);
|
||||||
if !maybe_statement.is_ok() {
|
if !parse_result.is_ok() {
|
||||||
Err(maybe_statement.into_diagnostics())
|
Err(parse_result.1)
|
||||||
} else {
|
} else {
|
||||||
session.compile_statement(
|
session.compile_statement(&parse_result.0.unwrap(), register_count, constants_table)
|
||||||
&maybe_statement.into_inner(),
|
|
||||||
register_count,
|
|
||||||
constants_table,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
#![feature(option_zip)]
|
||||||
|
|
||||||
use crate::ast::statement::Statement;
|
use crate::ast::statement::Statement;
|
||||||
use crate::constants_table::ConstantsTable;
|
use crate::constants_table::ConstantsTable;
|
||||||
use crate::diagnostic::Diagnostics;
|
use crate::diagnostic::Diagnostics;
|
||||||
@ -5,7 +7,7 @@ use crate::ir::compile_dvm_function;
|
|||||||
use crate::ir::ir_variable::{IrStackFrameVariables, IrVariable, IrVariableInfo};
|
use crate::ir::ir_variable::{IrStackFrameVariables, IrVariable, IrVariableInfo};
|
||||||
use crate::lowering::util::to_ir_type_info;
|
use crate::lowering::util::to_ir_type_info;
|
||||||
use crate::lowering::{lower_to_ir_compilation_unit, lower_to_ir_synthetic_function};
|
use crate::lowering::{lower_to_ir_compilation_unit, lower_to_ir_synthetic_function};
|
||||||
use crate::parser::parse_compilation_unit;
|
use crate::parser::{ParseResult, parse_compilation_unit};
|
||||||
use crate::semantic_analysis::symbol::SymbolId;
|
use crate::semantic_analysis::symbol::SymbolId;
|
||||||
use crate::semantic_analysis::{analyze_compilation_unit, analyze_statement};
|
use crate::semantic_analysis::{analyze_compilation_unit, analyze_statement};
|
||||||
use dvm_lib::vm::function::Function;
|
use dvm_lib::vm::function::Function;
|
||||||
@ -39,14 +41,14 @@ pub fn compile_compilation_unit(
|
|||||||
register_count: usize,
|
register_count: usize,
|
||||||
constants_table: &mut ConstantsTable,
|
constants_table: &mut ConstantsTable,
|
||||||
) -> Result<CompileCompilationUnitResult, Diagnostics> {
|
) -> Result<CompileCompilationUnitResult, Diagnostics> {
|
||||||
let (compilation_unit, diagnostics) = parse_compilation_unit(input, None);
|
let ParseResult(compilation_unit, mut parse_diagnostics) = parse_compilation_unit(input, None);
|
||||||
if !diagnostics.is_empty() {
|
let mut analysis_diagnostics = analyze_compilation_unit(&compilation_unit, analysis_context);
|
||||||
return Err(diagnostics);
|
|
||||||
}
|
|
||||||
|
|
||||||
let diagnostics = analyze_compilation_unit(&compilation_unit, analysis_context);
|
if !parse_diagnostics.is_empty() || !analysis_diagnostics.is_empty() {
|
||||||
if !diagnostics.is_empty() {
|
let mut all_diagnostics = Vec::new();
|
||||||
return Err(diagnostics);
|
all_diagnostics.append(&mut parse_diagnostics);
|
||||||
|
all_diagnostics.append(&mut analysis_diagnostics);
|
||||||
|
return Err(all_diagnostics);
|
||||||
}
|
}
|
||||||
|
|
||||||
let lower_to_ir_result = lower_to_ir_compilation_unit(&compilation_unit, analysis_context);
|
let lower_to_ir_result = lower_to_ir_compilation_unit(&compilation_unit, analysis_context);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user