Skip to content

Commit

Permalink
begin implementing redesign of tuples and tuple types
Browse files Browse the repository at this point in the history
[ci skip]
  • Loading branch information
JeffBezanson committed Mar 2, 2015
1 parent 7f7e9ae commit 246c078
Show file tree
Hide file tree
Showing 4 changed files with 509 additions and 480 deletions.
96 changes: 0 additions & 96 deletions src/alloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -333,102 +333,6 @@ DLLEXPORT jl_value_t *jl_new_struct_uninit(jl_datatype_t *type)
return jv;
}

DLLEXPORT jl_tuple_t *jl_tuple(size_t n, ...)
{
va_list args;
if (n == 0) return jl_null;
va_start(args, n);
jl_tuple_t *jv = jl_alloc_tuple_uninit(n);
for(size_t i=0; i < n; i++) {
jl_tupleset(jv, i, va_arg(args, jl_value_t*));
}
va_end(args);
return jv;
}

DLLEXPORT jl_tuple_t *jl_tuplev(size_t n, jl_value_t **v)
{
jl_tuple_t *jv = jl_alloc_tuple_uninit(n);
for(size_t i=0; i < n; i++) {
jl_tupleset(jv, i, v[i]);
}
return jv;
}

jl_tuple_t *jl_tuple1(void *a)
{
#ifdef OVERLAP_TUPLE_LEN
jl_tuple_t *t = (jl_tuple_t*)alloc_2w();
#else
jl_tuple_t *t = (jl_tuple_t*)alloc_3w();
#endif
t->type = (jl_value_t*)jl_tuple_type;
jl_tuple_set_len_unsafe(t, 1);
jl_tupleset(t, 0, a);
return t;
}

jl_tuple_t *jl_tuple2(void *a, void *b)
{
#ifdef OVERLAP_TUPLE_LEN
jl_tuple_t *t = (jl_tuple_t*)alloc_3w();
#else
jl_tuple_t *t = (jl_tuple_t*)alloc_4w();
#endif
t->type = (jl_value_t*)jl_tuple_type;
jl_tuple_set_len_unsafe(t, 2);
jl_tupleset(t, 0, a);
jl_tupleset(t, 1, b);
return t;
}

jl_tuple_t *jl_alloc_tuple_uninit(size_t n)
{
if (n == 0) return jl_null;
#ifdef OVERLAP_TUPLE_LEN
jl_tuple_t *jv = (jl_tuple_t*)newobj((jl_value_t*)jl_tuple_type, n);
#else
jl_tuple_t *jv = (jl_tuple_t*)newobj((jl_value_t*)jl_tuple_type, n+1);
#endif
jl_tuple_set_len_unsafe(jv, n);
return jv;
}

jl_tuple_t *jl_alloc_tuple(size_t n)
{
if (n == 0) return jl_null;
jl_tuple_t *jv = jl_alloc_tuple_uninit(n);
for(size_t i=0; i < n; i++) {
jl_tupleset(jv, i, NULL);
}
return jv;
}

jl_tuple_t *jl_tuple_append(jl_tuple_t *a, jl_tuple_t *b)
{
jl_tuple_t *c = jl_alloc_tuple_uninit(jl_tuple_len(a) + jl_tuple_len(b));
size_t i=0, j;
for(j=0; j < jl_tuple_len(a); j++) {
jl_tupleset(c, i, jl_tupleref(a,j));
i++;
}
for(j=0; j < jl_tuple_len(b); j++) {
jl_tupleset(c, i, jl_tupleref(b,j));
i++;
}
return c;
}

jl_tuple_t *jl_tuple_fill(size_t n, jl_value_t *v)
{
if (n==0) return jl_null;
jl_tuple_t *tup = jl_alloc_tuple_uninit(n);
for(size_t i=0; i < n; i++) {
jl_tupleset(tup, i, v);
}
return tup;
}

DLLEXPORT jl_function_t *jl_new_closure(jl_fptr_t fptr, jl_value_t *env,
jl_lambda_info_t *linfo)
{
Expand Down
Loading

2 comments on commit 246c078

@Keno
Copy link
Member

@Keno Keno commented on 246c078 Mar 2, 2015

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But, but, it's not Christmas yet!

@JeffBezanson
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't worry, it might take that long to finish this! :)

Please sign in to comment.