You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2016/03/20 06:53:59 UTC

[05/14] lucy-clownfish git commit: Address int warnings in CFC.

Address int warnings in CFC.

Quiet warnings exposed by adding `-Wconversion`.


Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/91f00051
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/91f00051
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/91f00051

Branch: refs/heads/master
Commit: 91f00051d7b434136244a7f44f3f6d1fe187464f
Parents: 338ab9f
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Fri Mar 18 23:41:26 2016 +0000
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Sat Mar 19 22:19:41 2016 -0700

----------------------------------------------------------------------
 compiler/c/cfc.c                  |  5 +++--
 compiler/src/CFCBase.h            |  2 +-
 compiler/src/CFCCHtml.c           |  9 +++++----
 compiler/src/CFCClass.c           |  2 +-
 compiler/src/CFCDocuComment.c     |  6 +++---
 compiler/src/CFCFile.c            |  2 +-
 compiler/src/CFCGoFunc.c          | 12 ++++++------
 compiler/src/CFCGoTypeMap.c       |  8 ++++----
 compiler/src/CFCParcel.c          |  8 ++++----
 compiler/src/CFCParser.c          |  2 +-
 compiler/src/CFCPerl.c            |  2 +-
 compiler/src/CFCPerlConstructor.c |  2 +-
 compiler/src/CFCPerlMethod.c      |  2 +-
 compiler/src/CFCPerlPod.c         |  6 +++---
 compiler/src/CFCPerlSub.c         |  4 ++--
 compiler/src/CFCPyClass.c         |  2 +-
 compiler/src/CFCPyMethod.c        | 30 +++++++++++++++---------------
 compiler/src/CFCPython.c          |  4 ++--
 compiler/src/CFCRuby.c            |  2 +-
 compiler/src/CFCType.c            |  4 ++--
 compiler/src/CFCUtil.c            | 25 +++++++++++++------------
 compiler/src/CFCVersion.c         |  3 ++-
 22 files changed, 73 insertions(+), 69 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/c/cfc.c
----------------------------------------------------------------------
diff --git a/compiler/c/cfc.c b/compiler/c/cfc.c
index 6f5f527..369a0b1 100644
--- a/compiler/c/cfc.c
+++ b/compiler/c/cfc.c
@@ -75,6 +75,7 @@ S_parse_string_array_argument(const char *arg, const char *name,
     size_t   arg_len  = strlen(arg);
     size_t   name_len = strlen(name);
     int      new_num_results;
+    size_t   amount;
     char   **new_results;
 
     if (arg_len < name_len
@@ -85,8 +86,8 @@ S_parse_string_array_argument(const char *arg, const char *name,
     }
 
     new_num_results = *num_results + 1;
-    new_results     = (char **)REALLOCATE(*results,
-                              (new_num_results + 1) * sizeof(char *));
+    amount = (((size_t)new_num_results + 1) * sizeof(char *));
+    new_results = (char **)REALLOCATE(*results, amount);
     new_results[new_num_results-1] = CFCUtil_strdup(arg + name_len + 1);
     new_results[new_num_results]   = NULL;
     *num_results = new_num_results;

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCBase.h
----------------------------------------------------------------------
diff --git a/compiler/src/CFCBase.h b/compiler/src/CFCBase.h
index 9117ae2..09ee662 100644
--- a/compiler/src/CFCBase.h
+++ b/compiler/src/CFCBase.h
@@ -33,7 +33,7 @@ typedef void (*CFCBase_destroy_t)(CFCBase *self);
 #ifdef CFC_NEED_BASE_STRUCT_DEF
 struct CFCBase {
     const CFCMeta *meta;
-    int refcount;
+    unsigned refcount;
 };
 #endif
 struct CFCMeta {

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCCHtml.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCCHtml.c b/compiler/src/CFCCHtml.c
index 6f42ea6..a054cb8 100644
--- a/compiler/src/CFCCHtml.c
+++ b/compiler/src/CFCCHtml.c
@@ -16,6 +16,7 @@
 
 #include <ctype.h>
 #include <stdlib.h>
+#include <stddef.h>
 #include <string.h>
 
 #include <cmark.h>
@@ -1091,8 +1092,8 @@ S_type_to_html(CFCType *type, const char *sep, CFCClass *doc_class) {
             CFCUtil_die("Unprefixed object specifier '%s'", specifier);
         }
 
-        size_t      offset     = underscore + 1 - specifier;
-        char       *prefix     = CFCUtil_strndup(specifier, offset);
+        ptrdiff_t   offset     = underscore + 1 - specifier;
+        char       *prefix     = CFCUtil_strndup(specifier, (size_t)offset);
         const char *struct_sym = specifier + offset;
 
         if (!klass) {
@@ -1117,7 +1118,7 @@ S_type_to_html(CFCType *type, const char *sep, CFCClass *doc_class) {
     const char *const_str = CFCType_const(type) ? "const " : "";
 
     int indirection = CFCType_get_indirection(type);
-    size_t asterisk_offset = indirection < 10 ? 10 - indirection : 0;
+    ptrdiff_t asterisk_offset = indirection < 10 ? 10 - indirection : 0;
     const char *asterisks = "**********";
     const char *ind_str   = asterisks + asterisk_offset;
 
@@ -1203,7 +1204,7 @@ S_relative_url(const char *url, CFCClass *base, int dir_level) {
     }
 
     // Create path back to root
-    size_t bytes = dir_level * 3;
+    size_t bytes = (size_t)(dir_level * 3);
     char *prefix = (char*)MALLOCATE(bytes + 1);
     for (size_t i = 0; i < bytes; i += 3) {
         memcpy(prefix + i, "../", 3);

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCClass.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCClass.c b/compiler/src/CFCClass.c
index 56edce5..77e0158 100644
--- a/compiler/src/CFCClass.c
+++ b/compiler/src/CFCClass.c
@@ -274,7 +274,7 @@ CFCClass_do_create(CFCClass *self, struct CFCParcel *parcel,
     char *short_class_var = (char*)MALLOCATE(struct_sym_len + 1);
     size_t i;
     for (i = 0; i < struct_sym_len; i++) {
-        short_class_var[i] = toupper(struct_sym[i]);
+        short_class_var[i] = (char)toupper(struct_sym[i]);
     }
     short_class_var[struct_sym_len] = '\0';
     self->short_class_var = short_class_var;

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCDocuComment.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCDocuComment.c b/compiler/src/CFCDocuComment.c
index f5c45cc..2bcc495 100644
--- a/compiler/src/CFCDocuComment.c
+++ b/compiler/src/CFCDocuComment.c
@@ -107,7 +107,7 @@ CFCDocuComment_parse(const char *raw_text) {
             && ((ptr == limit - 1) || isspace(*(ptr + 1)))
            ) {
             ptr++;
-            size_t brief_len = ptr - text;
+            size_t brief_len = (size_t)(ptr - text);
             self->brief = CFCUtil_strdup(text);
             self->brief[brief_len] = '\0';
             break;
@@ -136,7 +136,7 @@ CFCDocuComment_parse(const char *raw_text) {
         while (isspace(*ptr) && ptr < text_limit) { ptr++; }
         char *param_name = ptr;
         while ((isalnum(*ptr) || *ptr == '_') && ptr < text_limit) { ptr++; }
-        size_t param_name_len = ptr - param_name;
+        size_t param_name_len = (size_t)(ptr - param_name);
         if (!param_name_len) {
             CFCUtil_die("Malformed @param directive in '%s'", raw_text);
         }
@@ -151,7 +151,7 @@ CFCDocuComment_parse(const char *raw_text) {
               ) {
             ptr++;
         }
-        size_t param_doc_len = ptr - param_doc;
+        size_t param_doc_len = (size_t)(ptr - param_doc);
 
         num_params++;
         size_t size = (num_params + 1) * sizeof(char*);

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCFile.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCFile.c b/compiler/src/CFCFile.c
index 52a4451..1e03a3e 100644
--- a/compiler/src/CFCFile.c
+++ b/compiler/src/CFCFile.c
@@ -81,7 +81,7 @@ CFCFile_init(CFCFile *self, CFCParcel *parcel, CFCFileSpec *spec) {
             self->guard_name[j++] = '_';
         }
         else if (isalnum(c)) {
-            self->guard_name[j++] = toupper(c);
+            self->guard_name[j++] = (char)toupper(c);
         }
     }
     self->guard_name[j] = '\0';

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCGoFunc.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCGoFunc.c b/compiler/src/CFCGoFunc.c
index dbebee8..8607d8f 100644
--- a/compiler/src/CFCGoFunc.c
+++ b/compiler/src/CFCGoFunc.c
@@ -49,9 +49,9 @@ char*
 CFCGoFunc_go_meth_name(const char *orig, int is_public) {
     char *go_name = CFCUtil_strdup(orig);
     if (!is_public) {
-        go_name[0] = tolower(go_name[0]);
+        go_name[0] = (char)tolower(go_name[0]);
     }
-    for (int i = 1, j = 1, max = strlen(go_name) + 1; i < max; i++) {
+    for (size_t i = 1, j = 1, max = strlen(go_name) + 1; i < max; i++) {
         if (go_name[i] != '_') {
             go_name[j++] = go_name[i];
         }
@@ -81,8 +81,8 @@ S_prep_start(CFCParcel *parcel, const char *name, CFCClass *invoker,
 
     char *params = CFCUtil_strdup("");
     char *converted = CFCUtil_strdup("");
-    int start = targ == IS_METHOD ? 1 : 0;
-    for (int i = start; param_vars[i] != NULL; i++) {
+    size_t start = targ == IS_METHOD ? 1 : 0;
+    for (size_t i = start; param_vars[i] != NULL; i++) {
         CFCVariable *var = param_vars[i];
         CFCType *type = CFCVariable_get_type(var);
         char *go_type_name = CFCGoTypeMap_go_type_name(type, parcel);
@@ -96,7 +96,7 @@ S_prep_start(CFCParcel *parcel, const char *name, CFCClass *invoker,
 
     // Convert certain types and defer their destruction until after the
     // Clownfish call returns.
-    for (int i = 0; param_vars[i] != NULL; i++) {
+    for (size_t i = 0; param_vars[i] != NULL; i++) {
         CFCVariable *var = param_vars[i];
         CFCType *type = CFCVariable_get_type(var);
         if (!CFCType_is_object(type)) {
@@ -231,7 +231,7 @@ S_prep_cfargs(CFCParcel *parcel, CFCClass *invoker,
     char go_name[GO_NAME_BUF_SIZE];
     char *cfargs = CFCUtil_strdup("");
 
-    for (int i = 0; vars[i] != NULL; i++) {
+    for (size_t i = 0; vars[i] != NULL; i++) {
         CFCVariable *var = vars[i];
         CFCType *type = CFCVariable_get_type(var);
         if (targ == IS_METHOD && i == 0) {

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCGoTypeMap.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCGoTypeMap.c b/compiler/src/CFCGoTypeMap.c
index 4c74863..ad91817 100644
--- a/compiler/src/CFCGoTypeMap.c
+++ b/compiler/src/CFCGoTypeMap.c
@@ -153,7 +153,7 @@ CFCGoTypeMap_go_type_name(CFCType *type, CFCParcel *current_parcel) {
         }
         char *result = CFCUtil_sprintf("%s.%s", package_name, struct_sym);
         for (int i = 0; result[i] != '.'; i++) {
-            result[i] = tolower(result[i]);
+            result[i] = (char)tolower(result[i]);
         }
         return result;
     }
@@ -184,7 +184,7 @@ CFCGoTypeMap_go_short_package(CFCParcel *parcel) {
     // parcel names.
     char *go_short_package = CFCUtil_strdup(parcel_frag);
     for (int i = 0; go_short_package[i] != '\0'; i++) {
-        go_short_package[i] = tolower(go_short_package[i]);
+        go_short_package[i] = (char)tolower(go_short_package[i]);
     }
     return go_short_package;
 }
@@ -207,7 +207,7 @@ CFCGoTypeMap_go_meth_receiever(const char *struct_name,
     // Find the first letter of the type and lowercase it.
     for (size_t i = 0, max = strlen(struct_name); i < max; i++) {
         if (isupper(struct_name[i])) {
-            buf[0] = tolower(struct_name[i]);
+            buf[0] = (char)tolower(struct_name[i]);
             buf[1] = '\0';
             break;
         }
@@ -265,7 +265,7 @@ CFCGoTypeMap_go_arg_name(CFCParamList *param_list, size_t tick, char *buf,
             continue;
         }
         else if (last_was_underscore) {
-            buf[dest_tick] = toupper(orig[i]);
+            buf[dest_tick] = (char)toupper(orig[i]);
         }
         else {
             buf[dest_tick] = orig[i];

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCParcel.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCParcel.c b/compiler/src/CFCParcel.c
index 3e2e8ba..cbfd2a5 100644
--- a/compiler/src/CFCParcel.c
+++ b/compiler/src/CFCParcel.c
@@ -209,8 +209,8 @@ CFCParcel_init(CFCParcel *self, const char *name, const char *nickname,
         self->Prefix[nickname_len] = '\0';
     }
     for (size_t i = 0; i < amount; i++) {
-        self->prefix[i] = tolower(self->Prefix[i]);
-        self->PREFIX[i] = toupper(self->Prefix[i]);
+        self->prefix[i] = (char)tolower(self->Prefix[i]);
+        self->PREFIX[i] = (char)toupper(self->Prefix[i]);
     }
     self->prefix[prefix_len] = '\0';
     self->Prefix[prefix_len] = '\0';
@@ -221,7 +221,7 @@ CFCParcel_init(CFCParcel *self, const char *name, const char *nickname,
     self->privacy_sym = (char*)MALLOCATE(privacy_sym_len + 1);
     memcpy(self->privacy_sym, "CFP_", 4);
     for (size_t i = 0; i < nickname_len; i++) {
-        self->privacy_sym[i+4] = toupper(self->nickname[i]);
+        self->privacy_sym[i+4] = (char)toupper(self->nickname[i]);
     }
     self->privacy_sym[privacy_sym_len] = '\0';
 
@@ -776,7 +776,7 @@ S_parse_json_string(const char **json) {
     }
     JSONNode *node = (JSONNode*)calloc(1, sizeof(JSONNode));
     node->type = JSON_STRING;
-    node->string = CFCUtil_strndup(start, text - start);
+    node->string = CFCUtil_strndup(start, (size_t)(text - start));
 
     // Move pointer.
     text++;

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCParser.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCParser.c b/compiler/src/CFCParser.c
index a49a6c4..b1c74f7 100644
--- a/compiler/src/CFCParser.c
+++ b/compiler/src/CFCParser.c
@@ -99,7 +99,7 @@ CFCParser_parse(CFCParser *self, const char *string) {
     // Zero out, then parse.
     self->errors = false;
     self->lineno = 0;
-    YY_BUFFER_STATE buffer = yy_scan_bytes(string, (int)strlen(string));
+    YY_BUFFER_STATE buffer = yy_scan_bytes(string, (yy_size_t)strlen(string));
     yylex();
     yy_delete_buffer(buffer);
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCPerl.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerl.c b/compiler/src/CFCPerl.c
index 056afaf..ccd548b 100644
--- a/compiler/src/CFCPerl.c
+++ b/compiler/src/CFCPerl.c
@@ -280,7 +280,7 @@ S_write_boot_h(CFCPerl *self) {
     S_replace_double_colons(guard, '_');
     for (char *ptr = guard; *ptr != '\0'; ptr++) {
         if (isalpha(*ptr)) {
-            *ptr = toupper(*ptr);
+            *ptr = (char)toupper(*ptr);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCPerlConstructor.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerlConstructor.c b/compiler/src/CFCPerlConstructor.c
index 380cb08..6069aa2 100644
--- a/compiler/src/CFCPerlConstructor.c
+++ b/compiler/src/CFCPerlConstructor.c
@@ -115,7 +115,7 @@ CFCPerlConstructor_xsub_def(CFCPerlConstructor *self, CFCClass *klass) {
         locate_args = CFCUtil_strdup("");
     }
     else {
-        unsigned num_params = num_vars - 1;
+        unsigned num_params = (unsigned)num_vars - 1;
         items_check = "items < 1";
         param_specs = CFCPerlSub_build_param_specs((CFCPerlSub*)self, 1);
         locs_decl   = CFCUtil_sprintf("    int32_t locations[%u];\n"

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCPerlMethod.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerlMethod.c b/compiler/src/CFCPerlMethod.c
index c8281ee..f614896 100644
--- a/compiler/src/CFCPerlMethod.c
+++ b/compiler/src/CFCPerlMethod.c
@@ -133,7 +133,7 @@ CFCPerlMethod_perl_name(CFCMethod *method) {
     const char *name      = CFCMethod_get_name(method);
     char       *perl_name = CFCUtil_strdup(name);
     for (size_t i = 0; perl_name[i] != '\0'; i++) {
-        perl_name[i] = tolower(perl_name[i]);
+        perl_name[i] = (char)tolower(perl_name[i]);
     }
 
     return perl_name;

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCPerlPod.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerlPod.c b/compiler/src/CFCPerlPod.c
index c09eacf..09be538 100644
--- a/compiler/src/CFCPerlPod.c
+++ b/compiler/src/CFCPerlPod.c
@@ -577,14 +577,14 @@ S_camel_to_lower(const char *camel) {
     }
     char *lower = (char*)MALLOCATE(alloc + 1);
 
-    lower[0] = tolower(camel[0]);
+    lower[0] = (char)tolower(camel[0]);
     size_t j = 1;
     for (size_t i = 1; camel[i]; i++) {
         // Only insert underscore if next char is lowercase.
         if (isupper(camel[i]) && islower(camel[i+1])) {
             lower[j++] = '_';
         }
-        lower[j++] = tolower(camel[i]);
+        lower[j++] = (char)tolower(camel[i]);
     }
     lower[j] = '\0';
 
@@ -948,7 +948,7 @@ S_convert_link(cmark_node *link, CFCClass *doc_class, int header_level) {
 
             char *perl_name = CFCUtil_strdup(name);
             for (size_t i = 0; perl_name[i] != '\0'; ++i) {
-                perl_name[i] = tolower(perl_name[i]);
+                perl_name[i] = (char)tolower(perl_name[i]);
             }
 
             // The Perl POD only contains sections for novel methods. Link

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCPerlSub.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerlSub.c b/compiler/src/CFCPerlSub.c
index fb50975..2f1d71b 100644
--- a/compiler/src/CFCPerlSub.c
+++ b/compiler/src/CFCPerlSub.c
@@ -51,9 +51,9 @@ CFCPerlSub_init(CFCPerlSub *self, CFCParamList *param_list,
 
     size_t c_name_len = strlen(self->perl_name) + sizeof("XS_") + 1;
     self->c_name = (char*)MALLOCATE(c_name_len);
-    int j = 3;
+    size_t j = 3;
     memcpy(self->c_name, "XS_", j);
-    for (int i = 0, max = (int)strlen(self->perl_name); i < max; i++) {
+    for (size_t i = 0, max = strlen(self->perl_name); i < max; i++) {
         char c = self->perl_name[i];
         if (c == ':') {
             while (self->perl_name[i + 1] == ':') { i++; }

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCPyClass.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPyClass.c b/compiler/src/CFCPyClass.c
index 0fe168e..1e80ebb 100644
--- a/compiler/src/CFCPyClass.c
+++ b/compiler/src/CFCPyClass.c
@@ -204,7 +204,7 @@ S_pytype_struct_def(CFCPyClass *self) {
     char *pymod_name = CFCUtil_strdup(parcel_name);
     // TODO: Stop lowercasing when parcels are restricted to lowercase.
     for (int i = 0; pymod_name[i] != '\0'; i++) {
-        pymod_name[i] = tolower(pymod_name[i]);
+        pymod_name[i] = (char)tolower(pymod_name[i]);
     }
 
     const char *struct_sym = CFCClass_get_struct_sym(klass);

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCPyMethod.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPyMethod.c b/compiler/src/CFCPyMethod.c
index 45b0f86..168bfb8 100644
--- a/compiler/src/CFCPyMethod.c
+++ b/compiler/src/CFCPyMethod.c
@@ -50,12 +50,12 @@ S_maybe_unreachable(CFCType *return_type);
 
 static char*
 S_build_py_args(CFCParamList *param_list) {
-    int num_vars = CFCParamList_num_vars(param_list);
+    size_t num_vars = CFCParamList_num_vars(param_list);
     CFCVariable **vars = CFCParamList_get_variables(param_list);
     char pattern[] = "    PyObject *cfcb_ARGS = S_pack_tuple(%d";
     char *py_args = CFCUtil_sprintf(pattern, num_vars - 1);
 
-    for (int i = 1; vars[i] != NULL; i++) {
+    for (size_t i = 1; vars[i] != NULL; i++) {
         const char *var_name = CFCVariable_get_name(vars[i]);
         CFCType *type = CFCVariable_get_type(vars[i]);
         char *conversion = CFCPyTypeMap_c_to_py(type, var_name);
@@ -70,9 +70,9 @@ S_build_py_args(CFCParamList *param_list) {
 static char*
 S_gen_decs(CFCParamList *param_list, int first_tick) {
     char *decs = CFCUtil_strdup("");
-    int num_vars = CFCParamList_num_vars(param_list);
+    size_t num_vars = CFCParamList_num_vars(param_list);
     CFCVariable **vars = CFCParamList_get_variables(param_list);
-    for (int i = first_tick; i < num_vars; i++) {
+    for (int i = first_tick; i < (int)num_vars; i++) {
         CFCType *type = CFCVariable_get_type(vars[i]);
         const char *name = CFCVariable_get_name(vars[i]);
         decs = CFCUtil_cat(decs, "    ", CFCType_to_c(type), " ", name,
@@ -192,7 +192,7 @@ S_gen_arg_parsing(CFCParamList *param_list, int first_tick, char **error) {
 
     CFCVariable **vars = CFCParamList_get_variables(param_list);
     const char **vals = CFCParamList_get_initial_values(param_list);
-    int num_vars = CFCParamList_num_vars(param_list);
+    size_t num_vars = CFCParamList_num_vars(param_list);
 
     char *declarations = CFCUtil_strdup("");
     char *keywords     = CFCUtil_strdup("");
@@ -200,7 +200,7 @@ S_gen_arg_parsing(CFCParamList *param_list, int first_tick, char **error) {
     char *targets      = CFCUtil_strdup("");
     int optional_started = 0;
 
-    for (int i = first_tick; i < num_vars; i++) {
+    for (int i = first_tick; i < (int)num_vars; i++) {
         CFCVariable *var  = vars[i];
         const char  *val  = vals[i];
 
@@ -276,8 +276,8 @@ S_build_pymeth_invocation(CFCMethod *method) {
         if (strlen(ret_type_str) > 63) {
             CFCUtil_die("Unexpectedly long type name: %s", ret_type_str);
         }
-        for (int i = 0, max = strlen(ret_type_str) + 1; i < max; i++) {
-            type_upcase[i] = toupper(ret_type_str[i]);
+        for (size_t i = 0, max = strlen(ret_type_str) + 1; i < max; i++) {
+            type_upcase[i] = (char)toupper(ret_type_str[i]);
         }
         const char pattern[] =
             "    %s cfcb_RESULT = CALL_PYMETH_%s((PyObject*)self, \"%s\", cfcb_ARGS);";
@@ -433,9 +433,9 @@ S_meth_top(CFCMethod *method) {
 static char*
 S_gen_arg_increfs(CFCParamList *param_list, int first_tick) {
     CFCVariable **vars = CFCParamList_get_variables(param_list);
-    int num_vars = CFCParamList_num_vars(param_list);
+    size_t num_vars = CFCParamList_num_vars(param_list);
     char *content = CFCUtil_strdup("");
-    for (int i = first_tick;i < num_vars; i++) {
+    for (size_t i = (size_t)first_tick; i < num_vars; i++) {
         CFCType *type = CFCVariable_get_type(vars[i]);
         if (CFCType_decremented(type)) {
             const char *name = CFCVariable_get_name(vars[i]);
@@ -455,10 +455,10 @@ S_gen_arg_increfs(CFCParamList *param_list, int first_tick) {
 static char*
 S_gen_decrefs(CFCParamList *param_list, int first_tick) {
     CFCVariable **vars = CFCParamList_get_variables(param_list);
-    int num_vars = CFCParamList_num_vars(param_list);
+    size_t num_vars = CFCParamList_num_vars(param_list);
     char *decrefs = CFCUtil_strdup("");
 
-    for (int i = first_tick; i < num_vars; i++) {
+    for (size_t i = (size_t)first_tick; i < num_vars; i++) {
         CFCVariable *var = vars[i];
         CFCType *type = CFCVariable_get_type(var);
         const char *micro_sym = CFCVariable_get_name(var);
@@ -480,9 +480,9 @@ S_gen_decrefs(CFCParamList *param_list, int first_tick) {
 static char*
 S_gen_arg_list(CFCParamList *param_list, const char *first_arg) {
     CFCVariable **vars = CFCParamList_get_variables(param_list);
-    int num_vars = CFCParamList_num_vars(param_list);
+    size_t num_vars = CFCParamList_num_vars(param_list);
     char *arg_list = CFCUtil_strdup("");
-    for (int i = 0; i < num_vars; i++) {
+    for (size_t i = 0; i < num_vars; i++) {
         if (i > 0) {
             arg_list = CFCUtil_cat(arg_list, ", ", NULL);
         }
@@ -646,7 +646,7 @@ CFCPyMethod_pymethoddef(CFCMethod *method, CFCClass *invoker) {
     char *meth_sym = CFCMethod_full_method_sym(method, invoker);
     char *micro_sym = CFCUtil_strdup(CFCSymbol_get_name((CFCSymbol*)method));
     for (int i = 0; micro_sym[i] != 0; i++) {
-        micro_sym[i] = tolower(micro_sym[i]);
+        micro_sym[i] = (char)tolower(micro_sym[i]);
     }
 
     char pattern[] =

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCPython.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPython.c b/compiler/src/CFCPython.c
index 3c60682..0dff7e2 100644
--- a/compiler/src/CFCPython.c
+++ b/compiler/src/CFCPython.c
@@ -447,7 +447,7 @@ S_write_module_file(CFCPython *self, CFCParcel *parcel, const char *dest) {
     char *pymod_name = CFCUtil_strdup(parcel_name);
     // TODO: Stop lowercasing when parcels are restricted to lowercase.
     for (int i = 0; pymod_name[i] != '\0'; i++) {
-        pymod_name[i] = tolower(pymod_name[i]);
+        pymod_name[i] = (char)tolower(pymod_name[i]);
     }
     const char *last_dot = strrchr(pymod_name, '.');
     const char *last_component = last_dot != NULL
@@ -455,7 +455,7 @@ S_write_module_file(CFCPython *self, CFCParcel *parcel, const char *dest) {
                                  : pymod_name;
     char *helper_mod_name = CFCUtil_sprintf("%s._%s", pymod_name, last_component);
     for (int i = 0; helper_mod_name[i] != '\0'; i++) {
-        helper_mod_name[i] = tolower(helper_mod_name[i]);
+        helper_mod_name[i] = (char)tolower(helper_mod_name[i]);
     }
 
     CFCClass  **ordered = CFCHierarchy_ordered_classes(self->hierarchy);

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCRuby.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCRuby.c b/compiler/src/CFCRuby.c
index ec3dd9a..0e2c146 100644
--- a/compiler/src/CFCRuby.c
+++ b/compiler/src/CFCRuby.c
@@ -135,7 +135,7 @@ S_write_boot_h(CFCRuby *self) {
     S_replace_double_colons(guard, '_');
     for (char *ptr = guard; *ptr != '\0'; ptr++) {
         if (isalpha(*ptr)) {
-            *ptr = toupper(*ptr);
+            *ptr = (char)toupper(*ptr);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCType.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCType.c b/compiler/src/CFCType.c
index 87f1a85..a45c174 100644
--- a/compiler/src/CFCType.c
+++ b/compiler/src/CFCType.c
@@ -384,7 +384,7 @@ CFCType_get_class_var(CFCType *self) {
     if (!self->class_var) {
         self->class_var = CFCUtil_strdup(self->specifier);
         for (int i = 0; self->class_var[i] != 0; i++) {
-            self->class_var[i] = toupper(self->class_var[i]);
+            self->class_var[i] = (char)toupper(self->class_var[i]);
         }
     }
     return self->class_var;
@@ -410,7 +410,7 @@ CFCType_to_c(CFCType *self) {
         // NOTE: Array postfixes are NOT included.
         const char *child_c_string = CFCType_to_c(self->child);
         size_t      child_c_len    = strlen(child_c_string);
-        size_t      amount         = child_c_len + self->indirection;
+        size_t      amount         = child_c_len + (size_t)self->indirection;
         c_string = (char*)MALLOCATE(amount + 1);
         strcpy(c_string, child_c_string);
         for (int i = 0; i < self->indirection; i++) {

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCUtil.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCUtil.c b/compiler/src/CFCUtil.c
index 7470c04..f505cac 100644
--- a/compiler/src/CFCUtil.c
+++ b/compiler/src/CFCUtil.c
@@ -16,6 +16,7 @@
 
 #include "charmony.h"
 
+#include <stddef.h>
 #include <string.h>
 #include <stdlib.h>
 #include <ctype.h>
@@ -155,32 +156,32 @@ CFCUtil_global_replace(const char *string, const char *match,
     int   len_diff        = replacement_len - match_len;
 
     // Allocate space.
-    unsigned count = 0;
+    int count = 0;
     while (NULL != (found = strstr(found, match))) {
         count++;
         found += match_len;
     }
     int size = string_len + count * len_diff + 1;
-    char *modified = (char*)MALLOCATE(size);
+    char *modified = (char*)MALLOCATE((size_t)size);
     modified[size - 1] = 0; // NULL-terminate.
 
     // Iterate through all matches.
     found = (char*)string;
     char *target = modified;
-    size_t last_end = 0;
+    ptrdiff_t last_end = 0;
     if (count) {
         while (NULL != (found = strstr(found, match))) {
-            size_t pos = found - string;
-            size_t unchanged_len = pos - last_end;
+            ptrdiff_t pos = found - string;
+            ptrdiff_t unchanged_len = pos - last_end;
             found += match_len;
-            memcpy(target, string + last_end, unchanged_len);
+            memcpy(target, string + last_end, (size_t)unchanged_len);
             target += unchanged_len;
             last_end = pos + match_len;
-            memcpy(target, replacement, replacement_len);
+            memcpy(target, replacement, (size_t)replacement_len);
             target += replacement_len;
         }
     }
-    size_t remaining = string_len - last_end;
+    size_t remaining = (size_t)(string_len - last_end);
     memcpy(target, string + string_len - remaining, remaining);
 
     return modified;
@@ -205,7 +206,7 @@ CFCUtil_enclose_lines(const char *text, const char *line_prefix,
     while (line_start < text_end) {
         const char *line_end = strchr(line_start, '\n');
         const char *next_start;
-        size_t      line_len;
+        ptrdiff_t   line_len;
 
         if (line_end == NULL) {
             line_len   = text_end - line_start;
@@ -216,8 +217,8 @@ CFCUtil_enclose_lines(const char *text, const char *line_prefix,
             next_start = line_end + 1;
         }
 
-        char *line = (char*)MALLOCATE(line_len + 1);
-        memcpy(line, line_start, line_len);
+        char *line = (char*)MALLOCATE((size_t)line_len + 1);
+        memcpy(line, line_start, (size_t)line_len);
         line[line_len] = '\0';
         result = CFCUtil_cat(result, line_prefix, line, line_postfix, "\n",
                              NULL);
@@ -353,7 +354,7 @@ CFCUtil_slurp_text(const char *file_path, size_t *len_ptr) {
     }
 
     /* Find length; return NULL if the file has a zero-length. */
-    binary_len = CFCUtil_flength(file);
+    binary_len = (size_t)CFCUtil_flength(file);
     if (binary_len == 0) {
         *len_ptr = 0;
         return NULL;

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/91f00051/compiler/src/CFCVersion.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCVersion.c b/compiler/src/CFCVersion.c
index 671ff36..97727a8 100644
--- a/compiler/src/CFCVersion.c
+++ b/compiler/src/CFCVersion.c
@@ -60,7 +60,8 @@ CFCVersion_init(CFCVersion *self, const char *vstring) {
     self->numbers = (uint32_t*)CALLOCATE(1, sizeof(uint32_t));
     while (1) {
         if (isdigit(*vstring)) {
-            num = num * 10 + *vstring - '0';
+            int digit = *vstring - '0';
+            num = num * 10 + (uint32_t)digit;
         }
         else {
             if (*vstring != 0 && *vstring != '.') {