functions should return explicit "nil"s.
diff --git a/lbuiltin.c b/lbuiltin.c
index c555ddf..512ec63 100644
--- a/lbuiltin.c
+++ b/lbuiltin.c
@@ -1,5 +1,5 @@
 /*
-** $Id: lbuiltin.c,v 1.30 1998/06/19 16:14:09 roberto Exp roberto $
+** $Id: lbuiltin.c,v 1.31 1998/06/19 18:47:06 roberto Exp roberto $
 ** Built-in functions
 ** See Copyright Notice in lua.h
 */
@@ -54,6 +54,7 @@
     pushstring(g);
     luaA_pushobject(&g->u.s.globalval);
   }
+  else lua_pushnil();
 }
 
 
@@ -90,6 +91,7 @@
     luaA_pushobject(&n->ref);
     luaA_pushobject(&n->val);
   }
+  else lua_pushnil();
 }
 
 
@@ -214,8 +216,8 @@
     luaL_arg_check(0 <= base && base <= 36, 2, "base out of range");
     n = strtol(s, &s, base);
     while (isspace(*s)) s++;  /* skip trailing spaces */
-    if (*s) return;  /* invalid format: return nil */
-    lua_pushnumber(n);
+    if (*s) lua_pushnil();  /* invalid format: return nil */
+    else lua_pushnumber(n);
   }
 }
 
@@ -303,8 +305,10 @@
     lua_seterrormethod();
   }
   if (status != 0) {  /* error in call? */
-    if (strchr(options, 'x'))
+    if (strchr(options, 'x')) {
+      lua_pushnil();
       return;  /* return nil to signal the error */
+    }
     else
       lua_error(NULL);
   }
diff --git a/lstrlib.c b/lstrlib.c
index 7218872..613f6d5 100644
--- a/lstrlib.c
+++ b/lstrlib.c
@@ -1,5 +1,5 @@
 /*
-** $Id: lstrlib.c,v 1.15 1998/06/19 16:14:09 roberto Exp roberto $
+** $Id: lstrlib.c,v 1.16 1998/06/24 13:33:00 roberto Exp roberto $
 ** Standard library for strings and pattern-matching
 ** See Copyright Notice in lua.h
 */
@@ -346,6 +346,7 @@
     if (s2) {
       lua_pushnumber(s2-s+1);
       lua_pushnumber(s2-s+strlen(p));
+      return;
     }
   }
   else {
@@ -363,6 +364,7 @@
       }
     } while (s1++<cap.src_end && !anchor);
   }
+  lua_pushnil();  /* if arives here, it didn't find */
 }