[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