///|
pub(all) struct ParseLimits {
max_source_units : Int
max_lines : Int
} derive(Eq, Debug)
///|
pub fn default_limits() -> ParseLimits {
{ max_source_units: 1048576, max_lines: 50000 }
}
///|
fn budget_diagnostic(source : String, limits : ParseLimits) -> Diagnostic? {
if limits.max_source_units < 0 || limits.max_lines < 0 {
return Some(
diagnostic("LIMIT001", "limits must be nonnegative", span(0, 0, 1, 1)),
)
}
if source.length() > limits.max_source_units {
return Some(
diagnostic(
"LIMIT002",
"source exceeds UTF-16 unit budget",
span(0, source.length(), 1, 1),
),
)
}
None
}