Das ist ziemlich alt, aber vielleicht hilft die Antwort jemandem dabei zu stolpern. Die Antwort ist ja, vorausgesetzt, Sie sind bereit, V8 zu ändern und Ihre eigene Version davon zu kompilieren.
Wenn ja, dann finden Sie in compiler.cc eine Ort, an dem MakeCode in MakeFunctionInfo aufgerufen wird, wodurch der AST, der im übergebenen CompilationInfo-Objekt gespeichert ist, in nativen Code umgewandelt wird. Sie müssen dann eine Klasse schreiben, die von AstVisitor erbt Sie können den AST überprüfen, indem Sie die folgenden Zeilen vor dem Aufruf von MakeCode einfügen:
%Vor%Da V8 Funktionen just-in-time kompiliert, wenn sie tatsächlich aufgerufen werden, gibt es einen anderen Punkt in CompileLazy , wo Sie dasselbe tun müssten, um ihre ASTs während der Ausführung von aufrufenden Skripten zu erhalten / p>
Wegen der Lazy Compilation-Funktion wird es Ihnen wahrscheinlich nicht möglich sein, eine statische Analyse durchzuführen, da die Ausführung bereits im Gange ist, bevor Sie Zugriff auf die ASTs für lazy compiled stuff haben. Aber so erhalten Sie die ASTs.
Nun, ich weiß nicht, was Sie erreichen wollen, aber es klingt so, als wollten Sie den AST innerhalb Ihres C ++ - Codes ändern (oder vielleicht auch Wrapper-Klassen für den JavaScript-Kontext schreiben?).
Ich schlage vor, einen Blick auf die Header-Datei zu werfen, die ziemlich genau erklärt, was dort für den AST von V8 verwendet wird:
~ Prost
Tags und Links javascript v8 abstract-syntax-tree interpreter embedded-v8