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

Move monomorphization conceptually inside of the type engine #2093

Merged
merged 83 commits into from
Jun 29, 2022
Merged
Show file tree
Hide file tree
Changes from 80 commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
bf6fdc3
Do not rely on TypeMapping when type checking declarations.
Jun 10, 2022
681ce59
Prevent leaking types in impls.
Jun 10, 2022
3f0e80c
Prevent unconstrained type parameters.
Jun 10, 2022
fde6b33
WIP
Jun 13, 2022
a1a968e
Merge with master.
Jun 13, 2022
4e34bf6
Merge remote-tracking branch 'origin/master' into emilyaherbert/preve…
Jun 13, 2022
503a183
Merge branch 'emilyaherbert/prevent-leaking-types' into emilyaherbert…
emilyaherbert Jun 13, 2022
ec9881e
Merge branch 'emilyaherbert/prevent-leaking-types' into emilyaherbert…
emilyaherbert Jun 13, 2022
e4fbc35
Merge branch 'emilyaherbert/type-parameters' into emilyaherbert/preve…
Jun 13, 2022
577ed59
Merge branch 'emilyaherbert/prevent-leaking-types' into emilyaherbert…
emilyaherbert Jun 13, 2022
56a1c6b
Merge branch 'emilyaherbert/prevent-leaking-types' into emilyaherbert…
emilyaherbert Jun 13, 2022
966f110
Merge remote-tracking branch 'origin/master' into emilyaherbert/type-…
Jun 13, 2022
b6c8389
Merge branch 'emilyaherbert/type-parameters' into emilyaherbert/preve…
Jun 13, 2022
8f173f1
Merge branch 'emilyaherbert/prevent-leaking-types' into emilyaherbert…
emilyaherbert Jun 13, 2022
ba48b7f
Merge branch 'emilyaherbert/prevent-leaking-types' into emilyaherbert…
emilyaherbert Jun 13, 2022
ba2574a
Merge branch 'master' into emilyaherbert/prevent-leaking-types
emilyaherbert Jun 13, 2022
60ed360
clippy
Jun 13, 2022
5b23513
Merge branch 'emilyaherbert/prevent-leaking-types' into emilyaherbert…
emilyaherbert Jun 13, 2022
5224c7e
Merge remote-tracking branch 'origin' into emilyaherbert-1898-2/seman…
Jun 13, 2022
90038d6
Merge remote-tracking branch 'origin/emilyaherbert-1143-3/disallow-un…
Jun 13, 2022
6650bf2
WIP
Jun 13, 2022
b403607
Use TypeId in TypeMapping and in TraitMap.
Jun 13, 2022
83d4674
Merge remote-tracking branch 'origin/emilyaherbert/use-type-id' into …
Jun 13, 2022
6f8c116
Add semantic type constraints.
Jun 13, 2022
1e90bce
Merge remote-tracking branch 'origin/master' into emilyaherbert-1898-…
Jun 13, 2022
d8a7b91
Update test case.
Jun 13, 2022
bdfa17e
Merge remote-tracking branch 'origin/master' into emilyaherbert-1143-…
Jun 14, 2022
f43e418
Merge remote-tracking branch 'origin/master' into emilyaherbert/use-t…
Jun 14, 2022
9163a4a
Merge branch 'emilyaherbert-1143-3/disallow-unconstrained-type-parame…
Jun 14, 2022
0b59080
Merge branch 'emilyaherbert/use-type-id' into emilyaherbert-1898-2/se…
Jun 14, 2022
1e7d3ce
fix
Jun 14, 2022
a75f929
Use TypeId inside of resolve_type_with_self and resolve_type_without_…
Jun 14, 2022
fb31778
clippy
Jun 14, 2022
bccc7a0
Merge remote-tracking branch 'origin/master' into emilyaherbert-1898-…
Jun 16, 2022
ff97c79
Merge branch 'master' into emilyaherbert-1898-2/semantic-type-constra…
emilyaherbert Jun 16, 2022
04fb75b
X
Jun 16, 2022
ebbcd38
Merge remote-tracking branch 'origin/emilyaherbert-1898-2/semantic-ty…
Jun 16, 2022
8f1ace7
Merge branch 'master' into emilyaherbert-1898-2/semantic-type-constra…
emilyaherbert Jun 16, 2022
be9310a
Merge branch 'emilyaherbert-1898-2/semantic-type-constraints' into em…
emilyaherbert Jun 16, 2022
b285923
Remove self_type from monomorphization.
Jun 16, 2022
d38560c
Add conceptual distinction between replacing TypeInfo::Self and monom…
Jun 16, 2022
3942946
Merge branch 'master' into emilyaherbert-1898-2/semantic-type-constra…
emilyaherbert Jun 16, 2022
c6a1adb
Merge branch 'emilyaherbert-1898-2/semantic-type-constraints' into em…
emilyaherbert Jun 16, 2022
f50edf1
Merge branch 'emilyaherbert/make-resolve-type-take-a-type-id' into em…
emilyaherbert Jun 16, 2022
dc600b2
Merge branch 'master' into emilyaherbert-1898-2/semantic-type-constra…
emilyaherbert Jun 16, 2022
b422009
Merge branch 'master' into emilyaherbert-1898-2/semantic-type-constra…
emilyaherbert Jun 16, 2022
2bb490c
Merge branch 'emilyaherbert-1898-2/semantic-type-constraints' into em…
emilyaherbert Jun 16, 2022
723558d
Merge branch 'emilyaherbert/make-resolve-type-take-a-type-id' into em…
emilyaherbert Jun 16, 2022
1adbaca
Merge branch 'master' into emilyaherbert-1898-2/semantic-type-constra…
emilyaherbert Jun 17, 2022
5668d1e
Merge branch 'emilyaherbert-1898-2/semantic-type-constraints' into em…
emilyaherbert Jun 17, 2022
bab9a21
Merge branch 'emilyaherbert/make-resolve-type-take-a-type-id' into em…
emilyaherbert Jun 17, 2022
3b5e2f1
Bug is fixed.
Jun 17, 2022
22207cc
Merge branch 'emilyaherbert-1898-2/semantic-type-constraints' of gith…
Jun 17, 2022
60ff0aa
Add forc.lock.
Jun 17, 2022
a7b19ef
update
Jun 17, 2022
61b6968
Merge branch 'master' into emilyaherbert-1898-2/semantic-type-constra…
emilyaherbert Jun 17, 2022
d7e81c5
Move test to inside of the SDK.
Jun 20, 2022
40dbda6
Merge branch 'emilyaherbert-1898-2/semantic-type-constraints' of gith…
Jun 20, 2022
997747e
Fix test cases.
Jun 20, 2022
c80f9a7
Merge remote-tracking branch 'origin/master' into emilyaherbert-1898-…
Jun 20, 2022
7ad25b6
Merge remote-tracking branch 'origin/emilyaherbert-1898-2/semantic-ty…
Jun 20, 2022
a2dfcfd
Merge branch 'emilyaherbert/make-resolve-type-take-a-type-id' into em…
emilyaherbert Jun 20, 2022
75efbef
Add lock files.
Jun 20, 2022
e9ed2d0
Merge branch 'emilyaherbert-1898-2/semantic-type-constraints' into em…
emilyaherbert Jun 20, 2022
18a22b2
Merge branch 'emilyaherbert/make-resolve-type-take-a-type-id' into em…
emilyaherbert Jun 20, 2022
7e98ff0
Fix test.
Jun 20, 2022
00410ed
Merge branch 'emilyaherbert-1898-2/semantic-type-constraints' into em…
emilyaherbert Jun 20, 2022
d02df65
Merge branch 'emilyaherbert/make-resolve-type-take-a-type-id' into em…
emilyaherbert Jun 20, 2022
52d6690
Merge remote-tracking branch 'origin/master' into emilyaherbert/impro…
Jun 21, 2022
24cee14
Merge branch 'master' into emilyaherbert/improve-resolve-type
emilyaherbert Jun 21, 2022
3bd1f84
Move the stuff.
Jun 21, 2022
708b7c3
Merge branch 'master' into emilyaherbert/type-parameters-and-type-bin…
emilyaherbert Jun 21, 2022
cc9d272
Merge remote-tracking branch 'origin/master' into emilyaherbert/type-…
Jun 22, 2022
6e88838
Merge remote-tracking branch 'origin/master' into emilyaherbert/impro…
Jun 22, 2022
011b384
Merge remote-tracking branch 'origin/emilyaherbert/type-parameters-an…
Jun 22, 2022
efdd982
Merge branch 'master' into emilyaherbert/improve-resolve-type
emilyaherbert Jun 23, 2022
d994b3c
Move monomorphization conceptually inside of the type engine.
Jun 23, 2022
acf6365
Merge remote-tracking branch 'origin/emilyaherbert/improve-resolve-ty…
Jun 23, 2022
4fd3999
Remove commented out test.
Jun 23, 2022
8f1b31d
Merge remote-tracking branch 'origin/master' into emilyaherbert/monom…
Jun 27, 2022
ecd528f
Remove dead code.
Jun 28, 2022
9e3b467
Merge branch 'master' into emilyaherbert/monomorphization
emilyaherbert Jun 28, 2022
b971546
Merge branch 'master' into emilyaherbert/monomorphization
mitchmindtree Jun 29, 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
2 changes: 0 additions & 2 deletions sway-core/src/semantic_analysis/ast_node/declaration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ mod abi;
mod r#enum;
mod function;
mod impl_trait;
mod monomorphize;
mod storage;
mod r#struct;
mod r#trait;
Expand All @@ -11,7 +10,6 @@ mod variable;
pub use abi::*;
pub use function::*;
pub use impl_trait::*;
pub(crate) use monomorphize::*;
pub use r#enum::*;
pub use r#struct::*;
pub use r#trait::*;
Expand Down
11 changes: 2 additions & 9 deletions sway-core/src/semantic_analysis/ast_node/declaration/enum.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
use crate::{
error::*,
namespace::*,
parse_tree::*,
semantic_analysis::*,
type_engine::{
insert_type, look_up_type_id, CopyTypes, CreateTypeId, ReplaceSelfType, TypeId,
TypeMapping, TypeParameter,
insert_type, look_up_type_id, CopyTypes, CreateTypeId, EnforceTypeArguments,
MonomorphizeHelper, ReplaceSelfType, TypeId, TypeMapping, TypeParameter,
},
types::{JsonAbiString, ToJsonAbi},
TypeInfo,
Expand Down Expand Up @@ -63,19 +62,13 @@ impl Spanned for TypedEnumDeclaration {
}

impl MonomorphizeHelper for TypedEnumDeclaration {
type Output = TypedEnumDeclaration;

fn type_parameters(&self) -> &[TypeParameter] {
&self.type_parameters
}

fn name(&self) -> &Ident {
&self.name
}

fn monomorphize_inner(self, type_mapping: &TypeMapping, namespace: &mut Items) -> Self::Output {
monomorphize_inner(self, type_mapping, namespace)
}
}

impl TypedEnumDeclaration {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
mod function_parameter;
pub use function_parameter::*;

use crate::{
error::*, namespace::*, parse_tree::*, semantic_analysis::*, style::*, type_engine::*, types::*,
};
use crate::{error::*, parse_tree::*, semantic_analysis::*, style::*, type_engine::*, types::*};
use fuels_types::{Function, Property};
use sha2::{Digest, Sha256};
use sway_types::{Ident, Span, Spanned};
Expand Down Expand Up @@ -74,25 +72,13 @@ impl Spanned for TypedFunctionDeclaration {
}

impl MonomorphizeHelper for TypedFunctionDeclaration {
type Output = TypedFunctionDeclaration;

fn type_parameters(&self) -> &[TypeParameter] {
&self.type_parameters
}

fn name(&self) -> &Ident {
&self.name
}

fn monomorphize_inner(
self,
type_mapping: &TypeMapping,
_namespace: &mut Items,
) -> Self::Output {
let mut new_decl = self;
new_decl.copy_types(type_mapping);
new_decl
}
}

impl ToJsonAbi for TypedFunctionDeclaration {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use crate::{
error::ok,
semantic_analysis::{
EnforceTypeArguments, IsConstant, TypeCheckContext, TypedExpression,
TypedExpressionVariant, TypedVariableDeclaration, VariableMutability,
IsConstant, TypeCheckContext, TypedExpression, TypedExpressionVariant,
TypedVariableDeclaration, VariableMutability,
},
type_engine::*,
CompileResult, FunctionParameter, Ident, TypedDeclaration,
Expand Down
176 changes: 0 additions & 176 deletions sway-core/src/semantic_analysis/ast_node/declaration/monomorphize.rs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
use crate::{
error::*, namespace::*, parse_tree::*, semantic_analysis::*, type_engine::*, types::*,
};
use crate::{error::*, parse_tree::*, semantic_analysis::*, type_engine::*, types::*};
use fuels_types::Property;
use std::hash::{Hash, Hasher};
use sway_types::{Ident, Span, Spanned};
Expand Down Expand Up @@ -54,19 +52,13 @@ impl Spanned for TypedStructDeclaration {
}

impl MonomorphizeHelper for TypedStructDeclaration {
type Output = TypedStructDeclaration;

fn type_parameters(&self) -> &[TypeParameter] {
&self.type_parameters
}

fn name(&self) -> &Ident {
&self.name
}

fn monomorphize_inner(self, type_mapping: &TypeMapping, namespace: &mut Items) -> Self::Output {
monomorphize_inner(self, type_mapping, namespace)
}
}

impl TypedStructDeclaration {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use sway_types::Span;

use crate::{
error::{err, ok},
semantic_analysis::{EnforceTypeArguments, TypeCheckContext},
semantic_analysis::TypeCheckContext,
type_engine::*,
types::DeterministicallyAborts,
CompileError, CompileResult, IntrinsicFunctionKind,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ use sway_types::{Ident, Span, Spanned};

use crate::{
error::{err, ok},
semantic_analysis::{declaration::EnforceTypeArguments, TypeCheckContext, TypedEnumVariant},
type_engine::{insert_type, CreateTypeId, TypeArgument, TypeId},
semantic_analysis::{TypeCheckContext, TypedEnumVariant},
type_engine::{insert_type, CreateTypeId, EnforceTypeArguments, TypeArgument, TypeId},
CompileError, CompileResult, Literal, Scrutinee, StructScrutineeField, TypeInfo,
};

Expand Down Expand Up @@ -70,15 +70,20 @@ impl TypedScrutinee {
warnings,
errors
);
let struct_decl = check!(
let mut struct_decl = check!(
unknown_decl.expect_struct().cloned(),
return err(warnings, errors),
warnings,
errors
);
// monomorphize the struct definition
let struct_decl = check!(
ctx.monomorphize(struct_decl, vec!(), EnforceTypeArguments::No, None),
check!(
ctx.monomorphize(
&mut struct_decl,
vec!(),
EnforceTypeArguments::No,
&struct_name.span()
),
return err(warnings, errors),
warnings,
errors
Expand Down Expand Up @@ -164,15 +169,20 @@ impl TypedScrutinee {
warnings,
errors
);
let enum_decl = check!(
let mut enum_decl = check!(
unknown_decl.expect_enum().cloned(),
return err(warnings, errors),
warnings,
errors
);
// monomorphize the enum definition
let enum_decl = check!(
ctx.monomorphize(enum_decl, vec!(), EnforceTypeArguments::No, None),
check!(
ctx.monomorphize(
&mut enum_decl,
vec!(),
EnforceTypeArguments::No,
&enum_name.span()
),
return err(warnings, errors),
warnings,
errors
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -976,17 +976,21 @@ impl TypedExpression {
warnings,
errors
);
let struct_decl = check!(
unknown_decl.expect_struct(),
let mut struct_decl = check!(
unknown_decl.expect_struct().cloned(),
return err(warnings, errors),
warnings,
errors
)
.clone();
);

// monomorphize the struct definition
let mut struct_decl = check!(
ctx.monomorphize(struct_decl, type_arguments, EnforceTypeArguments::No, None),
check!(
ctx.monomorphize(
&mut struct_decl,
type_arguments,
EnforceTypeArguments::No,
&call_path.span()
),
return err(warnings, errors),
warnings,
errors
Expand Down
Loading