// Parse a return type. This specifies the result type of a // function declarator. // // return-type ::= '->' expr Tree* parse_return_type(Parser& p) { if (parse::expect(p, arrow_tok)) if (Tree* t = parse_type_lit(p)) return t; return nullptr; }
// Parse a literal expression. // // literal-expr ::= unit-literal // | boolean-literal // | integer-literal // | string-literal // | type-literal Tree* parse_literal_expr(Parser& p) { if (Tree* t = parse_unit_lit(p)) return t; if (Tree* t = parse_boolean_lit(p)) return t; if (Tree* t = parse_integer_lit(p)) return t; if (Tree* t = parse_string_lit(p)) return t; if (Tree* t = parse_type_lit(p)) return t; return nullptr; }