318 lines
9.9 KiB
Rust
318 lines
9.9 KiB
Rust
//@ check-pass
|
|
#![allow(dead_code)]
|
|
// Regression test for #29740. Inefficient MIR matching algorithms
|
|
// generated way too much code for this sort of case, leading to OOM.
|
|
#![allow(non_snake_case)]
|
|
|
|
pub mod KeyboardEventConstants {
|
|
pub const DOM_KEY_LOCATION_STANDARD: u32 = 0;
|
|
pub const DOM_KEY_LOCATION_LEFT: u32 = 1;
|
|
pub const DOM_KEY_LOCATION_RIGHT: u32 = 2;
|
|
pub const DOM_KEY_LOCATION_NUMPAD: u32 = 3;
|
|
} // mod KeyboardEventConstants
|
|
|
|
pub enum Key {
|
|
Space,
|
|
Apostrophe,
|
|
Comma,
|
|
Minus,
|
|
Period,
|
|
Slash,
|
|
Num0,
|
|
Num1,
|
|
Num2,
|
|
Num3,
|
|
Num4,
|
|
Num5,
|
|
Num6,
|
|
Num7,
|
|
Num8,
|
|
Num9,
|
|
Semicolon,
|
|
Equal,
|
|
A,
|
|
B,
|
|
C,
|
|
D,
|
|
E,
|
|
F,
|
|
G,
|
|
H,
|
|
I,
|
|
J,
|
|
K,
|
|
L,
|
|
M,
|
|
N,
|
|
O,
|
|
P,
|
|
Q,
|
|
R,
|
|
S,
|
|
T,
|
|
U,
|
|
V,
|
|
W,
|
|
X,
|
|
Y,
|
|
Z,
|
|
LeftBracket,
|
|
Backslash,
|
|
RightBracket,
|
|
GraveAccent,
|
|
World1,
|
|
World2,
|
|
|
|
Escape,
|
|
Enter,
|
|
Tab,
|
|
Backspace,
|
|
Insert,
|
|
Delete,
|
|
Right,
|
|
Left,
|
|
Down,
|
|
Up,
|
|
PageUp,
|
|
PageDown,
|
|
Home,
|
|
End,
|
|
CapsLock,
|
|
ScrollLock,
|
|
NumLock,
|
|
PrintScreen,
|
|
Pause,
|
|
F1,
|
|
F2,
|
|
F3,
|
|
F4,
|
|
F5,
|
|
F6,
|
|
F7,
|
|
F8,
|
|
F9,
|
|
F10,
|
|
F11,
|
|
F12,
|
|
F13,
|
|
F14,
|
|
F15,
|
|
F16,
|
|
F17,
|
|
F18,
|
|
F19,
|
|
F20,
|
|
F21,
|
|
F22,
|
|
F23,
|
|
F24,
|
|
F25,
|
|
Kp0,
|
|
Kp1,
|
|
Kp2,
|
|
Kp3,
|
|
Kp4,
|
|
Kp5,
|
|
Kp6,
|
|
Kp7,
|
|
Kp8,
|
|
Kp9,
|
|
KpDecimal,
|
|
KpDivide,
|
|
KpMultiply,
|
|
KpSubtract,
|
|
KpAdd,
|
|
KpEnter,
|
|
KpEqual,
|
|
LeftShift,
|
|
LeftControl,
|
|
LeftAlt,
|
|
LeftSuper,
|
|
RightShift,
|
|
RightControl,
|
|
RightAlt,
|
|
RightSuper,
|
|
Menu,
|
|
}
|
|
|
|
fn key_from_string(key_string: &str, location: u32) -> Option<Key> {
|
|
match key_string {
|
|
" " => Some(Key::Space),
|
|
"\"" => Some(Key::Apostrophe),
|
|
"'" => Some(Key::Apostrophe),
|
|
"<" => Some(Key::Comma),
|
|
"," => Some(Key::Comma),
|
|
"_" => Some(Key::Minus),
|
|
"-" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Minus),
|
|
">" => Some(Key::Period),
|
|
"." if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Period),
|
|
"?" => Some(Key::Slash),
|
|
"/" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Slash),
|
|
"~" => Some(Key::GraveAccent),
|
|
"`" => Some(Key::GraveAccent),
|
|
")" => Some(Key::Num0),
|
|
"0" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num0),
|
|
"!" => Some(Key::Num1),
|
|
"1" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num1),
|
|
"@" => Some(Key::Num2),
|
|
"2" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num2),
|
|
"#" => Some(Key::Num3),
|
|
"3" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num3),
|
|
"$" => Some(Key::Num4),
|
|
"4" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num4),
|
|
"%" => Some(Key::Num5),
|
|
"5" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num5),
|
|
"^" => Some(Key::Num6),
|
|
"6" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num6),
|
|
"&" => Some(Key::Num7),
|
|
"7" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num7),
|
|
"*" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num8),
|
|
"8" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num8),
|
|
"(" => Some(Key::Num9),
|
|
"9" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num9),
|
|
":" => Some(Key::Semicolon),
|
|
";" => Some(Key::Semicolon),
|
|
"+" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Equal),
|
|
"=" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Equal),
|
|
"A" => Some(Key::A),
|
|
"a" => Some(Key::A),
|
|
"B" => Some(Key::B),
|
|
"b" => Some(Key::B),
|
|
"C" => Some(Key::C),
|
|
"c" => Some(Key::C),
|
|
"D" => Some(Key::D),
|
|
"d" => Some(Key::D),
|
|
"E" => Some(Key::E),
|
|
"e" => Some(Key::E),
|
|
"F" => Some(Key::F),
|
|
"f" => Some(Key::F),
|
|
"G" => Some(Key::G),
|
|
"g" => Some(Key::G),
|
|
"H" => Some(Key::H),
|
|
"h" => Some(Key::H),
|
|
"I" => Some(Key::I),
|
|
"i" => Some(Key::I),
|
|
"J" => Some(Key::J),
|
|
"j" => Some(Key::J),
|
|
"K" => Some(Key::K),
|
|
"k" => Some(Key::K),
|
|
"L" => Some(Key::L),
|
|
"l" => Some(Key::L),
|
|
"M" => Some(Key::M),
|
|
"m" => Some(Key::M),
|
|
"N" => Some(Key::N),
|
|
"n" => Some(Key::N),
|
|
"O" => Some(Key::O),
|
|
"o" => Some(Key::O),
|
|
"P" => Some(Key::P),
|
|
"p" => Some(Key::P),
|
|
"Q" => Some(Key::Q),
|
|
"q" => Some(Key::Q),
|
|
"R" => Some(Key::R),
|
|
"r" => Some(Key::R),
|
|
"S" => Some(Key::S),
|
|
"s" => Some(Key::S),
|
|
"T" => Some(Key::T),
|
|
"t" => Some(Key::T),
|
|
"U" => Some(Key::U),
|
|
"u" => Some(Key::U),
|
|
"V" => Some(Key::V),
|
|
"v" => Some(Key::V),
|
|
"W" => Some(Key::W),
|
|
"w" => Some(Key::W),
|
|
"X" => Some(Key::X),
|
|
"x" => Some(Key::X),
|
|
"Y" => Some(Key::Y),
|
|
"y" => Some(Key::Y),
|
|
"Z" => Some(Key::Z),
|
|
"z" => Some(Key::Z),
|
|
"{" => Some(Key::LeftBracket),
|
|
"[" => Some(Key::LeftBracket),
|
|
"|" => Some(Key::Backslash),
|
|
"\\" => Some(Key::Backslash),
|
|
"}" => Some(Key::RightBracket),
|
|
"]" => Some(Key::RightBracket),
|
|
"Escape" => Some(Key::Escape),
|
|
"Enter" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD
|
|
=> Some(Key::Enter),
|
|
"Tab" => Some(Key::Tab),
|
|
"Backspace" => Some(Key::Backspace),
|
|
"Insert" => Some(Key::Insert),
|
|
"Delete" => Some(Key::Delete),
|
|
"ArrowRight" => Some(Key::Right),
|
|
"ArrowLeft" => Some(Key::Left),
|
|
"ArrowDown" => Some(Key::Down),
|
|
"ArrowUp" => Some(Key::Up),
|
|
"PageUp" => Some(Key::PageUp),
|
|
"PageDown" => Some(Key::PageDown),
|
|
"Home" => Some(Key::Home),
|
|
"End" => Some(Key::End),
|
|
"CapsLock" => Some(Key::CapsLock),
|
|
"ScrollLock" => Some(Key::ScrollLock),
|
|
"NumLock" => Some(Key::NumLock),
|
|
"PrintScreen" => Some(Key::PrintScreen),
|
|
"Pause" => Some(Key::Pause),
|
|
"F1" => Some(Key::F1),
|
|
"F2" => Some(Key::F2),
|
|
"F3" => Some(Key::F3),
|
|
"F4" => Some(Key::F4),
|
|
"F5" => Some(Key::F5),
|
|
"F6" => Some(Key::F6),
|
|
"F7" => Some(Key::F7),
|
|
"F8" => Some(Key::F8),
|
|
"F9" => Some(Key::F9),
|
|
"F10" => Some(Key::F10),
|
|
"F11" => Some(Key::F11),
|
|
"F12" => Some(Key::F12),
|
|
"F13" => Some(Key::F13),
|
|
"F14" => Some(Key::F14),
|
|
"F15" => Some(Key::F15),
|
|
"F16" => Some(Key::F16),
|
|
"F17" => Some(Key::F17),
|
|
"F18" => Some(Key::F18),
|
|
"F19" => Some(Key::F19),
|
|
"F20" => Some(Key::F20),
|
|
"F21" => Some(Key::F21),
|
|
"F22" => Some(Key::F22),
|
|
"F23" => Some(Key::F23),
|
|
"F24" => Some(Key::F24),
|
|
"F25" => Some(Key::F25),
|
|
"0" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp0),
|
|
"1" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp1),
|
|
"2" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp2),
|
|
"3" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp3),
|
|
"4" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp4),
|
|
"5" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp5),
|
|
"6" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp6),
|
|
"7" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp7),
|
|
"8" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp8),
|
|
"9" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp9),
|
|
"." if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpDecimal),
|
|
"/" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpDivide),
|
|
"*" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpMultiply),
|
|
"-" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpSubtract),
|
|
"+" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpAdd),
|
|
"Enter" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD
|
|
=> Some(Key::KpEnter),
|
|
"=" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpEqual),
|
|
"Shift" if location == KeyboardEventConstants::DOM_KEY_LOCATION_LEFT
|
|
=> Some(Key::LeftShift),
|
|
"Control" if location == KeyboardEventConstants::DOM_KEY_LOCATION_LEFT
|
|
=> Some(Key::LeftControl),
|
|
"Alt" if location == KeyboardEventConstants::DOM_KEY_LOCATION_LEFT => Some(Key::LeftAlt),
|
|
"Super" if location == KeyboardEventConstants::DOM_KEY_LOCATION_LEFT
|
|
=> Some(Key::LeftSuper),
|
|
"Shift" if location == KeyboardEventConstants::DOM_KEY_LOCATION_RIGHT
|
|
=> Some(Key::RightShift),
|
|
"Control" if location == KeyboardEventConstants::DOM_KEY_LOCATION_RIGHT
|
|
=> Some(Key::RightControl),
|
|
"Alt" if location == KeyboardEventConstants::DOM_KEY_LOCATION_RIGHT => Some(Key::RightAlt),
|
|
"Super" if location == KeyboardEventConstants::DOM_KEY_LOCATION_RIGHT
|
|
=> Some(Key::RightSuper),
|
|
"ContextMenu" => Some(Key::Menu),
|
|
_ => None
|
|
}
|
|
}
|
|
|
|
fn main() { }
|