Skip to content

Commit c05afa5

Browse files
committed
Update
1 parent bb185fb commit c05afa5

1 file changed

Lines changed: 37 additions & 6 deletions

File tree

src/typechecking.pr

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ export type StructMemberPre = struct {
9292
properties: MemberProperties
9393
}
9494
export 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

121152
export 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

432464
export def copy(pattern: &Pattern) -> &Pattern {
@@ -2007,9 +2039,8 @@ export def get_member_functions(tpe: &Type) -> &Vector(TypeEntryMember) {
20072039
}*/
20082040

20092041
export type TypeEntryMember = struct {
2010-
function: TypeId
2042+
function: FunctionDef
20112043
exported: bool
2012-
module: weak &toolchain::Module
20132044
}
20142045

20152046
/*

0 commit comments

Comments
 (0)