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); }
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))); } }
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; }
public virtual JsStatement VisitVariableDeclarationStatement(JsVariableDeclarationStatement statement, TData data) { var declarations = VisitVariableDeclarations(statement.Declarations, data); return(ReferenceEquals(declarations, statement.Declarations) ? statement : new JsVariableDeclarationStatement(declarations)); }