Skip to content

Commit 6de83c0

Browse files
authored
Merge branch 'master' into kayagokalp/tool-681
2 parents 99c177d + 6981d3d commit 6de83c0

File tree

50 files changed

+3648
-1049
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+3648
-1049
lines changed

sway-core/src/asm_generation/fuel/fuel_asm_builder.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1351,7 +1351,10 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
13511351
byte_offs,
13521352
instr_reg.clone(),
13531353
Some(&base_reg),
1354-
"get offset to local",
1354+
format!(
1355+
"get offset to local {}",
1356+
local_var.get_type(self.context).as_string(self.context)
1357+
),
13551358
owning_span,
13561359
);
13571360
}

sway-core/src/decl_engine/id.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ use crate::{
22
decl_engine::*,
33
engine_threading::*,
44
language::ty::{
5-
TyDeclParsedType, TyEnumDecl, TyFunctionDecl, TyImplSelfOrTrait, TyStructDecl, TyTraitDecl,
6-
TyTraitFn, TyTraitType, TyTypeAliasDecl,
5+
TyConstantDecl, TyDeclParsedType, TyEnumDecl, TyFunctionDecl, TyImplSelfOrTrait,
6+
TyStructDecl, TyTraitDecl, TyTraitFn, TyTraitType, TyTypeAliasDecl,
77
},
88
type_system::*,
99
};
@@ -240,6 +240,19 @@ impl SubstTypes for DeclId<TyTraitType> {
240240
}
241241
}
242242

243+
impl SubstTypes for DeclId<TyConstantDecl> {
244+
fn subst_inner(&mut self, ctx: &SubstTypesContext) -> HasChanges {
245+
let decl_engine = ctx.engines.de();
246+
let mut decl = (*decl_engine.get(self)).clone();
247+
if decl.subst(ctx).has_changes() {
248+
decl_engine.replace(*self, decl);
249+
HasChanges::Yes
250+
} else {
251+
HasChanges::No
252+
}
253+
}
254+
}
255+
243256
impl<T> DeclId<T>
244257
where
245258
DeclEngine: DeclEngineIndex<T> + DeclEngineInsert<T> + DeclEngineGetParsedDeclId<T>,

sway-core/src/decl_engine/parsed_id.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ use super::{
44
};
55
use crate::{
66
engine_threading::{
7-
EqWithEngines, HashWithEngines, PartialEqWithEngines, PartialEqWithEnginesContext,
7+
DebugWithEngines, EqWithEngines, HashWithEngines, PartialEqWithEngines,
8+
PartialEqWithEnginesContext,
89
},
910
Engines,
1011
};
@@ -58,6 +59,17 @@ impl<T> PartialEq for ParsedDeclId<T> {
5859
}
5960
}
6061

62+
impl<T> DebugWithEngines for ParsedDeclId<T>
63+
where
64+
ParsedDeclEngine: ParsedDeclEngineIndex<T>,
65+
T: Named + Spanned + DebugWithEngines,
66+
{
67+
fn fmt(&self, f: &mut fmt::Formatter<'_>, engines: &Engines) -> fmt::Result {
68+
let decl = engines.pe().get(self);
69+
DebugWithEngines::fmt(&decl, f, engines)
70+
}
71+
}
72+
6173
impl<T> EqWithEngines for ParsedDeclId<T> {}
6274
impl<T> PartialEqWithEngines for ParsedDeclId<T> {
6375
fn eq(&self, other: &Self, _ctx: &PartialEqWithEnginesContext) -> bool {

sway-core/src/ir_generation/compile.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,11 @@ pub(crate) fn compile_configurables(
364364
let decl = engines.de().get(decl_id);
365365

366366
let ty = convert_resolved_type_id(
367-
engines.te(),
368-
engines.de(),
367+
engines,
369368
context,
369+
md_mgr,
370+
module,
371+
None,
370372
decl.type_ascription.type_id(),
371373
&decl.type_ascription.span(),
372374
)
@@ -577,9 +579,6 @@ fn compile_fn(
577579
test_decl_ref: Option<DeclRefFunction>,
578580
cache: &mut CompiledFunctionCache,
579581
) -> Result<Function, Vec<CompileError>> {
580-
let type_engine = engines.te();
581-
let decl_engine = engines.de();
582-
583582
let inline = ast_fn_decl.inline();
584583
let trace = ast_fn_decl.trace();
585584
let ty::TyFunctionDecl {
@@ -615,9 +614,11 @@ fn compile_fn(
615614
.map(|param| {
616615
// Convert to an IR type.
617616
convert_resolved_type_id(
618-
type_engine,
619-
decl_engine,
617+
engines,
620618
context,
619+
md_mgr,
620+
module,
621+
None,
621622
param.type_argument.type_id(),
622623
&param.type_argument.span(),
623624
)
@@ -643,9 +644,11 @@ fn compile_fn(
643644
.map_err(|err| vec![err])?;
644645

645646
let ret_type = convert_resolved_type_id(
646-
type_engine,
647-
decl_engine,
647+
engines,
648648
context,
649+
md_mgr,
650+
module,
651+
None,
649652
return_type.type_id(),
650653
&return_type.span(),
651654
)

sway-core/src/ir_generation/const_eval.rs

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,6 @@ fn create_array_from_vec(
265265
element_types: Vec<crate::TypeId>,
266266
element_vals: Vec<Constant>,
267267
) -> Option<Constant> {
268-
let te = lookup.engines.te();
269268
assert!({
270269
let unify_check = UnifyCheck::coercion(lookup.engines);
271270
element_types
@@ -274,9 +273,10 @@ fn create_array_from_vec(
274273
});
275274

276275
let arr = create_array_aggregate(
277-
te,
278-
lookup.engines.de(),
276+
lookup.engines,
279277
lookup.context,
278+
lookup.md_mgr,
279+
lookup.module,
280280
elem_type,
281281
element_types.len().try_into().unwrap(),
282282
)
@@ -357,22 +357,15 @@ fn const_eval_typed_expr(
357357

358358
res?
359359
}
360-
ty::TyExpressionVariant::ConstantExpression {
361-
decl: const_decl, ..
362-
} => {
363-
let call_path = &const_decl.call_path;
360+
ty::TyExpressionVariant::ConstantExpression { decl, .. } => {
361+
let call_path = &decl.call_path;
364362
let name = &call_path.suffix;
365-
366363
match known_consts.get(name) {
367-
// 1. Check if name/call_path is in known_consts.
368-
Some(cvs) => Some(*cvs),
369-
None => {
370-
// 2. Check if name is a global constant.
371-
(lookup.lookup)(lookup, call_path, &Some(*const_decl.clone()))
372-
.ok()
373-
.flatten()
374-
.and_then(|v| v.get_constant(lookup.context).cloned())
375-
}
364+
Some(constant) => Some(*constant),
365+
None => (lookup.lookup)(lookup, call_path, &Some(*decl.clone()))
366+
.ok()
367+
.flatten()
368+
.and_then(|v| v.get_constant(lookup.context).cloned()),
376369
}
377370
}
378371
ty::TyExpressionVariant::ConfigurableExpression { span, .. } => {
@@ -419,9 +412,10 @@ fn const_eval_typed_expr(
419412
assert!(field_vals.len() == fields.len());
420413

421414
get_struct_for_types(
422-
lookup.engines.te(),
423-
lookup.engines.de(),
415+
lookup.engines,
424416
lookup.context,
417+
lookup.md_mgr,
418+
lookup.module,
425419
&field_types,
426420
)
427421
.map_or(None, |struct_ty| {
@@ -456,9 +450,10 @@ fn const_eval_typed_expr(
456450
assert!(field_vals.len() == fields.len());
457451

458452
create_tuple_aggregate(
459-
lookup.engines.te(),
460-
lookup.engines.de(),
453+
lookup.engines,
461454
lookup.context,
455+
lookup.md_mgr,
456+
lookup.module,
462457
&field_types,
463458
)
464459
.map_or(None, |tuple_ty| {
@@ -525,9 +520,10 @@ fn const_eval_typed_expr(
525520
} => {
526521
let enum_decl = lookup.engines.de().get_enum(enum_ref);
527522
let aggregate = create_tagged_union_type(
528-
lookup.engines.te(),
529-
lookup.engines.de(),
523+
lookup.engines,
530524
lookup.context,
525+
lookup.md_mgr,
526+
lookup.module,
531527
&enum_decl.variants,
532528
);
533529

@@ -1177,9 +1173,11 @@ fn const_eval_intrinsic(
11771173
Intrinsic::SizeOfType => {
11781174
let targ = &intrinsic.type_arguments[0];
11791175
let ir_type = convert_resolved_type_id(
1180-
lookup.engines.te(),
1181-
lookup.engines.de(),
1176+
lookup.engines,
11821177
lookup.context,
1178+
lookup.md_mgr,
1179+
lookup.module,
1180+
lookup.function_compiler,
11831181
targ.type_id(),
11841182
&targ.span(),
11851183
)
@@ -1195,9 +1193,11 @@ fn const_eval_intrinsic(
11951193
let val = &intrinsic.arguments[0];
11961194
let type_id = val.return_type;
11971195
let ir_type = convert_resolved_type_id(
1198-
lookup.engines.te(),
1199-
lookup.engines.de(),
1196+
lookup.engines,
12001197
lookup.context,
1198+
lookup.md_mgr,
1199+
lookup.module,
1200+
lookup.function_compiler,
12011201
type_id,
12021202
&val.span,
12031203
)
@@ -1211,9 +1211,11 @@ fn const_eval_intrinsic(
12111211
Intrinsic::SizeOfStr => {
12121212
let targ = &intrinsic.type_arguments[0];
12131213
let ir_type = convert_resolved_type_id(
1214-
lookup.engines.te(),
1215-
lookup.engines.de(),
1214+
lookup.engines,
12161215
lookup.context,
1216+
lookup.md_mgr,
1217+
lookup.module,
1218+
lookup.function_compiler,
12171219
targ.type_id(),
12181220
&targ.span(),
12191221
)
@@ -1229,9 +1231,11 @@ fn const_eval_intrinsic(
12291231
Intrinsic::AssertIsStrArray => {
12301232
let targ = &intrinsic.type_arguments[0];
12311233
let ir_type = convert_resolved_type_id(
1232-
lookup.engines.te(),
1233-
lookup.engines.de(),
1234+
lookup.engines,
12341235
lookup.context,
1236+
lookup.md_mgr,
1237+
lookup.module,
1238+
lookup.function_compiler,
12351239
targ.type_id(),
12361240
&targ.span(),
12371241
)
@@ -1547,19 +1551,23 @@ fn const_eval_intrinsic(
15471551
Intrinsic::Transmute => {
15481552
let src_type = &intrinsic.type_arguments[0];
15491553
let src_ir_type = convert_resolved_type_id(
1550-
lookup.engines.te(),
1551-
lookup.engines.de(),
1554+
lookup.engines,
15521555
lookup.context,
1556+
lookup.md_mgr,
1557+
lookup.module,
1558+
lookup.function_compiler,
15531559
src_type.type_id(),
15541560
&src_type.span(),
15551561
)
15561562
.unwrap();
15571563

15581564
let dst_type = &intrinsic.type_arguments[1];
15591565
let dst_ir_type = convert_resolved_type_id(
1560-
lookup.engines.te(),
1561-
lookup.engines.de(),
1566+
lookup.engines,
15621567
lookup.context,
1568+
lookup.md_mgr,
1569+
lookup.module,
1570+
lookup.function_compiler,
15631571
dst_type.type_id(),
15641572
&dst_type.span(),
15651573
)

0 commit comments

Comments
 (0)