Beispiel #1
0
        public override IEnumerable<IRppExpr> DeclareVariables(RType inputType)
        {
            if (Name == "_")
            {
                return Collections.NoExprs;
            }

            RppVar variable = Val(Name, inputType, new RppDefaultExpr(inputType.AsResolvable()));
            variable.Token = Token;
            return List(variable);
        }
Beispiel #2
0
 public static RppVar Val(IToken nameToken, RType type, IRppExpr initExpr)
 {
     return new RppVar(MutabilityFlag.MfVal, nameToken.Text, type.AsResolvable(), initExpr) {Token = nameToken};
 }
        public override IEnumerable<IRppExpr> DeclareVariables(RType inputType)
        {
            // Check inputType with _type
            RType retType = _unapplyMethod.ReturnType;
            Debug.Assert(retType != null, "retType != null");

            // Happens when case class doesn't have class params (so unapply returns bool)
            if (Equals(retType, RppTypeSystem.BooleanTy))
            {
                return Collections.NoExprs;
            }

            _classParamTypes = ExtractTypes(retType).ToArray();
            if (_classParamTypes.Length != _patterns.Length)
            {
                throw new Exception($"Class ${inputType.Name} doesn't contain the same amount of class params as specified in case ({_classParamTypes.Count()})");
            }

            IEnumerable<IRppExpr> classParams = _patterns.Zip(_classParamTypes, Tuple.Create).SelectMany(pair => pair.Item1.DeclareVariables(pair.Item2));

            if (BindedVariableToken != null)
            {
                var bindedVariable = Val(BindedVariableToken.Text, inputType, new RppDefaultExpr(inputType.AsResolvable()));
                return classParams.Concat(bindedVariable).ToList();
            }

            return classParams;
        }
Beispiel #4
0
 public static RppVar Val(string name, RType type, IRppExpr initExpr)
 {
     return new RppVar(MutabilityFlag.MfVal, name, type.AsResolvable(), initExpr);
 }