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 ответов

Другие вопросы по тегам