示例#1
0
        private void VisitIfStmt(IfStmt ifStmt)
        {
            _outputBuilder.Write("if");
            _outputBuilder.Write(' ');
            _outputBuilder.Write('(');

            Visit(ifStmt.Cond);

            _outputBuilder.WriteLine(')');

            if (ifStmt.Then is CompoundStmt)
            {
                Visit(ifStmt.Then);
            }
            else
            {
                _outputBuilder.IncreaseIndentation();
                _outputBuilder.WriteIndentation();

                _outputBuilder.NeedsSemicolon = true;
                Visit(ifStmt.Then);

                if (ifStmt.Else != null)
                {
                    _outputBuilder.WriteSemicolonIfNeeded();
                }
                _outputBuilder.DecreaseIndentation();
            }

            if (ifStmt.Else != null)
            {
                _outputBuilder.WriteIndented("else");
                _outputBuilder.NeedsNewline = true;

                if (ifStmt.Else is CompoundStmt)
                {
                    Visit(ifStmt.Else);
                }
                else if (ifStmt.Else is IfStmt)
                {
                    _outputBuilder.Write(' ');
                    _outputBuilder.NeedsNewline = false;
                    Visit(ifStmt.Else);
                }
                else
                {
                    _outputBuilder.IncreaseIndentation();
                    _outputBuilder.WriteIndentation();

                    _outputBuilder.NeedsSemicolon = true;
                    Visit(ifStmt.Else);

                    _outputBuilder.DecreaseIndentation();
                }
            }

            _outputBuilder.NeedsNewline = true;
        }
示例#2
0
        internal static new Stmt Create(CXCursor handle)
        {
            Stmt result;

            switch (handle.Kind)
            {
            case CXCursorKind.CXCursor_UnexposedStmt:
            {
                result = new Stmt(handle, handle.Kind);
                break;
            }

            case CXCursorKind.CXCursor_LabelStmt:
            {
                result = new LabelStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_CompoundStmt:
            {
                result = new CompoundStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_CaseStmt:
            {
                result = new CaseStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_DefaultStmt:
            {
                result = new DefaultStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_IfStmt:
            {
                result = new IfStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_SwitchStmt:
            {
                result = new SwitchStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_WhileStmt:
            {
                result = new WhileStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_DoStmt:
            {
                result = new DoStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_ForStmt:
            {
                result = new ForStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_GotoStmt:
            {
                result = new GotoStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_IndirectGotoStmt:
            {
                result = new IndirectGotoStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_ContinueStmt:
            {
                result = new ContinueStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_BreakStmt:
            {
                result = new BreakStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_ReturnStmt:
            {
                result = new ReturnStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_GCCAsmStmt:
            {
                result = new GCCAsmStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_ObjCAtTryStmt:
            {
                result = new ObjCAtTryStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_ObjCAtCatchStmt:
            {
                result = new ObjCAtCatchStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_ObjCAtFinallyStmt:
            {
                result = new ObjCAtFinallyStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_ObjCAtThrowStmt:
            {
                result = new ObjCAtThrowStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_ObjCAtSynchronizedStmt:
            {
                result = new ObjCAtSynchronizedStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_ObjCAutoreleasePoolStmt:
            {
                result = new ObjCAutoreleasePoolStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_ObjCForCollectionStmt:
            {
                result = new ObjCForCollectionStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_CXXCatchStmt:
            {
                result = new CXXCatchStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_CXXTryStmt:
            {
                result = new CXXTryStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_CXXForRangeStmt:
            {
                result = new CXXForRangeStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_SEHTryStmt:
            {
                result = new SEHTryStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_SEHExceptStmt:
            {
                result = new SEHExceptStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_SEHFinallyStmt:
            {
                result = new SEHFinallyStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_MSAsmStmt:
            {
                result = new MSAsmStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_NullStmt:
            {
                result = new NullStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_DeclStmt:
            {
                result = new DeclStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPParallelDirective:
            {
                result = new OMPParallelDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPSimdDirective:
            {
                result = new OMPSimdDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPForDirective:
            {
                result = new OMPForDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPSectionsDirective:
            {
                result = new OMPSectionsDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPSectionDirective:
            {
                result = new OMPSectionDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPSingleDirective:
            {
                result = new OMPSingleDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPParallelForDirective:
            {
                result = new OMPParallelForDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPParallelSectionsDirective:
            {
                result = new OMPParallelSectionsDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTaskDirective:
            {
                result = new OMPTaskDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPMasterDirective:
            {
                result = new OMPMasterDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPCriticalDirective:
            {
                result = new OMPCriticalDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTaskyieldDirective:
            {
                result = new OMPTaskyieldDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPBarrierDirective:
            {
                result = new OMPBarrierDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTaskwaitDirective:
            {
                result = new OMPTaskwaitDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPFlushDirective:
            {
                result = new OMPFlushDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_SEHLeaveStmt:
            {
                result = new SEHLeaveStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPOrderedDirective:
            {
                result = new OMPOrderedDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPAtomicDirective:
            {
                result = new OMPAtomicDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPForSimdDirective:
            {
                result = new OMPForSimdDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPParallelForSimdDirective:
            {
                result = new OMPParallelForSimdDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTargetDirective:
            {
                result = new OMPTargetDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTeamsDirective:
            {
                result = new OMPTeamsDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTaskgroupDirective:
            {
                result = new OMPTaskgroupDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPCancellationPointDirective:
            {
                result = new OMPCancellationPointDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPCancelDirective:
            {
                result = new OMPCancelDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTargetDataDirective:
            {
                result = new OMPTargetDataDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTaskLoopDirective:
            {
                result = new OMPTaskLoopDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTaskLoopSimdDirective:
            {
                result = new OMPTaskLoopSimdDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPDistributeDirective:
            {
                result = new OMPDistributeDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTargetEnterDataDirective:
            {
                result = new OMPTargetEnterDataDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTargetExitDataDirective:
            {
                result = new OMPTargetExitDataDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTargetParallelDirective:
            {
                result = new OMPTargetParallelDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTargetParallelForDirective:
            {
                result = new OMPTargetParallelForDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTargetUpdateDirective:
            {
                result = new OMPTargetUpdateDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPDistributeParallelForDirective:
            {
                result = new OMPDistributeParallelForDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPDistributeParallelForSimdDirective:
            {
                result = new OMPDistributeParallelForSimdDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPDistributeSimdDirective:
            {
                result = new OMPDistributeSimdDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTargetParallelForSimdDirective:
            {
                result = new OMPTargetParallelForSimdDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTargetSimdDirective:
            {
                result = new OMPTargetSimdDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTeamsDistributeDirective:
            {
                result = new OMPTeamsDistributeDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTeamsDistributeSimdDirective:
            {
                result = new OMPTeamsDistributeSimdDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTeamsDistributeParallelForSimdDirective:
            {
                result = new OMPTeamsDistributeParallelForSimdDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTeamsDistributeParallelForDirective:
            {
                result = new OMPTeamsDistributeParallelForDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTargetTeamsDirective:
            {
                result = new OMPTargetTeamsDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTargetTeamsDistributeDirective:
            {
                result = new OMPTargetTeamsDistributeDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTargetTeamsDistributeParallelForDirective:
            {
                result = new OMPTargetTeamsDistributeParallelForDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTargetTeamsDistributeParallelForSimdDirective:
            {
                result = new OMPTargetTeamsDistributeParallelForSimdDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_OMPTargetTeamsDistributeSimdDirective:
            {
                result = new OMPTargetTeamsDistributeSimdDirective(handle);
                break;
            }

            case CXCursorKind.CXCursor_BuiltinBitCastExpr:
            {
                result = new BuiltinBitCastExpr(handle);
                break;
            }

            default:
            {
                Debug.WriteLine($"Unhandled statement kind: {handle.KindSpelling}.");
                result = new Stmt(handle, handle.Kind);
                break;
            }
            }

            return(result);
        }
示例#3
0
        internal static new Stmt Create(CXCursor handle)
        {
            Stmt result;

            switch (handle.Kind)
            {
            case CXCursorKind.CXCursor_CompoundStmt:
            {
                result = new CompoundStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_IfStmt:
            {
                result = new IfStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_DoStmt:
            {
                result = new DoStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_ForStmt:
            {
                result = new ForStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_BreakStmt:
            {
                result = new BreakStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_ReturnStmt:
            {
                result = new ReturnStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_NullStmt:
            {
                result = new NullStmt(handle);
                break;
            }

            case CXCursorKind.CXCursor_DeclStmt:
            {
                result = new DeclStmt(handle);
                break;
            }

            default:
            {
                Debug.WriteLine($"Unhandled statement kind: {handle.KindSpelling}.");
                Debugger.Break();

                result = new Stmt(handle, handle.Kind);
                break;
            }
            }

            return(result);
        }