summaryrefslogtreecommitdiff
path: root/deps/v8/src/torque/torque.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/torque/torque.cc')
-rw-r--r--deps/v8/src/torque/torque.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/deps/v8/src/torque/torque.cc b/deps/v8/src/torque/torque.cc
index f1027df0c7..c771623738 100644
--- a/deps/v8/src/torque/torque.cc
+++ b/deps/v8/src/torque/torque.cc
@@ -38,6 +38,19 @@ class FailedParseErrorStrategy : public antlr4::DefaultErrorStrategy {
bool failed_;
};
+class TorqueErrorListener : public antlr4::BaseErrorListener {
+ public:
+ TorqueErrorListener() : BaseErrorListener() {}
+
+ void syntaxError(antlr4::Recognizer* recognizer,
+ antlr4::Token* /*offendingSymbol*/, size_t line,
+ size_t charPositionInLine, const std::string& msg,
+ std::exception_ptr /*e*/) {
+ std::cerr << recognizer->getInputStream()->getSourceName() << ": " << line
+ << ":" << charPositionInLine << " " << msg << "\n";
+ }
+};
+
int WrappedMain(int argc, const char** argv) {
std::string output_directory;
std::vector<SourceFileContext> file_contexts;
@@ -45,6 +58,7 @@ int WrappedMain(int argc, const char** argv) {
SourceFileContext context;
size_t lexer_errors = 0;
auto error_strategy = std::make_shared<FailedParseErrorStrategy>();
+ TorqueErrorListener error_listener;
bool verbose = false;
SourceFileMap::Scope scope;
for (int i = 1; i < argc; ++i) {
@@ -66,6 +80,8 @@ int WrappedMain(int argc, const char** argv) {
new antlr4::ANTLRFileStream(context.name.c_str()));
context.lexer =
std::unique_ptr<TorqueLexer>(new TorqueLexer(context.stream.get()));
+ context.lexer->removeErrorListeners();
+ context.lexer->addErrorListener(&error_listener);
context.tokens = std::unique_ptr<antlr4::CommonTokenStream>(
new antlr4::CommonTokenStream(context.lexer.get()));
context.tokens->fill();
@@ -73,6 +89,8 @@ int WrappedMain(int argc, const char** argv) {
context.parser =
std::unique_ptr<TorqueParser>(new TorqueParser(context.tokens.get()));
context.parser->setErrorHandler(error_strategy);
+ context.parser->removeErrorListeners();
+ context.parser->addErrorListener(&error_listener);
context.file = context.parser->file();
ast_generator.visitSourceFile(&context);
}
@@ -83,6 +101,7 @@ int WrappedMain(int argc, const char** argv) {
GlobalContext global_context(std::move(ast_generator).GetAst());
if (verbose) global_context.SetVerbose();
+ TypeOracle::Scope type_oracle(global_context.declarations());
if (output_directory.length() != 0) {
{
@@ -96,9 +115,14 @@ int WrappedMain(int argc, const char** argv) {
}
ImplementationVisitor visitor(global_context);
+ for (auto& module : global_context.GetModules()) {
+ visitor.BeginModuleFile(module.second.get());
+ }
+
visitor.Visit(global_context.ast());
for (auto& module : global_context.GetModules()) {
+ visitor.EndModuleFile(module.second.get());
visitor.GenerateImplementation(output_directory, module.second.get());
}
}