1 #include "parsetree/ParseTreeVisitor.h"
4 #include "parsetree/ParseTree.h"
5 #include <utils/Error.h>
9 using pty =
Node::Type;
12 ast::CompilationUnit* ptv::visitCompilationUnit(
Node* node) {
14 check_node_type(node, pty::CompilationUnit);
15 check_num_children(node, 3, 3);
17 auto package = visitPackageDeclaration(node);
19 ast::pmr_vector<ast::ImportDeclaration> imports;
20 visitListPattern<pty::ImportDeclarationList, ast::ImportDeclaration,
true>(
21 node->child(1), imports);
25 ast::ClassDecl* class_body = visitClassDeclaration(body);
26 return sem.BuildCompilationUnit(
27 package, imports, class_body->location(), class_body);
29 ast::InterfaceDecl* intf_body = visitInterfaceDeclaration(body);
30 return sem.BuildCompilationUnit(
31 package, imports, intf_body->location(), intf_body);
40 check_node_type(node, pty::PackageDeclaration);
41 check_num_children(node, 1, 1);
42 return visitReferenceType(node
->child(0
));
47 check_num_children(node, 1, 1);
48 auto id = visitReferenceType(node
->child(0
));
54 throw utils::FatalError(
"Import called on a node that is not a Import");