@@ -92,7 +92,7 @@ export type StructMemberPre = struct {
9292 properties: MemberProperties
9393}
9494export def copy(member: StructMemberPre) -> StructMemberPre {
95- member.tpe = member.tpe.copy() if member.tpe else null
95+ member.tpe = ( member.tpe.copy() if member.tpe else null)
9696 return member
9797}
9898
@@ -104,18 +104,49 @@ export type StructMember = struct {
104104 properties: MemberProperties
105105}
106106
107- export type StructuralTypeMember = struct {
107+ export type StructuralTypeMemberPre = struct {
108108 name: Str
109109 parameter_t: &Vector(NamedParameterPre)
110110 return_t: &Vector(&TypeRef)
111111}
112112
113- def make_type_member(name: Str, parameter_t: &Vector(NamedParameterPre), return_t: &Vector(&TypeRef)) -> StructuralTypeMember {
113+ export type StructuralTypeMember = struct {
114+ name: Str
115+ parameter_t: &Vector(NamedParameter)
116+ return_t: &Vector(TypeId)
117+ }
118+
119+ def resolve(member: StructuralTypeMemberPre, scpe: &scope::Scope) -> StructuralTypeMember {
120+ var params = vector::make(NamedParameter)
121+ for var param in member.parameter_t {
122+ let r = resolve(param.tpe, scpe)
123+ params.push([
124+ name = param.name,
125+ tpe = r,
126+ value = param.value,
127+ kw = param.kw,
128+ varargs = param.varargs,
129+ node = param.node
130+ ] !NamedParameter)
131+ }
132+ var return_ids = vector::make(TypeId)
133+ for var ret in member.return_t {
134+ let r = resolve(ret, scpe)
135+ return_ids.push(r)
136+ }
137+ return [
138+ name = member.name,
139+ parameter_t = params,
140+ return_t = return_ids
141+ ] !StructuralTypeMember
142+ }
143+
144+ def make_type_member(name: Str, parameter_t: &Vector(NamedParameterPre), return_t: &Vector(&TypeRef)) -> StructuralTypeMemberPre {
114145 return [
115146 name = name,
116147 parameter_t = parameter_t,
117148 return_t = return_t
118- ] !StructuralTypeMember
149+ ] !StructuralTypeMemberPre
119150}
120151
121152export type TypeId = int64
@@ -427,6 +458,7 @@ export type Pattern = struct {
427458 const_fields: &Vector(StructMemberPre)
428459 // Node for type constructor
429460 node: weak &parser::Node
461+ members: &Vector(StructuralTypeMemberPre)
430462}
431463
432464export def copy(pattern: &Pattern) -> &Pattern {
@@ -2007,9 +2039,8 @@ export def get_member_functions(tpe: &Type) -> &Vector(TypeEntryMember) {
20072039}*/
20082040
20092041export type TypeEntryMember = struct {
2010- function: TypeId
2042+ function: FunctionDef
20112043 exported: bool
2012- module: weak &toolchain::Module
20132044}
20142045
20152046/*
0 commit comments