diff --git a/src/d_ctl.c b/src/d_ctl.c
index ba8ee32..3648682 100644
--- a/src/d_ctl.c
+++ b/src/d_ctl.c
@@ -359,7 +359,7 @@ static void vline_tilde_float(t_vline *x, t_float f)
     }
     else
     {
-        for (s1 = x->x_list; s2 = s1->s_next; s1 = s2)
+        for (s1 = x->x_list; (s2 = s1->s_next); s1 = s2)
         {
             if (s2->s_starttime > starttime ||
                 (s2->s_starttime == starttime &&
diff --git a/src/d_ugen.c b/src/d_ugen.c
index 0a4d860..673148f 100644
--- a/src/d_ugen.c
+++ b/src/d_ugen.c
@@ -359,7 +359,7 @@ void signal_cleanup(void)
 {
     t_signal **svec, *sig, *sig2;
     int i;
-    while (sig = pd_this->pd_signals)
+    while ((sig = pd_this->pd_signals))
     {
         pd_this->pd_signals = sig->s_nextused;
         if (!sig->s_isborrowed)
@@ -440,7 +440,7 @@ t_signal *signal_new(int n, t_float sr)
         whichlist = &signal_freeborrowed;
 
         /* first try to reclaim one from the free list */
-    if (ret = *whichlist)
+    if ((ret = *whichlist))
         *whichlist = ret->s_nextfree;
     else
     {
@@ -718,13 +718,13 @@ static void ugen_doit(t_dspcontext *dc, t_ugenbox *u)
         we delay new signal creation, which will be handled by calling
         signal_setborrowed in the ugen_done_graph routine below. */
     int nonewsigs = (class == canvas_class || 
-        (class == vinlet_class) && !(dc->dc_reblock));
+        ((class == vinlet_class) && !(dc->dc_reblock)));
         /* when we encounter a subcanvas or a signal outlet, suppress freeing
         the input signals as they may be "borrowed" for the super or sub
         patch; same exception as above, but also if we're "switched" we
         have to do a copy rather than a borrow.  */
     int nofreesigs = (class == canvas_class || 
-        (class == voutlet_class) &&  !(dc->dc_reblock || dc->dc_switched));
+        ((class == voutlet_class) &&  !(dc->dc_reblock || dc->dc_switched)));
     t_signal **insig, **outsig, **sig, *s1, *s2, *s3;
     t_ugenbox *u2;
     
@@ -738,7 +738,7 @@ static void ugen_doit(t_dspcontext *dc, t_ugenbox *u)
             s3 = signal_new(dc->dc_calcsize, dc->dc_srate);
             /* post("%s: unconnected signal inlet set to zero",
                 class_getname(u->u_obj->ob_pd)); */
-            if (scalar = obj_findsignalscalar(u->u_obj, i))
+            if ((scalar = obj_findsignalscalar(u->u_obj, i)))
                 dsp_add_scalarcopy(scalar, s3->s_vec, s3->s_n);
             else
                 dsp_add_zero(s3->s_vec, s3->s_n);
@@ -818,7 +818,7 @@ static void ugen_doit(t_dspcontext *dc, t_ugenbox *u)
             u2 = oc->oc_who;
             uin = &u2->u_in[oc->oc_inno];
                 /* if there's already someone here, sum the two */
-            if (s2 = uin->i_signal)
+            if ((s2 = uin->i_signal))
             {
                 s1->s_refcount--;
                 s2->s_refcount--;
diff --git a/src/g_array.c b/src/g_array.c
index 16d7662..5235f81 100644
--- a/src/g_array.c
+++ b/src/g_array.c
@@ -579,7 +579,7 @@ static void garray_free(t_garray *x)
     gfxstub_deleteforkey(x);
     pd_unbind(&x->x_gobj.g_pd, x->x_realname);
         /* just in case we're still bound to #A from loading... */
-    while (x2 = pd_findbyclass(gensym("#A"), garray_class))
+    while ((x2 = pd_findbyclass(gensym("#A"), garray_class)))
         pd_unbind(x2, gensym("#A"));
     pd_free(&x->x_scalar->sc_gobj.g_pd);
 }
diff --git a/src/g_canvas.c b/src/g_canvas.c
index fbeef3d..84a4b63 100644
--- a/src/g_canvas.c
+++ b/src/g_canvas.c
@@ -253,7 +253,7 @@ t_outconnect *linetraverser_next(t_linetraverser *t)
             if (!t->tr_ob) y = t->tr_x->gl_list;
             else y = t->tr_ob->ob_g.g_next;
             for (; y; y = y->g_next)
-                if (ob = pd_checkobject(&y->g_pd)) break;
+                if ((ob = pd_checkobject(&y->g_pd))) break;
             if (!ob) return (0);
             t->tr_ob = ob;
             t->tr_nout = obj_noutlets(ob);
@@ -729,7 +729,7 @@ void canvas_free(t_canvas *x)
     if (canvas_whichfind == x)
         canvas_whichfind = 0;
     glist_noselect(x);
-    while (y = x->gl_list)
+    while ((y = x->gl_list))
         glist_delete(x, y);
     if (x == glist_getcanvas(x))
         canvas_vis(x, 0);
@@ -759,7 +759,7 @@ static void canvas_drawlines(t_canvas *x)
     t_outconnect *oc;
     {
         linetraverser_start(&t, x);
-        while (oc = linetraverser_next(&t))
+        while ((oc = linetraverser_next(&t)))
             sys_vgui(".x%lx.c create line %d %d %d %d -width %d -tags [list l%lx cord]\n",
                     glist_getcanvas(x),
                         t.tr_lx1, t.tr_ly1, t.tr_lx2, t.tr_ly2, 
@@ -774,7 +774,7 @@ void canvas_fixlinesfor(t_canvas *x, t_text *text)
     t_outconnect *oc;
 
     linetraverser_start(&t, x);
-    while (oc = linetraverser_next(&t))
+    while ((oc = linetraverser_next(&t)))
     {
         if (t.tr_ob == text || t.tr_ob2 == text)
         {
@@ -791,7 +791,7 @@ void canvas_deletelinesfor(t_canvas *x, t_text *text)
     t_linetraverser t;
     t_outconnect *oc;
     linetraverser_start(&t, x);
-    while (oc = linetraverser_next(&t))
+    while ((oc = linetraverser_next(&t)))
     {
         if (t.tr_ob == text || t.tr_ob2 == text)
         {
@@ -812,7 +812,7 @@ void canvas_deletelinesforio(t_canvas *x, t_text *text,
     t_linetraverser t;
     t_outconnect *oc;
     linetraverser_start(&t, x);
-    while (oc = linetraverser_next(&t))
+    while ((oc = linetraverser_next(&t)))
     {
         if ((t.tr_ob == text && t.tr_outlet == outp) ||
             (t.tr_ob2 == text && t.tr_inlet == inp))
@@ -1062,7 +1062,7 @@ static void canvas_dodsp(t_canvas *x, int toplevel, t_signal **sp)
 
         /* ... and all dsp interconnections */
     linetraverser_start(&t, x);
-    while (oc = linetraverser_next(&t))
+    while ((oc = linetraverser_next(&t)))
         if (obj_issignaloutlet(t.tr_ob, t.tr_outno))
             ugen_connect(dc, t.tr_ob, t.tr_outno, t.tr_ob2, t.tr_inno);
 
@@ -1482,9 +1482,9 @@ static void canvas_f(t_canvas *x, t_symbol *s, int argc, t_atom *argv)
     }
     if (!x->gl_list)
         return;
-    for (g = x->gl_list; g2 = g->g_next; g = g2)
+    for (g = x->gl_list; (g2 = g->g_next); g = g2)
         ;
-    if (ob = pd_checkobject(&g->g_pd))
+    if ((ob = pd_checkobject(&g->g_pd)))
     {
         ob->te_width = atom_getfloatarg(0, argc, argv);
         if (glist_isvisible(x))
diff --git a/src/g_editor.c b/src/g_editor.c
index 6a82243..b3a7188 100644
--- a/src/g_editor.c
+++ b/src/g_editor.c
@@ -96,7 +96,7 @@ int gobj_shouldvis(t_gobj *x, struct _glist *glist)
             gy1 < y1 || gy1 > y2 || gy2 < y1 || gy2 > y2)
                 return (0);
     }
-    if (ob = pd_checkobject(&x->g_pd))
+    if ((ob = pd_checkobject(&x->g_pd)))
     {
         /* return true if the text box should be drawn.  We don't show text
         boxes inside graphs---except comments, if we're doing the new
@@ -229,7 +229,7 @@ void glist_deselect(t_glist *x, t_gobj *y)
         }
         else
         {
-            for (sel = x->gl_editor->e_selection; sel2 = sel->sel_next;
+            for (sel = x->gl_editor->e_selection; (sel2 = sel->sel_next);
                 sel = sel2)
             {
                 if (sel2->sel_what == y)
@@ -279,7 +279,7 @@ void glist_selectall(t_glist *x)
             x->gl_editor->e_selection = sel;
             sel->sel_what = y;
             gobj_select(y, x, 1);
-            while (y = y->g_next)
+            while ((y = y->g_next))
             {
                 t_selection *sel2 = (t_selection *)getbytes(sizeof(*sel2));
                 sel->sel_next = sel2;
@@ -428,7 +428,7 @@ void canvas_disconnect(t_canvas *x,
     t_linetraverser t;
     t_outconnect *oc;
     linetraverser_start(&t, x);
-    while (oc = linetraverser_next(&t))
+    while ((oc = linetraverser_next(&t)))
     {
         int srcno = canvas_getindex(x, &t.tr_ob->ob_g);
         int sinkno = canvas_getindex(x, &t.tr_ob2->ob_g);
@@ -505,7 +505,7 @@ static void *canvas_undo_set_cut(t_canvas *x, int mode)
         /* store connections into/out of the selection */
     buf->u_reconnectbuf = binbuf_new();
     linetraverser_start(&t, x);
-    while (oc = linetraverser_next(&t))
+    while ((oc = linetraverser_next(&t)))
     {
         int issel1 = glist_isselected(x, &t.tr_ob->ob_g);
         int issel2 = glist_isselected(x, &t.tr_ob2->ob_g);
@@ -551,7 +551,7 @@ static void canvas_undo_cut(t_canvas *x, void *z, int action)
         {
             t_gobj *y1, *y2;
             glist_noselect(x);
-            for (y1 = x->gl_list; y2 = y1->g_next; y1 = y2)
+            for (y1 = x->gl_list; (y2 = y1->g_next); y1 = y2)
                 ;
             if (y1)
             {
@@ -577,7 +577,7 @@ static void canvas_undo_cut(t_canvas *x, void *z, int action)
         else if (mode == UCUT_TEXT)
         {
             t_gobj *y1, *y2;
-            for (y1 = x->gl_list; y2 = y1->g_next; y1 = y2)
+            for (y1 = x->gl_list; (y2 = y1->g_next); y1 = y2)
                 ;
             if (y1)
                 glist_delete(x, y1);
@@ -902,7 +902,7 @@ void canvas_create_editor(t_glist *x)
     {
         x->gl_editor = editor_new(x);
         for (y = x->gl_list; y; y = y->g_next)
-            if (ob = pd_checkobject(&y->g_pd))
+            if ((ob = pd_checkobject(&y->g_pd)))
                 rtext_new(x, ob);
     }
 }
@@ -915,7 +915,7 @@ void canvas_destroy_editor(t_glist *x)
     if (x->gl_editor)
     {
         t_rtext *rtext;
-        while (rtext = x->gl_editor->e_rtext)
+        while ((rtext = x->gl_editor->e_rtext))
             rtext_free(rtext);
         editor_free(x->gl_editor, x);
         x->gl_editor = 0;
@@ -1289,7 +1289,7 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
         return;
     }
         /* if not a runmode left click, fall here. */
-    if (y = canvas_findhitbox(x, xpos, ypos, &x1, &y1, &x2, &y2))
+    if ((y = canvas_findhitbox(x, xpos, ypos, &x1, &y1, &x2, &y2)))
     {
         t_object *ob = pd_checkobject(&y->g_pd);
             /* check you're in the rectangle */
@@ -1419,7 +1419,7 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
         t_float fx = xpos, fy = ypos;
         t_glist *glist2 = glist_getcanvas(x);
         linetraverser_start(&t, glist2);
-        while (oc = linetraverser_next(&t))
+        while ((oc = linetraverser_next(&t)))
         {
             t_float lx1 = t.tr_lx1, ly1 = t.tr_ly1,
                 lx2 = t.tr_lx2, ly2 = t.tr_ly2;
@@ -1463,7 +1463,7 @@ int canvas_isconnected (t_canvas *x, t_text *ob1, int n1,
     t_linetraverser t;
     t_outconnect *oc;
     linetraverser_start(&t, x);
-    while (oc = linetraverser_next(&t))
+    while ((oc = linetraverser_next(&t)))
         if (t.tr_ob == ob1 && t.tr_outno == n1 &&
             t.tr_ob2 == ob2 && t.tr_inno == n2) 
                 return (1);
@@ -1874,14 +1874,14 @@ void canvas_motion(t_canvas *x, t_floatarg xpos, t_floatarg ypos,
     {
         int x11=0, y11=0, x12=0, y12=0; 
         t_gobj *y1;
-        if (y1 = canvas_findhitbox(x,
+        if ((y1 = canvas_findhitbox(x,
             x->gl_editor->e_xwas, x->gl_editor->e_ywas,
-                &x11, &y11, &x12, &y12))
+                &x11, &y11, &x12, &y12)))
         {
             int wantwidth = xpos - x11;
             t_gotfn sizefn;
             t_object *ob = pd_checkobject(&y1->g_pd);
-            if (ob && ob->te_pd->c_wb == &text_widgetbehavior ||
+            if ((ob && ob->te_pd->c_wb == &text_widgetbehavior) ||
                     (pd_checkglist(&ob->te_pd) &&
                         !((t_canvas *)ob)->gl_isgraph))
             {
@@ -1952,7 +1952,7 @@ void glob_verifyquit(void *dummy, t_floatarg f)
     t_glist *g, *g2;
         /* find all root canvases */
     for (g = pd_getcanvaslist(); g; g = g->gl_next)
-        if (g2 = glist_finddirty(g))
+        if ((g2 = glist_finddirty(g)))
     {
         canvas_vis(g2, 1);
             sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 3;\n}\n",
@@ -2077,7 +2077,7 @@ static int canvas_dofind(t_canvas *x, int *myindexp)
     for (y = x->gl_list; y; y = y->g_next)
     {
         t_object *ob = 0;
-        if (ob = pd_checkobject(&y->g_pd))
+        if ((ob = pd_checkobject(&y->g_pd)))
         {
             if (atoms_match(binbuf_getnatom(ob->ob_binbuf), 
                 binbuf_getvec(ob->ob_binbuf), findargc, findargv,
@@ -2215,7 +2215,7 @@ void canvas_stowconnections(t_canvas *x)
         /* add connections to binbuf */
     binbuf_clear(x->gl_editor->e_connectbuf);
     linetraverser_start(&t, x);
-    while (oc = linetraverser_next(&t))
+    while ((oc = linetraverser_next(&t)))
     {
         int s1 = glist_isselected(x, &t.tr_ob->ob_g);
         int s2 = glist_isselected(x, &t.tr_ob2->ob_g);
@@ -2247,7 +2247,7 @@ static t_binbuf *canvas_docopy(t_canvas *x)
             gobj_save(y, b);
     }
     linetraverser_start(&t, x);
-    while (oc = linetraverser_next(&t))
+    while ((oc = linetraverser_next(&t)))
     {
         if (glist_isselected(x, &t.tr_ob->ob_g)
             && glist_isselected(x, &t.tr_ob2->ob_g))
@@ -2678,7 +2678,7 @@ static void canvas_texteditor(t_canvas *x)
     t_rtext *foo;
     char *buf;
     int bufsize;
-    if (foo = x->gl_editor->e_textedfor)
+    if ((foo = x->gl_editor->e_textedfor))
         rtext_gettext(foo, &buf, &bufsize);
     else buf = "", bufsize = 0;
     sys_vgui("pdtk_pd_texteditor {%.*s}\n", bufsize, buf);
diff --git a/src/g_graph.c b/src/g_graph.c
index 0ceba6d..dead924 100644
--- a/src/g_graph.c
+++ b/src/g_graph.c
@@ -138,7 +138,7 @@ void glist_clear(t_glist *x)
     t_gobj *y, *y2;
     int dspstate = 0, suspended = 0;
     t_symbol *dspsym = gensym("dsp");
-    while (y = x->gl_list)
+    while ((y = x->gl_list))
     {
             /* to avoid unnecessary DSP resorting, we suspend DSP
             only if we hit a patchable object. */
@@ -225,7 +225,7 @@ static t_gobj *glist_merge(t_glist *x, t_gobj *g1, t_gobj *g2)
         if (g9)
             g9->g_next = g1, g9 = g1;
         else g9 = g = g1;
-        if (g1 = g1->g_next)
+        if ((g1 = g1->g_next))
             f1 = gobj_getxforsort(g1);
         g9->g_next = 0;
         continue;
@@ -233,7 +233,7 @@ static t_gobj *glist_merge(t_glist *x, t_gobj *g1, t_gobj *g2)
         if (g9)
             g9->g_next = g2, g9 = g2;
         else g9 = g = g2;
-        if (g2 = g2->g_next)
+        if ((g2 = g2->g_next))
             f2 = gobj_getxforsort(g2);
         g9->g_next = 0;
         continue;
@@ -643,7 +643,7 @@ void glist_redraw(t_glist *x)
             }
                 /* redraw all the lines */
             linetraverser_start(&t, x);
-            while (oc = linetraverser_next(&t))
+            while ((oc = linetraverser_next(&t)))
                 sys_vgui(".x%lx.c coords l%lx %d %d %d %d\n",
                     glist_getcanvas(x), oc,
                         t.tr_lx1, t.tr_ly1, t.tr_lx2, t.tr_ly2);
@@ -965,7 +965,7 @@ static void graph_delete(t_gobj *z, t_glist *glist)
 {
     t_glist *x = (t_glist *)z;
     t_gobj *y;
-    while (y = x->gl_list)
+    while ((y = x->gl_list))
         glist_delete(x, y);
     if (glist_isvisible(x))
         text_widgetbehavior.w_deletefn(z, glist);
diff --git a/src/g_readwrite.c b/src/g_readwrite.c
index b30341f..a7a7efe 100644
--- a/src/g_readwrite.c
+++ b/src/g_readwrite.c
@@ -315,7 +315,7 @@ void canvas_dataproperties(t_canvas *x, t_scalar *sc, t_binbuf *b)
         /* take the new object off the list */
     if (ntotal)
     {
-        for (y = x->gl_list, nnew = 1; y2 = y->g_next;
+        for (y = x->gl_list, nnew = 1; (y2 = y->g_next);
             y = y2, nnew++)
                 if (nnew == ntotal)
         {
@@ -620,7 +620,7 @@ static void canvas_saveto(t_canvas *x, t_binbuf *b)
         gobj_save(y, b);
 
     linetraverser_start(&t, x);
-    while (oc = linetraverser_next(&t))
+    while ((oc = linetraverser_next(&t)))
     {
         int srcno = canvas_getindex(x, &t.tr_ob->ob_g);
         int sinkno = canvas_getindex(x, &t.tr_ob2->ob_g);
diff --git a/src/g_scalar.c b/src/g_scalar.c
index dafd399..aac7253 100644
--- a/src/g_scalar.c
+++ b/src/g_scalar.c
@@ -233,7 +233,7 @@ static void scalar_select(t_gobj *z, t_glist *owner, int state)
     gpointer_init(&gp);
     gpointer_setglist(&gp, owner, x);
     SETPOINTER(&at, &gp);
-    if (tmpl = template_findbyname(templatesym))
+    if ((tmpl = template_findbyname(templatesym)))
         template_notify(tmpl, (state ? gensym("select") : gensym("deselect")),
             1, &at);
     gpointer_unset(&gp);
@@ -357,9 +357,9 @@ int scalar_doclick(t_word *data, t_template *template, t_scalar *sc,
     {
         t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd);
         if (!wb) continue;
-        if (hit = (*wb->w_parentclickfn)(y, owner,
+        if ((hit = (*wb->w_parentclickfn)(y, owner,
             data, template, sc, ap, basex + xloc, basey + yloc,
-            xpix, ypix, shift, alt, dbl, doit))
+            xpix, ypix, shift, alt, dbl, doit)))
                 return (hit);
     }
     return (0);
diff --git a/src/g_template.c b/src/g_template.c
index 8db4f5a..df73e55 100644
--- a/src/g_template.c
+++ b/src/g_template.c
@@ -287,7 +287,7 @@ static t_scalar *template_conformscalar(t_template *tfrom, t_template *tto,
         else
         {
             t_gobj *y, *y2;
-            for (y = glist->gl_list; y2 = y->g_next; y = y2)
+            for (y = glist->gl_list; (y2 = y->g_next); y = y2)
                 if (y2 == &scfrom->sc_gobj)
             {
                 x->sc_gobj.g_next = y2->g_next;
@@ -570,7 +570,7 @@ static void *gtemplate_donew(t_symbol *sym, int argc, t_atom *argv)
         if (t->t_list)
         {
             t_gtemplate *x2, *x3;
-            for (x2 = x->x_template->t_list; x3 = x2->x_next; x2 = x3)
+            for (x2 = x->x_template->t_list; (x3 = x2->x_next); x2 = x3)
                 ;
             x2->x_next = x;
             post("template %s: warning: already exists.", sym->s_name);
@@ -664,7 +664,7 @@ static void gtemplate_free(t_gtemplate *x)
     else
     {
         t_gtemplate *x2, *x3;
-        for (x2 = t->t_list; x3 = x2->x_next; x2 = x3)
+        for (x2 = t->t_list; (x3 = x2->x_next); x2 = x3)
         {
             if (x == x3)
             {
@@ -2054,11 +2054,11 @@ static int array_doclick_element(t_array *array, t_glist *glist,
         useyloc = yloc + (yonset >= 0 ? fielddesc_cvttocoord(yfield,
             *(t_float *)(((char *)(array->a_vec) + elemsize * i) + yonset)) : 0);
         
-        if (hit = scalar_doclick(
+        if ((hit = scalar_doclick(
             (t_word *)((char *)(array->a_vec) + i * elemsize),
             elemtemplate, 0, array,
             glist, usexloc, useyloc,
-            xpix, ypix, shift, alt, dbl, doit))
+            xpix, ypix, shift, alt, dbl, doit)))
                 return (hit);
     }
     return (0);
@@ -2466,7 +2466,7 @@ static void drawnumber_getrect(t_gobj *z, t_glist *glist,
     drawnumber_getbuf(x, data, template, buf);
     width = 0;
     height = 1;
-    for (startline = buf; newline = strchr(startline, '\n');
+    for (startline = buf; (newline = strchr(startline, '\n'));
         startline = newline+1)
     {
         if (newline - startline > width)
diff --git a/src/g_text.c b/src/g_text.c
index 859c9ea..86dc7b6 100644
--- a/src/g_text.c
+++ b/src/g_text.c
@@ -699,7 +699,7 @@ static void gatom_key(void *z, t_floatarg f)
     {
             /* for numbers, only let reasonable characters through */
         if ((x->a_atom.a_type == A_SYMBOL) ||
-            (c >= '0' && c <= '9' || c == '.' || c == '-'
+            ((c >= '0' && c <= '9') || c == '.' || c == '-'
                 || c == 'e' || c == 'E'))
         {
             /* the wchar could expand to up to 4 bytes, which
@@ -1330,7 +1330,7 @@ void text_drawborder(t_text *x, t_glist *glist,
     }
         /* draw inlets/outlets */
     
-    if (ob = pd_checkobject(&x->te_pd))
+    if ((ob = pd_checkobject(&x->te_pd)))
         glist_drawiofor(glist, ob, firsttime, tag, x1, y1, x2, y2);
 }
 
diff --git a/src/g_traversal.c b/src/g_traversal.c
index 61a9a5d..5a936a8 100644
--- a/src/g_traversal.c
+++ b/src/g_traversal.c
@@ -126,7 +126,7 @@ void gpointer_copy(const t_gpointer *gpfrom, t_gpointer *gpto)
 void gpointer_unset(t_gpointer *gp)
 {
     t_gstub *gs;
-    if (gs = gp->gp_stub)
+    if ((gs = gp->gp_stub))
     {
         gstub_dis(gs);
         gp->gp_stub = 0;
@@ -136,7 +136,7 @@ void gpointer_unset(t_gpointer *gp)
 void gpointer_setglist(t_gpointer *gp, t_glist *glist, t_scalar *x)
 {
     t_gstub *gs;
-    if (gs = gp->gp_stub) gstub_dis(gs);
+    if ((gs = gp->gp_stub)) gstub_dis(gs);
     gp->gp_stub = gs = glist->gl_stub;
     gp->gp_valid = glist->gl_valid;
     gp->gp_un.gp_scalar = x;
@@ -146,7 +146,7 @@ void gpointer_setglist(t_gpointer *gp, t_glist *glist, t_scalar *x)
 void gpointer_setarray(t_gpointer *gp, t_array *array, t_word *w)
 {
     t_gstub *gs;
-    if (gs = gp->gp_stub) gstub_dis(gs);
+    if ((gs = gp->gp_stub)) gstub_dis(gs);
     gp->gp_stub = gs = array->a_stub;
     gp->gp_valid = array->a_valid;
     gp->gp_un.gp_w = w;
diff --git a/src/m_binbuf.c b/src/m_binbuf.c
index 372c329..458e998 100644
--- a/src/m_binbuf.c
+++ b/src/m_binbuf.c
@@ -221,7 +221,7 @@ void binbuf_gettext(t_binbuf *x, char **bufp, int *lengthp)
     }
     if (length && buf[length-1] == ' ')
     {
-        if (newbuf = t_resizebytes(buf, length, length-1))
+        if ((newbuf = t_resizebytes(buf, length, length-1)))
         {
             buf = newbuf;
             length--;
@@ -238,8 +238,8 @@ void binbuf_add(t_binbuf *x, int argc, t_atom *argv)
 {
     int newsize = x->b_n + argc, i;
     t_atom *ap;
-    if (ap = t_resizebytes(x->b_vec, x->b_n * sizeof(*x->b_vec),
-        newsize * sizeof(*x->b_vec)))
+    if ((ap = t_resizebytes(x->b_vec, x->b_n * sizeof(*x->b_vec),
+        newsize * sizeof(*x->b_vec))))
             x->b_vec = ap;
     else
     {
@@ -352,8 +352,8 @@ void binbuf_restore(t_binbuf *x, int argc, t_atom *argv)
 {
     int newsize = x->b_n + argc, i;
     t_atom *ap;
-    if (ap = t_resizebytes(x->b_vec, x->b_n * sizeof(*x->b_vec),
-        newsize * sizeof(*x->b_vec)))
+    if ((ap = t_resizebytes(x->b_vec, x->b_n * sizeof(*x->b_vec),
+        newsize * sizeof(*x->b_vec))))
             x->b_vec = ap;
     else
     {
@@ -770,6 +770,8 @@ void binbuf_eval(t_binbuf *x, t_pd *target, int argc, t_atom *argv)
                 if (nargs == 1) pd_float(target, mstack->a_w.w_float);
                 else pd_list(target, 0, nargs, mstack);
                 break;
+            default:
+                break;
             }
         }
         msp = mstack;
@@ -1512,10 +1514,10 @@ void binbuf_savetext(t_binbuf *bfrom, t_binbuf *bto)
     for (k = 0; k < n; k++)
     {
         if (ap[k].a_type == A_FLOAT ||
-            ap[k].a_type == A_SYMBOL &&
+            (ap[k].a_type == A_SYMBOL &&
                 !strchr(ap[k].a_w.w_symbol->s_name, ';') &&
                 !strchr(ap[k].a_w.w_symbol->s_name, ',') &&
-                !strchr(ap[k].a_w.w_symbol->s_name, '$'))
+                !strchr(ap[k].a_w.w_symbol->s_name, '$')))
                     binbuf_add(bto, 1, &ap[k]);
         else
         {
diff --git a/src/m_class.c b/src/m_class.c
index 578fad0..60a3534 100644
--- a/src/m_class.c
+++ b/src/m_class.c
@@ -500,7 +500,7 @@ t_symbol *dogensym(const char *s, t_symbol *oldsym)
         s2++;
     }
     sym1 = symhash + (hash & (HASHSIZE-1));
-    while (sym2 = *sym1)
+    while ((sym2 = *sym1))
     {
         if (!strcmp(sym2->s_name, s)) return(sym2);
         sym1 = &sym2->s_next;
@@ -701,7 +701,7 @@ void pd_typedmess(t_pd *x, t_symbol *s, int argc, t_atom *argv)
         }
         if (argc > MAXPDARG) argc = MAXPDARG;
         if (x != &pd_objectmaker) *(ap++) = (t_int)x, narg++;
-        while (wanttype = *wp++)
+        while ((wanttype = *wp++))
         {
             switch (wanttype)
             {
diff --git a/src/m_obj.c b/src/m_obj.c
index 8d22815..8472e7d 100644
--- a/src/m_obj.c
+++ b/src/m_obj.c
@@ -53,9 +53,9 @@ t_inlet *inlet_new(t_object *owner, t_pd *dest, t_symbol *s1, t_symbol *s2)
     else x->i_symto = s2;
     x->i_symfrom = s1;
     x->i_next = 0;
-    if (y = owner->ob_inlet)
+    if ((y = owner->ob_inlet))
     {
-        while (y2 = y->i_next) y = y2;
+        while ((y2 = y->i_next)) y = y2;
         y->i_next = x;
     }
     else owner->ob_inlet = x;
@@ -189,9 +189,9 @@ t_inlet *pointerinlet_new(t_object *owner, t_gpointer *gp)
     x->i_symfrom = &s_pointer;
     x->i_pointerslot = gp;
     x->i_next = 0;
-    if (y = owner->ob_inlet)
+    if ((y = owner->ob_inlet))
     {
-        while (y2 = y->i_next) y = y2;
+        while ((y2 = y->i_next)) y = y2;
         y->i_next = x;
     }
     else owner->ob_inlet = x;
@@ -211,9 +211,9 @@ t_inlet *floatinlet_new(t_object *owner, t_float *fp)
     x->i_symfrom = &s_float;
     x->i_floatslot = fp;
     x->i_next = 0;
-    if (y = owner->ob_inlet)
+    if ((y = owner->ob_inlet))
     {
-        while (y2 = y->i_next) y = y2;
+        while ((y2 = y->i_next)) y = y2;
         y->i_next = x;
     }
     else owner->ob_inlet = x;
@@ -233,9 +233,9 @@ t_inlet *symbolinlet_new(t_object *owner, t_symbol **sp)
     x->i_symfrom = &s_symbol;
     x->i_symslot = sp;
     x->i_next = 0;
-    if (y = owner->ob_inlet)
+    if ((y = owner->ob_inlet))
     {
-        while (y2 = y->i_next) y = y2;
+        while ((y2 = y->i_next)) y = y2;
         y->i_next = x;
     }
     else owner->ob_inlet = x;
@@ -337,9 +337,9 @@ t_outlet *outlet_new(t_object *owner, t_symbol *s)
     t_outlet *x = (t_outlet *)getbytes(sizeof(*x)), *y, *y2;
     x->o_owner = owner;
     x->o_next = 0;
-    if (y = owner->ob_outlet)
+    if ((y = owner->ob_outlet))
     {
-        while (y2 = y->o_next) y = y2;
+        while ((y2 = y->o_next)) y = y2;
         y->o_next = x;
     }
     else owner->ob_outlet = x;
@@ -512,7 +512,7 @@ doit:
         freebytes(oc, sizeof(*oc));
         goto done;
     }
-    while (oc2 = oc->oc_next)
+    while ((oc2 = oc->oc_next))
     {
         if (oc2->oc_to == to)
         {
diff --git a/src/m_pd.c b/src/m_pd.c
index 8bd146e..52a23ef 100644
--- a/src/m_pd.c
+++ b/src/m_pd.c
@@ -165,7 +165,7 @@ void pd_unbind(t_pd *x, t_symbol *s)
             b->b_list = e->e_next;
             freebytes(e, sizeof(t_bindelem));
         }
-        else for (e = b->b_list; e2 = e->e_next; e = e2)
+        else for (e = b->b_list; (e2 = e->e_next); e = e2)
             if (e2->e_who == x)
         {
             e->e_next = e2->e_next;
diff --git a/src/m_pd.h b/src/m_pd.h
index 63787be..dd4d63a 100644
--- a/src/m_pd.h
+++ b/src/m_pd.h
@@ -78,6 +78,9 @@ typedef unsigned __int64  uint64_t;
 /* for FILE, needed by sys_fopen() and sys_fclose() only */
 #include <stdio.h>
 
+/* for alloca() */
+#include <stdlib.h>
+
 #define MAXPDSTRING 1000        /* use this for anything you want */
 #define MAXPDARG 5              /* max number of args we can typecheck today */
 
diff --git a/src/s_inter.c b/src/s_inter.c
index 49a3572..cfd11f2 100644
--- a/src/s_inter.c
+++ b/src/s_inter.c
@@ -824,7 +824,7 @@ void sys_unqueuegui(void *client)
     }
     if (!sys_guiqueuehead)
         return;
-    for (gq = sys_guiqueuehead; gq2 = gq->gq_next; gq = gq2)
+    for (gq = sys_guiqueuehead; (gq2 = gq->gq_next); gq = gq2)
         if (gq2->gq_client == client)
     {
         gq->gq_next = gq2->gq_next;
diff --git a/src/s_loader.c b/src/s_loader.c
index 100a2ba..8c24029 100644
--- a/src/s_loader.c
+++ b/src/s_loader.c
@@ -101,7 +101,7 @@ static int sys_do_load_lib(t_canvas *canvas, char *objectname)
 #ifdef _WIN32
     HINSTANCE ntdll;
 #endif
-    if (classname = strrchr(objectname, '/'))
+    if ((classname = strrchr(objectname, '/')))
         classname++;
     else classname = objectname;
     if (sys_onloadlist(objectname))
@@ -278,7 +278,7 @@ int sys_load_lib(t_canvas *canvas, char *classname)
     int ok = 0;
     loader_queue_t *q;
     for(q = &loaders; q; q = q->next)
-        if (ok = q->loader(canvas, classname)) break;
+        if ((ok = q->loader(canvas, classname))) break;
     canvas_resume_dsp(dspstate);
     return ok;
 }
diff --git a/src/s_main.c b/src/s_main.c
index 299cbee..cd17415 100644
--- a/src/s_main.c
+++ b/src/s_main.c
@@ -599,7 +599,7 @@ int sys_argparse(int argc, char **argv)
 
             argc -= 2; argv += 2;
         }
-        else if (!strcmp(*argv, "-soundbuf") || !strcmp(*argv, "-audiobuf") && (argc > 1))
+        else if (!strcmp(*argv, "-soundbuf") || (!strcmp(*argv, "-audiobuf") && (argc > 1)))
         {
             sys_main_advance = atoi(argv[1]);
             argc -= 2; argv += 2;
diff --git a/src/s_path.c b/src/s_path.c
index fa094c7..6456593 100644
--- a/src/s_path.c
+++ b/src/s_path.c
@@ -56,7 +56,7 @@ t_namelist *sys_helppath;
 void sys_bashfilename(const char *from, char *to)
 {
     char c;
-    while (c = *from++)
+    while ((c = *from++))
     {
 #ifdef _WIN32
         if (c == '/') c = '\\';
@@ -70,7 +70,7 @@ void sys_bashfilename(const char *from, char *to)
 void sys_unbashfilename(const char *from, char *to)
 {
     char c;
-    while (c = *from++)
+    while ((c = *from++))
     {
 #ifdef _WIN32
         if (c == '\\') c = '/';
diff --git a/src/x_gui.c b/src/x_gui.c
index 2409ca4..3060456 100644
--- a/src/x_gui.c
+++ b/src/x_gui.c
@@ -86,7 +86,7 @@ static void gfxstub_offlist(t_gfxstub *x)
     t_gfxstub *y1, *y2;
     if (gfxstub_list == x)
         gfxstub_list = x->x_next;
-    else for (y1 = gfxstub_list; y2 = y1->x_next; y1 = y2)
+    else for (y1 = gfxstub_list; (y2 = y1->x_next); y1 = y2)
         if (y2 == x) 
     {
         y1->x_next = y2->x_next;
diff --git a/src/x_midi.c b/src/x_midi.c
index fc17bae..c3d9f42 100644
--- a/src/x_midi.c
+++ b/src/x_midi.c
@@ -924,7 +924,7 @@ static void makenote_tick(t_hang *hang)
     outlet_float(x->x_velout, 0);
     outlet_float(x->x_pitchout, hang->h_pitch);
     if (x->x_hang == hang) x->x_hang = hang->h_next;
-    else for (h2 = x->x_hang; h3 = h2->h_next; h2 = h3)
+    else for (h2 = x->x_hang; (h3 = h2->h_next); h2 = h3)
     {
         if (h3 == hang)
         {
@@ -954,7 +954,7 @@ static void makenote_float(t_makenote *x, t_float f)
 static void makenote_stop(t_makenote *x)
 {
     t_hang *hang;
-    while (hang = x->x_hang)
+    while ((hang = x->x_hang))
     {
         outlet_float(x->x_velout, 0);
         outlet_float(x->x_pitchout, hang->h_pitch);
@@ -967,7 +967,7 @@ static void makenote_stop(t_makenote *x)
 static void makenote_clear(t_makenote *x)
 {
     t_hang *hang;
-    while (hang = x->x_hang)
+    while ((hang = x->x_hang))
     {
         x->x_hang = hang->h_next;
         clock_free(hang->h_clock);
@@ -1195,7 +1195,7 @@ static void bag_float(t_bag *x, t_float f)
         if (!x->x_first) x->x_first = bagelem;
         else    /* LATER replace with a faster algorithm */
         {
-            for (e2 = x->x_first; e3 = e2->e_next; e2 = e3)
+            for (e2 = x->x_first; (e3 = e2->e_next); e2 = e3)
                 ;
             e2->e_next = bagelem;
         }
@@ -1210,7 +1210,7 @@ static void bag_float(t_bag *x, t_float f)
             freebytes(bagelem, sizeof(*bagelem));
             return;
         }
-        for (e2 = x->x_first; e3 = e2->e_next; e2 = e3)
+        for (e2 = x->x_first; (e3 = e2->e_next); e2 = e3)
             if (e3->e_value == f)
         {
             e2->e_next = e3->e_next;
@@ -1223,7 +1223,7 @@ static void bag_float(t_bag *x, t_float f)
 static void bag_flush(t_bag *x)
 {
     t_bagelem *bagelem;
-    while (bagelem = x->x_first)
+    while ((bagelem = x->x_first))
     {
         outlet_float(x->x_obj.ob_outlet, bagelem->e_value);
         x->x_first = bagelem->e_next;
@@ -1234,7 +1234,7 @@ static void bag_flush(t_bag *x)
 static void bag_clear(t_bag *x)
 {
     t_bagelem *bagelem;
-    while (bagelem = x->x_first)
+    while ((bagelem = x->x_first))
     {
         x->x_first = bagelem->e_next;
         freebytes(bagelem, sizeof(*bagelem));
diff --git a/src/x_text.c b/src/x_text.c
index d4ff1d9..874ada2 100644
--- a/src/x_text.c
+++ b/src/x_text.c
@@ -200,7 +200,7 @@ static void textbuf_free(t_textbuf *x)
         guiconnect_notarget(x->b_guiconnect, 1000);
     }
         /* just in case we're still bound to #A from loading... */
-    while (x2 = pd_findbyclass(gensym("#A"), text_define_class))
+    while ((x2 = pd_findbyclass(gensym("#A"), text_define_class)))
         pd_unbind(x2, gensym("#A"));
 }
 
@@ -1233,9 +1233,9 @@ static void text_sequence_doit(t_text_sequence *x, int argc, t_atom *argv)
         /* test if leading numbers, or a leading symbol equal to our
         "wait symbol", are directing us to wait */
     if (!x->x_lastto && (
-        vec[onset].a_type == A_FLOAT && x->x_waitargc && !x->x_eaten ||
-            vec[onset].a_type == A_SYMBOL &&
-                vec[onset].a_w.w_symbol == x->x_waitsym))
+        (vec[onset].a_type == A_FLOAT && x->x_waitargc && !x->x_eaten) ||
+            (vec[onset].a_type == A_SYMBOL &&
+                vec[onset].a_w.w_symbol == x->x_waitsym)))
     {
         if (vec[onset].a_type == A_FLOAT)
         {
diff --git a/src/x_time.c b/src/x_time.c
index 20e1efc..802cb87 100644
--- a/src/x_time.c
+++ b/src/x_time.c
@@ -526,7 +526,7 @@ static void hang_tick(t_hang *h)
     int i;
     union word *w;
     if (x->x_hang == h) x->x_hang = h->h_next;
-    else for (h2 = x->x_hang; h3 = h2->h_next; h2 = h3)
+    else for (h2 = x->x_hang; (h3 = h2->h_next); h2 = h3)
     {
         if (h3 == h)
         {
@@ -546,6 +546,7 @@ static void hang_tick(t_hang *h)
                 outlet_pointer(p->p_outlet, w->w_gpointer);
             else pd_error(x, "pipe: stale pointer");
             break;
+        default: break;
         }
     }
     hang_free(h);
@@ -585,6 +586,7 @@ static void pipe_list(t_pipe *x, t_symbol *s, int ac, t_atom *av)
                 if (gp->gp_stub) gp->gp_stub->gs_refcount++;
             }
             gp++;
+        default: break;
         }
     }
     for (i = 0, gp = x->x_gp, gp2 = h->h_gp, p = x->x_vec, w = h->h_vec;
@@ -613,7 +615,7 @@ static void pipe_flush(t_pipe *x)
 static void pipe_clear(t_pipe *x)
 {
     t_hang *hang;
-    while (hang = x->x_hang)
+    while ((hang = x->x_hang))
     {
         x->x_hang = hang->h_next;
         hang_free(hang);
