*fixed a routine retrieving bug.

This commit is contained in:
paladin-t 2016-01-28 16:57:19 +08:00
parent f777249d8a
commit 504294804c
2 changed files with 5 additions and 2 deletions

View File

@ -1,4 +1,5 @@
Jan. 28 2016
Fixed a routine retrieving bug
Fixed a crash bug when skipping a struct
Jan. 27 2016

View File

@ -149,6 +149,7 @@ extern "C" {
# define _GET_CLASS(__o) ((!__o) ? 0 : (_IS_CLASS(__o) ? (__o) : (_IS_VAR(__o) && _IS_CLASS((__o)->data.variable->data) ? (__o)->data.variable->data : 0)))
#endif /* MB_ENABLE_CLASS */
#define _IS_ROUTINE(__o) ((__o) && ((_object_t*)(__o))->type == _DT_ROUTINE)
#define _GET_ROUTINE(__o) ((!__o) ? 0 : (_IS_ROUTINE(__o) ? (__o) : (_IS_VAR(__o) && _IS_ROUTINE((__o)->data.variable->data) ? (__o)->data.variable->data : 0)))
/* Hash table size */
#define _HT_ARRAY_SIZE_TINY 1
@ -433,7 +434,7 @@ typedef struct _class_t {
#endif /* MB_ENABLE_CLASS */
typedef enum _invokable_e {
_IT_SCRIPT,
_IT_SCRIPT = 1,
#ifdef MB_ENABLE_LAMBDA
_IT_LAMBDA,
#endif /* MB_ENABLE_LAMBDA */
@ -12711,7 +12712,8 @@ _retry:
mb_unrefvar(pathed);
#endif /* MB_ENABLE_CLASS */
case _DT_ROUTINE:
routine = (_routine_t*)obj->data.routine;
obj = _GET_ROUTINE(obj);
routine = obj->data.routine;
result = _eval_routine(s, &ast, 0, 0, routine, _has_routine_lex_arg, _pop_routine_lex_arg);
if(ast)
ast = ast->prev;