mirror of
https://github.com/erg-lang/erg.git
synced 2025-10-02 21:44:34 +00:00
perf: cheap compilation option
This commit is contained in:
parent
fdbfaec19a
commit
a7dbdb7c8d
3 changed files with 23 additions and 0 deletions
|
@ -2913,6 +2913,9 @@ impl Context {
|
|||
}
|
||||
|
||||
pub(crate) fn get_similar_name(&self, name: &str) -> Option<&str> {
|
||||
if self.cfg.fast_error_report {
|
||||
return None;
|
||||
}
|
||||
levenshtein::get_similar_name(
|
||||
self.dir().into_iter().map(|(vn, _)| &vn.inspect()[..]),
|
||||
name,
|
||||
|
@ -2924,6 +2927,9 @@ impl Context {
|
|||
}
|
||||
|
||||
pub(crate) fn get_similar_name_and_info(&self, name: &str) -> Option<(&VarInfo, &str)> {
|
||||
if self.cfg.fast_error_report {
|
||||
return None;
|
||||
}
|
||||
levenshtein::get_similar_name_and_some(
|
||||
self.dir()
|
||||
.into_iter()
|
||||
|
@ -2948,6 +2954,9 @@ impl Context {
|
|||
}
|
||||
|
||||
pub(crate) fn get_similar_attr<'a>(&'a self, self_t: &'a Type, name: &str) -> Option<&'a str> {
|
||||
if self.cfg.fast_error_report {
|
||||
return None;
|
||||
}
|
||||
for ctx in self.get_nominal_super_type_ctxs(self_t)? {
|
||||
if let Some(name) = ctx.get_similar_name(name) {
|
||||
return Some(name);
|
||||
|
@ -2973,6 +2982,9 @@ impl Context {
|
|||
self_t: &'a Type,
|
||||
name: &str,
|
||||
) -> Option<(&'a VarInfo, &'a str)> {
|
||||
if self.cfg.fast_error_report {
|
||||
return None;
|
||||
}
|
||||
for ctx in self.get_nominal_super_type_ctxs(self_t)? {
|
||||
if let Some((vi, name)) = ctx.get_similar_name_and_info(name) {
|
||||
return Some((vi, name));
|
||||
|
|
|
@ -256,6 +256,8 @@ impl Context {
|
|||
let mut tmp_tv_cache = TyVarCache::new(self.level, self);
|
||||
let spec_t = if let Some(t_spec) = t_spec {
|
||||
self.instantiate_typespec_full(t_spec, None, &mut tmp_tv_cache, mode, false)?
|
||||
} else if self.cfg.no_infer_fn_type {
|
||||
Type::Failure
|
||||
} else {
|
||||
free_var(self.level, Constraint::new_type_of(Type))
|
||||
};
|
||||
|
@ -405,6 +407,8 @@ impl Context {
|
|||
ty
|
||||
}
|
||||
}
|
||||
} else if self.cfg.no_infer_fn_type {
|
||||
Type::Failure
|
||||
} else {
|
||||
// preregisterならouter scopeで型宣言(see inference.md)
|
||||
let level = if mode.is_preregister() {
|
||||
|
@ -451,6 +455,9 @@ impl Context {
|
|||
) -> Failable<Type> {
|
||||
let mut errs = TyCheckErrors::empty();
|
||||
let gen_free_t = || {
|
||||
if self.cfg.no_infer_fn_type {
|
||||
return Type::Failure;
|
||||
}
|
||||
let level = if mode.is_preregister() {
|
||||
self.level
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue