diff --git a/src/las.c b/src/las.c
index 324aa8a6efaee30d1b9a3a8f26d7717638146a97..68cf144145400eadec13fed003f3cf3149a17f85 100644
--- a/src/las.c
+++ b/src/las.c
@@ -3918,18 +3918,21 @@ void fix_type_field(node *n)
   case F_MAGIC_SET_INDEX:
     /* FIXME: Could have a stricter type for ::`->=(). */
     /* FIXME: */
-    MAKE_CONSTANT_TYPE(n->type, tFunc(tMix tSetvar(0,tMix) tOr(tVoid,tInt), tVar(0)));
+    MAKE_CONSTANT_TYPE(n->type, tFunc(tStr tMix tOr(tVoid,tInt), tVoid));
     break;
   case F_MAGIC_INDICES:
-    MAKE_CONSTANT_TYPE(n->type, tFunc(tOr(tVoid,tInt), tArr(tString)));
+    MAKE_CONSTANT_TYPE(n->type, tFunc(tOr3(tVoid,tObj,tDeprecated(tInt))
+				      tOr(tVoid,tInt), tArr(tStr)));
     break;
   case F_MAGIC_VALUES:
     /* FIXME: Could have a stricter type for ::_values. */
-    MAKE_CONSTANT_TYPE(n->type, tFunc(tOr(tVoid,tInt), tArray));
+    MAKE_CONSTANT_TYPE(n->type, tFunc(tOr3(tVoid,tObj,tDeprecated(tInt))
+				      tOr(tVoid,tInt), tArray));
     break;
   case F_MAGIC_TYPES:
     /* FIXME: Could have a stricter type for ::_types. */
-    MAKE_CONSTANT_TYPE(n->type, tFunc(tOr(tVoid,tInt), tArr(tType(tMix))));
+    MAKE_CONSTANT_TYPE(n->type, tFunc(tOr3(tVoid,tObj,tDeprecated(tInt))
+				      tOr(tVoid,tInt), tArr(tType(tMix))));
     break;
 
   case F_CATCH:
diff --git a/src/object.c b/src/object.c
index 9e61cfb39acd8372d821ea2c600599395e295c79..d9017aeda6a1427dc4612b85820450f654e975a0 100644
--- a/src/object.c
+++ b/src/object.c
@@ -3266,6 +3266,9 @@ void init_object(void)
   offset=ADD_STORAGE(struct magic_index_struct);
   MAP_VARIABLE("__obj", tObj, ID_PROTECTED,
 	       offset + OFFSETOF(magic_index_struct, o), T_OBJECT);
+  /* NB: The type for this function is duplicated in las.c for
+   *     opcode F_MAGIC_INDEX.
+   */
   ADD_FUNCTION("`()", f_magic_index,
 	       tFunc(tStr tOr3(tVoid,tObj,tDeprecated(tInt)) tOr(tVoid,tInt),
 		     tMix), ID_PROTECTED);
@@ -3276,6 +3279,9 @@ void init_object(void)
   offset=ADD_STORAGE(struct magic_index_struct);
   MAP_VARIABLE("__obj", tObj, ID_PROTECTED,
 	       offset + OFFSETOF(magic_index_struct, o), T_OBJECT);
+  /* NB: The type for this function is duplicated in las.c for
+   *     opcode F_MAGIC_SET_INDEX.
+   */
   ADD_FUNCTION("`()", f_magic_set_index,
 	       tFunc(tStr tMix tOr3(tVoid,tObj,tDeprecated(tInt))
 		     tOr(tVoid,tInt), tVoid), ID_PROTECTED);
@@ -3286,6 +3292,9 @@ void init_object(void)
   offset=ADD_STORAGE(struct magic_index_struct);
   MAP_VARIABLE("__obj", tObj, ID_PROTECTED,
 	       offset + OFFSETOF(magic_index_struct, o), T_OBJECT);
+  /* NB: The type for this function is duplicated in las.c for
+   *     opcode F_MAGIC_INDICES.
+   */
   ADD_FUNCTION("`()", f_magic_indices,
 	       tFunc(tOr3(tVoid,tObj,tDeprecated(tInt)) tOr(tVoid,tInt),
 		     tArr(tStr)), ID_PROTECTED);
@@ -3296,6 +3305,9 @@ void init_object(void)
   offset=ADD_STORAGE(struct magic_index_struct);
   MAP_VARIABLE("__obj", tObj, ID_PROTECTED,
 	       offset + OFFSETOF(magic_index_struct, o), T_OBJECT);
+  /* NB: The type for this function is duplicated in las.c for
+   *     opcode F_MAGIC_VALUES.
+   */
   ADD_FUNCTION("`()", f_magic_values,
 	       tFunc(tOr3(tVoid,tObj,tDeprecated(tInt)) tOr(tVoid,tInt),
 		     tArray), ID_PROTECTED);
@@ -3306,9 +3318,12 @@ void init_object(void)
   offset=ADD_STORAGE(struct magic_index_struct);
   MAP_VARIABLE("__obj", tObj, ID_PROTECTED,
 	       offset + OFFSETOF(magic_index_struct, o), T_OBJECT);
+  /* NB: The type for this function is duplicated in las.c for
+   *     opcode F_MAGIC_TYPES.
+   */
   ADD_FUNCTION("`()", f_magic_types,
 	       tFunc(tOr3(tVoid,tObj,tDeprecated(tInt)) tOr(tVoid,tInt),
-		     tArray), ID_PROTECTED);
+		     tArr(tType(tMix))), ID_PROTECTED);
   magic_types_program=end_program();
 
   exit_compiler();