SF patch 419176 from MvL; fixed bug 418977

Two errors in dict_to_map() helper used by PyFrame_LocalsToFast().
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index 8e78f0f..6e66d23 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -283,12 +283,9 @@
 		PyObject *value = PyDict_GetItem(dict, key);
 		Py_XINCREF(value);
 		if (deref) {
-			if (value) {
+			if (value || clear) {
 				if (PyCell_Set(values[j], value) < 0)
 					PyErr_Clear();
-			} else if (clear) {
-				Py_XDECREF(values[j]);
-				values[j] = value;
 			}
 		} else if (value != NULL || clear) {
 			Py_XDECREF(values[j]);
@@ -370,10 +367,10 @@
 			return;
 		dict_to_map(f->f_code->co_cellvars, 
 			    PyTuple_GET_SIZE(f->f_code->co_cellvars),
-			    locals, fast, 1, clear);
+			    locals, fast + f->f_nlocals, 1, clear);
 		dict_to_map(f->f_code->co_freevars, 
 			    PyTuple_GET_SIZE(f->f_code->co_freevars),
-			    locals, fast, 1, clear);
+			    locals, fast + f->f_nlocals + f->f_ncells, 1, clear);
 	}
 	PyErr_Restore(error_type, error_value, error_traceback);
 }