Changeset 074444f in mainline for uspace/app/sbi/src/rdata.c


Ignore:
Timestamp:
2010-04-10T11:15:33Z (14 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1ef0fc3, 38aaacc2
Parents:
23de644
Message:

Update SBI to rev. 184.

File:
1 edited

Legend:

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

    r23de644 r074444f  
    5151#include "mytypes.h"
    5252#include "stree.h"
     53#include "symbol.h"
    5354
    5455#include "rdata.h"
    5556
     57static void rdata_bool_copy(rdata_bool_t *src, rdata_bool_t **dest);
     58static void rdata_char_copy(rdata_char_t *src, rdata_char_t **dest);
    5659static void rdata_int_copy(rdata_int_t *src, rdata_int_t **dest);
    5760static void rdata_string_copy(rdata_string_t *src, rdata_string_t **dest);
     
    287290}
    288291
     292/** Allocate new boolean.
     293 *
     294 * @return      New boolean.
     295 */
     296rdata_bool_t *rdata_bool_new(void)
     297{
     298        rdata_bool_t *bool_v;
     299
     300        bool_v = calloc(1, sizeof(rdata_bool_t));
     301        if (bool_v == NULL) {
     302                printf("Memory allocation failed.\n");
     303                exit(1);
     304        }
     305
     306        return bool_v;
     307}
     308
     309/** Allocate new character.
     310 *
     311 * @return      New character.
     312 */
     313rdata_char_t *rdata_char_new(void)
     314{
     315        rdata_char_t *char_v;
     316
     317        char_v = calloc(1, sizeof(rdata_char_t));
     318        if (char_v == NULL) {
     319                printf("Memory allocation failed.\n");
     320                exit(1);
     321        }
     322
     323        return char_v;
     324}
     325
    289326/** Allocate new integer.
    290327 *
     
    398435
    399436        switch (src->vc) {
     437        case vc_bool:
     438                rdata_bool_copy(src->u.bool_v, &nvar->u.bool_v);
     439                break;
     440        case vc_char:
     441                rdata_char_copy(src->u.char_v, &nvar->u.char_v);
     442                break;
    400443        case vc_int:
    401444                rdata_int_copy(src->u.int_v, &nvar->u.int_v);
     
    422465
    423466        *dest = nvar;
     467}
     468
     469/** Copy boolean.
     470 *
     471 * @param src           Source boolean.
     472 * @param dest          Place to store pointer to new boolean.
     473 */
     474static void rdata_bool_copy(rdata_bool_t *src, rdata_bool_t **dest)
     475{
     476        *dest = rdata_bool_new();
     477        (*dest)->value = src->value;
     478}
     479
     480/** Copy character.
     481 *
     482 * @param src           Source character.
     483 * @param dest          Place to store pointer to new character.
     484 */
     485static void rdata_char_copy(rdata_char_t *src, rdata_char_t **dest)
     486{
     487        *dest = rdata_char_new();
     488        bigint_clone(&src->value, &(*dest)->value);
    424489}
    425490
     
    550615        var->vc = nvar->vc;
    551616        switch (nvar->vc) {
     617        case vc_bool: var->u.bool_v = nvar->u.bool_v; break;
     618        case vc_char: var->u.char_v = nvar->u.char_v; break;
    552619        case vc_int: var->u.int_v = nvar->u.int_v; break;
    553620        case vc_string: var->u.string_v = nvar->u.string_v; break;
     
    621688static void rdata_var_print(rdata_var_t *var)
    622689{
     690        int val;
     691
    623692        switch (var->vc) {
     693        case vc_bool:
     694                printf("bool(%s)", var->u.bool_v->value ? "true" : "false");
     695                break;
     696        case vc_char:
     697                printf("char(");
     698                if (bigint_get_value_int(&var->u.char_v->value, &val) == EOK)
     699                        printf("'%c'", val);
     700                else
     701                        printf("???:x%x\n", (unsigned) val);
     702                printf(")");
     703                break;
    624704        case vc_int:
    625705                printf("int(");
     
    631711                break;
    632712        case vc_ref:
    633                 printf("ref");
     713                printf("ref(");
     714                rdata_var_print(var->u.ref_v->vref);
     715                printf(")");
    634716                break;
    635717        case vc_deleg:
    636                 printf("deleg");
     718                printf("deleg(");
     719                if (var->u.deleg_v->obj != NULL) {
     720                        rdata_var_print(var->u.deleg_v->obj);
     721                        printf(",");
     722                }
     723                symbol_print_fqn(var->u.deleg_v->sym);
     724                printf(")");
     725                break;
     726        case vc_array:
     727                printf("array");
    637728                break;
    638729        case vc_object:
    639730                printf("object");
    640731                break;
    641         default:
    642                 printf("print(%d)\n", var->vc);
    643                 assert(b_false);
    644         }
    645 }
     732        case vc_resource:
     733                printf("resource(%p)", var->u.resource_v->data);
     734                break;
     735        }
     736}
Note: See TracChangeset for help on using the changeset viewer.