public static void WriteStatement(CodeTextBuilder code, AbstractStatement statement) { if (WriterByStatementType.TryGetValue(statement.GetType(), out var writer)) { writer(code, statement); } else { throw new NotSupportedException( $"Statement of type '{statement.GetType().Name}' is not supported by {nameof(JavaScriptStatementWriter)}."); } }
private bool IsAllowed(AbstractStatement statement) { var type = statement.GetType(); foreach (var allowable in AllowableStatements) { if (allowable.IsAssignableFrom(type)) { return true; } } return false; }
public static StatementSyntax EmitSyntax(AbstractStatement statement) { if (statement is ReturnStatement statementReturn) { return(ReturnStatement(ExpressionSyntaxEmitter.EmitSyntax(statementReturn.Expression))); } if (statement is BlockStatement statementBlock) { return(statementBlock.ToSyntax()); } if (statement is ThrowStatement statementThrow) { return(ThrowStatement(ExpressionSyntaxEmitter.EmitSyntax(statementThrow.Exception))); } if (statement is ExpressionStatement statementExpression) { return(ExpressionStatement(ExpressionSyntaxEmitter.EmitSyntax(statementExpression.Expression))); } if (statement is VariableDeclarationStatement statementVariable) { return(EmitLocalDeclarationSyntax(statementVariable)); } if (statement is IfStatement statementIf) { return(EmitIfStatementSyntax(statementIf)); } if (statement is LockStatement statementLock) { return(LockStatement(ExpressionSyntaxEmitter.EmitSyntax(statementLock.SyncRoot), statementLock.Body.ToSyntax())); } //TODO: support other types of statements throw new NotSupportedException($"Syntax emitter is not supported for statement of type '{statement.GetType().Name}'."); }