Skip to content

Commit b495dcf

Browse files
GearsDatapackslpil
authored andcommitted
Cache publicity for named types and parameters for type aliases
1 parent 9a45712 commit b495dcf

File tree

7 files changed

+172
-64
lines changed

7 files changed

+172
-64
lines changed

compiler-core/generated/schema_capnp.rs

Lines changed: 148 additions & 58 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler-core/schema.capnp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ struct TypeAliasConstructor {
7171
deprecation @4 :Text;
7272
documentation @5 :Text;
7373
origin @6 :SrcSpan;
74+
parameters @7 :List(Type);
7475
}
7576

7677
struct Version {
@@ -145,6 +146,7 @@ struct Type {
145146
parameters @2 :List(Type);
146147
package @7 :Text;
147148
inferredVariant @8 :InferredVariant;
149+
publicity @9 :Publicity;
148150
}
149151

150152
fn :group {

compiler-core/src/analyse.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1395,7 +1395,7 @@ impl<'a, A> ModuleAnalyzer<'a, A> {
13951395
TypeConstructor {
13961396
origin: *location,
13971397
module: self.module_name.clone(),
1398-
parameters,
1398+
parameters: parameters.clone(),
13991399
type_: type_.clone(),
14001400
deprecation: deprecation.clone(),
14011401
publicity: *publicity,
@@ -1413,6 +1413,7 @@ impl<'a, A> ModuleAnalyzer<'a, A> {
14131413
deprecation: deprecation.clone(),
14141414
documentation: documentation.as_ref().map(|(_, doc)| doc.clone()),
14151415
arity,
1416+
parameters,
14161417
},
14171418
)?;
14181419

compiler-core/src/metadata/module_decoder.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ impl ModuleDecoder {
197197
message: self.string(deprecation)?,
198198
}
199199
};
200+
let parameters = read_vec!(&reader.get_parameters()?, self, type_);
200201
Ok(TypeAliasConstructor {
201202
publicity: self.publicity(reader.get_publicity()?)?,
202203
origin: self.src_span(&reader.get_origin()?)?,
@@ -205,6 +206,7 @@ impl ModuleDecoder {
205206
deprecation,
206207
documentation: self.optional_string(self.str(reader.get_documentation()?)?),
207208
arity: reader.get_arity() as usize,
209+
parameters,
208210
})
209211
}
210212

@@ -224,9 +226,10 @@ impl ModuleDecoder {
224226
let name = self.string(reader.get_name()?)?;
225227
let arguments = read_vec!(&reader.get_parameters()?, self, type_);
226228
let inferred_variant = self.inferred_variant(&reader.get_inferred_variant()?)?;
229+
let publicity = self.publicity(reader.get_publicity()?)?;
227230

228231
Ok(Arc::new(Type::Named {
229-
publicity: Publicity::Public,
232+
publicity,
230233
package,
231234
module,
232235
name,

compiler-core/src/metadata/module_encoder.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,12 @@ impl<'a> ModuleEncoder<'a> {
311311
self.build_type(type_builder, &constructor.type_);
312312
self.build_src_span(builder.reborrow().init_origin(), constructor.origin);
313313
builder.set_documentation(constructor.documentation.as_deref().unwrap_or_default());
314-
builder.set_arity(constructor.arity as u32)
314+
builder.set_arity(constructor.arity as u32);
315+
316+
let mut parameters_builder = builder.init_parameters(constructor.parameters.len() as u32);
317+
for (index, parameter) in constructor.parameters.iter().enumerate() {
318+
self.build_type(parameters_builder.reborrow().get(index as u32), parameter);
319+
}
315320
}
316321

317322
fn build_type_value_constructor(
@@ -652,7 +657,7 @@ impl<'a> ModuleEncoder<'a> {
652657
module,
653658
package,
654659
inferred_variant,
655-
..
660+
publicity,
656661
} => {
657662
let mut app = builder.init_app();
658663
app.set_name(name);
@@ -667,6 +672,7 @@ impl<'a> ModuleEncoder<'a> {
667672
app.reborrow().init_parameters(arguments.len() as u32),
668673
arguments,
669674
);
675+
self.build_publicity(app.init_publicity(), *publicity);
670676
}
671677

672678
Type::Tuple { elements } => self.build_types(

compiler-core/src/metadata/tests.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1761,14 +1761,18 @@ fn type_with_inferred_variant() {
17611761
"Wibble".into(),
17621762
TypeConstructor {
17631763
type_: Arc::new(Type::Named {
1764-
publicity: Publicity::Public,
1764+
publicity: Publicity::Internal {
1765+
attribute_location: None,
1766+
},
17651767
package: "some_package".into(),
17661768
module: "the/module".into(),
17671769
name: "Wibble".into(),
17681770
arguments: Vec::new(),
17691771
inferred_variant: Some(1),
17701772
}),
1771-
publicity: Publicity::Public,
1773+
publicity: Publicity::Internal {
1774+
attribute_location: Some(SrcSpan::new(0, 10)),
1775+
},
17721776
origin: Default::default(),
17731777
module: "the/module".into(),
17741778
parameters: vec![],
@@ -1816,6 +1820,7 @@ fn module_with_type_aliases() {
18161820
deprecation: Deprecation::NotDeprecated,
18171821
documentation: Some("Some documentation".into()),
18181822
origin: Default::default(),
1823+
parameters: vec![type_::generic_var(0)],
18191824
},
18201825
)]
18211826
.into(),

compiler-core/src/type_.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1495,6 +1495,7 @@ pub struct TypeAliasConstructor {
14951495
pub deprecation: Deprecation,
14961496
pub documentation: Option<EcoString>,
14971497
pub origin: SrcSpan,
1498+
pub parameters: Vec<Arc<Type>>,
14981499
}
14991500

15001501
impl ValueConstructor {

0 commit comments

Comments
 (0)