From fd7f5884d13bb2cf7d0eeea20c6419873c46fa59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Sat, 3 Dec 2016 13:00:27 +0100 Subject: [PATCH] Compiler: Fixed the types for ::_indices() et al. The types now match the documentation. --- src/las.c | 11 +++++++---- src/object.c | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/las.c b/src/las.c index 324aa8a6ef..68cf144145 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 9e61cfb39a..d9017aeda6 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(); -- GitLab