console.log のように機能する C++ 関数を実装したいと考えています。C++ での JavaScript 呼び出し元のソース行の位置を知る必要があります。MDN JSAPI/JS Debugger API ドキュメントを検索しましたが、結果がありません。
JavaScript での概念の使用法。
console.log("blahblahblah");
そして、C++ で期待されるロジック。
JSBool consoleLog(JSContext *cx, unsigned argc, jsval *vp) {
// expect to get caller info including filename, lineno.
// write "blahblahblah" and caller info in my log system.
return JS_TRUE;
}
==============
アップデート
私はついに filename と lineno を取得する方法を見つけました。エラー処理コードは省略されています。
#include "jsdbgapi.h"
JSBool consoleLog(JSContext *cx, unsigned argc, jsval *vp) {
JSScript *script;
unsigned int lineno;
JS_DescribeScriptedCaller(cx, &script, &lineno);
const char *filename = JS_GetScriptFilename(cx, script);
// use filename and lineno to write log...
return JS_TRUE;
}