about summary refs log tree commit diff stats
path: root/run_one_test
Commit message (Collapse)AuthorAgeFilesLines
* 6200 - --dump is not needed for incremental tracesKartik Agaram2020-04-091-1/+2
| | | | | | | | This undoes commit 5764, which was ill-considered. We already had incremental prints at that point to 'last_run'. As long as we don't run out of RAM on large traces, there doesn't seem any need to print to stderr. Now '--dump' is only needed when juggling multiple traces.
* 5880Kartik Agaram2020-01-101-1/+1
|
* 5865Kartik Agaram2020-01-021-1/+1
| | | | Give the bootstrap C++ program a less salient name.
* 5864Kartik Agaram2020-01-021-1/+1
|
* 5675 - move helpers from subx-common into layersKartik Agaram2019-09-191-1/+1
| | | | | | | | | | | | | | | | This undoes 5672 in favor of a new plan: Layers 000 - 099 are for running without syntax sugar. We use them for building syntax-sugar passes. Layers 100 and up are for running with all syntax sugar. The layers are arranged in approximate order so more phases rely on earlier layers than later ones. I plan to not use intermediate syntax sugar (just sigils without calls, or sigils and calls without braces) anywhere except in the specific passes implementing them.
* 5662Kartik Agaram2019-09-151-1/+1
| | | | Fix several breakages.
* 5638Kartik Agaram2019-09-071-6/+1
|
* 5618Kartik Agaram2019-09-041-3/+9
|
* .Kartik Agaram2019-08-251-1/+1
|
* skip building apps when running a single testKartik Agaram2019-08-251-3/+3
| | | | Environment variables allow me to have non-local effects inside scripts.
* 5509Kartik Agaram2019-08-111-0/+22
highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
struct bytebuffer {
  char *buf;
  int len;
  int cap;
};

static void bytebuffer_reserve(struct bytebuffer *b, int cap) {
  if (b->cap >= cap) {
    return;
  }

  // prefer doubling capacity
  if (b->cap * 2 >= cap) {
    cap = b->cap * 2;
  }

  char *newbuf = malloc(cap);
  if (b->len > 0) {
    // copy what was there, b->len > 0 assumes b->buf != null
    memcpy(newbuf, b->buf, b->len);
  }
  if (b->buf) {
    // in case there was an allocated buffer, free it
    free(b->buf);
  }
  b->buf = newbuf;
  b->cap = cap;
}

static void bytebuffer_init(struct bytebuffer *b, int cap) {
  b->cap = 0;
  b->len = 0;
  b->buf = 0;

  if (cap > 0) {
    b->cap = cap;
    b->buf = malloc(cap); // just assume malloc works always
  }
}

static void bytebuffer_free(struct bytebuffer *b) {
  if (b->buf)
    free(b->buf);
}

static void bytebuffer_clear(struct bytebuffer *b) {
  b->len = 0;
}

static void bytebuffer_append(struct bytebuffer *b, const char *data, int len) {
  bytebuffer_reserve(b, b->len + len);
  memcpy(b->buf + b->len, data, len);
  b->len += len;
}

static void bytebuffer_puts(struct bytebuffer *b, const char *str) {
  bytebuffer_append(b, str, strlen(str));
}

static void bytebuffer_resize(struct bytebuffer *b, int len) {
  bytebuffer_reserve(b, len);
  b->len = len;
}

static void bytebuffer_flush(struct bytebuffer *b, int fd) {
  int yyy = write(fd, b->buf, b->len);
  (void) yyy;
  bytebuffer_clear(b);
}

static void bytebuffer_truncate(struct bytebuffer *b, int n) {
  if (n <= 0)
    return;
  if (n > b->len)
    n = b->len;
  const int nmove = b->len - n;
  memmove(b->buf, b->buf+n, nmove);
  b->len -= n;
}