Example #1
0
        static IReadOnlyCollection <VariableName> EnumerateCapturedVariables(ArrowFunctionExpr fn)
        {
            var capturedvars = new HashSet <VariableName>();

            // collect all variables in fn
            foreach (var v in fn.Expression.SelectLocalVariables())
            {
                capturedvars.Add(v.VarName);
            }

            // remove vars specified in parameters
            foreach (var p in fn.Signature.FormalParams)
            {
                capturedvars.Remove(p.Name.Name);
            }

            //// intersect with variables from parent function scope
            //var containingvars = new HashSet<VariableName>();

            //foreach (var v in fn.GetContainingRoutine().SelectLocalVariables())
            //{
            //    containingvars.Add(v.VarName);
            //}

            //capturedvars.IntersectWith(containingvars);

            //
            return(capturedvars);
        }
Example #2
0
 public SourceArrowFnSymbol(ArrowFunctionExpr syntax, NamedTypeSymbol container)
     : base(syntax, container)
 {
     _body      = ImmutableArray.Create <Statement>(new JumpStmt(syntax.Expression.Span, JumpStmt.Types.Return, syntax.Expression));
     _useparams = EnumerateCapturedVariables(syntax)
                  .Select(v => new FormalParam(Span.Invalid, v.Value, Span.Invalid, null, FormalParam.Flags.Default, null))
                  .ToArray();
 }