コード例 #1
0
        public object VisitVariableDeclarationStatement(JsVariableDeclarationStatement statement, bool addNewline)
        {
            _cb.Append("var ");
            bool first = true;

            foreach (var d in statement.Declarations)
            {
                if (!first)
                {
                    _cb.Append("," + _space);
                }
                _cb.Append(d.Name);
                if (d.Initializer != null)
                {
                    _cb.Append(_space + "=" + _space);
                    VisitExpression(d.Initializer, false);
                }
                first = false;
            }
            _cb.Append(";");
            if (addNewline)
            {
                _cb.AppendLine();
            }
            return(null);
        }
コード例 #2
0
        public override JsStatement VisitVariableDeclarationStatement(JsVariableDeclarationStatement statement, object data)
        {
            List <JsExpression> list = null;

            foreach (var d in statement.Declarations)
            {
                _variables.Add(d.Name);
                if (d.Initializer != null)
                {
                    list = list ?? new List <JsExpression>();
                    list.Add(JsExpression.Assign(JsExpression.Identifier(d.Name), d.Initializer));
                }
            }
            if (list == null)
            {
                return(new JsBlockStatement(new JsStatement[0], mergeWithParent: true));
            }
            else if (list.Count == 1)
            {
                return(new JsExpressionStatement(list[0]));
            }
            else
            {
                return(new JsExpressionStatement(JsExpression.Comma(list)));
            }
        }
コード例 #3
0
        private JsBlockStatement CompileCatchClause(LocalResolveResult catchVariable, CatchClause catchClause, bool isCatchAll, bool isOnly)
        {
            SetRegion(catchClause.GetRegion());
            JsStatement variableDeclaration = null;
            if (!catchClause.VariableNameToken.IsNull) {
                JsExpression compiledAssignment;
                if (isCatchAll)	// If this is the only handler we need to construct the exception
                    compiledAssignment = isOnly ? _runtimeLibrary.MakeException(JsExpression.Identifier(_variables[catchVariable.Variable].Name)) : JsExpression.Identifier(_variables[catchVariable.Variable].Name);
                else
                    compiledAssignment = _runtimeLibrary.Downcast(JsExpression.Identifier(_variables[catchVariable.Variable].Name), _compilation.FindType(KnownTypeCode.Exception), _resolver.Resolve(catchClause.Type).Type);

                variableDeclaration = new JsVariableDeclarationStatement(new JsVariableDeclaration(_variables[((LocalResolveResult)_resolver.Resolve(catchClause.VariableNameToken)).Variable].Name, compiledAssignment));
            }

            var result = CreateInnerCompiler().Compile(catchClause.Body);
            if (variableDeclaration != null)
                result = new JsBlockStatement(new[] { variableDeclaration }.Concat(result.Statements));
            return result;
        }
コード例 #4
0
        public virtual JsStatement VisitVariableDeclarationStatement(JsVariableDeclarationStatement statement, TData data)
        {
            var declarations = VisitVariableDeclarations(statement.Declarations, data);

            return(ReferenceEquals(declarations, statement.Declarations) ? statement : new JsVariableDeclarationStatement(declarations));
        }