internal void AddReturnTypes(Node node, AnalysisUnit unit, IAnalysisSet types, bool enqueue = true)
        {
            if (IsOriginalClosureScope(OuterScope))
            {
                // Do not add return types to original scope of closure functions
                return;
            }

            if (types?.Any() != true)
            {
                return;
            }
            if (Coroutine != null)
            {
                Coroutine.AddReturn(node, unit, types, enqueue);
            }
            else if (Generator != null)
            {
                Generator.AddReturn(node, unit, types, enqueue);
            }
            else
            {
                ReturnValue.MakeUnionStrongerIfMoreThan(unit.State.Limits.ReturnTypes, types);
                ReturnValue.AddTypes(unit, types, enqueue);
            }
        }
        //public readonly GeneratorInfo Generator;

        public FunctionEnvironmentRecord(
            UserFunctionValue function,
            FunctionAnalysisUnit analysisUnit,
            Node node,
            EnvironmentRecord declScope,
            IJsProjectEntry declModule
            )
            : base(node, declScope)
        {
            _function    = function;
            _this        = new VariableDef();
            AnalysisUnit = analysisUnit;
#if FALSE
            if (Function.FunctionObject.IsGenerator)
            {
                Generator = new GeneratorInfo(function.ProjectState, declModule);
                ReturnValue.AddTypes(function.ProjectEntry, Generator.SelfSet, false);
            }
#endif
        }