2/n Code clarity: Use enum to clarify the values parsed by JsErrorHandler

Summary:
Changelog: [Internal] Code clarity: Use enum to clarify the values parsed by JsErrorHandler

Create a enum `JSErrorHandlerKey` to define the keys for the values that goes into each stack frame.

Next up -- using this in the Bridge!

Reviewed By: sammy-SC

Differential Revision: D40326127

fbshipit-source-id: e416814fbcaa922afa92d9baf79eaa898ff979f0
This commit is contained in:
Paige Sun 2022-10-14 10:48:47 -07:00 коммит произвёл Facebook GitHub Bot
Родитель 4631cf933e
Коммит 20c9654ca7
2 изменённых файлов: 28 добавлений и 24 удалений

Просмотреть файл

@ -15,6 +15,8 @@
namespace facebook {
namespace react {
using facebook::react::JSErrorHandlerKey;
static MapBuffer
parseErrorStack(const jsi::JSError &error, bool isFatal, bool isHermes) {
/**
@ -53,37 +55,37 @@ parseErrorStack(const jsi::JSError &error, bool isFatal, bool isHermes) {
if (std::regex_search(line, searchResults, REGEX_HERMES)) {
std::string str2 = std::string(searchResults[2]);
if (str2.compare("native")) {
frame.putString(0, std::string(searchResults[4]));
frame.putString(1, std::string(searchResults[1]));
frame.putInt(2, std::stoi(searchResults[5]));
frame.putInt(3, std::stoi(searchResults[6]));
frame.putString(kFrameFileName, std::string(searchResults[4]));
frame.putString(kFrameMethodName, std::string(searchResults[1]));
frame.putInt(kFrameLineNumber, std::stoi(searchResults[5]));
frame.putInt(kFrameColumnNumber, std::stoi(searchResults[6]));
frames.push_back(frame.build());
}
}
} else {
if (std::regex_search(line, searchResults, REGEX_GECKO)) {
frame.putString(0, std::string(searchResults[3]));
frame.putString(1, std::string(searchResults[1]));
frame.putInt(2, std::stoi(searchResults[4]));
frame.putInt(3, std::stoi(searchResults[5]));
frame.putString(kFrameFileName, std::string(searchResults[3]));
frame.putString(kFrameMethodName, std::string(searchResults[1]));
frame.putInt(kFrameLineNumber, std::stoi(searchResults[4]));
frame.putInt(kFrameColumnNumber, std::stoi(searchResults[5]));
} else if (
std::regex_search(line, searchResults, REGEX_CHROME) ||
std::regex_search(line, searchResults, REGEX_NODE)) {
frame.putString(0, std::string(searchResults[2]));
frame.putString(1, std::string(searchResults[1]));
frame.putInt(2, std::stoi(searchResults[3]));
frame.putInt(3, std::stoi(searchResults[4]));
frame.putString(kFrameFileName, std::string(searchResults[2]));
frame.putString(kFrameMethodName, std::string(searchResults[1]));
frame.putInt(kFrameLineNumber, std::stoi(searchResults[3]));
frame.putInt(kFrameColumnNumber, std::stoi(searchResults[4]));
} else {
continue;
}
frames.push_back(frame.build());
}
}
errorObj.putMapBufferList(4, std::move(frames));
errorObj.putString(5, error.getMessage());
errorObj.putMapBufferList(kAllStackFrames, std::move(frames));
errorObj.putString(kErrorMessage, error.getMessage());
// TODO: If needed, can increment exceptionId by 1 each time
errorObj.putInt(6, 0);
errorObj.putBool(7, isFatal);
errorObj.putInt(kExceptionId, 0);
errorObj.putBool(kIsFatal, isFatal);
return errorObj.build();
}

Просмотреть файл

@ -11,14 +11,16 @@
namespace facebook {
namespace react {
const int FILE_KEY_OF_JS_ERROR = 0;
const int METHOD_NAME_KEY_OF_JS_ERROR = 1;
const int LINE_NUMBER_KEY_OF_JS_ERROR = 2;
const int COLUMN_KEY_OF_JS_ERROR = 3;
const int FRAMES_KEY_OF_JS_ERROR = 4;
const int MESSAGE_KEY_OF_JS_ERROR = 5;
const int ID_KEY_OF_JS_ERROR = 6;
const int IS_FATAL_KEY_OF_JS_ERROR = 7;
enum JSErrorHandlerKey : uint16_t {
kFrameFileName = 0,
kFrameMethodName = 1,
kFrameLineNumber = 2,
kFrameColumnNumber = 3,
kAllStackFrames = 4,
kErrorMessage = 5,
kExceptionId = 6,
kIsFatal = 7
};
class JsErrorHandler {
public: