Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
畅游知识海洋
json
提交
82b95ca6
J
json
项目概览
畅游知识海洋
/
json
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
json
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
82b95ca6
编写于
6月 20, 2017
作者:
N
Niels Lohmann
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
🔨
simplified error handling in parser
上级
f2cdb3d5
变更
2
展开全部
隐藏空白更改
内联
并排
Showing
2 changed file
with
86 addition
and
84 deletion
+86
-84
src/json.hpp
src/json.hpp
+30
-28
test/src/unit-class_parser.cpp
test/src/unit-class_parser.cpp
+56
-56
未找到文件。
src/json.hpp
浏览文件 @
82b95ca6
...
...
@@ -12902,7 +12902,7 @@ scan_number_done:
default:
{
// the last token was unexpected
unexpect
(
last_token
);
unexpect
();
}
}
...
...
@@ -13040,51 +13040,49 @@ scan_number_done:
/// get next token from lexer
typename
lexer
::
token_type
get_token
()
{
last_token
=
m_lexer
.
scan
();
return
last_token
;
return
(
last_token
=
m_lexer
.
scan
());
}
/*!
@throw parse_error.101 if expected token did not occur
*/
void
expect
(
typename
lexer
::
token_type
t
)
const
void
expect
(
typename
lexer
::
token_type
t
)
{
if
(
JSON_UNLIKELY
(
t
!=
last_token
))
{
std
::
string
error_msg
=
"syntax error - "
;
if
(
last_token
==
lexer
::
token_type
::
parse_error
)
{
error_msg
+=
std
::
string
(
m_lexer
.
get_error_message
())
+
"; last read: '"
+
m_lexer
.
get_token_string
()
+
"'"
;
}
else
{
error_msg
+=
"unexpected "
+
std
::
string
(
lexer
::
token_type_name
(
last_token
));
}
error_msg
+=
"; expected "
+
std
::
string
(
lexer
::
token_type_name
(
t
));
JSON_THROW
(
parse_error
::
create
(
101
,
m_lexer
.
get_position
(),
error_msg
));
errored
=
true
;
expected
=
t
;
throw_exception
();
}
}
/*!
@throw parse_error.101 if unexpected token occurred
*/
void
unexpect
(
typename
lexer
::
token_type
t
)
const
void
unexpect
(
)
{
if
(
JSON_UNLIKELY
(
t
==
last_token
))
errored
=
true
;
throw_exception
();
}
[[
noreturn
]]
void
throw_exception
()
const
{
std
::
string
error_msg
=
"syntax error - "
;
if
(
last_token
==
lexer
::
token_type
::
parse_error
)
{
std
::
string
error_msg
=
"syntax error - "
;
if
(
last_token
==
lexer
::
token_type
::
parse_error
)
{
error_msg
+=
std
::
string
(
m_lexer
.
get_error_message
())
+
"; last read '"
+
m_lexer
.
get_token_string
()
+
"'"
;
}
else
{
error_msg
+=
"unexpected "
+
std
::
string
(
lexer
::
token_type_name
(
last_token
));
}
error_msg
+=
std
::
string
(
m_lexer
.
get_error_message
())
+
"; last read: '"
+
m_lexer
.
get_token_string
()
+
"'"
;
}
else
{
error_msg
+=
"unexpected "
+
std
::
string
(
lexer
::
token_type_name
(
last_token
));
}
JSON_THROW
(
parse_error
::
create
(
101
,
m_lexer
.
get_position
(),
error_msg
));
if
(
expected
!=
lexer
::
token_type
::
uninitialized
)
{
error_msg
+=
"; expected "
+
std
::
string
(
lexer
::
token_type_name
(
expected
));
}
JSON_THROW
(
parse_error
::
create
(
101
,
m_lexer
.
get_position
(),
error_msg
));
}
private:
...
...
@@ -13096,6 +13094,10 @@ scan_number_done:
typename
lexer
::
token_type
last_token
=
lexer
::
token_type
::
uninitialized
;
/// the lexer
lexer
m_lexer
;
/// whether a syntax error occurred
bool
errored
=
false
;
/// possible reason for the syntax error
typename
lexer
::
token_type
expected
=
lexer
::
token_type
::
uninitialized
;
};
public:
...
...
test/src/unit-class_parser.cpp
浏览文件 @
82b95ca6
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录