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); }
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); }
public static void Parse(ref Parsing.Node node, TokenWalker walker, out ParseResultHistory resultHistory) => Program.Parse(ref node, walker, out resultHistory);