// Parse a primary expression. // // primary-expr -> literal | identifier | '(' expr ')' // // literal -> integer-literal // | boolean-literal // | character-literal // | string-literal Expr* Parser::primary_expr() { // identifier if (Token tok = match_if(identifier_tok)) return on_id(tok); // boolean-literal if (Token tok = match_if(boolean_tok)) return on_bool(tok); // integer-literal if (Token tok = match_if(integer_tok)) return on_int(tok); // character-literal if (Token tok = match_if(character_tok)) return on_char(tok); // string-literal if (Token tok = match_if(string_tok)) return on_str(tok); // paren-expr if (match_if(lparen_tok)) { Expr* e = expr(); match(rparen_tok); return e; } // FIXME: Is this definitely an error? Or can we // actually return nullptr and continue? error("expected primary expression"); }
static bool on_buffer_event(event* event) { if (event-> flags & BUFFER_HOLDING || event-> flags & BUFFER_FULL) { struct buffer* buffer = (struct buffer*) event->descriptor.address; while (buffer->element_count > 0) { char c = buffer_shift_uint8(buffer); if (c != 0) { if (c == '\n') { on_char_return(); } else if (c == '\b') { on_char_backspace(); } else { on_char(c); } } } } return true; }
void kWindow::OnChar(UINT ch,UINT rep,UINT fl) { on_char(ch,rep,fl); CWnd::OnChar(ch,rep,fl); }