Jiwon Seo's PEP 3102 implementation.
See SF#1549670.
The compiler package has not yet been updated.
diff --git a/Include/Python-ast.h b/Include/Python-ast.h
index 6182617..3073347 100644
--- a/Include/Python-ast.h
+++ b/Include/Python-ast.h
@@ -328,8 +328,10 @@
 struct _arguments {
         asdl_seq *args;
         identifier vararg;
+        asdl_seq *kwonlyargs;
         identifier kwarg;
         asdl_seq *defaults;
+        asdl_seq *kw_defaults;
 };
 
 struct _keyword {
@@ -427,8 +429,9 @@
                                PyArena *arena);
 excepthandler_ty excepthandler(expr_ty type, expr_ty name, asdl_seq * body, int
                                lineno, int col_offset, PyArena *arena);
-arguments_ty arguments(asdl_seq * args, identifier vararg, identifier kwarg,
-                       asdl_seq * defaults, PyArena *arena);
+arguments_ty arguments(asdl_seq * args, identifier vararg, asdl_seq *
+                       kwonlyargs, identifier kwarg, asdl_seq * defaults,
+                       asdl_seq * kw_defaults, PyArena *arena);
 keyword_ty keyword(identifier arg, expr_ty value, PyArena *arena);
 alias_ty alias(identifier name, identifier asname, PyArena *arena);
 
diff --git a/Include/code.h b/Include/code.h
index 3de77b6..e2eb59d 100644
--- a/Include/code.h
+++ b/Include/code.h
@@ -10,6 +10,7 @@
 typedef struct {
     PyObject_HEAD
     int co_argcount;		/* #arguments, except *args */
+    int co_kwonlyargcount;	/* #keyword only arguments */
     int co_nlocals;		/* #local variables */
     int co_stacksize;		/* #entries needed for evaluation stack */
     int co_flags;		/* CO_..., see below */
@@ -63,8 +64,9 @@
 
 /* Public interface */
 PyAPI_FUNC(PyCodeObject *) PyCode_New(
-	int, int, int, int, PyObject *, PyObject *, PyObject *, PyObject *,
-	PyObject *, PyObject *, PyObject *, PyObject *, int, PyObject *); 
+	int, int, int, int, int, PyObject *, PyObject *,
+	PyObject *, PyObject *, PyObject *, PyObject *,
+	PyObject *, PyObject *, int, PyObject *); 
         /* same as struct above */
 PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);
 
diff --git a/Include/eval.h b/Include/eval.h
index b78dfe0..1d03c97 100644
--- a/Include/eval.h
+++ b/Include/eval.h
@@ -15,7 +15,7 @@
 					PyObject **args, int argc,
 					PyObject **kwds, int kwdc,
 					PyObject **defs, int defc,
-					PyObject *closure);
+					PyObject *kwdefs, PyObject *closure);
 
 PyAPI_FUNC(PyObject *) _PyEval_CallTracing(PyObject *func, PyObject *args);
 
diff --git a/Include/funcobject.h b/Include/funcobject.h
index 59c19bb..7acbe6e 100644
--- a/Include/funcobject.h
+++ b/Include/funcobject.h
@@ -23,6 +23,7 @@
     PyObject *func_code;	/* A code object */
     PyObject *func_globals;	/* A dictionary (other mappings won't do) */
     PyObject *func_defaults;	/* NULL or a tuple */
+    PyObject *func_kwdefaults;	/* NULL or a dict */
     PyObject *func_closure;	/* NULL or a tuple of cell objects */
     PyObject *func_doc;		/* The __doc__ attribute, can be anything */
     PyObject *func_name;	/* The __name__ attribute, a string object */
@@ -47,6 +48,8 @@
 PyAPI_FUNC(PyObject *) PyFunction_GetModule(PyObject *);
 PyAPI_FUNC(PyObject *) PyFunction_GetDefaults(PyObject *);
 PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject *, PyObject *);
+PyAPI_FUNC(PyObject *) PyFunction_GetKwDefaults(PyObject *);
+PyAPI_FUNC(int) PyFunction_SetKwDefaults(PyObject *, PyObject *);
 PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *);
 PyAPI_FUNC(int) PyFunction_SetClosure(PyObject *, PyObject *);
 
@@ -60,6 +63,8 @@
 	(((PyFunctionObject *)func) -> func_module)
 #define PyFunction_GET_DEFAULTS(func) \
 	(((PyFunctionObject *)func) -> func_defaults)
+#define PyFunction_GET_KW_DEFAULTS(func) \
+	(((PyFunctionObject *)func) -> func_kwdefaults)
 #define PyFunction_GET_CLOSURE(func) \
 	(((PyFunctionObject *)func) -> func_closure)