@@ -1355,9 +1355,8 @@ STATIC void compile_import_from(compiler_t *comp, mp_parse_node_struct_t *pns) {
13551355STATIC void compile_declare_global (compiler_t * comp , mp_parse_node_t pn , qstr qst ) {
13561356 bool added ;
13571357 id_info_t * id_info = scope_find_or_add_id (comp -> scope_cur , qst , & added );
1358- if (!added ) {
1359- // TODO this is not compliant with CPython
1360- compile_syntax_error (comp , pn , "identifier already used" );
1358+ if (!added && id_info -> kind != ID_INFO_KIND_GLOBAL_EXPLICIT ) {
1359+ compile_syntax_error (comp , pn , "identifier redefined as global" );
13611360 return ;
13621361 }
13631362 id_info -> kind = ID_INFO_KIND_GLOBAL_EXPLICIT ;
@@ -1382,9 +1381,8 @@ STATIC void compile_global_stmt(compiler_t *comp, mp_parse_node_struct_t *pns) {
13821381STATIC void compile_declare_nonlocal (compiler_t * comp , mp_parse_node_t pn , qstr qst ) {
13831382 bool added ;
13841383 id_info_t * id_info = scope_find_or_add_id (comp -> scope_cur , qst , & added );
1385- if (!added ) {
1386- // TODO this is not compliant with CPython
1387- compile_syntax_error (comp , pn , "identifier already used" );
1384+ if (!added && id_info -> kind != ID_INFO_KIND_FREE ) {
1385+ compile_syntax_error (comp , pn , "identifier redefined as nonlocal" );
13881386 return ;
13891387 }
13901388 id_info_t * id_info2 = scope_find_local_in_parent (comp -> scope_cur , qst );
0 commit comments