Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 12 pull requests #102061

Merged
merged 93 commits into from
Sep 20, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
06139e5
use `File::options()` instead of `File::create()`
Aug 25, 2022
f9e2ac5
fix: handle trait methods as inherent methods for trait object types
lowr Aug 30, 2022
484d5b6
fix: handle trait methods as inherent methods for placeholders
lowr Aug 30, 2022
29729ab
Retain imports on find-all-references
enomado Sep 4, 2022
ba40aa7
Update crates/ide/src/references.rs
enomado Sep 4, 2022
6001e7d
fix
enomado Sep 4, 2022
bd0eeb3
Update crates/ide/src/references.rs
enomado Sep 7, 2022
92d54f9
typo and draft
enomado Sep 7, 2022
eba54c2
pretty solition works
enomado Sep 7, 2022
9f6553e
add config for import filtering
enomado Sep 7, 2022
1764c42
fix comment
enomado Sep 8, 2022
0240294
fix comment round 2
enomado Sep 8, 2022
ab0b64b
fix comment round 3
enomado Sep 8, 2022
773f9b3
fix. round 4
enomado Sep 8, 2022
f7f4792
fixes
enomado Sep 9, 2022
7d19971
Add config to unconditionally prefer core imports over std
Veykril Sep 9, 2022
9c97997
Remove the toggleInlayHints command from VSCode
Veykril Sep 10, 2022
2584d48
wip
kartva Sep 10, 2022
cc72008
new lint: move_format_string_arg
kartva Sep 10, 2022
a5cbee4
remove false positive
kartva Sep 10, 2022
fb5ae99
suggest ExtractRefactor if no expressions found
kartva Sep 11, 2022
8a2803d
Allow configuration of annotation location.
mathew-horner Sep 12, 2022
32603ba
Remove redundant 'resolve_obligations_as_possible' call
bminaiev Sep 12, 2022
bc13142
Auto merge of #13222 - BorysMinaiev:master, r=flodiebold
bors Sep 12, 2022
352a5b8
Auto merge of #13212 - Veykril:no-std-config, r=Veykril
bors Sep 12, 2022
e38dfe5
Auto merge of #13186 - enomado:master, r=Veykril
bors Sep 12, 2022
7a704f2
Auto merge of #13147 - lowr:fix/dyn-ty-inherent-methods, r=Veykril
bors Sep 12, 2022
54e9324
Update crates/ide-assists/src/handlers/move_format_string_arg.rs
kartva Sep 12, 2022
b54d22d
Auto merge of #13215 - Veykril:toggle-inlay, r=Veykril
bors Sep 12, 2022
efb5616
fix: handle lifetime variables in projection normalization
lowr Sep 12, 2022
b1a4ba3
Auto merge of #13223 - lowr:fix/hir-proj-normalization, r=flodiebold
bors Sep 12, 2022
f64c956
Auto merge of #13216 - DesmondWillowbrook:move_format_string_arg, r=D…
bors Sep 12, 2022
d223c28
Remove unnecessary `Option`
lowr Sep 12, 2022
f57c15f
Address comments and fix build.
mathew-horner Sep 12, 2022
cadb01c
Move reference imports filtering into to_proto layer
Veykril Sep 13, 2022
482a992
Auto merge of #13228 - Veykril:ref-import-filtering, r=Veykril
bors Sep 13, 2022
a8ecaa1
Restructure `find_path` into a separate functions for modules and non…
Veykril Sep 13, 2022
125d43c
Auto merge of #13227 - Veykril:core-pref, r=Veykril
bors Sep 13, 2022
ba15f75
Auto merge of #13225 - lowr:fix/hir-proj-normalization, r=Veykril
bors Sep 13, 2022
dbb8fed
Auto merge of #13221 - mdx97:mdx97/annotations-above-whole-item, r=Ve…
bors Sep 13, 2022
8823634
Manually cleanup token stream when macro expansion aborts.
cjgillot Aug 7, 2022
cb5ea8d
Emit an error instead of reconstructing token stream.
cjgillot Aug 8, 2022
c407cc5
Add cargo.extraEnv setting
dpaoliello Aug 18, 2022
dddfb7d
Improve error message for unsupported crate
hanar3 Sep 14, 2022
5e2f9e3
mbe: Return Bindings from build_inner
jplatte Sep 14, 2022
f7f6d28
mbe: Use extend instead of push in loop
jplatte Sep 14, 2022
b6aed79
mbe: Remove double reference in container
jplatte Sep 14, 2022
5430554
mbe: Remove Vec reference in container
jplatte Sep 14, 2022
d6f0fd0
mbe: Remove unnecessary reference to usize
jplatte Sep 14, 2022
c4a87ee
mbe: Remove unneeded unwrap
jplatte Sep 14, 2022
2b61be2
Auto merge of #13232 - jplatte:mbe-refactor, r=Veykril
bors Sep 14, 2022
a9f103e
Fix prelude injection
Veykril Sep 15, 2022
6b163c3
Auto merge of #13235 - Veykril:prelude-handling, r=Veykril
bors Sep 15, 2022
e7abf34
Fix add reference action on macros.
mathew-horner Sep 16, 2022
ad17ba1
Complete variants and assoc items in path pattern through type aliases
Veykril Sep 16, 2022
870bfc7
Auto merge of #13242 - Veykril:completion-alias, r=Veykril
bors Sep 16, 2022
b73fa0b
Use memmem when searching for usages in ide-db
Veykril Sep 16, 2022
b6e3f41
Auto merge of #13243 - Veykril:search-memchr, r=Veykril
bors Sep 16, 2022
a65ca20
Fix tests by using primitive rather than String.
mathew-horner Sep 16, 2022
932e63b
Auto merge of #13239 - mdx97:mathew/fix-add-reference-for-macros, r=V…
bors Sep 17, 2022
0405a5d
improve error message for when a query isn't supported
hanar3 Sep 17, 2022
eed6fdb
clarify that linting is not a semantic change
RalfJung Sep 18, 2022
11bf2e7
Auto merge of #13058 - dpaoliello:extraenv, r=Veykril
bors Sep 18, 2022
0d9f971
Simplify
Veykril Sep 18, 2022
39eaf78
Auto merge of #13253 - Veykril:simplify, r=Veykril
bors Sep 18, 2022
fac12e2
Use LLVM C-API to build atomic cmpxchg and fence
cuviper Sep 18, 2022
e54f61d
Try to fix crash introduced in #13147
lnicola Sep 19, 2022
187bee0
Auto merge of #13257 - rust-lang:revert-13147-fix/dyn-ty-inherent-met…
bors Sep 19, 2022
db2d5df
Add GUI test for notable traits element position
GuillaumeGomez Sep 19, 2022
550bd09
Simplify rpitit handling on lower_fn_decl
spastorino Sep 19, 2022
7207b4d
remove `FnCtxt::to_const`
lcnr Sep 19, 2022
638b612
remove `ty::Const::from_inline_const`
lcnr Sep 19, 2022
5268567
ctfe, `const_to_op` only for mir constants
lcnr Sep 19, 2022
c54c5a3
`DestructuredConst` split mir and ty
lcnr Sep 19, 2022
9457380
rustdoc: remove `docblock` class from `item-decl`
notriddle Sep 19, 2022
8e6cf7d
rustdoc: update test cases for changed item-decl HTML
notriddle Sep 19, 2022
78d8ce3
rustdoc: remove no-op CSS `h1-6 { border-bottom-color }`
notriddle Sep 20, 2022
17259c3
Remove useless color assertions on 0px borders
notriddle Sep 20, 2022
690c467
Make the `normalize-overflow` rustdoc test actually do something
jyn514 Sep 20, 2022
a2cb8a4
add comment explaining read permissions
Sep 20, 2022
9dcd19b
:arrow_up: rust-analyzer
lnicola Sep 20, 2022
14b27cf
Rollup merge of #100250 - cjgillot:recover-token-stream, r=Aaron1011
notriddle Sep 20, 2022
3f377d3
Rollup merge of #101014 - isikkema:fix-zmeta-stats-file-encoder-no-re…
notriddle Sep 20, 2022
2c89373
Rollup merge of #101958 - hanar3:101666/enhance-error-message, r=oli-obk
notriddle Sep 20, 2022
0d2e57c
Rollup merge of #101976 - RalfJung:mir-semantic-phases, r=oli-obk
notriddle Sep 20, 2022
2c57a5b
Rollup merge of #102001 - cuviper:build-atomic-capi, r=nikic
notriddle Sep 20, 2022
0922172
Rollup merge of #102008 - GuillaumeGomez:notable-trait-gui-test, r=no…
notriddle Sep 20, 2022
08b369a
Rollup merge of #102013 - spastorino:rpitit-lower-fn-decl, r=compiler…
notriddle Sep 20, 2022
b149c48
Rollup merge of #102021 - lcnr:tyConst-fun, r=b-naber,BoxyUwU
notriddle Sep 20, 2022
1b54ee3
Rollup merge of #102027 - notriddle:notriddle/docblock-item-decl, r=G…
notriddle Sep 20, 2022
128733d
Rollup merge of #102034 - notriddle:notriddle/border-bottom, r=Guilla…
notriddle Sep 20, 2022
3fac4bb
Rollup merge of #102038 - jyn514:rustdoc-normalize-test, r=compiler-e…
notriddle Sep 20, 2022
25f5483
Rollup merge of #102053 - lnicola:rust-analyzer-2022-09-20, r=lnicola
notriddle Sep 20, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 15 additions & 45 deletions compiler/rustc_ast_lowering/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -324,16 +324,10 @@ enum FnDeclKind {
}

impl FnDeclKind {
fn impl_trait_return_allowed(&self, tcx: TyCtxt<'_>) -> bool {
fn impl_trait_allowed(&self, tcx: TyCtxt<'_>) -> bool {
match self {
FnDeclKind::Fn | FnDeclKind::Inherent => true,
FnDeclKind::Impl if tcx.features().return_position_impl_trait_in_trait => true,
_ => false,
}
}

fn impl_trait_in_trait_allowed(&self, tcx: TyCtxt<'_>) -> bool {
match self {
FnDeclKind::Trait if tcx.features().return_position_impl_trait_in_trait => true,
_ => false,
}
Expand Down Expand Up @@ -1698,9 +1692,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
}));

let output = if let Some((ret_id, span)) = make_ret_async {
match kind {
FnDeclKind::Trait => {
if !kind.impl_trait_in_trait_allowed(self.tcx) {
if !kind.impl_trait_allowed(self.tcx) {
match kind {
FnDeclKind::Trait | FnDeclKind::Impl => {
self.tcx
.sess
.create_feature_err(
Expand All @@ -1709,51 +1703,27 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
)
.emit();
}
self.lower_async_fn_ret_ty(
&decl.output,
fn_node_id.expect("`make_ret_async` but no `fn_def_id`"),
ret_id,
true,
)
}
_ => {
if !kind.impl_trait_return_allowed(self.tcx) {
if kind == FnDeclKind::Impl {
self.tcx
.sess
.create_feature_err(
TraitFnAsync { fn_span, span },
sym::return_position_impl_trait_in_trait,
)
.emit();
} else {
self.tcx.sess.emit_err(TraitFnAsync { fn_span, span });
}
_ => {
self.tcx.sess.emit_err(TraitFnAsync { fn_span, span });
}
self.lower_async_fn_ret_ty(
&decl.output,
fn_node_id.expect("`make_ret_async` but no `fn_def_id`"),
ret_id,
false,
)
}
}

self.lower_async_fn_ret_ty(
&decl.output,
fn_node_id.expect("`make_ret_async` but no `fn_def_id`"),
ret_id,
matches!(kind, FnDeclKind::Trait),
)
} else {
match decl.output {
FnRetTy::Ty(ref ty) => {
let mut context = match fn_node_id {
Some(fn_node_id) if kind.impl_trait_return_allowed(self.tcx) => {
let fn_def_id = self.local_def_id(fn_node_id);
ImplTraitContext::ReturnPositionOpaqueTy {
origin: hir::OpaqueTyOrigin::FnReturn(fn_def_id),
in_trait: false,
}
}
Some(fn_node_id) if kind.impl_trait_in_trait_allowed(self.tcx) => {
Some(fn_node_id) if kind.impl_trait_allowed(self.tcx) => {
let fn_def_id = self.local_def_id(fn_node_id);
ImplTraitContext::ReturnPositionOpaqueTy {
origin: hir::OpaqueTyOrigin::FnReturn(fn_def_id),
in_trait: true,
in_trait: matches!(kind, FnDeclKind::Trait),
}
}
_ => ImplTraitContext::Disallowed(match kind {
Expand Down
64 changes: 36 additions & 28 deletions compiler/rustc_builtin_macros/src/cfg_eval.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use rustc_ast::visit::Visitor;
use rustc_ast::NodeId;
use rustc_ast::{mut_visit, visit};
use rustc_ast::{Attribute, HasAttrs, HasTokens};
use rustc_errors::PResult;
use rustc_expand::base::{Annotatable, ExtCtxt};
use rustc_expand::config::StripUnconfigured;
use rustc_expand::configure;
Expand Down Expand Up @@ -144,33 +145,34 @@ impl CfgEval<'_, '_> {
// the location of `#[cfg]` and `#[cfg_attr]` in the token stream. The tokenization
// process is lossless, so this process is invisible to proc-macros.

let parse_annotatable_with: fn(&mut Parser<'_>) -> _ = match annotatable {
Annotatable::Item(_) => {
|parser| Annotatable::Item(parser.parse_item(ForceCollect::Yes).unwrap().unwrap())
}
Annotatable::TraitItem(_) => |parser| {
Annotatable::TraitItem(
parser.parse_trait_item(ForceCollect::Yes).unwrap().unwrap().unwrap(),
)
},
Annotatable::ImplItem(_) => |parser| {
Annotatable::ImplItem(
parser.parse_impl_item(ForceCollect::Yes).unwrap().unwrap().unwrap(),
)
},
Annotatable::ForeignItem(_) => |parser| {
Annotatable::ForeignItem(
parser.parse_foreign_item(ForceCollect::Yes).unwrap().unwrap().unwrap(),
)
},
Annotatable::Stmt(_) => |parser| {
Annotatable::Stmt(P(parser.parse_stmt(ForceCollect::Yes).unwrap().unwrap()))
},
Annotatable::Expr(_) => {
|parser| Annotatable::Expr(parser.parse_expr_force_collect().unwrap())
}
_ => unreachable!(),
};
let parse_annotatable_with: for<'a> fn(&mut Parser<'a>) -> PResult<'a, _> =
match annotatable {
Annotatable::Item(_) => {
|parser| Ok(Annotatable::Item(parser.parse_item(ForceCollect::Yes)?.unwrap()))
}
Annotatable::TraitItem(_) => |parser| {
Ok(Annotatable::TraitItem(
parser.parse_trait_item(ForceCollect::Yes)?.unwrap().unwrap(),
))
},
Annotatable::ImplItem(_) => |parser| {
Ok(Annotatable::ImplItem(
parser.parse_impl_item(ForceCollect::Yes)?.unwrap().unwrap(),
))
},
Annotatable::ForeignItem(_) => |parser| {
Ok(Annotatable::ForeignItem(
parser.parse_foreign_item(ForceCollect::Yes)?.unwrap().unwrap(),
))
},
Annotatable::Stmt(_) => |parser| {
Ok(Annotatable::Stmt(P(parser.parse_stmt(ForceCollect::Yes)?.unwrap())))
},
Annotatable::Expr(_) => {
|parser| Ok(Annotatable::Expr(parser.parse_expr_force_collect()?))
}
_ => unreachable!(),
};

// 'Flatten' all nonterminals (i.e. `TokenKind::Interpolated`)
// to `None`-delimited groups containing the corresponding tokens. This
Expand All @@ -193,7 +195,13 @@ impl CfgEval<'_, '_> {
let mut parser =
rustc_parse::stream_to_parser(&self.cfg.sess.parse_sess, orig_tokens, None);
parser.capture_cfg = true;
annotatable = parse_annotatable_with(&mut parser);
match parse_annotatable_with(&mut parser) {
Ok(a) => annotatable = a,
Err(mut err) => {
err.emit();
return Some(annotatable);
}
}

// Now that we have our re-parsed `AttrTokenStream`, recursively configuring
// our attribute target will correctly the tokens as well.
Expand Down
26 changes: 16 additions & 10 deletions compiler/rustc_codegen_llvm/src/builder.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
use crate::attributes;
use crate::common::Funclet;
use crate::context::CodegenCx;
use crate::llvm::{self, BasicBlock, False};
use crate::llvm::{AtomicOrdering, AtomicRmwBinOp, SynchronizationScope};
use crate::llvm::{self, AtomicOrdering, AtomicRmwBinOp, BasicBlock};
use crate::type_::Type;
use crate::type_of::LayoutLlvmExt;
use crate::value::Value;
use cstr::cstr;
use libc::{c_char, c_uint};
use rustc_codegen_ssa::common::{IntPredicate, RealPredicate, TypeKind};
use rustc_codegen_ssa::common::{IntPredicate, RealPredicate, SynchronizationScope, TypeKind};
use rustc_codegen_ssa::mir::operand::{OperandRef, OperandValue};
use rustc_codegen_ssa::mir::place::PlaceRef;
use rustc_codegen_ssa::traits::*;
Expand Down Expand Up @@ -1042,15 +1041,17 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
) -> &'ll Value {
let weak = if weak { llvm::True } else { llvm::False };
unsafe {
llvm::LLVMRustBuildAtomicCmpXchg(
let value = llvm::LLVMBuildAtomicCmpXchg(
self.llbuilder,
dst,
cmp,
src,
AtomicOrdering::from_generic(order),
AtomicOrdering::from_generic(failure_order),
weak,
)
llvm::False, // SingleThreaded
);
llvm::LLVMSetWeak(value, weak);
value
}
}
fn atomic_rmw(
Expand All @@ -1067,21 +1068,26 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
dst,
src,
AtomicOrdering::from_generic(order),
False,
llvm::False, // SingleThreaded
)
}
}

fn atomic_fence(
&mut self,
order: rustc_codegen_ssa::common::AtomicOrdering,
scope: rustc_codegen_ssa::common::SynchronizationScope,
scope: SynchronizationScope,
) {
let single_threaded = match scope {
SynchronizationScope::SingleThread => llvm::True,
SynchronizationScope::CrossThread => llvm::False,
};
unsafe {
llvm::LLVMRustBuildAtomicFence(
llvm::LLVMBuildFence(
self.llbuilder,
AtomicOrdering::from_generic(order),
SynchronizationScope::from_generic(scope),
single_threaded,
UNNAMED,
);
}
}
Expand Down
36 changes: 9 additions & 27 deletions compiler/rustc_codegen_llvm/src/llvm/ffi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -400,27 +400,6 @@ impl AtomicOrdering {
}
}

/// LLVMRustSynchronizationScope
#[derive(Copy, Clone)]
#[repr(C)]
pub enum SynchronizationScope {
SingleThread,
CrossThread,
}

impl SynchronizationScope {
pub fn from_generic(sc: rustc_codegen_ssa::common::SynchronizationScope) -> Self {
match sc {
rustc_codegen_ssa::common::SynchronizationScope::SingleThread => {
SynchronizationScope::SingleThread
}
rustc_codegen_ssa::common::SynchronizationScope::CrossThread => {
SynchronizationScope::CrossThread
}
}
}
}

/// LLVMRustFileType
#[derive(Copy, Clone)]
#[repr(C)]
Expand Down Expand Up @@ -1782,16 +1761,18 @@ extern "C" {
Order: AtomicOrdering,
) -> &'a Value;

pub fn LLVMRustBuildAtomicCmpXchg<'a>(
pub fn LLVMBuildAtomicCmpXchg<'a>(
B: &Builder<'a>,
LHS: &'a Value,
CMP: &'a Value,
RHS: &'a Value,
Order: AtomicOrdering,
FailureOrder: AtomicOrdering,
Weak: Bool,
SingleThreaded: Bool,
) -> &'a Value;

pub fn LLVMSetWeak(CmpXchgInst: &Value, IsWeak: Bool);

pub fn LLVMBuildAtomicRMW<'a>(
B: &Builder<'a>,
Op: AtomicRmwBinOp,
Expand All @@ -1801,11 +1782,12 @@ extern "C" {
SingleThreaded: Bool,
) -> &'a Value;

pub fn LLVMRustBuildAtomicFence(
B: &Builder<'_>,
pub fn LLVMBuildFence<'a>(
B: &Builder<'a>,
Order: AtomicOrdering,
Scope: SynchronizationScope,
);
SingleThreaded: Bool,
Name: *const c_char,
) -> &'a Value;

/// Writes a module to the specified path. Returns 0 on success.
pub fn LLVMWriteBitcodeToFile(M: &Module, Path: *const c_char) -> c_int;
Expand Down
8 changes: 4 additions & 4 deletions compiler/rustc_const_eval/src/const_eval/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,10 +100,10 @@ pub(crate) fn try_destructure_mir_constant<'tcx>(
tcx: TyCtxt<'tcx>,
param_env: ty::ParamEnv<'tcx>,
val: mir::ConstantKind<'tcx>,
) -> InterpResult<'tcx, mir::DestructuredMirConstant<'tcx>> {
) -> InterpResult<'tcx, mir::DestructuredConstant<'tcx>> {
trace!("destructure_mir_constant: {:?}", val);
let ecx = mk_eval_cx(tcx, DUMMY_SP, param_env, false);
let op = ecx.mir_const_to_op(&val, None)?;
let op = ecx.const_to_op(&val, None)?;

// We go to `usize` as we cannot allocate anything bigger anyway.
let (field_count, variant, down) = match val.ty().kind() {
Expand All @@ -129,7 +129,7 @@ pub(crate) fn try_destructure_mir_constant<'tcx>(
.collect::<InterpResult<'tcx, Vec<_>>>()?;
let fields = tcx.arena.alloc_from_iter(fields_iter);

Ok(mir::DestructuredMirConstant { variant, fields })
Ok(mir::DestructuredConstant { variant, fields })
}

#[instrument(skip(tcx), level = "debug")]
Expand All @@ -139,7 +139,7 @@ pub(crate) fn deref_mir_constant<'tcx>(
val: mir::ConstantKind<'tcx>,
) -> mir::ConstantKind<'tcx> {
let ecx = mk_eval_cx(tcx, DUMMY_SP, param_env, false);
let op = ecx.mir_const_to_op(&val, None).unwrap();
let op = ecx.const_to_op(&val, None).unwrap();
let mplace = ecx.deref_operand(&op).unwrap();
if let Some(alloc_id) = mplace.ptr.provenance {
assert_eq!(
Expand Down
9 changes: 4 additions & 5 deletions compiler/rustc_const_eval/src/interpret/eval_context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -683,11 +683,10 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
self.stack_mut().push(frame);

// Make sure all the constants required by this frame evaluate successfully (post-monomorphization check).
for const_ in &body.required_consts {
let span = const_.span;
let const_ =
self.subst_from_current_frame_and_normalize_erasing_regions(const_.literal)?;
self.mir_const_to_op(&const_, None).map_err(|err| {
for ct in &body.required_consts {
let span = ct.span;
let ct = self.subst_from_current_frame_and_normalize_erasing_regions(ct.literal)?;
self.const_to_op(&ct, None).map_err(|err| {
// If there was an error, set the span of the current frame to this constant.
// Avoiding doing this when evaluation succeeds.
self.frame_mut().loc = Err(span);
Expand Down
Loading