Example #1
0
DLLEXPORT
jl_value_t *jl_compress_ast(jl_value_t *ast)
{
    ios_t dest;
    jl_ios_mem(&dest, 0);
    int en = jl_gc_is_enabled();
    jl_gc_disable();

    tree_literal_values = jl_alloc_cell_1d(0);
    jl_serialize_value(&dest, ast);

    //ios_printf(ios_stderr, "%d bytes, %d values\n", dest.size, vals->length);

    jl_value_t *v = (jl_value_t*)jl_takebuf_array(&dest);
    if (tree_literal_values->length == 0)
        tree_literal_values = (jl_array_t*)jl_an_empty_cell;
    v = (jl_value_t*)jl_tuple(4, v, tree_literal_values,
                              jl_lam_body((jl_expr_t*)ast)->etype,
                              jl_lam_capt((jl_expr_t*)ast));

    tree_literal_values = NULL;
    if (en)
        jl_gc_enable();
    return v;
}
Example #2
0
File: dump.c Project: adambom/julia
DLLEXPORT
jl_value_t *jl_compress_ast(jl_lambda_info_t *li, jl_value_t *ast)
{
    ios_t dest;
    ios_mem(&dest, 0);
    int en = jl_gc_is_enabled();
    jl_gc_disable();

    if (li->roots == NULL)
        li->roots = jl_alloc_cell_1d(0);
    tree_literal_values = li->roots;
    jl_serialize_value(&dest, ast);

    //JL_PRINTF(JL_STDERR, "%d bytes, %d values\n", dest.size, vals->length);

    jl_value_t *v = (jl_value_t*)jl_takebuf_array(&dest);
    if (jl_array_len(tree_literal_values) == 0) {
        tree_literal_values = (jl_array_t*)jl_an_empty_cell;
        li->roots = NULL;
    }
    v = (jl_value_t*)jl_tuple(4, v, tree_literal_values,
                              jl_lam_body((jl_expr_t*)ast)->etype,
                              jl_lam_capt((jl_expr_t*)ast));

    tree_literal_values = NULL;
    if (en)
        jl_gc_enable();
    return v;
}