py: Allow to compile with extra warnings (sign-compare, unused-param).
diff --git a/py/lexer.c b/py/lexer.c
index e778510..536208e 100644
--- a/py/lexer.c
+++ b/py/lexer.c
@@ -58,33 +58,33 @@
     return lex->chr0 == '\n';
 }
 
-STATIC bool is_char(mp_lexer_t *lex, char c) {
+STATIC bool is_char(mp_lexer_t *lex, byte c) {
     return lex->chr0 == c;
 }
 
-STATIC bool is_char_or(mp_lexer_t *lex, char c1, char c2) {
+STATIC bool is_char_or(mp_lexer_t *lex, byte c1, byte c2) {
     return lex->chr0 == c1 || lex->chr0 == c2;
 }
 
-STATIC bool is_char_or3(mp_lexer_t *lex, char c1, char c2, char c3) {
+STATIC bool is_char_or3(mp_lexer_t *lex, byte c1, byte c2, byte c3) {
     return lex->chr0 == c1 || lex->chr0 == c2 || lex->chr0 == c3;
 }
 
 /*
-STATIC bool is_char_following(mp_lexer_t *lex, char c) {
+STATIC bool is_char_following(mp_lexer_t *lex, byte c) {
     return lex->chr1 == c;
 }
 */
 
-STATIC bool is_char_following_or(mp_lexer_t *lex, char c1, char c2) {
+STATIC bool is_char_following_or(mp_lexer_t *lex, byte c1, byte c2) {
     return lex->chr1 == c1 || lex->chr1 == c2;
 }
 
-STATIC bool is_char_following_following_or(mp_lexer_t *lex, char c1, char c2) {
+STATIC bool is_char_following_following_or(mp_lexer_t *lex, byte c1, byte c2) {
     return lex->chr2 == c1 || lex->chr2 == c2;
 }
 
-STATIC bool is_char_and(mp_lexer_t *lex, char c1, char c2) {
+STATIC bool is_char_and(mp_lexer_t *lex, byte c1, byte c2) {
     return lex->chr0 == c1 && lex->chr1 == c2;
 }
 
diff --git a/py/lexer.h b/py/lexer.h
index 3118df6..17c472d 100644
--- a/py/lexer.h
+++ b/py/lexer.h
@@ -141,7 +141,8 @@
 // the next-byte function must return the next byte in the stream
 // it must return MP_LEXER_EOF if end of stream
 // it can be called again after returning MP_LEXER_EOF, and in that case must return MP_LEXER_EOF
-#define MP_LEXER_EOF (-1)
+#define MP_LEXER_EOF ((unichar)(-1))
+
 typedef mp_uint_t (*mp_lexer_stream_next_byte_t)(void*);
 typedef void (*mp_lexer_stream_close_t)(void*);
 
diff --git a/py/modbuiltins.c b/py/modbuiltins.c
index 78fa4af..0440fc7 100644
--- a/py/modbuiltins.c
+++ b/py/modbuiltins.c
@@ -41,6 +41,10 @@
 #include <math.h>
 #endif
 
+#if MICROPY_PY_IO
+extern mp_uint_t mp_sys_stdout_obj; // type is irrelevant, just need pointer
+#endif
+
 // args[0] is function from class body
 // args[1] is class name
 // args[2:] are base objects
@@ -403,7 +407,6 @@
         end_data = mp_obj_str_get_data(end_elem->value, &end_len);
     }
     #if MICROPY_PY_IO
-    extern mp_uint_t mp_sys_stdout_obj; // type is irrelevant, just need pointer
     mp_obj_t stream_obj = &mp_sys_stdout_obj;
     mp_map_elem_t *file_elem = mp_map_lookup(kwargs, MP_OBJ_NEW_QSTR(MP_QSTR_file), MP_MAP_LOOKUP);
     if (file_elem != NULL && file_elem->value != mp_const_none) {
@@ -440,7 +443,6 @@
 STATIC mp_obj_t mp_builtin___repl_print__(mp_obj_t o) {
     if (o != mp_const_none) {
         #if MICROPY_PY_IO
-        extern mp_uint_t mp_sys_stdout_obj; // type is irrelevant, just need pointer
         pfenv_t pfenv;
         pfenv.data = &mp_sys_stdout_obj;
         pfenv.print_strn = (void (*)(void *, const char *, mp_uint_t))mp_stream_write;
diff --git a/py/objarray.c b/py/objarray.c
index 85b73ae..8c1caac 100644
--- a/py/objarray.c
+++ b/py/objarray.c
@@ -220,6 +220,8 @@
 }
 
 STATIC mp_obj_t memoryview_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) {
+    (void)type_in;
+
     // TODO possibly allow memoryview constructor to take start/stop so that one
     // can do memoryview(b, 4, 8) instead of memoryview(b)[4:8] (uses less RAM)
 
diff --git a/py/objstrunicode.c b/py/objstrunicode.c
index abef234..1cf4ed4 100644
--- a/py/objstrunicode.c
+++ b/py/objstrunicode.c
@@ -53,7 +53,7 @@
             has_double_quote = true;
         }
     }
-    int quote_char = '\'';
+    unichar quote_char = '\'';
     if (has_single_quote && !has_double_quote) {
         quote_char = '"';
     }