diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index f15805c..d072b8d 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -611,6 +611,9 @@
   defining ``COUNT_ALLOCS`` macro.
   (Contributed by Victor Stinner in :issue:`39489`.)
 
+* The ``ast.Suite`` node class has been removed due to no longer being needed.
+  (Contributed by Batuhan Taskaya in :issue:`39639`.)
+
 
 Porting to Python 3.9
 =====================
diff --git a/Include/Python-ast.h b/Include/Python-ast.h
index b9232b1..931a6b9 100644
--- a/Include/Python-ast.h
+++ b/Include/Python-ast.h
@@ -51,7 +51,7 @@
 
 
 enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3,
-                 FunctionType_kind=4, Suite_kind=5};
+                 FunctionType_kind=4};
 struct _mod {
     enum _mod_kind kind;
     union {
@@ -73,10 +73,6 @@
             expr_ty returns;
         } FunctionType;
 
-        struct {
-            asdl_seq *body;
-        } Suite;
-
     } v;
 };
 
@@ -483,8 +479,6 @@
 mod_ty _Py_Expression(expr_ty body, PyArena *arena);
 #define FunctionType(a0, a1, a2) _Py_FunctionType(a0, a1, a2)
 mod_ty _Py_FunctionType(asdl_seq * argtypes, expr_ty returns, PyArena *arena);
-#define Suite(a0, a1) _Py_Suite(a0, a1)
-mod_ty _Py_Suite(asdl_seq * body, PyArena *arena);
 #define FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) _Py_FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
 stmt_ty _Py_FunctionDef(identifier name, arguments_ty args, asdl_seq * body,
                         asdl_seq * decorator_list, expr_ty returns, string
diff --git a/Lib/test/test_asdl_parser.py b/Lib/test/test_asdl_parser.py
index 9eaceec..d3306c2 100644
--- a/Lib/test/test_asdl_parser.py
+++ b/Lib/test/test_asdl_parser.py
@@ -118,7 +118,7 @@
         v = CustomVisitor()
         v.visit(self.types['mod'])
         self.assertEqual(v.names_with_seq,
-                         ['Module', 'Module', 'Interactive', 'FunctionType', 'Suite'])
+                         ['Module', 'Module', 'Interactive', 'FunctionType'])
 
 
 if __name__ == '__main__':
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-02-15-15-29-34.bpo-39639.3mqJjm.rst b/Misc/NEWS.d/next/Core and Builtins/2020-02-15-15-29-34.bpo-39639.3mqJjm.rst
new file mode 100644
index 0000000..7a54dd0
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-02-15-15-29-34.bpo-39639.3mqJjm.rst
@@ -0,0 +1 @@
+Remove ``ast.Suite`` node class because it's no longer used. Patch by Batuhan Taskaya.
diff --git a/Parser/Python.asdl b/Parser/Python.asdl
index 126d478..bec30a7 100644
--- a/Parser/Python.asdl
+++ b/Parser/Python.asdl
@@ -3,14 +3,11 @@
 
 module Python
 {
-    mod = Module(stmt* body, type_ignore *type_ignores)
+    mod = Module(stmt* body, type_ignore* type_ignores)
         | Interactive(stmt* body)
         | Expression(expr body)
         | FunctionType(expr* argtypes, expr returns)
 
-        -- not really an actual node but useful in Jython's typesystem.
-        | Suite(stmt* body)
-
     stmt = FunctionDef(identifier name, arguments args,
                        stmt* body, expr* decorator_list, expr? returns,
                        string? type_comment)
@@ -51,7 +48,6 @@
           | Expr(expr value)
           | Pass | Break | Continue
 
-          -- XXX Jython will be different
           -- col_offset is the byte offset in the utf8 string the parser uses
           attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
 
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index e9925e7..2784c42 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -127,7 +127,6 @@
     PyObject *Sub_singleton;
     PyObject *Sub_type;
     PyObject *Subscript_type;
-    PyObject *Suite_type;
     PyObject *Try_type;
     PyObject *Tuple_type;
     PyObject *TypeIgnore_type;
@@ -357,7 +356,6 @@
     Py_CLEAR(astmodulestate(module)->Sub_singleton);
     Py_CLEAR(astmodulestate(module)->Sub_type);
     Py_CLEAR(astmodulestate(module)->Subscript_type);
-    Py_CLEAR(astmodulestate(module)->Suite_type);
     Py_CLEAR(astmodulestate(module)->Try_type);
     Py_CLEAR(astmodulestate(module)->Tuple_type);
     Py_CLEAR(astmodulestate(module)->TypeIgnore_type);
@@ -586,7 +584,6 @@
     Py_VISIT(astmodulestate(module)->Sub_singleton);
     Py_VISIT(astmodulestate(module)->Sub_type);
     Py_VISIT(astmodulestate(module)->Subscript_type);
-    Py_VISIT(astmodulestate(module)->Suite_type);
     Py_VISIT(astmodulestate(module)->Try_type);
     Py_VISIT(astmodulestate(module)->Tuple_type);
     Py_VISIT(astmodulestate(module)->TypeIgnore_type);
@@ -807,9 +804,6 @@
     "argtypes",
     "returns",
 };
-static const char * const Suite_fields[]={
-    "body",
-};
 static const char * const stmt_attributes[] = {
     "lineno",
     "col_offset",
@@ -1442,8 +1436,6 @@
     state->FunctionType_type = make_type("FunctionType", state->mod_type,
                                          FunctionType_fields, 2);
     if (!state->FunctionType_type) return 0;
-    state->Suite_type = make_type("Suite", state->mod_type, Suite_fields, 1);
-    if (!state->Suite_type) return 0;
     state->stmt_type = make_type("stmt", state->AST_type, NULL, 0);
     if (!state->stmt_type) return 0;
     if (!add_attributes(state->stmt_type, stmt_attributes, 4)) return 0;
@@ -1920,18 +1912,6 @@
     return p;
 }
 
-mod_ty
-Suite(asdl_seq * body, PyArena *arena)
-{
-    mod_ty p;
-    p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
-    if (!p)
-        return NULL;
-    p->kind = Suite_kind;
-    p->v.Suite.body = body;
-    return p;
-}
-
 stmt_ty
 FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
             decorator_list, expr_ty returns, string type_comment, int lineno,
@@ -3416,16 +3396,6 @@
             goto failed;
         Py_DECREF(value);
         break;
-    case Suite_kind:
-        tp = (PyTypeObject *)astmodulestate_global->Suite_type;
-        result = PyType_GenericNew(tp, NULL, NULL);
-        if (!result) goto failed;
-        value = ast2obj_list(o->v.Suite.body, ast2obj_stmt);
-        if (!value) goto failed;
-        if (PyObject_SetAttr(result, astmodulestate_global->body, value) == -1)
-            goto failed;
-        Py_DECREF(value);
-        break;
     }
     return result;
 failed:
@@ -5201,51 +5171,6 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    tp = astmodulestate_global->Suite_type;
-    isinstance = PyObject_IsInstance(obj, tp);
-    if (isinstance == -1) {
-        return 1;
-    }
-    if (isinstance) {
-        asdl_seq* body;
-
-        if (_PyObject_LookupAttr(obj, astmodulestate_global->body, &tmp) < 0) {
-            return 1;
-        }
-        if (tmp == NULL) {
-            PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Suite");
-            return 1;
-        }
-        else {
-            int res;
-            Py_ssize_t len;
-            Py_ssize_t i;
-            if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Suite field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
-                goto failed;
-            }
-            len = PyList_GET_SIZE(tmp);
-            body = _Py_asdl_seq_new(len, arena);
-            if (body == NULL) goto failed;
-            for (i = 0; i < len; i++) {
-                stmt_ty val;
-                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
-                Py_INCREF(tmp2);
-                res = obj2ast_stmt(tmp2, &val, arena);
-                Py_DECREF(tmp2);
-                if (res != 0) goto failed;
-                if (len != PyList_GET_SIZE(tmp)) {
-                    PyErr_SetString(PyExc_RuntimeError, "Suite field \"body\" changed size during iteration");
-                    goto failed;
-                }
-                asdl_seq_SET(body, i, val);
-            }
-            Py_CLEAR(tmp);
-        }
-        *out = Suite(body, arena);
-        if (*out == NULL) goto failed;
-        return 0;
-    }
 
     PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %R", obj);
     failed:
@@ -9924,10 +9849,6 @@
         goto error;
     }
     Py_INCREF(astmodulestate(m)->FunctionType_type);
-    if (PyModule_AddObject(m, "Suite", astmodulestate_global->Suite_type) < 0) {
-        goto error;
-    }
-    Py_INCREF(astmodulestate(m)->Suite_type);
     if (PyModule_AddObject(m, "stmt", astmodulestate_global->stmt_type) < 0) {
         goto error;
     }
diff --git a/Python/ast.c b/Python/ast.c
index 0aed54c..43b50c5 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -545,9 +545,6 @@
     case Expression_kind:
         res = validate_expr(mod->v.Expression.body, Load);
         break;
-    case Suite_kind:
-        PyErr_SetString(PyExc_ValueError, "Suite is not valid in the CPython compiler");
-        break;
     default:
         PyErr_SetString(PyExc_SystemError, "impossible module node");
         res = 0;
diff --git a/Python/ast_opt.c b/Python/ast_opt.c
index f2a2c25..39e164a 100644
--- a/Python/ast_opt.c
+++ b/Python/ast_opt.c
@@ -462,9 +462,6 @@
     case Expression_kind:
         CALL(astfold_expr, expr_ty, node_->v.Expression.body);
         break;
-    case Suite_kind:
-        CALL_SEQ(astfold_stmt, stmt_ty, node_->v.Suite.body);
-        break;
     default:
         break;
     }
diff --git a/Python/compile.c b/Python/compile.c
index bf8c810..f603e3d 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -1862,10 +1862,6 @@
         VISIT_IN_SCOPE(c, expr, mod->v.Expression.body);
         addNone = 0;
         break;
-    case Suite_kind:
-        PyErr_SetString(PyExc_SystemError,
-                        "suite should not be possible");
-        return 0;
     default:
         PyErr_Format(PyExc_SystemError,
                      "module kind %d should not be possible",
diff --git a/Python/symtable.c b/Python/symtable.c
index 30482d9..a98a0fa 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -318,10 +318,6 @@
                         (stmt_ty)asdl_seq_GET(seq, i)))
                 goto error;
         break;
-    case Suite_kind:
-        PyErr_SetString(PyExc_RuntimeError,
-                        "this compiler does not handle Suites");
-        goto error;
     case FunctionType_kind:
         PyErr_SetString(PyExc_RuntimeError,
                         "this compiler does not handle FunctionTypes");
