// NOTE ADD LAMDBA PARSER HERE Expr* Parser::lambda_expr() { require(bslash_tok); //Match the identifier inserted earlier Token n = match(identifier_tok); // parameter-clause Decl_seq parms; match(lparen_tok); while (lookahead() != rparen_tok) { Decl* p = parameter_decl(); parms.push_back(p); if (match_if(comma_tok)) { continue; } else break; } match(rparen_tok); // return-type match(arrow_tok); Type const* t = type(); // must be function-definition Stmt* s = block_stmt(); //return a lambda expression return on_lambda(n, parms, t, s); }
LRESULT core_win32::window_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, bool& is_handled) { switch (message) { case WM_CREATE: on_create(); break; case WM_LAMBDA: on_lambda(reinterpret_cast<ui_task_type*>(lparam)); break; case WM_SIZE: on_size(LOWORD(lparam), HIWORD(lparam), static_cast<int>(wparam)); break; case WM_SETFOCUS: case WM_KILLFOCUS: on_focus_changed(message == WM_SETFOCUS); break; case WM_ENTERSIZEMOVE: case WM_EXITSIZEMOVE: on_enter_exit_sizemove(message == WM_ENTERSIZEMOVE); break; case WM_GETMINMAXINFO: on_get_minmax_info(reinterpret_cast<MINMAXINFO*>(lparam)); break; case WM_DESTROY: on_destroy(); break; default: is_handled = false; break; } return 0; }