MCPcopy Create free account
hub / github.com/SerenityOS/jakt / parse_lambda

Method parse_lambda

bootstrap/stage0/parser.cpp:8424–8463  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8422}
8423
8424NonnullRefPtr<typename Jakt::parser::ParsedExpression> Jakt::parser::Parser::parse_lambda() {
8425{
8426Jakt::utility::Span const start = this->current().span();
8427this->index++;
8428JaktInternal::DynamicArray<Jakt::parser::ParsedCapture> const captures = this->parse_captures();
8429Jakt::parser::ParsedFunctionParameters const fn_parameters = this->parse_function_parameters(false);
8430bool const can_throw = this->current().__jakt_init_index() == 102 /* Throws */;
8431if (can_throw){
8432this->index++;
8433}
8434if (fn_parameters.has_varargs){
8435this->error(ByteString::from_utf8_without_validation("Anonymous functions cannot have varargs"sv),this->current().span());
8436}
8437NonnullRefPtr<typename Jakt::parser::ParsedType> return_type = [&]() -> NonnullRefPtr<typename Jakt::parser::ParsedType> { auto&& __jakt_match_variant = this->current();
8438switch(__jakt_match_variant.__jakt_init_index()) {
8439case 58 /* Arrow */:{
8440this->index++;
8441return this->parse_typename();
8442}
8443VERIFY_NOT_REACHED();
8444default:return Jakt::parser::ParsedType::Empty(JaktInternal::OptionalNone());}/*switch end*/
8445
8446}();
8447bool is_fat_arrow = false;
8448Jakt::parser::ParsedBlock const block = [&]() -> Jakt::parser::ParsedBlock { auto&& __jakt_match_variant = this->current();
8449switch(__jakt_match_variant.__jakt_init_index()) {
8450case 57 /* FatArrow */:{
8451is_fat_arrow = true;
8452this->index++;
8453NonnullRefPtr<typename Jakt::parser::ParsedExpression> const expr = this->parse_expression(true,false);
8454Jakt::utility::Span const span = expr->span();
8455return Jakt::parser::ParsedBlock(DynamicArray<NonnullRefPtr<typename Jakt::parser::ParsedStatement>>::create_with({Jakt::parser::ParsedStatement::Return(expr,span)}));
8456}
8457VERIFY_NOT_REACHED();
8458default:return this->parse_block();}/*switch end*/
8459
8460}();
8461return Jakt::parser::ParsedExpression::Function(captures,fn_parameters.parameters,can_throw,is_fat_arrow,return_type,block,Jakt::parser::merge_spans(start,this->current().span()));
8462}
8463}
8464
8465NonnullRefPtr<typename Jakt::parser::ParsedExpression> Jakt::parser::Parser::parse_asterisk() {
8466{

Callers 1

parse_operand_baseMethod · 0.95

Calls 14

currentMethod · 0.95
parse_capturesMethod · 0.95
errorMethod · 0.95
parse_typenameMethod · 0.95
parse_expressionMethod · 0.95
parse_blockMethod · 0.95
EmptyClass · 0.85
OptionalNoneClass · 0.85
ParsedBlockClass · 0.85
merge_spansFunction · 0.85
FunctionClass · 0.50

Tested by

no test coverage detected