Joos1W Compiler Framework
All Classes Functions Typedefs Pages
Joos1WLexer Class Reference
Inheritance diagram for Joos1WLexer:

Public Member Functions

int bison_lex (YYSTYPE *lvalp, YYLTYPE *llocp)
 
template<typename... Args>
Nodemake_node (YYLTYPE &loc, Node::Type type, Args &&... args)
 Wrapper around the node constructor. More...
 
Nodemake_leaf (YYLTYPE &loc, Node::Type type)
 Wrapper around constructing a dataless leaf node. More...
 
Nodemake_poison (YYLTYPE &loc)
 See make_node.
 
Nodemake_operator (YYLTYPE &loc, Operator::Type type)
 See make_node.
 
Nodemake_literal (YYLTYPE &loc, Literal::Type type, char const *value)
 See make_node.
 
Nodemake_identifier (YYLTYPE &loc, char const *name)
 See make_node.
 
Nodemake_modifier (YYLTYPE &loc, Modifier::Type type)
 See make_node.
 
Nodemake_basic_type (YYLTYPE &loc, BasicType::Type type)
 See make_node.
 
void report_parser_error (YYLTYPE &loc, char const *msg, std::initializer_list< YYLTYPE > ranges={})
 Report a parser or lexer error to the diagnostic engine. More...
 

Friends

class Joos1WParser
 

Detailed Description

Definition at line 20 of file joos1w_lexer_internal.h.

Member Function Documentation

◆ make_leaf()

Node* Joos1WLexer::make_leaf ( YYLTYPE &  loc,
Node::Type  type 
)
inline

Wrapper around constructing a dataless leaf node.

Parameters
typeThe type of the leaf node
Returns
The newly created leaf node

Definition at line 52 of file joos1w_lexer_internal.h.

52  {
53  void* bytes = alloc.allocate_bytes(sizeof(Node));
54  return new(bytes) Node(make_range(loc), type);
55  }
The basic type-tagged node in the parse tree.
Definition: ParseTree.h:29

References parsetree::Node::Node().

◆ make_node()

template<typename... Args>
Node* Joos1WLexer::make_node ( YYLTYPE &  loc,
Node::Type  type,
Args &&...  args 
)
inline

Wrapper around the node constructor.

Parameters
...argsThe arguments to the node constructor
Returns
The newly created node

Definition at line 44 of file joos1w_lexer_internal.h.

44  {
45  void* bytes = alloc.allocate_bytes(sizeof(Node));
46  return new(bytes)
47  Node(make_range(loc), alloc, type, std::forward<Args>(args)...);
48  }

◆ report_parser_error()

void Joos1WLexer::report_parser_error ( YYLTYPE &  loc,
char const *  msg,
std::initializer_list< YYLTYPE >  ranges = {} 
)
inline

Report a parser or lexer error to the diagnostic engine.

Parameters
locThe location of the error
msgThe message to report
rangesList of additional ranges to report

Definition at line 73 of file joos1w_lexer_internal.h.

74  {}) {
75  if(!diag) return;
76  auto os = diag->ReportError(make_range(loc));
77  // Copy msg to the heap
78  size_t length = std::min(1024UL, strlen(msg) + 1);
79  char* ptr = reinterpret_cast<char*>(alloc.allocate(length));
80  strncpy(ptr, msg, length);
81  messages.push_back(ptr);
82  os << std::string_view{ptr};
83  for(auto const& range : ranges) os << make_range(range);
84  }

The documentation for this class was generated from the following files: