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();