Fix SF bug #505315: Make free and cell vars show up consistently in locals().

PyFrame_FastToLocals() and PyFrame_LocalsToFast() had a return if
f_nlocals was 0.  I think this was a holdover from the pre 2.1 days
when regular locals were the only kind of local variables.

The change makes it possible to use a free variable in eval or exec if
it the variable is also used elsewhere in the same block, which is
what the documentation says.
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index 165121d..6adc036 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -416,8 +416,6 @@
 			return;
 		}
 	}
-	if (f->f_nlocals == 0)
-		return;
 	map = f->f_code->co_varnames;
 	if (!PyDict_Check(locals) || !PyTuple_Check(map))
 		return;
@@ -426,7 +424,8 @@
 	j = PyTuple_Size(map);
 	if (j > f->f_nlocals)
 		j = f->f_nlocals;
-	map_to_dict(map, j, locals, fast, 0);
+	if (f->f_nlocals)
+	    map_to_dict(map, j, locals, fast, 0);
 	if (f->f_ncells || f->f_nfreevars) {
 		if (!(PyTuple_Check(f->f_code->co_cellvars)
 		      && PyTuple_Check(f->f_code->co_freevars))) {
@@ -455,7 +454,7 @@
 		return;
 	locals = f->f_locals;
 	map = f->f_code->co_varnames;
-	if (locals == NULL || f->f_code->co_nlocals == 0)
+	if (locals == NULL)
 		return;
 	if (!PyDict_Check(locals) || !PyTuple_Check(map))
 		return;
@@ -464,7 +463,8 @@
 	j = PyTuple_Size(map);
 	if (j > f->f_nlocals)
 		j = f->f_nlocals;
-	dict_to_map(f->f_code->co_varnames, j, locals, fast, 0, clear);
+	if (f->f_nlocals)
+	    dict_to_map(f->f_code->co_varnames, j, locals, fast, 0, clear);
 	if (f->f_ncells || f->f_nfreevars) {
 		if (!(PyTuple_Check(f->f_code->co_cellvars)
 		      && PyTuple_Check(f->f_code->co_freevars)))
@@ -474,7 +474,8 @@
 			    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 + f->f_nlocals + f->f_ncells, 1, clear);
+			    locals, fast + f->f_nlocals + f->f_ncells, 1, 
+			    clear);
 	}
 	PyErr_Restore(error_type, error_value, error_traceback);
 }