make non-varargs the default array creation method
This commit is contained in:
parent
a98365aac8
commit
9e48514f19
2
cc.bqn
2
cc.bqn
@ -5,7 +5,7 @@ args↓˜↩ return
|
|||||||
"call with argument specifying path of mlochbaum/BQN!"!2≤≠args
|
"call with argument specifying path of mlochbaum/BQN!"!2≤≠args
|
||||||
path←(⊑args)∾"/src/"
|
path←(⊑args)∾"/src/"
|
||||||
args↓˜↩1
|
args↓˜↩1
|
||||||
L ← {"m_vaB("∾(⍕≠𝕩)∾(∾","⊸∾¨𝕩)∾")"}
|
L ← {"m_caB(" ∾(⍕≠𝕩)∾",(B[]){" ∾(1↓∾","⊸∾¨𝕩)∾"})"}
|
||||||
LI ← {"m_cai32("∾(⍕≠𝕩)∾",(i32[]){"∾(1↓∾","⊸∾¨𝕩)∾"})"}
|
LI ← {"m_cai32("∾(⍕≠𝕩)∾",(i32[]){"∾(1↓∾","⊸∾¨𝕩)∾"})"}
|
||||||
# Escape the special characters that appear in BQN sources.
|
# Escape the special characters that appear in BQN sources.
|
||||||
Esc←{
|
Esc←{
|
||||||
|
|||||||
17
src/harr.c
17
src/harr.c
@ -48,21 +48,14 @@ HArr* toHArr(B x) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
B m_vaf64(usz sz, ...) {
|
B m_caf64(usz sz, f64* a) {
|
||||||
va_list vargs;
|
|
||||||
va_start(vargs, sz);
|
|
||||||
HArr_p r = m_harrv(sz);
|
HArr_p r = m_harrv(sz);
|
||||||
for (usz i = 0; i < sz; i++) r.a[i] = m_f64(va_arg(vargs, f64));
|
for (usz i = 0; i < sz; i++) r.a[i] = m_f64(a[i]);
|
||||||
va_end(vargs);
|
|
||||||
return r.b;
|
return r.b;
|
||||||
}
|
}
|
||||||
|
B m_caB(usz ia, B* a) {
|
||||||
B m_vaB(usz sz, ...) {
|
HArr_p r = m_harrv(ia);
|
||||||
va_list vargs;
|
for (usz i = 0; i < ia; i++) r.a[i] = a[i];
|
||||||
va_start(vargs, sz);
|
|
||||||
HArr_p r = m_harrv(sz);
|
|
||||||
for (usz i = 0; i < sz; i++) r.a[i] = va_arg(vargs, B);
|
|
||||||
va_end(vargs);
|
|
||||||
return r.b;
|
return r.b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -24,13 +24,10 @@ B m_i32arrp(usz ia) { // doesn't write any shape/size info! be careful!
|
|||||||
i32* i32arr_ptr(B x) { VT(x, t_i32arr); return c(I32Arr,x)->a; }
|
i32* i32arr_ptr(B x) { VT(x, t_i32arr); return c(I32Arr,x)->a; }
|
||||||
|
|
||||||
|
|
||||||
B m_vai32(usz sz, ...) {
|
B m_cai32(usz ia, i32* a) {
|
||||||
va_list vargs;
|
B r = m_i32arrv(ia);
|
||||||
va_start(vargs, sz);
|
|
||||||
B r = m_i32arrv(sz);
|
|
||||||
i32* rp = i32arr_ptr(r);
|
i32* rp = i32arr_ptr(r);
|
||||||
for (usz i = 0; i < sz; i++) rp[i] = va_arg(vargs, i32);
|
for (usz i = 0; i < ia; i++) rp[i] = a[i];
|
||||||
va_end(vargs);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -45,12 +45,6 @@ B m_str32(u32* s) {
|
|||||||
for (u64 i = 0; i < sz; i++) r.a[i] = m_c32(s[i]);
|
for (u64 i = 0; i < sz; i++) r.a[i] = m_c32(s[i]);
|
||||||
return r.b;
|
return r.b;
|
||||||
}
|
}
|
||||||
B m_cai32(usz ia, i32* a) {
|
|
||||||
B r = m_i32arrv(ia);
|
|
||||||
i32* rp = i32arr_ptr(r);
|
|
||||||
for (usz i = 0; i < ia; i++) rp[i] = a[i];
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
__ssize_t getline (char **__restrict __lineptr, size_t *restrict n, FILE *restrict stream);
|
__ssize_t getline (char **__restrict __lineptr, size_t *restrict n, FILE *restrict stream);
|
||||||
|
|
||||||
|
|||||||
16
src/mm.c
16
src/mm.c
@ -13,6 +13,13 @@ void* aalloc(usz sz) { // actual allocate
|
|||||||
void* p = malloc(sz);
|
void* p = malloc(sz);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
void mm_free(Value* x) {
|
||||||
|
#ifdef ALLOC_STAT
|
||||||
|
ctr_f[x->type]++;
|
||||||
|
x->refc = 0x61616161;
|
||||||
|
#endif
|
||||||
|
free(x);
|
||||||
|
}
|
||||||
|
|
||||||
void* mm_allocN(usz sz, u8 type) {
|
void* mm_allocN(usz sz, u8 type) {
|
||||||
Value* x = aalloc(sz);
|
Value* x = aalloc(sz);
|
||||||
@ -31,8 +38,8 @@ void* mm_allocN(usz sz, u8 type) {
|
|||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
memset(x, 'a', sz);
|
memset(x, 'a', sz);
|
||||||
#endif
|
#endif
|
||||||
|
x->flags = x->extra = x->mmInfo = x->type = 0;
|
||||||
x->refc = 1;
|
x->refc = 1;
|
||||||
x->flags = 0;
|
|
||||||
x->type = type;
|
x->type = type;
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
@ -40,13 +47,6 @@ B mm_alloc(usz sz, u8 type, u64 tag) {
|
|||||||
assert(tag>1LL<<16); // make sure it's `ftag`ged :|
|
assert(tag>1LL<<16); // make sure it's `ftag`ged :|
|
||||||
return b((u64)mm_allocN(sz,type) | tag);
|
return b((u64)mm_allocN(sz,type) | tag);
|
||||||
}
|
}
|
||||||
void mm_free(Value* x) {
|
|
||||||
#ifdef ALLOC_STAT
|
|
||||||
ctr_f[x->type]++;
|
|
||||||
x->refc = 0x61616161;
|
|
||||||
#endif
|
|
||||||
free(x);
|
|
||||||
}
|
|
||||||
void mm_visit(B x) {
|
void mm_visit(B x) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user