javascript — Chakracore — я делаю что-то не так или я нашел ошибку?

Я использую Microsoft Chakracore из C ++, и я написал базовый оценщик, который я могу неоднократно вызывать из цикла read-eval-print следующим образом:

void readEvalPrint(const char *prompt, JsSourceContext sourceContext) {
JsValueRef result;
JsValueRef scriptSource;
JsValueRef fileName;
JsErrorCode status;
JsValueRef strResult;
std::string script;
std::cout << prompt;
std::cout.flush();
std::getline(std::cin, script);
JsCreateString("", 0, &fileName);
JsCreateExternalArrayBuffer(const_cast<char*> (script.c_str()), script.length(), nullptr, nullptr, &scriptSource);
status = JsRun(scriptSource, sourceContext, fileName, JsParseScriptAttributeNone, &result);
if (status != JsNoError) {
JsValueRef exception;
// TODO: print stack trace
JsGetAndClearException(&exception);
std::cout << "Error: Could not evaluate expression" << std::endl;
return;
}
status = JsConvertValueToString(result, &strResult);
if (status != JsNoError) {
std::cout << "Could not convert expression to displayable form" << std::endl;
return;
}
size_t written;
size_t bufferSize;
JsCopyString(strResult, nullptr, std::numeric_limits<int>::max(), &bufferSize);
char buffer[bufferSize+1];
JsCopyString(strResult, buffer, bufferSize, &written);
buffer[bufferSize] = 0;
std::cout << buffer << std::endl;
}

Похоже, что это работает в большинстве случаев, однако, когда я ввожу объявление функции javascript, хотя я могу вызвать функцию, и она даст правильный результат, если я просто попытаюсь изучить функцию по имени, чтобы увидеть ее тело, как я ожидал с любой функцией javascript, вызвав метод toString (), результат будет явно мусором. Если я проверю другие функции, такие как встроенные функции, я увижу ожидаемый результат (например, ‘function function-name () {[native code]}’, и если я создам анонимную функцию, например, var a = function foo () …. и попробуйте отобразить значение для a, я вижу определение анонимной функции полностью. Однако я не могу понять, как отобразить именованные функции, которые я определил в предыдущей итерации JsRun (). I Я либо делаю что-то не так, либо неправильно понимаю ожидаемое поведение, либо я обнаружил ошибку. Однако я не достаточно свободно использую Jsrt API, чтобы быть уверенным в том, что это за ошибка.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]