aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/runtime.c
diff options
context:
space:
mode:
authorKen Thompson <ken@golang.org>2008-06-26 14:58:23 -0700
committerKen Thompson <ken@golang.org>2008-06-26 14:58:23 -0700
commite42d6a5fe28aec6b7e2fda63d9b000a71e6f37fa (patch)
treef2d15628ec87ff5043712ebe054c5b2fb4af6400 /src/runtime/runtime.c
parent3e4e83ab1ee4b860a0ed08ccbe81c059982e89e1 (diff)
downloadgo-e42d6a5fe28aec6b7e2fda63d9b000a71e6f37fa.tar.xz
add pointer to val type of maps
SVN=124971
Diffstat (limited to 'src/runtime/runtime.c')
-rw-r--r--src/runtime/runtime.c35
1 files changed, 33 insertions, 2 deletions
diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c
index 849a72523b..5ff3f85a3f 100644
--- a/src/runtime/runtime.c
+++ b/src/runtime/runtime.c
@@ -980,6 +980,36 @@ stringcopy(uint32 s, string *a, string *b)
*a = *b;
}
+static uint64
+pointerhash(uint32 s, void **a)
+{
+ prints("pointerhash\n");
+ return 0x12345;
+}
+
+static uint32
+pointerequal(uint32 s, void **a, void **b)
+{
+ prints("pointerequal\n");
+ return 0;
+}
+
+static void
+pointerprint(uint32 s, void **a)
+{
+ prints("pointerprint\n");
+}
+
+static void
+pointercopy(uint32 s, void **a, void **b)
+{
+ if(b == nil) {
+ *a = nil;
+ return;
+ }
+ *a = *b;
+}
+
static uint32
rnd(uint32 n, uint32 m)
{
@@ -996,6 +1026,7 @@ algarray[] =
{
{ &memhash, &memequal, &memprint, &memcopy },
{ &stringhash, &stringequal, &stringprint, &stringcopy },
+ { &pointerhash, &pointerequal, &pointerprint, &pointercopy },
};
// newmap(keysize uint32, valsize uint32,
@@ -1008,8 +1039,8 @@ sys·newmap(uint32 keysize, uint32 valsize,
{
Hmap *m;
- if(keyalg >= nelem(algarray) ||
- valalg >= nelem(algarray)) {
+ if(keyalg >= 2 ||
+ valalg >= 3) {
prints("0<=");
sys·printint(keyalg);
prints("<");