未验证 提交 70499ce7 编写于 作者: F Florian Verdonck 提交者: GitHub

Add GetSetKeyword to trivia (#14214)

* Add GetSetKeyword to trivia

* Update failing unit test to only include the `set` range.

* GetSetKeywords

* Update base line for test
上级 3c2e73ba
......@@ -406,7 +406,7 @@ let private CheckDuplicatesAbstractMethodParmsSig (typeSpecs: SynTypeDefnSig li
| SynTypeDefnSigRepr.ObjectModel(_, synMemberSigs, _) ->
for sms in synMemberSigs do
match sms with
| SynMemberSig.Member(synValSig, _, m) ->
| SynMemberSig.Member(memberSig = synValSig; range = m) ->
CheckDuplicatesArgNames synValSig m
| _ -> ()
| _ -> ()
......@@ -601,7 +601,7 @@ let TcAndPublishMemberSpec cenv env containerInfo declKind tpenv memb =
| SynMemberSig.ValField(_, m) -> error(Error(FSComp.SR.tcFieldValIllegalHere(), m))
| SynMemberSig.Inherit(_, m) -> error(Error(FSComp.SR.tcInheritIllegalHere(), m))
| SynMemberSig.NestedType(_, m) -> error(Error(FSComp.SR.tcTypesCannotContainNestedTypes(), m))
| SynMemberSig.Member(synValSig, memberFlags, _) ->
| SynMemberSig.Member(memberSig = synValSig; flags = memberFlags) ->
TcAndPublishValSpec (cenv, env, containerInfo, declKind, Some memberFlags, tpenv, synValSig)
| SynMemberSig.Interface _ ->
// These are done in TcMutRecDefns_Phase1
......@@ -3989,7 +3989,7 @@ module TcDeclarations =
for slot in ds do
if isAbstractSlot slot then
match slot with
| SynMemberDefn.AbstractSlot (synVal, _, m) ->
| SynMemberDefn.AbstractSlot (slotSig = synVal; range = m) ->
CheckDuplicatesArgNames synVal m
| _ -> ()
......@@ -4030,7 +4030,7 @@ module TcDeclarations =
| SynMemberDefn.ImplicitInherit (ty, _, idOpt, m) -> Some(ty, m, idOpt)
| _ -> None)
//let nestedTycons = cspec |> List.choose (function SynMemberDefn.NestedType (x, _, _) -> Some x | _ -> None)
let slotsigs = cspec |> List.choose (function SynMemberDefn.AbstractSlot (x, y, _) -> Some(x, y) | _ -> None)
let slotsigs = cspec |> List.choose (function SynMemberDefn.AbstractSlot (slotSig = x; flags = y) -> Some(x, y) | _ -> None)
let members =
let membersIncludingAutoProps =
......@@ -4080,7 +4080,7 @@ module TcDeclarations =
// Convert auto properties to member bindings in the post-list
let rec postAutoProps memb =
match memb with
| SynMemberDefn.AutoProperty(attributes=Attributes attribs; isStatic=isStatic; ident=id; typeOpt=tyOpt; propKind=propKind; memberFlags=memberFlags; memberFlagsForSet=memberFlagsForSet; xmlDoc=xmlDoc; accessibility=access; trivia = { GetSetKeyword = mGetSetOpt }) ->
| SynMemberDefn.AutoProperty(attributes=Attributes attribs; isStatic=isStatic; ident=id; typeOpt=tyOpt; propKind=propKind; memberFlags=memberFlags; memberFlagsForSet=memberFlagsForSet; xmlDoc=xmlDoc; accessibility=access; trivia = { GetSetKeywords = mGetSetOpt }) ->
let mMemberPortion = id.idRange
// Only the keep the non-field-targeted attributes
let attribs = attribs |> List.filter (fun a -> match a.Target with Some t when t.idText = "field" -> false | _ -> true)
......@@ -4091,7 +4091,7 @@ module TcDeclarations =
let memberFlagsForSet = { memberFlagsForSet with GetterOrSetterIsCompilerGenerated = true }
match propKind, mGetSetOpt with
| SynMemberKind.PropertySet, Some m -> errorR(Error(FSComp.SR.parsMutableOnAutoPropertyShouldBeGetSetNotJustSet(), m))
| SynMemberKind.PropertySet, Some gs -> errorR(Error(FSComp.SR.parsMutableOnAutoPropertyShouldBeGetSetNotJustSet(), gs.Range))
| _ -> ()
[
......@@ -4322,22 +4322,22 @@ module TcDeclarations =
let implements2 = cspec |> List.choose (function SynMemberSig.Interface (ty, m) -> Some(ty, m) | _ -> None)
let inherits = cspec |> List.choose (function SynMemberSig.Inherit (ty, _) -> Some(ty, m, None) | _ -> None)
//let nestedTycons = cspec |> List.choose (function SynMemberSig.NestedType (x, _) -> Some x | _ -> None)
let slotsigs = cspec |> List.choose (function SynMemberSig.Member (v, fl, _) when fl.IsDispatchSlot -> Some(v, fl) | _ -> None)
let slotsigs = cspec |> List.choose (function SynMemberSig.Member (memberSig = v; flags = fl) when fl.IsDispatchSlot -> Some(v, fl) | _ -> None)
let members = cspec |> List.filter (function
| SynMemberSig.Interface _ -> true
| SynMemberSig.Member (_, memberFlags, _) when not memberFlags.IsDispatchSlot -> true
| SynMemberSig.Member (flags = memberFlags) when not memberFlags.IsDispatchSlot -> true
| SynMemberSig.NestedType (_, m) -> error(Error(FSComp.SR.tcTypesCannotContainNestedTypes(), m)); false
| _ -> false)
let isConcrete =
members |> List.exists (function
| SynMemberSig.Member (_, memberFlags, _) -> memberFlags.MemberKind=SynMemberKind.Constructor
| SynMemberSig.Member (flags = memberFlags) -> memberFlags.MemberKind=SynMemberKind.Constructor
| _ -> false)
// An ugly bit of code to pre-determine if a type has a nullary constructor, prior to establishing the
// members of the type
let preEstablishedHasDefaultCtor =
members |> List.exists (function
| SynMemberSig.Member (synValSig, memberFlags, _) ->
| SynMemberSig.Member (memberSig = synValSig; flags = memberFlags) ->
memberFlags.MemberKind=SynMemberKind.Constructor &&
// REVIEW: This is a syntactic approximation
(match synValSig.SynType, synValSig.SynInfo.CurriedArgInfos with
......
......@@ -4030,7 +4030,7 @@ and TcPseudoMemberSpec cenv newOk env synTypes tpenv synMemberSig m =
let tys, tpenv = List.mapFold (TcTypeAndRecover cenv newOk CheckCxs ItemOccurence.UseInType WarnOnIWSAM.Yes env) tpenv synTypes
match synMemberSig with
| SynMemberSig.Member (synValSig, memberFlags, m) ->
| SynMemberSig.Member (synValSig, memberFlags, m, _) ->
// REVIEW: Test pseudo constraints cannot refer to polymorphic methods.
// REVIEW: Test pseudo constraints cannot be curried.
let members, tpenv = TcValSpec cenv env ModuleOrMemberBinding newOk ExprContainerInfo (Some memberFlags) (Some (List.head tys)) tpenv synValSig []
......
......@@ -825,7 +825,7 @@ module InterfaceStubGenerator =
None
else
match memberDefn with
| SynMemberDefn.AbstractSlot (_synValSig, _memberFlags, _range) -> None
| SynMemberDefn.AbstractSlot _ -> None
| SynMemberDefn.AutoProperty (synExpr = expr) -> walkExpr expr
| SynMemberDefn.Interface (interfaceType = interfaceType; members = members) ->
if rangeContainsPos interfaceType.Range pos then
......
......@@ -336,7 +336,7 @@ module NavigationImpl =
[
createMember (id, NavigationItemKind.Field, FSharpGlyph.Field, id.idRange, enclosingEntityKind, false, access)
]
| SynMemberDefn.AbstractSlot (SynValSig (ident = SynIdent (id, _); synType = ty; accessibility = access), _, _) ->
| SynMemberDefn.AbstractSlot(slotSig = SynValSig (ident = SynIdent (id, _); synType = ty; accessibility = access)) ->
[
createMember (id, NavigationItemKind.Method, FSharpGlyph.OverridenMethod, ty.Range, enclosingEntityKind, true, access)
]
......@@ -557,7 +557,7 @@ module NavigationImpl =
[
for memb in members do
match memb with
| SynMemberSig.Member (SynValSig.SynValSig (ident = SynIdent (id, _); accessibility = access; range = m), _, _) ->
| SynMemberSig.Member(memberSig = SynValSig.SynValSig (ident = SynIdent (id, _); accessibility = access; range = m)) ->
createMember (id, NavigationItemKind.Method, FSharpGlyph.Method, m, NavigationEntityKind.Class, false, access)
| SynMemberSig.ValField (SynField (idOpt = Some rcid; fieldType = ty; accessibility = access), _) ->
createMember (rcid, NavigationItemKind.Field, FSharpGlyph.Field, ty.Range, NavigationEntityKind.Class, false, access)
......@@ -882,7 +882,7 @@ module NavigateTo =
and walkSynMemberSig (synMemberSig: SynMemberSig) container =
match synMemberSig with
| SynMemberSig.Member (valSig, memberFlags, _) -> addMember valSig memberFlags true container
| SynMemberSig.Member (memberSig = valSig; flags = memberFlags) -> addMember valSig memberFlags true container
| SynMemberSig.ValField (synField, _) -> addField synField true container
| SynMemberSig.NestedType (synTypeDef, _) -> walkSynTypeDefnSig synTypeDef container
| SynMemberSig.Inherit _
......@@ -980,7 +980,7 @@ module NavigateTo =
and walkSynMemberDefn (memberDefn: SynMemberDefn) container =
match memberDefn with
| SynMemberDefn.AbstractSlot (synValSig, memberFlags, _) -> addMember synValSig memberFlags false container
| SynMemberDefn.AbstractSlot (slotSig = synValSig; flags = memberFlags) -> addMember synValSig memberFlags false container
| SynMemberDefn.AutoProperty (ident = id) -> addIdent NavigableItemKind.Property id false container
| SynMemberDefn.Interface (members = members) ->
match members with
......
......@@ -924,7 +924,7 @@ module SyntaxTraversal =
|> List.map (fun x -> dive x x.RangeOfBindingWithRhs (traverseSynBinding path))
|> pick m
| x -> x
| SynMemberDefn.AbstractSlot (SynValSig (synType = synType), _memberFlags, _range) -> traverseSynType path synType
| SynMemberDefn.AbstractSlot(slotSig = SynValSig (synType = synType)) -> traverseSynType path synType
| SynMemberDefn.Interface (interfaceType = synType; members = synMemberDefnsOption) ->
match visitor.VisitInterfaceSynMemberDefnType(path, synType) with
| None ->
......
......@@ -867,7 +867,7 @@ module ParsedInput =
match membSig with
| SynMemberSig.Inherit (t, _) -> walkType t
| SynMemberSig.Member (vs, _, _) -> walkValSig vs
| SynMemberSig.Member (memberSig = vs) -> walkValSig vs
| SynMemberSig.Interface (t, _) -> walkType t
......@@ -880,7 +880,7 @@ module ParsedInput =
and walkMember memb =
match memb with
| SynMemberDefn.AbstractSlot (valSig, _, _) -> walkValSig valSig
| SynMemberDefn.AbstractSlot (slotSig = valSig) -> walkValSig valSig
| SynMemberDefn.Member (binding, _) -> walkBinding binding
......@@ -1869,7 +1869,7 @@ module ParsedInput =
match membSig with
| SynMemberSig.Inherit (t, _)
| SynMemberSig.Interface (t, _) -> walkType t
| SynMemberSig.Member (vs, _, _) -> walkValSig vs
| SynMemberSig.Member (memberSig = vs) -> walkValSig vs
| SynMemberSig.ValField (f, _) -> walkField f
| SynMemberSig.NestedType (nestedType = typeDefn) ->
let (SynTypeDefnSig (typeInfo = info; typeRepr = repr; members = memberSigs)) =
......@@ -1888,7 +1888,7 @@ module ParsedInput =
and walkMember memb =
match memb with
| SynMemberDefn.AbstractSlot (valSig, _, _) -> walkValSig valSig
| SynMemberDefn.AbstractSlot (slotSig = valSig) -> walkValSig valSig
| SynMemberDefn.Member (binding, _) -> walkBinding binding
| SynMemberDefn.GetSetMember (getBinding, setBinding, _, _) ->
Option.iter walkBinding getBinding
......
......@@ -611,7 +611,7 @@ module Structure =
| SynMemberDefn.NestedType (td, _, _) -> parseTypeDefn td
| SynMemberDefn.AbstractSlot (SynValSig (synType = synt), _, r) ->
| SynMemberDefn.AbstractSlot (slotSig = SynValSig (synType = synt); range = r) ->
rcheck Scope.Member Collapse.Below d.Range (Range.startToEnd synt.Range r)
| SynMemberDefn.AutoProperty (synExpr = e; range = r) ->
......@@ -890,7 +890,7 @@ module Structure =
let rec parseSynMemberDefnSig inp =
match inp with
| SynMemberSig.Member (valSigs, _, r) ->
| SynMemberSig.Member (memberSig = valSigs; range = r) ->
let collapse = Range.endToEnd valSigs.RangeOfId r
rcheck Scope.Member Collapse.Below r collapse
| SynMemberSig.ValField (SynField (attributes = attrs; range = fr), mFull) ->
......
......@@ -175,7 +175,7 @@ module XmlDocParsing =
|> Option.toList
|> List.collect getXmlDocablesSynMemberDefn
| SynMemberDefn.AbstractSlot (valSig, _, range) ->
| SynMemberDefn.AbstractSlot (slotSig = valSig; range = range) ->
let (SynValSig (attributes = synAttributes; arity = synValInfo; xmlDoc = preXmlDoc)) =
valSig
......
......@@ -1119,7 +1119,7 @@ type SynMemberKind =
[<NoEquality; NoComparison; RequireQualifiedAccess>]
type SynMemberSig =
| Member of memberSig: SynValSig * flags: SynMemberFlags * range: range
| Member of memberSig: SynValSig * flags: SynMemberFlags * range: range * trivia: SynMemberSigMemberTrivia
| Interface of interfaceType: SynType * range: range
......@@ -1417,7 +1417,7 @@ type SynMemberDefn =
| LetBindings of bindings: SynBinding list * isStatic: bool * isRecursive: bool * range: range
| AbstractSlot of slotSig: SynValSig * flags: SynMemberFlags * range: range
| AbstractSlot of slotSig: SynValSig * flags: SynMemberFlags * range: range * trivia: SynMemberDefnAbstractSlotTrivia
| Interface of interfaceType: SynType * withKeyword: range option * members: SynMemberDefns option * range: range
......
......@@ -1265,7 +1265,7 @@ type SynMemberKind =
type SynMemberSig =
/// A member definition in a type in a signature file
| Member of memberSig: SynValSig * flags: SynMemberFlags * range: range
| Member of memberSig: SynValSig * flags: SynMemberFlags * range: range * trivia: SynMemberSigMemberTrivia
/// An interface definition in a type in a signature file
| Interface of interfaceType: SynType * range: range
......@@ -1598,7 +1598,11 @@ type SynMemberDefn =
| LetBindings of bindings: SynBinding list * isStatic: bool * isRecursive: bool * range: range
/// An abstract slot definition within a class or interface
| AbstractSlot of slotSig: SynValSig * flags: SynMemberFlags * range: range
| AbstractSlot of
slotSig: SynValSig *
flags: SynMemberFlags *
range: range *
trivia: SynMemberDefnAbstractSlotTrivia
/// An interface implementation definition within a class
| Interface of interfaceType: SynType * withKeyword: range option * members: SynMemberDefns option * range: range
......
......@@ -314,15 +314,39 @@ type SynMemberGetSetTrivia =
[<NoEquality; NoComparison>]
type SynArgPatsNamePatPairsTrivia = { ParenRange: range }
[<NoEquality; NoComparison>]
type GetSetKeywords =
| Get of range
| Set of range
| GetSet of get: range * set: range
member x.Range =
match x with
| Get m
| Set m -> m
| GetSet (mG, mS) ->
if Range.rangeBeforePos mG mS.Start then
Range.unionRanges mG mS
else
Range.unionRanges mS mG
[<NoEquality; NoComparison>]
type SynMemberDefnAutoPropertyTrivia =
{
LeadingKeyword: SynLeadingKeyword
WithKeyword: range option
EqualsRange: range option
GetSetKeyword: range option
GetSetKeywords: GetSetKeywords option
}
[<NoEquality; NoComparison>]
type SynMemberDefnAbstractSlotTrivia =
{
GetSetKeywords: GetSetKeywords option
}
static member Zero = { GetSetKeywords = None }
[<NoEquality; NoComparison>]
type SynFieldTrivia =
{
......@@ -336,3 +360,11 @@ type SynTypeOrTrivia = { OrKeyword: range }
[<NoEquality; NoComparison>]
type SynBindingReturnInfoTrivia = { ColonRange: range option }
[<NoEquality; NoComparison>]
type SynMemberSigMemberTrivia =
{
GetSetKeywords: GetSetKeywords option
}
static member Zero: SynMemberSigMemberTrivia = { GetSetKeywords = None }
......@@ -404,6 +404,15 @@ type SynArgPatsNamePatPairsTrivia =
ParenRange: range
}
/// Represents additional information for `get, set` syntax
[<NoEquality; NoComparison; RequireQualifiedAccess>]
type GetSetKeywords =
| Get of range
| Set of range
| GetSet of get: range * set: range
member Range: range
/// Represents additional information for SynMemberDefn.AutoProperty
[<NoEquality; NoComparison>]
type SynMemberDefnAutoPropertyTrivia =
......@@ -418,9 +427,19 @@ type SynMemberDefnAutoPropertyTrivia =
EqualsRange: range option
/// The syntax range of 'get, set'
GetSetKeyword: range option
GetSetKeywords: GetSetKeywords option
}
/// Represents additional information for SynMemberDefn.AbstractSlot
[<NoEquality; NoComparison>]
type SynMemberDefnAbstractSlotTrivia =
{
/// The syntax range of 'get, set'
GetSetKeywords: GetSetKeywords option
}
static member Zero: SynMemberDefnAbstractSlotTrivia
/// Represents additional information for SynField
[<NoEquality; NoComparison>]
type SynFieldTrivia =
......@@ -446,3 +465,13 @@ type SynBindingReturnInfoTrivia =
/// The syntax range of the `:` token
ColonRange: range option
}
/// Represents additional information for SynMemberSig.Member
[<NoEquality; NoComparison>]
type SynMemberSigMemberTrivia =
{
/// The syntax range of 'get, set'
GetSetKeywords: GetSetKeywords option
}
static member Zero: SynMemberSigMemberTrivia
......@@ -840,7 +840,7 @@ tyconSpfnRhs:
let ty, arity = $3
let flags = AbstractMemberFlags true SynMemberKind.Member
let valSig = SynValSig([], (SynIdent(mkSynId m "Invoke", None)), inferredTyparDecls, ty, arity, false, false, PreXmlDoc.Empty, None, None, m, SynValSigTrivia.Zero)
let invoke = SynMemberSig.Member(valSig, flags, m)
let invoke = SynMemberSig.Member(valSig, flags, m, SynMemberSigMemberTrivia.Zero)
(fun leadingKeyword nameRange nameInfo mEquals augmentation ->
if not (isNil augmentation) then raiseParseErrorAt m (FSComp.SR.parsAugmentationsIllegalOnDelegateType())
let mWhole = unionRanges nameRange m
......@@ -914,13 +914,13 @@ classMemberSpfn:
| opt_attributes opt_access memberSpecFlags opt_inline opt_access nameop opt_explicitValTyparDecls COLON topTypeWithTypeConstraints classMemberSpfnGetSet optLiteralValueSpfn
{ if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2))
let isInline, doc, vis2, id, explicitValTyparDecls, (ty, arity), (mEquals, optLiteralValue) = $4, grabXmlDoc(parseState, $1, 1), $5, $6, $7, $9, $11
let mWith, getSetRangeOpt, getSet = $10
let mWith, (getSet, getSetRangeOpt) = $10
let getSetAdjuster arity = match arity, getSet with SynValInfo([], _), SynMemberKind.Member -> SynMemberKind.PropertyGet | _ -> getSet
let mWhole =
let m = rhs parseState 3
match getSetRangeOpt with
| None -> unionRanges m ty.Range
| Some m2 -> unionRanges m m2
| Some gs -> unionRanges m (gs : GetSetKeywords).Range
|> fun m -> (m, $1) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range)
|> unionRangeWithXmlDoc doc
|> fun m ->
......@@ -932,7 +932,8 @@ classMemberSpfn:
let flags = flags (getSetAdjuster arity)
let trivia = { LeadingKeyword = leadingKeyword; WithKeyword = mWith; EqualsRange = mEquals }
let valSpfn = SynValSig($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, vis2, optLiteralValue, mWhole, trivia)
SynMemberSig.Member(valSpfn, flags, mWhole) }
let trivia: SynMemberSigMemberTrivia = { GetSetKeywords = getSetRangeOpt }
SynMemberSig.Member(valSpfn, flags, mWhole, trivia) }
| opt_attributes opt_access interfaceMember appType
{ if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2))
......@@ -971,35 +972,38 @@ classMemberSpfn:
let isInline = false
let trivia: SynValSigTrivia = { LeadingKeyword = SynLeadingKeyword.New mNew; WithKeyword = None; EqualsRange = None }
let valSpfn = SynValSig ($1, (SynIdent(mkSynId (rhs parseState 3) "new", None)), noInferredTypars, ty, valSynInfo, isInline, false, doc, vis, None, m, trivia)
SynMemberSig.Member(valSpfn, CtorMemberFlags, m) }
SynMemberSig.Member(valSpfn, CtorMemberFlags, m, SynMemberSigMemberTrivia.Zero) }
/* The optional "with get, set" on a member in a signature */
classMemberSpfnGetSet:
| /* EMPTY */
{ None, None, SynMemberKind.Member }
{ None, (SynMemberKind.Member, None) }
| WITH classMemberSpfnGetSetElements
{ let mWith = rhs parseState 1
Some mWith, Some (rhs2 parseState 1 2), $2 }
Some mWith, $2 }
| OWITH classMemberSpfnGetSetElements OEND
{ let mWith = rhs parseState 1
Some mWith, Some (rhs2 parseState 1 2), $2 }
Some mWith, $2 }
| OWITH classMemberSpfnGetSetElements error
{ let mWith = rhs parseState 1
reportParseErrorAt mWith (FSComp.SR.parsUnmatchedWith())
Some mWith, Some (rhs2 parseState 1 2), $2 }
Some mWith, $2 }
/* The "get, set" on a property member in a signature */
classMemberSpfnGetSetElements:
| nameop
{ (let (SynIdent(id:Ident, _)) = $1
if id.idText = "get" then SynMemberKind.PropertyGet
else if id.idText = "set" then SynMemberKind.PropertySet
else raiseParseErrorAt (rhs parseState 1) (FSComp.SR.parsGetOrSetRequired())) }
if id.idText = "get" then
SynMemberKind.PropertyGet, Some (GetSetKeywords.Get id.idRange)
else if id.idText = "set" then
SynMemberKind.PropertySet, Some (GetSetKeywords.Set id.idRange)
else
raiseParseErrorAt (rhs parseState 1) (FSComp.SR.parsGetOrSetRequired())) }
| nameop COMMA nameop
{ let (SynIdent(id, _)) = $1
......@@ -1007,7 +1011,11 @@ classMemberSpfnGetSetElements:
if not ((id.idText = "get" && id2.idText = "set") ||
(id.idText = "set" && id2.idText = "get")) then
raiseParseErrorAt (rhs2 parseState 1 3) (FSComp.SR.parsGetOrSetRequired())
SynMemberKind.PropertyGetSet }
if id.idText = "get" then
SynMemberKind.PropertyGetSet, Some (GetSetKeywords.GetSet(id.idRange, id2.idRange))
else
SynMemberKind.PropertyGetSet, Some (GetSetKeywords.GetSet(id2.idRange, id.idRange)) }
memberSpecFlags:
| memberFlags { $1 }
......@@ -1610,7 +1618,7 @@ tyconDefnRhs:
(fun nameRange augmentation ->
let valSig = SynValSig([], (SynIdent(mkSynId m "Invoke", None)), inferredTyparDecls, ty, arity, false, false, PreXmlDoc.Empty, None, None, m, SynValSigTrivia.Zero)
let flags = AbstractMemberFlags true SynMemberKind.Member
let invoke = SynMemberDefn.AbstractSlot(valSig, flags, m)
let invoke = SynMemberDefn.AbstractSlot(valSig, flags, m, SynMemberDefnAbstractSlotTrivia.Zero)
if not (isNil augmentation) then raiseParseErrorAt m (FSComp.SR.parsAugmentationsIllegalOnDelegateType())
SynTypeDefnRepr.ObjectModel (SynTypeDefnKind.Delegate (ty, arity), [invoke], m), []) }
......@@ -1812,20 +1820,20 @@ classDefnMember:
| opt_attributes opt_access abstractMemberFlags opt_inline nameop opt_explicitValTyparDecls COLON topTypeWithTypeConstraints classMemberSpfnGetSet opt_ODECLEND
{ let ty, arity = $8
let isInline, doc, id, explicitValTyparDecls = $4, grabXmlDoc(parseState, $1, 1), $5, $6
let mWith, getSetRangeOpt, getSet = $9
let mWith, (getSet, getSetRangeOpt) = $9
let getSetAdjuster arity = match arity, getSet with SynValInfo([], _), SynMemberKind.Member -> SynMemberKind.PropertyGet | _ -> getSet
let mWhole =
let m = rhs parseState 1
match getSetRangeOpt with
| None -> unionRanges m ty.Range
| Some m2 -> unionRanges m m2
| Some gs -> unionRanges m gs.Range
|> unionRangeWithXmlDoc doc
if Option.isSome $2 then errorR(Error(FSComp.SR.parsAccessibilityModsIllegalForAbstract(), mWhole))
let mkFlags, leadingKeyword = $3
let trivia = { LeadingKeyword = leadingKeyword; WithKeyword = mWith; EqualsRange = None }
let valSpfn = SynValSig($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, None, None, mWhole, trivia)
[ SynMemberDefn.AbstractSlot(valSpfn, mkFlags (getSetAdjuster arity), mWhole) ] }
let trivia: SynMemberDefnAbstractSlotTrivia = { GetSetKeywords = getSetRangeOpt }
[ SynMemberDefn.AbstractSlot(valSpfn, mkFlags (getSetAdjuster arity), mWhole, trivia) ] }
| opt_attributes opt_access inheritsDefn
{ if not (isNil $1) then errorR(Error(FSComp.SR.parsAttributesIllegalOnInherit(), rhs parseState 1))
......@@ -1893,7 +1901,7 @@ valDefnDecl:
autoPropsDefnDecl:
| VAL opt_mutable opt_access ident opt_typ EQUALS typedSequentialExprBlock classMemberSpfnGetSet
{ let mVal = rhs parseState 1
let mWith, mGetSetOpt, getSet = $8
let mWith, (getSet, getSetOpt) = $8
let mEquals = rhs parseState 6
if $2 then
errorR (Error (FSComp.SR.parsMutableOnAutoPropertyShouldBeGetSet (), rhs parseState 3))
......@@ -1905,7 +1913,7 @@ autoPropsDefnDecl:
let memberFlags = flags SynMemberKind.Member
let memberFlagsForSet = flags SynMemberKind.PropertySet
let isStatic = not memberFlags.IsInstance
let trivia = { LeadingKeyword = leadingKeyword; WithKeyword = mWith; EqualsRange = Some mEquals; GetSetKeyword = mGetSetOpt }
let trivia = { LeadingKeyword = leadingKeyword; WithKeyword = mWith; EqualsRange = Some mEquals; GetSetKeywords = getSetOpt }
[ SynMemberDefn.AutoProperty(attribs, isStatic, $4, $5, getSet, memberFlags, memberFlagsForSet, xmlDoc, $3, $7, memberRange, trivia) ]) }
/* An optional type on an auto-property definition */
......
......@@ -7364,6 +7364,8 @@ FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Syntax.SynMem
FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Syntax.SynMemberFlags get_flags()
FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Syntax.SynValSig get_slotSig()
FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Syntax.SynValSig slotSig
FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.SyntaxTrivia.SynMemberDefnAbstractSlotTrivia get_trivia()
FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.SyntaxTrivia.SynMemberDefnAbstractSlotTrivia trivia
FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Text.Range get_range()
FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Text.Range range
FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Boolean get_isStatic()
......@@ -7494,7 +7496,7 @@ FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsMember()
FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsNestedType()
FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsOpen()
FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsValField()
FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewAbstractSlot(FSharp.Compiler.Syntax.SynValSig, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewAbstractSlot(FSharp.Compiler.Syntax.SynValSig, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynMemberDefnAbstractSlotTrivia)
FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewAutoProperty(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Boolean, FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType], FSharp.Compiler.Syntax.SynMemberKind, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia)
FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewGetSetMember(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynBinding], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynBinding], FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynMemberGetSetTrivia)
FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Xml.PreXmlDoc, FSharp.Compiler.Text.Range)
......@@ -7594,6 +7596,8 @@ FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Syntax.SynMemberFlag
FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Syntax.SynMemberFlags get_flags()
FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Syntax.SynValSig get_memberSig()
FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Syntax.SynValSig memberSig
FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.SyntaxTrivia.SynMemberSigMemberTrivia get_trivia()
FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.SyntaxTrivia.SynMemberSigMemberTrivia trivia
FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Text.Range get_range()
FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Text.Range range
FSharp.Compiler.Syntax.SynMemberSig+NestedType: FSharp.Compiler.Syntax.SynTypeDefnSig get_nestedType()
......@@ -7621,7 +7625,7 @@ FSharp.Compiler.Syntax.SynMemberSig: Boolean get_IsNestedType()
FSharp.Compiler.Syntax.SynMemberSig: Boolean get_IsValField()
FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewInherit(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewInterface(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewMember(FSharp.Compiler.Syntax.SynValSig, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewMember(FSharp.Compiler.Syntax.SynValSig, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynMemberSigMemberTrivia)
FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewNestedType(FSharp.Compiler.Syntax.SynTypeDefnSig, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewValField(FSharp.Compiler.Syntax.SynField, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig+Inherit
......@@ -9313,6 +9317,36 @@ FSharp.Compiler.SyntaxTrivia.ConditionalDirectiveTrivia: FSharp.Compiler.SyntaxT
FSharp.Compiler.SyntaxTrivia.ConditionalDirectiveTrivia: Int32 Tag
FSharp.Compiler.SyntaxTrivia.ConditionalDirectiveTrivia: Int32 get_Tag()
FSharp.Compiler.SyntaxTrivia.ConditionalDirectiveTrivia: System.String ToString()
FSharp.Compiler.SyntaxTrivia.GetSetKeywords
FSharp.Compiler.SyntaxTrivia.GetSetKeywords+Get: FSharp.Compiler.Text.Range Item
FSharp.Compiler.SyntaxTrivia.GetSetKeywords+Get: FSharp.Compiler.Text.Range get_Item()
FSharp.Compiler.SyntaxTrivia.GetSetKeywords+GetSet: FSharp.Compiler.Text.Range get
FSharp.Compiler.SyntaxTrivia.GetSetKeywords+GetSet: FSharp.Compiler.Text.Range get_get()
FSharp.Compiler.SyntaxTrivia.GetSetKeywords+GetSet: FSharp.Compiler.Text.Range get_set()
FSharp.Compiler.SyntaxTrivia.GetSetKeywords+GetSet: FSharp.Compiler.Text.Range set
FSharp.Compiler.SyntaxTrivia.GetSetKeywords+Set: FSharp.Compiler.Text.Range Item
FSharp.Compiler.SyntaxTrivia.GetSetKeywords+Set: FSharp.Compiler.Text.Range get_Item()
FSharp.Compiler.SyntaxTrivia.GetSetKeywords+Tags: Int32 Get
FSharp.Compiler.SyntaxTrivia.GetSetKeywords+Tags: Int32 GetSet
FSharp.Compiler.SyntaxTrivia.GetSetKeywords+Tags: Int32 Set
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: Boolean IsGet
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: Boolean IsGetSet
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: Boolean IsSet
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: Boolean get_IsGet()
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: Boolean get_IsGetSet()
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: Boolean get_IsSet()
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: FSharp.Compiler.SyntaxTrivia.GetSetKeywords NewGet(FSharp.Compiler.Text.Range)
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: FSharp.Compiler.SyntaxTrivia.GetSetKeywords NewGetSet(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range)
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: FSharp.Compiler.SyntaxTrivia.GetSetKeywords NewSet(FSharp.Compiler.Text.Range)
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: FSharp.Compiler.SyntaxTrivia.GetSetKeywords+Get
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: FSharp.Compiler.SyntaxTrivia.GetSetKeywords+GetSet
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: FSharp.Compiler.SyntaxTrivia.GetSetKeywords+Set
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: FSharp.Compiler.SyntaxTrivia.GetSetKeywords+Tags
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: FSharp.Compiler.Text.Range Range
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: FSharp.Compiler.Text.Range get_Range()
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: Int32 Tag
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: Int32 get_Tag()
FSharp.Compiler.SyntaxTrivia.GetSetKeywords: System.String ToString()
FSharp.Compiler.SyntaxTrivia.IdentTrivia
FSharp.Compiler.SyntaxTrivia.IdentTrivia+HasParenthesis: FSharp.Compiler.Text.Range get_leftParenRange()
FSharp.Compiler.SyntaxTrivia.IdentTrivia+HasParenthesis: FSharp.Compiler.Text.Range get_rightParenRange()
......@@ -9730,17 +9764,24 @@ FSharp.Compiler.SyntaxTrivia.SynMatchClauseTrivia: Microsoft.FSharp.Core.FSharpO
FSharp.Compiler.SyntaxTrivia.SynMatchClauseTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_BarRange()
FSharp.Compiler.SyntaxTrivia.SynMatchClauseTrivia: System.String ToString()
FSharp.Compiler.SyntaxTrivia.SynMatchClauseTrivia: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range])
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAbstractSlotTrivia
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAbstractSlotTrivia: FSharp.Compiler.SyntaxTrivia.SynMemberDefnAbstractSlotTrivia Zero
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAbstractSlotTrivia: FSharp.Compiler.SyntaxTrivia.SynMemberDefnAbstractSlotTrivia get_Zero()
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAbstractSlotTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTrivia.GetSetKeywords] GetSetKeywords
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAbstractSlotTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTrivia.GetSetKeywords] get_GetSetKeywords()
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAbstractSlotTrivia: System.String ToString()
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAbstractSlotTrivia: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTrivia.GetSetKeywords])
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword LeadingKeyword
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword get_LeadingKeyword()
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTrivia.GetSetKeywords] GetSetKeywords
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTrivia.GetSetKeywords] get_GetSetKeywords()
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] EqualsRange
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] GetSetKeyword
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] WithKeyword
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_EqualsRange()
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_GetSetKeyword()
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_WithKeyword()
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: System.String ToString()
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Void .ctor(FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range])
FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Void .ctor(FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTrivia.GetSetKeywords])
FSharp.Compiler.SyntaxTrivia.SynMemberGetSetTrivia
FSharp.Compiler.SyntaxTrivia.SynMemberGetSetTrivia: FSharp.Compiler.Text.Range WithKeyword
FSharp.Compiler.SyntaxTrivia.SynMemberGetSetTrivia: FSharp.Compiler.Text.Range get_WithKeyword()
......@@ -9752,6 +9793,13 @@ FSharp.Compiler.SyntaxTrivia.SynMemberGetSetTrivia: Microsoft.FSharp.Core.FSharp
FSharp.Compiler.SyntaxTrivia.SynMemberGetSetTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_SetKeyword()
FSharp.Compiler.SyntaxTrivia.SynMemberGetSetTrivia: System.String ToString()
FSharp.Compiler.SyntaxTrivia.SynMemberGetSetTrivia: Void .ctor(FSharp.Compiler.Text.Range, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range])
FSharp.Compiler.SyntaxTrivia.SynMemberSigMemberTrivia
FSharp.Compiler.SyntaxTrivia.SynMemberSigMemberTrivia: FSharp.Compiler.SyntaxTrivia.SynMemberSigMemberTrivia Zero
FSharp.Compiler.SyntaxTrivia.SynMemberSigMemberTrivia: FSharp.Compiler.SyntaxTrivia.SynMemberSigMemberTrivia get_Zero()
FSharp.Compiler.SyntaxTrivia.SynMemberSigMemberTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTrivia.GetSetKeywords] GetSetKeywords
FSharp.Compiler.SyntaxTrivia.SynMemberSigMemberTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTrivia.GetSetKeywords] get_GetSetKeywords()
FSharp.Compiler.SyntaxTrivia.SynMemberSigMemberTrivia: System.String ToString()
FSharp.Compiler.SyntaxTrivia.SynMemberSigMemberTrivia: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTrivia.GetSetKeywords])
FSharp.Compiler.SyntaxTrivia.SynModuleDeclNestedModuleTrivia
FSharp.Compiler.SyntaxTrivia.SynModuleDeclNestedModuleTrivia: FSharp.Compiler.SyntaxTrivia.SynModuleDeclNestedModuleTrivia Zero
FSharp.Compiler.SyntaxTrivia.SynModuleDeclNestedModuleTrivia: FSharp.Compiler.SyntaxTrivia.SynModuleDeclNestedModuleTrivia get_Zero()
......@@ -25,7 +25,7 @@ neg62.fs(49,6,49,26): typecheck error FS0081: Implicit object constructors for s
neg62.fs(50,5,50,21): typecheck error FS0901: Structs cannot contain value definitions because the default constructor for structs will not execute these bindings. Consider adding additional arguments to the primary constructor for the type.
neg62.fs(54,26,54,34): typecheck error FS3135: To indicate that this property can be set, use 'member val PropertyName = expr with get,set'.
neg62.fs(54,31,54,34): typecheck error FS3135: To indicate that this property can be set, use 'member val PropertyName = expr with get,set'.
neg62.fs(69,22,69,40): typecheck error FS0670: This code is not sufficiently generic. The type variable 'S could not be generalized because it would escape its scope.
......
// #Conformance #ObjectOrientedTypes #Classes #MethodsAndProperties
//<Expects status="error" span="(4,29-4,37)" id="FS3135">To indicate that this property can be set, use 'member val PropertyName = expr with get,set'\.$</Expects>
//<Expects status="error" span="(4,34-4,37)" id="FS3135">To indicate that this property can be set, use 'member val PropertyName = expr with get,set'\.$</Expects>
type T() =
member val Property = 0 with set // contrary to C#, we need both get and set
......
......@@ -39,11 +39,14 @@ type Foo() =
| ParsedInput.ImplFile (ParsedImplFileInput (contents = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [
SynModuleDecl.Types(
typeDefns = [ SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [_
SynMemberDefn.AutoProperty(trivia = { WithKeyword = Some mWith })
SynMemberDefn.AutoProperty(trivia = { WithKeyword = Some mWith
GetSetKeywords = Some (GetSetKeywords.GetSet(mGet, mSet)) })
SynMemberDefn.AutoProperty(trivia = { WithKeyword = None })])) ]
)
]) ])) ->
assertRange (3, 39) (3, 43) mWith
assertRange (3, 44) (3, 47) mGet
assertRange (3, 49) (3, 52) mSet
| _ -> Assert.Fail "Could not get valid AST"
[<Test>]
......@@ -59,10 +62,13 @@ type Foo() =
| ParsedInput.ImplFile (ParsedImplFileInput (contents = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [
SynModuleDecl.Types(
typeDefns = [ SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [_
SynMemberDefn.AbstractSlot(slotSig=SynValSig(trivia = { WithKeyword = Some mWith }))])) ]
SynMemberDefn.AbstractSlot(slotSig=SynValSig(trivia = { WithKeyword = Some mWith })
trivia = { GetSetKeywords = Some (GetSetKeywords.GetSet(mGet, mSet)) })])) ]
)
]) ])) ->
assertRange (3, 30) (3, 34) mWith
assertRange (3, 35) (3, 38) mGet
assertRange (3, 39) (3, 42) mSet
| _ -> Assert.Fail "Could not get valid AST"
[<Test>]
......@@ -223,3 +229,89 @@ type A =
let comment = preXmlDoc.ToXmlDoc(false, None).GetXmlText()
Assert.False (System.String.IsNullOrWhiteSpace(comment))
| _ -> Assert.Fail "Could not get valid AST"
[<Test>]
let ``Signature member with set,get`` () =
let parseResults =
getParseResultsOfSignatureFile
"""
module Meh
type X =
// MemberSig.Member
member Y : int
with
set , get
"""
match parseResults with
| ParsedInput.SigFile (ParsedSigFileInput (contents=[
SynModuleOrNamespaceSig(decls=[
SynModuleSigDecl.Types(types = [
SynTypeDefnSig(typeRepr = SynTypeDefnSigRepr.ObjectModel(memberSigs = [
SynMemberSig.Member(memberSig = SynValSig(trivia = { WithKeyword = Some mWith })
trivia = { GetSetKeywords = Some (GetSetKeywords.GetSet(mGet, mSet)) })
]))
])
] ) ])) ->
assertRange (7, 20) (7, 24) mWith
assertRange (8, 28) (8, 31) mSet
assertRange (8, 36) (8, 39) mGet
| _ -> Assert.Fail "Could not get valid AST"
[<Test>]
let ``Signature member with set`` () =
let parseResults =
getParseResultsOfSignatureFile
"""
module Meh
type X =
// MemberSig.Member
member Y : int
with
set
"""
match parseResults with
| ParsedInput.SigFile (ParsedSigFileInput (contents=[
SynModuleOrNamespaceSig(decls=[
SynModuleSigDecl.Types(types = [
SynTypeDefnSig(typeRepr = SynTypeDefnSigRepr.ObjectModel(memberSigs = [
SynMemberSig.Member(memberSig = SynValSig(trivia = { WithKeyword = Some mWith })
trivia = { GetSetKeywords = Some (GetSetKeywords.Set(mSet)) })
]))
])
] ) ])) ->
assertRange (7, 20) (7, 24) mWith
assertRange (8, 28) (8, 31) mSet
| _ -> Assert.Fail "Could not get valid AST"
[<Test>]
let ``Signature member with get`` () =
let parseResults =
getParseResultsOfSignatureFile
"""
module Meh
type X =
// MemberSig.Member
member Y : int
with
get
"""
match parseResults with
| ParsedInput.SigFile (ParsedSigFileInput (contents=[
SynModuleOrNamespaceSig(decls=[
SynModuleSigDecl.Types(types = [
SynTypeDefnSig(typeRepr = SynTypeDefnSigRepr.ObjectModel(memberSigs = [
SynMemberSig.Member(memberSig = SynValSig(trivia = { WithKeyword = Some mWith })
trivia = { GetSetKeywords = Some (GetSetKeywords.Get(mGet)) })
]))
])
] ) ])) ->
assertRange (7, 20) (7, 24) mWith
assertRange (8, 32) (8, 35) mGet
| _ -> Assert.Fail "Could not get valid AST"
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册