json-tutorial icon indicating copy to clipboard operation
json-tutorial copied to clipboard

遇到不合法的转义字符 c->top = head; return ERROR 的同时是否需要弹栈

Open IKItev opened this issue 8 years ago • 3 comments

#define STRING_ERROR(ret) \
	do { \
		c->top = head; \
		return ret; \
	} while(0)


 	case '\0':
		STRING_ERROR(LEPT_PARSE_MISS_QUOTATION_MARK);
	default:
		if ((unsigned char)ch < 0x20)
			STRING_ERROR(LEPT_PARSE_INVALID_STRING_CHAR);

这里用 STRING_ERROR 的宏在错误时还原 c->top 的数值并 return 错误信息,需不需要同时使用 c->stack = (char*)lept_context_pop(c, len);c->stack 进行弹栈。

#define STRING_ERROR(ret, c, len) \
	do { \
		c->stack = (char*)lept_context_pop(c, len); \
		c->top = head; \
		return ret; \
	} while(0)	

IKItev avatar Feb 14 '17 13:02 IKItev

c->top=head; 这就是pop啊

daoxunchen avatar Feb 15 '17 13:02 daoxunchen

惰性删除

swananan avatar May 08 '17 12:05 swananan

c->stack = (char*)lept_context_pop(c, len); 你居然写出这样的,看来你没有理解。 首先,c->stack整个过程就没有变过,要变的话,也是在realloc()变化。 为什么不变c->stack? 因为lept_parse()需要你realloc出来的地址指针也就是c->stack

你要明白你这里的删除是什么意思。

这里不是释放空间

c->top=head; 已经能够完成删除的功能

JosanSun avatar Jul 28 '17 14:07 JosanSun