Skip to content

Commit d4eeedb

Browse files
zimuya4153ShrBox
authored andcommitted
refactor: change the function error output to throw an exception
1 parent afb25e9 commit d4eeedb

40 files changed

Lines changed: 208 additions & 417 deletions

src/legacy/api/APIHelp.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -332,11 +332,7 @@ Local<Value> JsonToValue(std::string jsonStr) {
332332
auto j = ordered_json::parse(jsonStr, nullptr, true, true);
333333
return JsonToValue(j);
334334
} catch (const ordered_json::exception& e) {
335-
lse::LegacyScriptEngine::getLogger().warn(
336-
"{}{}",
337-
"JSON parse error"_tr(),
338-
ll::string_utils::tou8str(e.what())
339-
);
335+
lse::LegacyScriptEngine::getLogger().warn("{}{}", "JSON parse error"_tr(), ll::string_utils::tou8str(e.what()));
340336
return String::newString(jsonStr);
341337
}
342338
}

src/legacy/api/APIHelp.h

Lines changed: 28 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,7 @@ std::string ValueKindToString(const ValueKind& kind);
2424

2525
// 输出脚本调用堆栈,API名称,以及插件名
2626
inline void CREATE_EXCEPTION_WITH_SCRIPT_INFO(std::string const& func = {}, std::string const& msg = {}) {
27-
auto e = script::Exception(msg);
28-
lse::LegacyScriptEngine::getLogger().error(
29-
"script::Exception: {0}\n{1}",
30-
e.message(),
31-
e.stacktrace()
32-
);
33-
lse::LegacyScriptEngine::getLogger().error("In API: " + func);
34-
lse::LegacyScriptEngine::getLogger().error("In Plugin: " + getEngineOwnData()->pluginName);
27+
throw script::Exception(fmt::format("In API: {}, In Plugin: {}, {}", func, getEngineOwnData()->pluginName, msg));
3528
}
3629

3730
inline void LOG_ERROR_WITH_SCRIPT_INFO(std::string const& func = {}, std::string const& msg = {}) {
@@ -41,7 +34,7 @@ inline void LOG_ERROR_WITH_SCRIPT_INFO(std::string const& func = {}, std::string
4134
}
4235

4336
// 参数类型错误输出
44-
inline void LOG_WRONG_ARG_TYPE(std::string const& func = {}) {
37+
inline void THROW_WRONG_ARG_TYPE(std::string const& func = {}) {
4538
CREATE_EXCEPTION_WITH_SCRIPT_INFO(func, "Wrong type of argument!");
4639
}
4740

@@ -59,111 +52,96 @@ inline void LOG_WRONG_ARGS_COUNT(std::string const& func = {}) {
5952
#define CHECK_ARGS_COUNT(ARGS, COUNT) \
6053
if (ARGS.size() < COUNT) { \
6154
LOG_TOO_FEW_ARGS(__FUNCTION__); \
62-
return Local<Value>(); \
6355
}
6456

6557
// 检查是否TYPE类型
6658
#define CHECK_ARG_TYPE(ARG, TYPE) \
6759
if (ARG.getKind() != TYPE) { \
68-
LOG_WRONG_ARG_TYPE(__FUNCTION__); \
69-
return Local<Value>(); \
60+
THROW_WRONG_ARG_TYPE(__FUNCTION__); \
7061
}
7162

7263
// 截获引擎异常
7364
#define CATCH(LOG) \
74-
catch (const Exception& e) { \
75-
ll::error_utils::printException(e, lse::LegacyScriptEngine::getLogger()); \
76-
lse::LegacyScriptEngine::getLogger().error(e.stacktrace()); \
77-
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__, LOG); \
78-
return Local<Value>(); \
65+
catch (script::Exception const& e) { \
66+
throw e; \
67+
} \
68+
catch (std::exception const& e) { \
69+
throw script::Exception(e.what()); \
7970
} \
8071
catch (...) { \
81-
ll::error_utils::printCurrentException(lse::LegacyScriptEngine::getLogger()); \
82-
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__, LOG); \
83-
return Local<Value>(); \
72+
throw script::Exception(fmt::format("Unknown exception in {}", __func__)); \
8473
}
8574

8675
// 至少COUNT个参数_Constructor
8776
#define CHECK_ARGS_COUNT_C(ARGS, COUNT) \
8877
if (ARGS.size() < COUNT) { \
8978
LOG_TOO_FEW_ARGS(__FUNCTION__); \
90-
return nullptr; \
9179
}
9280

9381
// 检查是否TYPE类型_Constructor
9482
#define CHECK_ARG_TYPE_C(ARG, TYPE) \
9583
if (ARG.getKind() != TYPE) { \
96-
LOG_WRONG_ARG_TYPE(__FUNCTION__); \
97-
return nullptr; \
84+
THROW_WRONG_ARG_TYPE(__FUNCTION__); \
9885
}
9986

10087
// 检查是否TYPE类型_Setter
10188
#define CHECK_ARG_TYPE_S(ARG, TYPE) \
10289
if (ARG.getKind() != TYPE) { \
103-
LOG_WRONG_ARG_TYPE(__FUNCTION__); \
104-
return; \
90+
THROW_WRONG_ARG_TYPE(__FUNCTION__); \
10591
}
10692

10793
// 截获引擎异常_Constructor
10894
#define CATCH_C(LOG) \
10995
catch (const Exception& e) { \
110-
ll::error_utils::printException(e, lse::LegacyScriptEngine::getLogger()); \
111-
lse::LegacyScriptEngine::getLogger().error(e.stacktrace()); \
96+
ll::error_utils::printException(e, lse::LegacyScriptEngine::getLogger()); \
97+
lse::LegacyScriptEngine::getLogger().error(e.stacktrace()); \
11298
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__, LOG); \
11399
return nullptr; \
114100
} \
115101
catch (...) { \
116-
ll::error_utils::printCurrentException(lse::LegacyScriptEngine::getLogger()); \
102+
ll::error_utils::printCurrentException(lse::LegacyScriptEngine::getLogger()); \
117103
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__, LOG); \
118104
return nullptr; \
119105
}
120106

121107
// 截获引擎异常_Setter
122108
#define CATCH_S(LOG) \
123109
catch (const Exception& e) { \
124-
ll::error_utils::printException(e, lse::LegacyScriptEngine::getLogger()); \
125-
lse::LegacyScriptEngine::getLogger().error(e.stacktrace()); \
110+
ll::error_utils::printException(e, lse::LegacyScriptEngine::getLogger()); \
111+
lse::LegacyScriptEngine::getLogger().error(e.stacktrace()); \
126112
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__, LOG); \
127113
return; \
128114
} \
129115
catch (...) { \
130-
ll::error_utils::printCurrentException(lse::LegacyScriptEngine::getLogger()); \
116+
ll::error_utils::printCurrentException(lse::LegacyScriptEngine::getLogger()); \
131117
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__, LOG); \
132118
return; \
133119
}
134120

135121
// 截获引擎异常_Constructor
136122
#define CATCH_WITHOUT_RETURN(LOG) \
137123
catch (const Exception& e) { \
138-
ll::error_utils::printException(e, lse::LegacyScriptEngine::getLogger()); \
139-
lse::LegacyScriptEngine::getLogger().error(e.stacktrace()); \
124+
ll::error_utils::printException(e, lse::LegacyScriptEngine::getLogger()); \
125+
lse::LegacyScriptEngine::getLogger().error(e.stacktrace()); \
140126
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__, LOG); \
141127
} \
142128
catch (...) { \
143-
ll::error_utils::printCurrentException(lse::LegacyScriptEngine::getLogger()); \
129+
ll::error_utils::printCurrentException(lse::LegacyScriptEngine::getLogger()); \
144130
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__, LOG); \
145131
}
146132

147133
// 截获回调函数异常
148134
#define CATCH_IN_CALLBACK(callback) \
149135
catch (const Exception& e) { \
150-
ll::error_utils::printException(e, lse::LegacyScriptEngine::getLogger()); \
151-
lse::LegacyScriptEngine::getLogger().error(e.stacktrace()); \
152-
lse::LegacyScriptEngine::getLogger().error( \
153-
std::string("In callback for ") + callback \
154-
); \
155-
lse::LegacyScriptEngine::getLogger().error( \
156-
"In Plugin: " + getEngineOwnData()->pluginName \
157-
); \
136+
ll::error_utils::printException(e, lse::LegacyScriptEngine::getLogger()); \
137+
lse::LegacyScriptEngine::getLogger().error(e.stacktrace()); \
138+
lse::LegacyScriptEngine::getLogger().error(std::string("In callback for ") + callback); \
139+
lse::LegacyScriptEngine::getLogger().error("In Plugin: " + getEngineOwnData()->pluginName); \
158140
} \
159141
catch (...) { \
160-
ll::error_utils::printCurrentException(lse::LegacyScriptEngine::getLogger()); \
161-
lse::LegacyScriptEngine::getLogger().error( \
162-
std::string("In callback for ") + callback \
163-
); \
164-
lse::LegacyScriptEngine::getLogger().error( \
165-
"In Plugin: " + getEngineOwnData()->pluginName \
166-
); \
142+
ll::error_utils::printCurrentException(lse::LegacyScriptEngine::getLogger()); \
143+
lse::LegacyScriptEngine::getLogger().error(std::string("In callback for ") + callback); \
144+
lse::LegacyScriptEngine::getLogger().error("In Plugin: " + getEngineOwnData()->pluginName); \
167145
}
168146
#else
169147

@@ -302,11 +280,7 @@ struct EnumDefineBuilder {
302280
try {
303281
return Number::newNumber(static_cast<int64_t>(val));
304282
} catch (const std::exception&) {
305-
lse::LegacyScriptEngine::getLogger().error(
306-
"Error in get {}.{}",
307-
enumName,
308-
name
309-
);
283+
lse::LegacyScriptEngine::getLogger().error("Error in get {}.{}", enumName, name);
310284
}
311285
return Local<Value>();
312286
});

src/legacy/api/BlockAPI.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -429,8 +429,7 @@ Local<Value> McClass::getBlock(const Arguments& args) {
429429
pos = posObj->toIntVec4();
430430
}
431431
} else {
432-
LOG_WRONG_ARG_TYPE(__FUNCTION__);
433-
return Local<Value>();
432+
THROW_WRONG_ARG_TYPE(__FUNCTION__);
434433
}
435434
} else if (args.size() == 4) {
436435
// Number Pos
@@ -504,8 +503,7 @@ Local<Value> McClass::setBlock(const Arguments& args) {
504503
block = args[1];
505504
}
506505
} else {
507-
LOG_WRONG_ARG_TYPE(__FUNCTION__);
508-
return Local<Value>();
506+
THROW_WRONG_ARG_TYPE(__FUNCTION__);
509507
}
510508
} else if (args.size() == 5 || args.size() == 6) {
511509
// Number Pos
@@ -538,7 +536,9 @@ Local<Value> McClass::setBlock(const Arguments& args) {
538536
}
539537
BlockSource& bs =
540538
ll::service::getLevel()->getDimension(pos.dim).lock()->getBlockSourceFromMainChunkSource();
541-
return Boolean::newBoolean(bs.setBlock(pos.getBlockPos(), bl, 3, nullptr, nullptr, BlockChangeContext(false)));
539+
return Boolean::newBoolean(
540+
bs.setBlock(pos.getBlockPos(), bl, 3, nullptr, nullptr, BlockChangeContext(false))
541+
);
542542
} else if (IsInstanceOf<NbtCompoundClass>(block)) {
543543
// Nbt
544544
auto nbt = NbtCompoundClass::extract(block);
@@ -548,17 +548,20 @@ Local<Value> McClass::setBlock(const Arguments& args) {
548548
}
549549
BlockSource& bs =
550550
ll::service::getLevel()->getDimension(pos.dim).lock()->getBlockSourceFromMainChunkSource();
551-
return Boolean::newBoolean(bs.setBlock(pos.getBlockPos(), bl, 3, nullptr, nullptr, BlockChangeContext(false)));
551+
return Boolean::newBoolean(
552+
bs.setBlock(pos.getBlockPos(), bl, 3, nullptr, nullptr, BlockChangeContext(false))
553+
);
552554
} else {
553555
// other block object
554556
Block const* bl = BlockClass::extract(block);
555557
if (!bl) {
556-
LOG_WRONG_ARG_TYPE(__FUNCTION__);
557-
return Local<Value>();
558+
THROW_WRONG_ARG_TYPE(__FUNCTION__);
558559
}
559560
BlockSource& bs =
560561
ll::service::getLevel()->getDimension(pos.dim).lock()->getBlockSourceFromMainChunkSource();
561-
return Boolean::newBoolean(bs.setBlock(pos.getBlockPos(), *bl, 3, nullptr, nullptr, BlockChangeContext(false)));
562+
return Boolean::newBoolean(
563+
bs.setBlock(pos.getBlockPos(), *bl, 3, nullptr, nullptr, BlockChangeContext(false))
564+
);
562565
}
563566
}
564567
CATCH("Fail in SetBlock!")
@@ -592,8 +595,7 @@ Local<Value> McClass::spawnParticle(const Arguments& args) {
592595
type = args[1];
593596
}
594597
} else {
595-
LOG_WRONG_ARG_TYPE(__FUNCTION__);
596-
return Local<Value>();
598+
THROW_WRONG_ARG_TYPE(__FUNCTION__);
597599
}
598600
} else if (args.size() == 5) {
599601
// Number Pos

src/legacy/api/CommandAPI.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -643,8 +643,7 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {
643643
return Boolean::newBoolean(true);
644644
}
645645
}
646-
LOG_WRONG_ARG_TYPE(__FUNCTION__);
647-
return Local<Value>();
646+
THROW_WRONG_ARG_TYPE(__FUNCTION__);
648647
}
649648
CATCH("Fail in addOverload!")
650649
}

src/legacy/api/ContainerAPI.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ Local<Value> ContainerClass::addItem(const Arguments& args) {
6666
try {
6767
ItemStack* item = ItemClass::extract(args[0]);
6868
if (!item) {
69-
LOG_WRONG_ARG_TYPE(__FUNCTION__);
70-
return Local<Value>();
69+
THROW_WRONG_ARG_TYPE(__FUNCTION__);
7170
}
7271
if (args.size() >= 2) {
7372
CHECK_ARG_TYPE(args[1], ValueKind::kNumber);
@@ -88,8 +87,7 @@ Local<Value> ContainerClass::addItemToFirstEmptySlot(const Arguments& args) {
8887
try {
8988
ItemStack* item = ItemClass::extract(args[0]);
9089
if (!item) {
91-
LOG_WRONG_ARG_TYPE(__FUNCTION__);
92-
return Local<Value>();
90+
THROW_WRONG_ARG_TYPE(__FUNCTION__);
9391
}
9492
return Boolean::newBoolean(container->addItemToFirstEmptySlot(*item));
9593
}
@@ -102,8 +100,7 @@ Local<Value> ContainerClass::hasRoomFor(const Arguments& args) {
102100
try {
103101
ItemStack* item = ItemClass::extract(args[0]);
104102
if (!item) {
105-
LOG_WRONG_ARG_TYPE(__FUNCTION__);
106-
return Local<Value>();
103+
THROW_WRONG_ARG_TYPE(__FUNCTION__);
107104
}
108105
return Boolean::newBoolean(container->hasRoomForItem(*item));
109106
}
@@ -144,8 +141,7 @@ Local<Value> ContainerClass::setItem(const Arguments& args) {
144141
try {
145142
ItemStack* item = ItemClass::extract(args[1]);
146143
if (!item) {
147-
LOG_WRONG_ARG_TYPE(__FUNCTION__);
148-
return Local<Value>();
144+
THROW_WRONG_ARG_TYPE(__FUNCTION__);
149145
}
150146

151147
container->setItem(args[0].asNumber().toInt32(), *item);

0 commit comments

Comments
 (0)