@@ 84,7 84,6 @@ typedef struct Proto {
char name[];
} Proto;
-
typedef struct Upval Upval;
struct Upval {
OBJHEADER;
@@ 212,7 211,6 @@ enum {
};
#define VOID ((Val){0})
-#define _EMPTY ((Val){TAGEmpty})
#define _DELETED ((Val){TAGDeleted})
#define isvoid(v) ((v).r == 0)
#define _isdeleted(v) (((v).r & 0xFF) == TAGDeleted)
@@ 234,16 232,15 @@ enum {
#define box_cfn(x) ((Val){(uint64_t)(intptr_t)(x) << 2 | TAGCFn})
#define truthy(x) (!isvoid(x) && ((x).r == TAGBool ? unbox_bool(x) : 1))
-static Val length_sstr;
+static Val len_sstr;
static int
typeof1(Val v)
{
if (isvoid(v))
return PEZ_TVoid;
- if (isobj(v)) {
+ if (isobj(v))
return objtag(v);
- }
if (isnum(v))
return PEZ_TNumber;
if (isbool(v))
@@ 1378,7 1375,7 @@ apply(PezContext *cx, Val *ret, void *srcfn, int srcpc, Val recv, uint n)
return runerr(cx, srcfn, srcpc, "array indexing takes one argument (got %d)", n), 0;
}
arg = args[0];
- if (arg.r == length_sstr.r) {
+ if (arg.r == len_sstr.r) {
*ret = box_num(inttofix(arr->len));
return 1;
}
@@ 1399,7 1396,7 @@ apply(PezContext *cx, Val *ret, void *srcfn, int srcpc, Val recv, uint n)
return runerr(cx, srcfn, srcpc, "string indexing takes one argument (got %d)", n), 0;
}
arg = args[0];
- if (arg.r == length_sstr.r) {
+ if (arg.r == len_sstr.r) {
*ret = box_num(inttofix(len));
return 1;
}
@@ 1437,7 1434,7 @@ setapply(PezContext *cx, Val *ret, void *srcfn, int srcpc, Val recv, uint n, Val
return runerr(cx, srcfn, srcpc, "array indexing takes one argument"), 0;
}
arg = args[0];
- if (arg.r == length_sstr.r) {
+ if (arg.r == len_sstr.r) {
return runerr(cx, srcfn, srcpc, "cannot mutate array length"), 0;
}
TRY(checkindex(cx, &idx, srcfn, srcpc, "array", arr->len, arg));
@@ 1497,8 1494,8 @@ exefn(PezContext *cx, Fn *fn, uint nargs)
int n = code[ip++] + 1;
Val *it = cx->stktop - n;
assert(cx->stktop > cx->stack + n);
- for (int i = 0; i < n; ++i ) {
- TRY(push(cx, it[i]));
+ for (int i = 0; i < n; ++i) {
+ TRY(push(cx, it[i]));
}
}
CASE(Odupbck) {
@@ 3454,7 3451,7 @@ setexpr(Comp *cm)
break;
case Olength:
--code->len;
- TRY(compconst(cm, length_sstr));
+ TRY(compconst(cm, len_sstr));
argc = 1;
opcode = Oapply;
goto Oapply;
@@ 3729,6 3726,7 @@ forstmt(Comp *cm)
resetlastops(cm);
return compop(cm, Ovoid);
}
+
static bool
stmt(Comp *cm)
{
@@ 3907,7 3905,7 @@ pez_new(PezAllocFn *alloc, void *userdata, size_t stacksize)
if (!cx->stack) goto Err;
cx->stktop = cx->stack;
cx->stkend = cx->stack + stacksize;
- if (!box_str(cx, &length_sstr, "length", 6)) assert(0);
+ if (!box_str(cx, &len_sstr, "len", 3)) assert(0);
if (!initcore(cx)) goto Err;
cx->gcthresh = stacksize * sizeof(Val)*5/2 + 128;
@@ 42,3 42,12 @@ printf["4+1+3: %a\n", add[4,1,3]]
}
printf["test %a\n", gather[-1, (), 'x]]
+
+@map: {[f, xs]
+ @ys: array#filled[xs.len, ()]
+ FOR [@i: 0][< xs.len][+ 1]
+ ys[i] = f[xs[i]]
+ ys
+}
+
+printf["%a\n", map["abcd", #[1,2,0]]]