Exemple #1
0
 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;
        }
Exemple #3
0
        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}'.");
        }