switch (c[0]) { case 'c': if (c[1] == 'h' && c[2] == 'a' && c[3] == 'r' && c[4] == *name) { /* char */ tflags |= T_CHAR; goto success; } goto unknown; case 'd': if (c[1] == 'o' && c[2] == 'u' && c[3] == 'b' && c[4] == 'l' && c[5] == 'e' && c[6] == *name) { /* double */ tflags |= T_DOUBLE; goto success; } goto unknown; case 'f': if (c[1] == 'l' && c[2] == 'o' && c[3] == 'a' && c[4] == 't' && c[5] == *name) { /* float */ tflags |= T_FLOAT; goto success; } goto unknown; case 'i': if (c[1] == 'n' && c[2] == 't' && c[3] == *name) { /* int */ tflags |= T_INT; goto success; } goto unknown; case 'l': if (c[1] == 'o' && c[2] == 'n' && c[3] == 'g' && c[4] == *name) { /* long */ tflags |= tflags & T_LONG ? T_LONGLONG : T_LONG; goto success; } goto unknown; case 's': switch (c[1]) { case 'h': if (c[2] == 'o' && c[3] == 'r' && c[4] == 't' && c[5] == *name) { /* short */ tflags |= T_SHORT; goto success; } goto unknown; case 'i': if (c[2] == 'g' && c[3] == 'n' && c[4] == 'e' && c[5] == 'd' && c[6] == *name) { /* signed */ tflags |= T_SIGNED; goto success; } goto unknown; default: goto unknown; } case 'u': if (c[1] == 'n' && c[2] == 's' && c[3] == 'i' && c[4] == 'g' && c[5] == 'n' && c[6] == 'e' && c[7] == 'd' && c[8] == *name) { /* unsigned */ tflags |= T_UNSIGNED; goto success; } goto unknown; default: goto unknown; }