Ignore:
Timestamp:
Mar 19, 2014, 11:11:30 AM (11 years ago)
Author:
dmik
Message:

python: Update vendor to 2.7.6.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • python/vendor/current/Parser/acceler.c

    r2 r388  
    2424PyGrammar_AddAccelerators(grammar *g)
    2525{
    26         dfa *d;
    27         int i;
    28         d = g->g_dfa;
    29         for (i = g->g_ndfas; --i >= 0; d++)
    30                 fixdfa(g, d);
    31         g->g_accel = 1;
     26    dfa *d;
     27    int i;
     28    d = g->g_dfa;
     29    for (i = g->g_ndfas; --i >= 0; d++)
     30        fixdfa(g, d);
     31    g->g_accel = 1;
    3232}
    3333
     
    3535PyGrammar_RemoveAccelerators(grammar *g)
    3636{
    37         dfa *d;
    38         int i;
    39         g->g_accel = 0;
    40         d = g->g_dfa;
    41         for (i = g->g_ndfas; --i >= 0; d++) {
    42                 state *s;
    43                 int j;
    44                 s = d->d_state;
    45                 for (j = 0; j < d->d_nstates; j++, s++) {
    46                         if (s->s_accel)
    47                                 PyObject_FREE(s->s_accel);
    48                         s->s_accel = NULL;
    49                 }
    50         }
     37    dfa *d;
     38    int i;
     39    g->g_accel = 0;
     40    d = g->g_dfa;
     41    for (i = g->g_ndfas; --i >= 0; d++) {
     42        state *s;
     43        int j;
     44        s = d->d_state;
     45        for (j = 0; j < d->d_nstates; j++, s++) {
     46            if (s->s_accel)
     47                PyObject_FREE(s->s_accel);
     48            s->s_accel = NULL;
     49        }
     50    }
    5151}
    5252
     
    5454fixdfa(grammar *g, dfa *d)
    5555{
    56         state *s;
    57         int j;
    58         s = d->d_state;
    59         for (j = 0; j < d->d_nstates; j++, s++)
    60                 fixstate(g, s);
     56    state *s;
     57    int j;
     58    s = d->d_state;
     59    for (j = 0; j < d->d_nstates; j++, s++)
     60        fixstate(g, s);
    6161}
    6262
     
    6464fixstate(grammar *g, state *s)
    6565{
    66         arc *a;
    67         int k;
    68         int *accel;
    69         int nl = g->g_ll.ll_nlabels;
    70         s->s_accept = 0;
    71         accel = (int *) PyObject_MALLOC(nl * sizeof(int));
    72         if (accel == NULL) {
    73                 fprintf(stderr, "no mem to build parser accelerators\n");
    74                 exit(1);
    75         }
    76         for (k = 0; k < nl; k++)
    77                 accel[k] = -1;
    78         a = s->s_arc;
    79         for (k = s->s_narcs; --k >= 0; a++) {
    80                 int lbl = a->a_lbl;
    81                 label *l = &g->g_ll.ll_label[lbl];
    82                 int type = l->lb_type;
    83                 if (a->a_arrow >= (1 << 7)) {
    84                         printf("XXX too many states!\n");
    85                         continue;
    86                 }
    87                 if (ISNONTERMINAL(type)) {
    88                         dfa *d1 = PyGrammar_FindDFA(g, type);
    89                         int ibit;
    90                         if (type - NT_OFFSET >= (1 << 7)) {
    91                                 printf("XXX too high nonterminal number!\n");
    92                                 continue;
    93                         }
    94                         for (ibit = 0; ibit < g->g_ll.ll_nlabels; ibit++) {
    95                                 if (testbit(d1->d_first, ibit)) {
    96                                         if (accel[ibit] != -1)
    97                                                 printf("XXX ambiguity!\n");
    98                                         accel[ibit] = a->a_arrow | (1 << 7) |
    99                                                 ((type - NT_OFFSET) << 8);
    100                                 }
    101                         }
    102                 }
    103                 else if (lbl == EMPTY)
    104                         s->s_accept = 1;
    105                 else if (lbl >= 0 && lbl < nl)
    106                         accel[lbl] = a->a_arrow;
    107         }
    108         while (nl > 0 && accel[nl-1] == -1)
    109                 nl--;
    110         for (k = 0; k < nl && accel[k] == -1;)
    111                 k++;
    112         if (k < nl) {
    113                 int i;
    114                 s->s_accel = (int *) PyObject_MALLOC((nl-k) * sizeof(int));
    115                 if (s->s_accel == NULL) {
    116                         fprintf(stderr, "no mem to add parser accelerators\n");
    117                         exit(1);
    118                 }
    119                 s->s_lower = k;
    120                 s->s_upper = nl;
    121                 for (i = 0; k < nl; i++, k++)
    122                         s->s_accel[i] = accel[k];
    123         }
    124         PyObject_FREE(accel);
     66    arc *a;
     67    int k;
     68    int *accel;
     69    int nl = g->g_ll.ll_nlabels;
     70    s->s_accept = 0;
     71    accel = (int *) PyObject_MALLOC(nl * sizeof(int));
     72    if (accel == NULL) {
     73        fprintf(stderr, "no mem to build parser accelerators\n");
     74        exit(1);
     75    }
     76    for (k = 0; k < nl; k++)
     77        accel[k] = -1;
     78    a = s->s_arc;
     79    for (k = s->s_narcs; --k >= 0; a++) {
     80        int lbl = a->a_lbl;
     81        label *l = &g->g_ll.ll_label[lbl];
     82        int type = l->lb_type;
     83        if (a->a_arrow >= (1 << 7)) {
     84            printf("XXX too many states!\n");
     85            continue;
     86        }
     87        if (ISNONTERMINAL(type)) {
     88            dfa *d1 = PyGrammar_FindDFA(g, type);
     89            int ibit;
     90            if (type - NT_OFFSET >= (1 << 7)) {
     91                printf("XXX too high nonterminal number!\n");
     92                continue;
     93            }
     94            for (ibit = 0; ibit < g->g_ll.ll_nlabels; ibit++) {
     95                if (testbit(d1->d_first, ibit)) {
     96                    if (accel[ibit] != -1)
     97                        printf("XXX ambiguity!\n");
     98                    accel[ibit] = a->a_arrow | (1 << 7) |
     99                        ((type - NT_OFFSET) << 8);
     100                }
     101            }
     102        }
     103        else if (lbl == EMPTY)
     104            s->s_accept = 1;
     105        else if (lbl >= 0 && lbl < nl)
     106            accel[lbl] = a->a_arrow;
     107    }
     108    while (nl > 0 && accel[nl-1] == -1)
     109        nl--;
     110    for (k = 0; k < nl && accel[k] == -1;)
     111        k++;
     112    if (k < nl) {
     113        int i;
     114        s->s_accel = (int *) PyObject_MALLOC((nl-k) * sizeof(int));
     115        if (s->s_accel == NULL) {
     116            fprintf(stderr, "no mem to add parser accelerators\n");
     117            exit(1);
     118        }
     119        s->s_lower = k;
     120        s->s_upper = nl;
     121        for (i = 0; k < nl; i++, k++)
     122            s->s_accel[i] = accel[k];
     123    }
     124    PyObject_FREE(accel);
    125125}
Note: See TracChangeset for help on using the changeset viewer.