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); }
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; }
public static RppVar Val(string name, RType type, IRppExpr initExpr) { return new RppVar(MutabilityFlag.MfVal, name, type.AsResolvable(), initExpr); }