mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-04-02 01:59:03 +02:00
First import of dmd-2.065-b1 (7088593).
The CPP mangling is not integrated yet.
This commit is contained in:
30
dmd2/macro.c
30
dmd2/macro.c
@@ -21,16 +21,16 @@
|
||||
|
||||
#include "macro.h"
|
||||
|
||||
int isIdStart(utf8_t *p);
|
||||
int isIdTail(utf8_t *p);
|
||||
int utfStride(utf8_t *p);
|
||||
int isIdStart(const utf8_t *p);
|
||||
int isIdTail(const utf8_t *p);
|
||||
int utfStride(const utf8_t *p);
|
||||
|
||||
utf8_t *memdup(utf8_t *p, size_t len)
|
||||
utf8_t *memdup(const utf8_t *p, size_t len)
|
||||
{
|
||||
return (utf8_t *)memcpy(mem.malloc(len), p, len);
|
||||
}
|
||||
|
||||
Macro::Macro(utf8_t *name, size_t namelen, utf8_t *text, size_t textlen)
|
||||
Macro::Macro(const utf8_t *name, size_t namelen, const utf8_t *text, size_t textlen)
|
||||
{
|
||||
next = NULL;
|
||||
|
||||
@@ -51,7 +51,7 @@ Macro::Macro(utf8_t *name, size_t namelen, utf8_t *text, size_t textlen)
|
||||
}
|
||||
|
||||
|
||||
Macro *Macro::search(utf8_t *name, size_t namelen)
|
||||
Macro *Macro::search(const utf8_t *name, size_t namelen)
|
||||
{ Macro *table;
|
||||
|
||||
//printf("Macro::search(%.*s)\n", namelen, name);
|
||||
@@ -67,7 +67,7 @@ Macro *Macro::search(utf8_t *name, size_t namelen)
|
||||
return table;
|
||||
}
|
||||
|
||||
Macro *Macro::define(Macro **ptable, utf8_t *name, size_t namelen, utf8_t *text, size_t textlen)
|
||||
Macro *Macro::define(Macro **ptable, const utf8_t *name, size_t namelen, const 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, utf8_t *name, size_t namelen, utf8_t *text,
|
||||
* -1: get 2nd through end
|
||||
*/
|
||||
|
||||
size_t extractArgN(utf8_t *p, size_t end, utf8_t **pmarg, size_t *pmarglen, int n)
|
||||
size_t extractArgN(const utf8_t *p, size_t end, const utf8_t **pmarg, size_t *pmarglen, int n)
|
||||
{
|
||||
/* Scan forward for matching right parenthesis.
|
||||
* Nest parentheses.
|
||||
@@ -238,7 +238,7 @@ size_t extractArgN(utf8_t *p, size_t end, utf8_t **pmarg, size_t *pmarglen, int
|
||||
*/
|
||||
|
||||
void Macro::expand(OutBuffer *buf, size_t start, size_t *pend,
|
||||
utf8_t *arg, size_t arglen)
|
||||
const 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; )
|
||||
{
|
||||
utf8_t *p = buf->data; // buf->data is not loop invariant
|
||||
utf8_t *p = (utf8_t *)buf->data; // buf->data is not loop invariant
|
||||
|
||||
/* Look for $0, but not $$0, and replace it with arg.
|
||||
*/
|
||||
@@ -276,7 +276,7 @@ void Macro::expand(OutBuffer *buf, size_t start, size_t *pend,
|
||||
utf8_t c = p[u + 1];
|
||||
int n = (c == '+') ? -1 : c - '0';
|
||||
|
||||
utf8_t *marg;
|
||||
const 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; )
|
||||
{
|
||||
utf8_t *p = buf->data; // buf->data is not loop invariant
|
||||
utf8_t *p = (utf8_t *)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.
|
||||
@@ -338,7 +338,7 @@ void Macro::expand(OutBuffer *buf, size_t start, size_t *pend,
|
||||
utf8_t *name = p + u + 2;
|
||||
size_t namelen = 0;
|
||||
|
||||
utf8_t *marg;
|
||||
const utf8_t *marg;
|
||||
size_t marglen;
|
||||
|
||||
size_t v;
|
||||
@@ -427,7 +427,7 @@ void Macro::expand(OutBuffer *buf, size_t start, size_t *pend,
|
||||
end -= v + 1 - u;
|
||||
u += mend - (v + 1);
|
||||
#endif
|
||||
mem.free(marg);
|
||||
mem.free((utf8_t *)marg);
|
||||
//printf("u = %d, end = %d\n", u, end);
|
||||
//printf("#%.*s#\n", end - u, &buf->data[u]);
|
||||
continue;
|
||||
@@ -444,7 +444,7 @@ void Macro::expand(OutBuffer *buf, size_t start, size_t *pend,
|
||||
}
|
||||
u++;
|
||||
}
|
||||
mem.free(arg);
|
||||
mem.free((utf8_t *)arg);
|
||||
*pend = end;
|
||||
nest--;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user