public void ClassWithSameNameAsVariable2() { var someAsm = Common.CreateMockAssembly(); var actual = Process(new JsStatement[] { JsStatement.Function("f", new[] { "x" }, JsStatement.Block( JsStatement.Var("y", JsExpression.Number(0)), JsExpression.FunctionDefinition(new string[0], JsExpression.Binary(ExpressionNodeType.Add, JsExpression.Member(new JsTypeReferenceExpression(Common.CreateMockTypeDefinition("x", someAsm)), "a"), JsExpression.Member(new JsTypeReferenceExpression(Common.CreateMockTypeDefinition("y", someAsm)), "a")) ), JsExpression.FunctionDefinition(new string[0], JsStatement.Block( JsStatement.Var("z", JsExpression.Binary(ExpressionNodeType.Add, JsExpression.Identifier("x"), JsExpression.Identifier("y"))) )) )) }, new[] { Common.CreateMockAssembly(), someAsm }, new MockMetadataImporter { GetTypeSemantics = t => TypeScriptSemantics.NormalType(t.Name) }, namer: new Namer()); AssertCorrect(actual, @"(function() { 'use strict'; var $asm = {}; function f(x1) { var y1 = 0; (function() { x.a + y.a; }); (function() { var z = x1 + y1; }); } })(); "); }
public void RenamedVariableClashWithImplicitGlobal() { var someAsm = Common.CreateMockAssembly(); var actual = Process(new JsStatement[] { JsStatement.Function("f", new[] { "x" }, JsStatement.Block( JsExpression.FunctionDefinition(new string[0], JsExpression.Member(new JsTypeReferenceExpression(Common.CreateMockTypeDefinition("x", someAsm)), "a") ), JsExpression.FunctionDefinition(new string[0], JsStatement.Block( JsExpression.Add(JsExpression.Identifier("x"), JsExpression.Identifier("x1")) )) )) }, new[] { Common.CreateMockAssembly(), someAsm }, new MockMetadataImporter { GetTypeSemantics = t => TypeScriptSemantics.NormalType(t.Name) }, namer: new Namer()); AssertCorrect(actual, @"(function() { 'use strict'; var $asm = {}; function f(x2) { (function() { x.a; }); (function() { x2 + x1; }); } })(); "); }
public override JsStatement VisitFunctionStatement(JsFunctionStatement statement, IDictionary <string, string> data) { IDictionary <string, string> newData; if (!_renames.TryGetValue(statement, out newData)) { newData = data; } bool renamed = false; var paramNames = statement.ParameterNames.Select(n => { string s; if (newData.TryGetValue(n, out s)) { renamed = true; return(s); } else { return(n); } }).ToList(); if (renamed) { return(JsStatement.Function(statement.Name, paramNames, VisitStatement(statement.Body, newData))); } else { return(base.VisitFunctionStatement(statement, newData)); } }
public override JsStatement VisitFunctionStatement(JsFunctionStatement statement, object data) { var body = (JsBlockStatement)VisitStatement(statement.Body, null); return(JsStatement.Function(statement.Name, statement.ParameterNames, JsStatement.Block(MakePrefix(statement).Concat(body.Statements)))); }
public override JsStatement VisitFunctionStatement(JsFunctionStatement statement, Tuple <Dictionary <string, string>, HashSet <string> > data) { var newData = BuildMap(data.Item1, statement); return(JsStatement.Function(statement.Name, statement.ParameterNames.Select(p => { string s; newData.Item1.TryGetValue(p, out s); return s ?? p; }), VisitStatement(statement.Body, newData))); }
public void FunctionDefinitionStatementIsCorrectlyOutput() { AssertCorrect(JsStatement.Function("f", new[] { "a", "b", "c" }, JsExpression.Identifier("x")), "function f(a, b, c) {\n\tx;\n}\n"); }
public virtual JsStatement VisitFunctionStatement(JsFunctionStatement statement, TData data) { var body = VisitStatement(statement.Body, data); return(ReferenceEquals(body, statement.Body) ? statement : JsStatement.Function(statement.Name, statement.ParameterNames, body)); }