First merge of 2.064 beta.

This corresponds to DMD commit a913ce4bc59a94a022a27e390fc841f4aededffb.

Doesn't build Phobos yet.
This commit is contained in:
David Nadlinger
2013-10-19 23:21:53 +02:00
committed by Kai Nacke
parent c400d180d2
commit cb341586e3
130 changed files with 13566 additions and 9190 deletions

View File

@@ -21,16 +21,16 @@
#include "macro.h"
int isIdStart(unsigned char *p);
int isIdTail(unsigned char *p);
int utfStride(unsigned char *p);
int isIdStart(utf8_t *p);
int isIdTail(utf8_t *p);
int utfStride(utf8_t *p);
unsigned char *memdup(unsigned char *p, size_t len)
utf8_t *memdup(utf8_t *p, size_t len)
{
return (unsigned char *)memcpy(mem.malloc(len), p, len);
return (utf8_t *)memcpy(mem.malloc(len), p, len);
}
Macro::Macro(unsigned char *name, size_t namelen, unsigned char *text, size_t textlen)
Macro::Macro(utf8_t *name, size_t namelen, utf8_t *text, size_t textlen)
{
next = NULL;
@@ -51,7 +51,7 @@ Macro::Macro(unsigned char *name, size_t namelen, unsigned char *text, size_t te
}
Macro *Macro::search(unsigned char *name, size_t namelen)
Macro *Macro::search(utf8_t *name, size_t namelen)
{ Macro *table;
//printf("Macro::search(%.*s)\n", namelen, name);
@@ -67,7 +67,7 @@ Macro *Macro::search(unsigned char *name, size_t namelen)
return table;
}
Macro *Macro::define(Macro **ptable, unsigned char *name, size_t namelen, unsigned char *text, size_t textlen)
Macro *Macro::define(Macro **ptable, utf8_t *name, size_t namelen, utf8_t *text, size_t textlen)
{
//printf("Macro::define('%.*s' = '%.*s')\n", namelen, name, textlen, text);
@@ -98,7 +98,7 @@ Macro *Macro::define(Macro **ptable, unsigned char *name, size_t namelen, unsign
* -1: get 2nd through end
*/
size_t extractArgN(unsigned char *p, size_t end, unsigned char **pmarg, size_t *pmarglen, int n)
size_t extractArgN(utf8_t *p, size_t end, utf8_t **pmarg, size_t *pmarglen, int n)
{
/* Scan forward for matching right parenthesis.
* Nest parentheses.
@@ -130,7 +130,7 @@ size_t extractArgN(unsigned char *p, size_t end, unsigned char **pmarg, size_t *
*pmarg = p + v;
for (; v < end; v++)
{ unsigned char c = p[v];
{ utf8_t c = p[v];
switch (c)
{
@@ -238,7 +238,7 @@ size_t extractArgN(unsigned char *p, size_t end, unsigned char **pmarg, size_t *
*/
void Macro::expand(OutBuffer *buf, size_t start, size_t *pend,
unsigned char *arg, size_t arglen)
utf8_t *arg, size_t arglen)
{
#if 0
printf("Macro::expand(buf[%d..%d], arg = '%.*s')\n", start, *pend, arglen, arg);
@@ -259,7 +259,7 @@ void Macro::expand(OutBuffer *buf, size_t start, size_t *pend,
arg = memdup(arg, arglen);
for (size_t u = start; u + 1 < end; )
{
unsigned char *p = buf->data; // buf->data is not loop invariant
utf8_t *p = buf->data; // buf->data is not loop invariant
/* Look for $0, but not $$0, and replace it with arg.
*/
@@ -273,10 +273,10 @@ void Macro::expand(OutBuffer *buf, size_t start, size_t *pend,
continue;
}
unsigned char c = p[u + 1];
utf8_t c = p[u + 1];
int n = (c == '+') ? -1 : c - '0';
unsigned char *marg;
utf8_t *marg;
size_t marglen;
extractArgN(arg, arglen, &marg, &marglen, n);
if (marglen == 0)
@@ -327,7 +327,7 @@ void Macro::expand(OutBuffer *buf, size_t start, size_t *pend,
*/
for (size_t u = start; u + 4 < end; )
{
unsigned char *p = buf->data; // buf->data is not loop invariant
utf8_t *p = buf->data; // buf->data is not loop invariant
/* A valid start of macro expansion is $(c, where c is
* an id start character, and not $$(c.
@@ -335,10 +335,10 @@ void Macro::expand(OutBuffer *buf, size_t start, size_t *pend,
if (p[u] == '$' && p[u + 1] == '(' && isIdStart(p+u+2))
{
//printf("\tfound macro start '%c'\n", p[u + 2]);
unsigned char *name = p + u + 2;
utf8_t *name = p + u + 2;
size_t namelen = 0;
unsigned char *marg;
utf8_t *marg;
size_t marglen;
size_t v;
@@ -346,7 +346,7 @@ void Macro::expand(OutBuffer *buf, size_t start, size_t *pend,
* beginning of macro argument (marg).
*/
for (v = u + 2; v < end; v+=utfStride(p+v))
{ unsigned char c = p[v];
{ utf8_t c = p[v];
if (!isIdTail(p+v))
{ // We've gone past the end of the macro name.