1 #include "parsetree/ParseTree.h"
2 #include "parsetree/ParseTreeVisitor.h"
3 #include <utils/Error.h>
8 using pty =
Node::Type;
11 ast::UnresolvedType* ptv::visitReferenceType(
Node* node,
12 ast::UnresolvedType* ast_node) {
13 check_node_type(node, pty::QualifiedIdentifier);
14 check_num_children(node, 1, 2);
15 if(ast_node ==
nullptr) {
22 ast_node = visitReferenceType(node
->child(0
), ast_node);
29 std::string_view ptv::visitIdentifier(
Node* node) {
30 check_node_type(node, pty::Identifier);
38 check_node_type(node, pty::ModifierList);
39 check_num_children(node, 1, 2);
44 modifiers = visitModifierList(node
->child(0
), modifiers);
52 check_node_type(node, pty::Modifier);
56 ast::
Type* ptv::visitType(
Node* node) {
57 check_num_children(node, 1, 1);
60 ast::
Type* elemTy =
nullptr;
62 elemTy = sem.BuildBuiltInType(cast<
BasicType*>(innerTy)->get_type(),
65 elemTy = visitReferenceType(innerTy);
69 "Expected a BasicType or QualifiedIdentifier node but got " +
75 throw utils::FatalError(
"Expected a Type or ArrayType node");