コード例 #1
0
        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;
		});
	}
})();
");
        }
コード例 #2
0
        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;
		});
	}
})();
");
        }
コード例 #3
0
        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));
            }
        }
コード例 #4
0
            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))));
            }
コード例 #5
0
            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)));
            }
コード例 #6
0
 public void FunctionDefinitionStatementIsCorrectlyOutput()
 {
     AssertCorrect(JsStatement.Function("f", new[] { "a", "b", "c" }, JsExpression.Identifier("x")), "function f(a, b, c) {\n\tx;\n}\n");
 }
コード例 #7
0
        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));
        }