Beispiel #1
0
        protected static string MutabilityFlagToString(MutabilityFlag mutability)
        {
            if (mutability == MutabilityFlag.MfVal)
            {
                return "val";
            }

            if (mutability == MutabilityFlag.MfVar)
            {
                return "var";
            }

            return "";
        }
Beispiel #2
0
        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;
        }
Beispiel #3
0
 public RppField(MutabilityFlag mutabilityFlag, string name, HashSet<ObjectModifier> modifiers, ResolvableType type)
     : base(mutabilityFlag, name, type, RppEmptyExpr.Instance)
 {
     Modifiers = modifiers;
     IsLocalSemantic = false;
 }
Beispiel #4
0
 public RppField(MutabilityFlag mutabilityFlag, string name, HashSet<ObjectModifier> modifiers, ResolvableType type, IRppExpr initExpr)
     : base(mutabilityFlag, name, type, initExpr)
 {
     Modifiers = modifiers;
     IsLocalSemantic = false;
 }
Beispiel #5
0
        // 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};
            }
        }