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