Esempio n. 1
0
        public override IAnalysisSet GetIndex(Parsing.Node node, AnalysisUnit unit, IAnalysisSet index)
        {
            var res = AnalysisSet.Empty;

            if (_function._curArgs != null)
            {
                foreach (var value in index)
                {
                    var numIndex = value.Value.GetNumberValue();

                    if (numIndex != null &&
                        numIndex.Value >= 0 &&
                        (numIndex.Value % 1) == 0 &&    // integer number...
                        ((int)numIndex.Value) < _function._curArgs.Args.Length)
                    {
                        res = res.Union(_function._curArgs.Args[(int)numIndex.Value]);
                    }
                }
            }
            return(res);
        }
Esempio n. 2
0
        public override void SetMember(Parsing.Node node, AnalysisUnit unit, string name, IAnalysisSet value)
        {
            foreach (var obj in value)
            {
                // function Class() {
                //     this.abc = 42;
                // }
                //
                // Class.prototype.foo = function(fn) {
                //     var x = this.abc;
                // }
                // this now includes us.

                UserFunctionValue userFunc = obj.Value as UserFunctionValue;
                if (userFunc != null)
                {
                    var env = (FunctionEnvironmentRecord)(userFunc.AnalysisUnit._env);

                    env._this.AddTypes(unit, _function._instance.SelfSet, declaringScope: DeclaringModule);
                }
            }
            base.SetMember(node, unit, name, value);
        }
Esempio n. 3
0
 public static void Parse(ref Parsing.Node node, TokenWalker walker, out ParseResultHistory resultHistory) => Program.Parse(ref node, walker, out resultHistory);