protected static string MutabilityFlagToString(MutabilityFlag mutability) { if (mutability == MutabilityFlag.MfVal) { return "val"; } if (mutability == MutabilityFlag.MfVar) { return "var"; } return ""; }
public bool CanBeCaptured { get; private set; } // vars defined inside closure can't be captured public RppVar(MutabilityFlag mutability, [NotNull] string name, [NotNull] ResolvableType type, [NotNull] IRppExpr initExpr) : base(name) { Type = type; InitExpr = initExpr; MutabilityFlag = mutability; }
public RppField(MutabilityFlag mutabilityFlag, string name, HashSet<ObjectModifier> modifiers, ResolvableType type) : base(mutabilityFlag, name, type, RppEmptyExpr.Instance) { Modifiers = modifiers; IsLocalSemantic = false; }
public RppField(MutabilityFlag mutabilityFlag, string name, HashSet<ObjectModifier> modifiers, ResolvableType type, IRppExpr initExpr) : base(mutabilityFlag, name, type, initExpr) { Modifiers = modifiers; IsLocalSemantic = false; }
// PatDef ::= Pattern2 {',' Pattern2} [':' Type] ['=' Expr] public RppVar ParsePatDef(MutabilityFlag mutabilityFlag, HashSet<ObjectModifier> modifiers) { Expect(RppLexer.Id); IToken varIdToken = _lastToken; RTypeName type = RTypeName.Undefined; if (Require(RppLexer.OP_Colon)) { if (!ParseType(out type)) { RaiseSyntaxError("Type is expected after ':'"); } } IRppExpr expr = RppEmptyExpr.Instance; if (Require(RppLexer.OP_Eq)) { expr = ParseExpr(); } if (_isInsideFunction) { return new RppVar(mutabilityFlag, varIdToken.Text, new ResolvableType(type), expr) {Token = varIdToken}; } else { return new RppField(mutabilityFlag, varIdToken.Text, modifiers, new ResolvableType(type), expr) {Token = varIdToken}; } }