Exemplo n.º 1
0
ast_err
Msgtest_read(ast_runtime* rt, Msgtest** msgtest_vp)
{
    ast_err status = AST_NOERR;
    uint32_t wiretype, fieldno;
    Msgtest* msgtest_v;

    msgtest_v = (Msgtest*)ast_alloc(rt,sizeof(Msgtest));
    if(msgtest_v == NULL) return AST_ENOMEM;

    while(status == AST_NOERR) {
        status = ast_read_tag(rt,&wiretype,&fieldno);
        if(status == AST_EOF) {status = AST_NOERR; break;}
        if(status != AST_NOERR) break;
        switch (fieldno) {
        case 1: {
            size_t size;
            if(wiretype != ast_counted) {status=AST_EFAIL; goto done;}
            status = ast_read_size(rt,&size);
            if(status != AST_NOERR) {ACATCH(status); goto done;}
            ast_mark(rt,size);
            status = Submsg_read(rt,&msgtest_v->rmsg);
            if(status != AST_NOERR) {ACATCH(status); goto done;}
            ast_unmark(rt);
            } break;
        case 2: {
            size_t size;
            if(wiretype != ast_counted) {status=AST_EFAIL; goto done;}
            status = ast_read_size(rt,&size);
            if(status != AST_NOERR) {ACATCH(status); goto done;}
            ast_mark(rt,size);
            msgtest_v->omsg.defined = 1;
            msgtest_v->omsg.value = NULL;
            status = Submsg_read(rt,&msgtest_v->omsg.value);
            if(status != AST_NOERR) {ACATCH(status); goto done;}
            ast_unmark(rt);
            } break;
        case 3: {
            size_t size;
            Submsg* tmp;
            if(wiretype != ast_counted) {status=AST_EFAIL; goto done;}
            status = ast_read_size(rt,&size);
            if(status != AST_NOERR) {ACATCH(status); goto done;}
            ast_mark(rt,size);
            status = Submsg_read(rt,&tmp);
            if(status != AST_NOERR) {ACATCH(status); goto done;}
            status = ast_repeat_append(rt,ast_message,&msgtest_v->pmsg,&tmp);
            if(status != AST_NOERR) {ACATCH(status); goto done;}
            ast_unmark(rt);
            } break;
        default:
            status = ast_skip_field(rt,wiretype,fieldno);
            if(status != AST_NOERR) {ACATCH(status); goto done;}
        }; /*switch*/
    };/*while*/
    if(status != AST_NOERR) {ACATCH(status); goto done;}
    if(msgtest_vp) *msgtest_vp = msgtest_v;
done:
    return status;
} /*Msgtest_read*/
Exemplo n.º 2
0
ast_err
Submsg_read(ast_runtime* rt, Submsg** submsg_vp)
{
    ast_err status = AST_NOERR;
    uint32_t wiretype, fieldno;
    Submsg* submsg_v;

    submsg_v = (Submsg*)ast_alloc(rt,sizeof(Submsg));
    if(submsg_v == NULL) return AST_ENOMEM;

    while(status == AST_NOERR) {
        status = ast_read_tag(rt,&wiretype,&fieldno);
        if(status == AST_EOF) {status = AST_NOERR; break;}
        if(status != AST_NOERR) break;
        switch (fieldno) {
        case 1: {
            status = ast_read_primitive(rt,ast_int32,1,&submsg_v->f_int32);
            } break;
        default:
            status = ast_skip_field(rt,wiretype,fieldno);
            if(status != AST_NOERR) {ACATCH(status); goto done;}
        }; /*switch*/
    };/*while*/
    if(status != AST_NOERR) {ACATCH(status); goto done;}
    if(submsg_vp) *submsg_vp = submsg_v;
done:
    return status;
} /*Submsg_read*/
Exemplo n.º 3
0
ast_err
BytesRequired_read(ast_runtime* rt, BytesRequired** bytesrequired_vp)
{
    ast_err status = AST_NOERR;
    uint32_t wiretype, fieldno;
    BytesRequired* bytesrequired_v;

    bytesrequired_v = (BytesRequired*)ast_alloc(rt,sizeof(BytesRequired));
    if(bytesrequired_v == NULL) return AST_ENOMEM;

    while(status == AST_NOERR) {
        status = ast_read_tag(rt,&wiretype,&fieldno);
        if(status == AST_EOF) {status = AST_NOERR; break;}
        if(status != AST_NOERR) break;
        switch (fieldno) {
        case 1: {
            status = ast_read_primitive(rt,ast_string,1,&bytesrequired_v->f_string);
            } break;
        case 2: {
            status = ast_read_primitive(rt,ast_bytes,2,&bytesrequired_v->f_bytes);
            } break;
        default:
            status = ast_skip_field(rt,wiretype,fieldno);
            if(status != AST_NOERR) {goto done;}
        }; /*switch*/
    };/*while*/
    if(status != AST_NOERR) {goto done;}
    if(bytesrequired_vp) *bytesrequired_vp = bytesrequired_v;
done:
    return status;
} /*BytesRequired_read*/
Exemplo n.º 4
0
static Enumtest*
create_enumtest(ast_runtime* rt)
{
    Enumtest* input = (Enumtest*)ast_alloc(rt,sizeof(Enumtest));
    input->renum = ECON1;
    input->oenum.defined = 1;
    input->oenum.value = ECON2;
    input->penum.count = 2;
    input->penum.values = (Testenum*)ast_alloc(rt,input->penum.count*sizeof(Testenum));
    input->penum.values[0] = ECON3;
    input->penum.values[1] = ECON4;
    input->ppenum.count = 4;
    input->ppenum.values = (Testenum*)ast_alloc(rt,input->ppenum.count*sizeof(Testenum));
    input->ppenum.values[0] = ECON3;
    input->ppenum.values[1] = ECON4;
    input->ppenum.values[1] = ECON5;
    input->ppenum.values[1] = ECON6;
#ifdef IGNORE
#endif
    return input;
}
Exemplo n.º 5
0
NODE *ast_create(NODE_TYPE type, ...)
{
  static struct constructor constructor[] =
    {
      {ast_array_size, ast_array_init},
      {ast_binary_size, ast_binary_init},
      {ast_block_size, ast_block_init},
      {ast_call_size, ast_call_init},
      {ast_conditional_size, ast_conditional_init},
      {ast_constant_size, ast_constant_init},
      {ast_declare_size, ast_declare_init},
      {ast_for_size, ast_for_init},
      {ast_formal_size, ast_formal_init},
      {ast_function_size, ast_function_init},
      {ast_group_size, ast_group_init},
      {ast_identifier_size, ast_identifier_init},
      {ast_list_size, ast_list_init},
      {ast_postfix_size, ast_postfix_init},
      {ast_prefix_size, ast_prefix_init},
      {ast_read_size, ast_read_init},
      {ast_return_size, ast_return_init},
      {ast_string_literal_size, ast_string_literal_init},
      {ast_while_size, ast_while_init},
      {ast_write_size, ast_write_init}
    };

  va_list args;
  NODE *result = ast_alloc(type);
  size_t size = constructor[type].size();

  result->slots = my_malloc(size);

  SET_METHOD(result, generate_lval_ir, ast_default_generate_lval_ir);
  SET_METHOD(result, generate_param_ir, ast_default_generate_param_ir);
  SET_METHOD(result, find_literals, ast_default_find_literals);
  SET_METHOD(result, get_symbol, ast_default_get_symbol);
  SET_METHOD(result, add_symbols, ast_default_add_symbols);
  SET_METHOD(result, check_functions, ast_default_check_functions);
  SET_METHOD(result, ir_type, ast_default_ir_type);
  SET_METHOD(result, ir_value, ast_default_ir_value);
  SET_METHOD(result, is_lvalue, ast_default_is_lvalue);

  va_start(args, type);
  constructor[type].init(result, args);
  va_end(args);

  return result;
}
Exemplo n.º 6
0
int
t_read(ast_runtime* rt, t** t_vp)
{
    int status = AST_NOERR;
    uint32_t wiretype, fieldno;
    int i = 0;
    size_t count;
    t* t_v;

    t_v = (t*)ast_alloc(sizeof(t));
    if(t_v == NULL) return AST_ENOMEM;

    while(status == AST_NOERR)
        ast_read_tag(rt,&wiretype,&fieldno)
        switch (fieldno) {
        case 1: {
            status = ast_read(rt,ast_int32,&t_v->f1_f);
            } break;
        case 2: {
            t_v->f2_f.exists = 1;
            t_v->f2_f.value = 0;
            status = ast_read(rt,ast_float,&t_v->f2_f.value);
            } break;
        case 3: {
            t_v->f3_f.count = 0;
            t_v->f3_f.values = NULL;
            status = ast_read_count(rt,&t_v->f3_f.count);
            if(!status) {goto done;}
            for(i=0;i<t_v->f3_f.count;i++) {
                int tmp;
                status = ast_read(rt,ast_sint32,&tmp);
                status = ast_append(rt,ast_sint32,&t_v->f3_f,&tmp);
                if(!status) {goto done;}
            } /*for*/;
            } break;
        case 4: {
            status = m2_read(rt,&t_v->f4_f);
            if(!status) {goto done;}
            } break;
        default:
            status = ast_skip_field(rt,wiretype,fieldno);
        }; /*switch*/
    };/*while*/
Exemplo n.º 7
0
ast_err
BytesOptional_read(ast_runtime* rt, BytesOptional** bytesoptional_vp)
{
    ast_err status = AST_NOERR;
    uint32_t wiretype, fieldno;
    BytesOptional* bytesoptional_v;

    bytesoptional_v = (BytesOptional*)ast_alloc(rt,sizeof(BytesOptional));
    if(bytesoptional_v == NULL) return AST_ENOMEM;

    while(status == AST_NOERR) {
        status = ast_read_tag(rt,&wiretype,&fieldno);
        if(status == AST_EOF) {status = AST_NOERR; break;}
        if(status != AST_NOERR) break;
        switch (fieldno) {
        case 1: {
            bytesoptional_v->f_string.defined = 1;
            bytesoptional_v->f_string.value = NULL;
            status = ast_read_primitive(rt,ast_string,1,&bytesoptional_v->f_string.value);
            } break;
        case 2: {
            bytesoptional_v->f_bytes.defined = 1;
            bytesoptional_v->f_bytes.value.nbytes = 0;
            bytesoptional_v->f_bytes.value.bytes = NULL;
            status = ast_read_primitive(rt,ast_bytes,2,&bytesoptional_v->f_bytes.value);
            } break;
        default:
            status = ast_skip_field(rt,wiretype,fieldno);
            if(status != AST_NOERR) {goto done;}
        }; /*switch*/
    };/*while*/
    if(!bytesoptional_v->f_string.defined) {
        bytesoptional_v->f_string.value = "hello";
    }
    if(!bytesoptional_v->f_bytes.defined) {
        bytesoptional_v->f_bytes.value.nbytes = 0;
        bytesoptional_v->f_bytes.value.bytes = NULL;
    }
    if(status != AST_NOERR) {goto done;}
    if(bytesoptional_vp) *bytesoptional_vp = bytesoptional_v;
done:
    return status;
} /*BytesOptional_read*/
Exemplo n.º 8
0
/* limit reads to next n bytes */
static int
ast_byteio_mark(ast_runtime* rt, size_t count)
{
    struct _ast_bytestream* stream = NULL;
    struct _ast_stack* node = NULL;
    if(rt == NULL || rt->uid != BYTEIO_UID || rt->mode != AST_READ)
	return AST_EFAIL;
    stream = (struct _ast_bytestream*)rt->stream;
    node = ast_alloc(rt,sizeof(struct _ast_stack));
    if(node == NULL) return AST_ENOMEM;
    *node = stream->stack;
    stream->stack.stack = node;
    stream->stack.maxpos = stream->pos+count;
    /* stream maxpos must be <= alloc */
    if(stream->stack.maxpos > stream->alloc)
	assert(0);
/*        stream->stack.maxpos = stream->alloc; */
    return AST_NOERR;
}
Exemplo n.º 9
0
void* ast_alloc_with_type(context_t *ctx, size_t sz, ast_node_type_t type) {
    ast_node_t *node = ast_alloc(ctx, sz);
    node->type = type;
    return node;
}