Changeset 640ffe6 in mainline for uspace/app/sbi/src/p_type.c


Ignore:
Timestamp:
2010-05-08T08:15:57Z (14 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4039c77
Parents:
1317380 (diff), 051bc69a (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge from lp:~jsvoboda/helenos/sysel. New: cspan printing, boolean ops, enums, constructors etc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/sbi/src/p_type.c

    r1317380 r640ffe6  
    3131#include <assert.h>
    3232#include <stdlib.h>
     33#include "cspan.h"
    3334#include "debug.h"
    3435#include "lex.h"
     
    4546static stree_texpr_t *parse_pf_taccess(parse_t *parse, stree_texpr_t *a);
    4647static stree_texpr_t *parse_pf_tindex(parse_t *parse, stree_texpr_t *a);
     48static stree_texpr_t *parse_tparen(parse_t *parse);
    4749static stree_texpr_t *parse_tprimitive(parse_t *parse);
    48 static stree_tliteral_t *parse_tliteral(parse_t *parse);
    49 static stree_tnameref_t *parse_tnameref(parse_t *parse);
     50static stree_texpr_t *parse_tliteral(parse_t *parse);
     51static stree_texpr_t *parse_tnameref(parse_t *parse);
    5052
    5153static stree_texpr_t *parse_recovery_texpr(parse_t *parse);
     
    9193        list_init(&tapply->targs);
    9294
     95        targ = NULL;
     96
    9397        while (lcur_lc(parse) == lc_slash) {
    9498
     
    104108        aexpr = stree_texpr_new(tc_tapply);
    105109        aexpr->u.tapply = tapply;
     110        tapply->texpr = aexpr;
     111
     112        if (targ != NULL)
     113                aexpr->cspan = cspan_merge(gtype->cspan, targ->cspan);
     114        else
     115                aexpr->cspan = gtype->cspan;
     116
    106117        return aexpr;
    107118}
     
    116127        stree_texpr_t *tmp;
    117128
    118         a = parse_tprimitive(parse);
     129        a = parse_tparen(parse);
    119130
    120131        while (lcur_lc(parse) == lc_period || lcur_lc(parse) == lc_lsbr) {
     
    162173        texpr = stree_texpr_new(tc_taccess);
    163174        texpr->u.taccess = taccess;
     175        taccess->texpr = texpr;
     176        texpr->cspan = cspan_merge(a->cspan, ident->cspan);
    164177
    165178        return texpr;
     
    176189        stree_tindex_t *tindex;
    177190        stree_expr_t *expr;
     191        cspan_t *cs1;
    178192
    179193        tindex = stree_tindex_new();
     
    209223
    210224        lmatch(parse, lc_rsbr);
     225        cs1 = lprev_span(parse);
    211226
    212227        texpr = stree_texpr_new(tc_tindex);
    213228        texpr->u.tindex = tindex;
    214 
    215         return texpr;
    216 }
     229        tindex->texpr = texpr;
     230        texpr->cspan = cspan_merge(a->cspan, cs1);
     231
     232        return texpr;
     233}
     234
     235/** Parse possibly partenthesized type expression.
     236 *
     237 * @param parse         Parser object.
     238 */
     239static stree_texpr_t *parse_tparen(parse_t *parse)
     240{
     241        stree_texpr_t *texpr;
     242        cspan_t *cs0, *cs1;
     243
     244        if (lcur_lc(parse) == lc_lparen) {
     245                cs0 = lcur_span(parse);
     246                lskip(parse);
     247                texpr = parse_texpr(parse);
     248                lmatch(parse, lc_rparen);
     249                cs1 = lprev_span(parse);
     250                texpr->cspan = cspan_merge(cs0, cs1);
     251        } else {
     252                texpr = parse_tprimitive(parse);
     253        }
     254
     255        return texpr;
     256}
     257
    217258
    218259/** Parse primitive type expression.
     
    226267        switch (lcur_lc(parse)) {
    227268        case lc_ident:
    228                 texpr = stree_texpr_new(tc_tnameref);
    229                 texpr->u.tnameref = parse_tnameref(parse);
     269                texpr = parse_tnameref(parse);
    230270                break;
    231271        case lc_bool:
     
    234274        case lc_string:
    235275        case lc_resource:
    236                 texpr = stree_texpr_new(tc_tliteral);
    237                 texpr->u.tliteral = parse_tliteral(parse);
     276                texpr = parse_tliteral(parse);
    238277                break;
    239278        default:
     
    250289 * @param parse         Parser object.
    251290 */
    252 static stree_tliteral_t *parse_tliteral(parse_t *parse)
     291static stree_texpr_t *parse_tliteral(parse_t *parse)
    253292{
    254293        stree_tliteral_t *tliteral;
    255294        tliteral_class_t tlc;
     295        stree_texpr_t *texpr;
    256296
    257297        switch (lcur_lc(parse)) {
     
    278318
    279319        tliteral = stree_tliteral_new(tlc);
    280         return tliteral;
     320        texpr = stree_texpr_new(tc_tliteral);
     321        texpr->u.tliteral = tliteral;
     322        tliteral->texpr = texpr;
     323        texpr->cspan = lprev_span(parse);
     324
     325        return texpr;
    281326}
    282327
     
    285330 * @param parse         Parser object.
    286331 */
    287 static stree_tnameref_t *parse_tnameref(parse_t *parse)
     332static stree_texpr_t *parse_tnameref(parse_t *parse)
    288333{
    289334        stree_tnameref_t *tnameref;
     335        stree_texpr_t *texpr;
    290336
    291337        tnameref = stree_tnameref_new();
    292338        tnameref->name = parse_ident(parse);
    293339
    294         return tnameref;
     340        texpr = stree_texpr_new(tc_tnameref);
     341        texpr->u.tnameref = tnameref;
     342        tnameref->texpr = texpr;
     343        texpr->cspan = tnameref->name->cspan;
     344
     345        return texpr;
    295346}
    296347
     
    310361        texpr = stree_texpr_new(tc_tliteral);
    311362        texpr->u.tliteral = tliteral;
    312 
    313         return texpr;
    314 }
     363        tliteral->texpr = texpr;
     364
     365        return texpr;
     366}
Note: See TracChangeset for help on using the changeset viewer.