summaryrefslogtreecommitdiff
path: root/src/cmd/cc/lexbody
diff options
context:
space:
mode:
authorOndřej Surý <ondrej@sury.org>2011-02-14 13:23:51 +0100
committerOndřej Surý <ondrej@sury.org>2011-02-14 13:23:51 +0100
commit758ff64c69e34965f8af5b2d6ffd65e8d7ab2150 (patch)
tree6d6b34f8c678862fe9b56c945a7b63f68502c245 /src/cmd/cc/lexbody
parent3e45412327a2654a77944249962b3652e6142299 (diff)
downloadgolang-upstream/2011-02-01.1.tar.gz
Imported Upstream version 2011-02-01.1upstream/2011-02-01.1
Diffstat (limited to 'src/cmd/cc/lexbody')
-rw-r--r--src/cmd/cc/lexbody43
1 files changed, 14 insertions, 29 deletions
diff --git a/src/cmd/cc/lexbody b/src/cmd/cc/lexbody
index 0bccc1733..24f9bdc85 100644
--- a/src/cmd/cc/lexbody
+++ b/src/cmd/cc/lexbody
@@ -88,47 +88,32 @@ pragincomplete(void)
;
}
-void
-gethunk(void)
-{
- hunk = malloc(NHUNK);
- memset(hunk, 0, NHUNK);
- nhunk = NHUNK;
-}
-
void*
alloc(int32 n)
{
void *p;
- while((uintptr)hunk & MAXALIGN) {
- hunk++;
- nhunk--;
+ p = malloc(n);
+ if(p == nil) {
+ print("alloc out of mem\n");
+ exit(1);
}
- while(nhunk < n)
- gethunk();
- p = hunk;
- nhunk -= n;
- hunk += n;
+ memset(p, 0, n);
return p;
}
void*
-allocn(void *p, int32 on, int32 n)
+allocn(void *p, int32 n, int32 d)
{
- void *q;
-
- q = (uchar*)p + on;
- if(q != hunk || nhunk < n) {
- while(nhunk < on+n)
- gethunk();
- memmove(hunk, p, on);
- p = hunk;
- hunk += on;
- nhunk -= on;
+ if(p == nil)
+ return alloc(n+d);
+ p = realloc(p, n+d);
+ if(p == nil) {
+ print("allocn out of mem\n");
+ exit(1);
}
- hunk += n;
- nhunk -= n;
+ if(d > 0)
+ memset((char*)p+n, 0, d);
return p;
}