[Mono-bugs] [Bug 435398] Peformance of int switch
bugzilla_noreply at novell.com
bugzilla_noreply at novell.com
Wed Oct 15 06:45:55 EDT 2008
https://bugzilla.novell.com/show_bug.cgi?id=435398
User msafar at novell.com added comment
https://bugzilla.novell.com/show_bug.cgi?id=435398#c1
--- Comment #1 from Marek Safar <msafar at novell.com> 2008-10-15 04:45:55 MDT ---
Here is the real app code which I tried to mimic
switch (ntoken) {
case Token.CLOSE_PARENS:
ntoken = xtoken ();
//
// Token is a lambda
//
if (ntoken == Token.ARROW) {
if (RootContext.Version <=
LanguageVersion.ISO_2)
Report.FeatureIsNotAvailable (Location, "lambda expressions");
return
Token.OPEN_PARENS_LAMBDA;
}
//
// Token is possible cast, parser will
decide later
//
if (cast_posible && !cast_not) {
switch (ntoken) {
//
// Indirection is a special
// cast: (int*)&a;
// binary: (C)&a;
//
case Token.BITWISE_AND:
case Token.OP_INC:
case Token.OP_DEC:
case Token.PLUS:
case Token.MINUS:
if (!has_star)
break;
return
Token.OPEN_PARENS_CAST;
case Token.OPEN_PARENS:
case Token.BANG:
case Token.TILDE:
case Token.IDENTIFIER:
case Token.LITERAL_INTEGER:
case Token.LITERAL_FLOAT:
case Token.LITERAL_DOUBLE:
case Token.LITERAL_DECIMAL:
case Token.LITERAL_CHARACTER:
case Token.LITERAL_STRING:
case Token.BASE:
case Token.CHECKED:
case Token.DELEGATE:
case Token.FALSE:
case Token.FIXED:
case Token.NEW:
case Token.NULL:
case Token.SIZEOF:
case Token.THIS:
case Token.THROW:
case Token.TRUE:
case Token.TYPEOF:
case Token.UNCHECKED:
case Token.UNSAFE:
case Token.DEFAULT:
//
// These can be part of a
member access
//
case Token.INT:
case Token.UINT:
case Token.SHORT:
case Token.USHORT:
case Token.LONG:
case Token.ULONG:
case Token.DOUBLE:
case Token.FLOAT:
case Token.CHAR:
case Token.BYTE:
case Token.DECIMAL:
case Token.BOOL:
return
Token.OPEN_PARENS_CAST;
}
}
return Token.OPEN_PARENS;
case Token.DOT:
if (ptoken != Token.IDENTIFIER &&
ptoken != Token.OP_GENERICS_GT)
goto default;
continue;
case Token.IDENTIFIER:
switch (ptoken) {
case Token.DOT:
case Token.OP_GENERICS_LT:
case Token.COMMA:
case Token.DOUBLE_COLON:
case -1:
cast_posible = true;
continue;
default:
cast_not = true;
continue;
}
case Token.STAR:
has_star = true;
continue;
case Token.OBJECT:
case Token.STRING:
case Token.BOOL:
case Token.DECIMAL:
case Token.FLOAT:
case Token.DOUBLE:
case Token.SBYTE:
case Token.BYTE:
case Token.SHORT:
case Token.USHORT:
case Token.INT:
case Token.UINT:
case Token.LONG:
case Token.ULONG:
case Token.CHAR:
case Token.VOID:
case Token.OP_GENERICS_GT:
case Token.OP_GENERICS_LT:
case Token.INTERR_NULLABLE:
case Token.OPEN_BRACKET:
case Token.CLOSE_BRACKET:
case Token.COMMA:
case Token.DOUBLE_COLON:
cast_posible = true;
continue;
case Token.REF:
case Token.OUT:
cast_not = true;
continue;
default:
return Token.OPEN_PARENS;
}
}
--
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
More information about the mono-bugs
mailing list