@@ -18,7 +18,8 @@ when defined(nimPreviewSlimSystem):
18
18
19
19
type
20
20
TTypeAllowedFlag * = enum
21
- taField,
21
+ taTupField, # field of a tuple
22
+ taObjField, # field of an object
22
23
taHeap,
23
24
taConcept,
24
25
taIsOpenArray,
@@ -69,8 +70,8 @@ proc typeAllowedAux(marker: var IntSet, typ: PType, kind: TSymKind,
69
70
result = t
70
71
elif taIsOpenArray in flags:
71
72
result = t
72
- elif t.kind == tyLent and ((kind != skResult and views notin c.features) or
73
- (kind == skParam and {taIsCastable, taField } * flags == {})): # lent cannot be used as parameters.
73
+ elif t.kind == tyLent and ((( kind != skResult or taObjField in flags) and views notin c.features) or
74
+ (kind == skParam and {taIsCastable, taObjField, taTupField } * flags == {})): # lent cannot be used as parameters.
74
75
# except in the cast environment and as the field of an object
75
76
result = t
76
77
elif isOutParam (t) and kind != skParam:
@@ -187,12 +188,12 @@ proc typeAllowedAux(marker: var IntSet, typ: PType, kind: TSymKind,
187
188
t.baseClass != nil and taIsDefaultField notin flags:
188
189
result = t
189
190
else :
190
- let flags = flags+ {taField , taVoid}
191
+ let flags = flags+ {taObjField , taVoid}
191
192
result = typeAllowedAux (marker, t.baseClass, kind, c, flags)
192
193
if result .isNil and t.n != nil :
193
194
result = typeAllowedNode (marker, t.n, kind, c, flags)
194
195
of tyTuple:
195
- let flags = flags+ {taField , taVoid}
196
+ let flags = flags+ {taTupField , taVoid}
196
197
for a in t.kids:
197
198
result = typeAllowedAux (marker, a, kind, c, flags)
198
199
if result != nil : break
0 commit comments