summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2017-04-04 13:38:41 +0200
committerAndreas Rumpf <rumpf_a@web.de>2017-04-04 13:38:41 +0200
commitbfaa32968049aed6925e53def094b8135fed328a (patch)
tree6bf125c29121eb5c010ba0e93c95ee7988e790eb
parent0b79a2b02e2b6fac5245aba5eceb25234b921fc5 (diff)
parent87732f797c634b9c3ee1fbb77c0ed0c416d16db6 (diff)
downloadNim-bfaa32968049aed6925e53def094b8135fed328a.tar.gz
Merge branch 'devel' into araq
-rw-r--r--compiler/semcall.nim6
-rw-r--r--lib/genode_cpp/threads.h1
-rw-r--r--lib/system/threads.nim2
-rw-r--r--tests/metatype/tcompilesregression.nim18
4 files changed, 22 insertions, 5 deletions
diff --git a/compiler/semcall.nim b/compiler/semcall.nim
index 2dd115b1b..1089ab7db 100644
--- a/compiler/semcall.nim
+++ b/compiler/semcall.nim
@@ -155,7 +155,7 @@ proc presentFailedCandidates(c: PContext, n: PNode, errors: CandidateErrors):
                       renderTree(n[err.unmatchedVarParam]) & "' is immutable\n")
     for diag in err.diagnostics:
       add(candidates, diag & "\n")
-  
+
   result = (prefer, candidates)
 
 proc notFoundError*(c: PContext, n: PNode, errors: CandidateErrors) =
@@ -250,13 +250,11 @@ proc resolveOverloads(c: PContext, n, orig: PNode,
       if result.state in {csEmpty, csNoMatch}:
         tryOp "."
 
-    elif nfDotSetter in n.flags:
-      internalAssert f.kind == nkIdent and n.sonsLen == 3
+    elif nfDotSetter in n.flags and f.kind == nkIdent and n.len == 3:
       let calleeName = newStrNode(nkStrLit,
         f.ident.s[0..f.ident.s.len-2]).withInfo(n.info)
       let callOp = newIdentNode(getIdent".=", n.info)
       n.sons[0..1] = [callOp, n[1], calleeName]
-      excl(n.flags, nfDotSetter)
       orig.sons[0..1] = [callOp, orig[1], calleeName]
       pickBest(callOp)
 
diff --git a/lib/genode_cpp/threads.h b/lib/genode_cpp/threads.h
index a1cd61cd2..043f808f1 100644
--- a/lib/genode_cpp/threads.h
+++ b/lib/genode_cpp/threads.h
@@ -13,7 +13,6 @@
 #define _GENODE_CPP__THREAD_H_
 
 #include <base/thread.h>
-#include <util/avl_tree.h>
 #include <util/reconstructible.h>
 
 namespace Nim { struct SysThread; }
diff --git a/lib/system/threads.nim b/lib/system/threads.nim
index 4855a2b93..7743fffff 100644
--- a/lib/system/threads.nim
+++ b/lib/system/threads.nim
@@ -593,6 +593,8 @@ elif defined(genode):
   proc createThread*[TArg](t: var Thread[TArg],
                            tp: proc (arg: TArg) {.thread, nimcall.},
                            param: TArg) =
+    t.core = cast[PGcThread](allocShared0(sizeof(GcThread)))
+
     when TArg isnot void: t.data = param
     t.dataFn = tp
     when hasSharedHeap: t.stackSize = ThreadStackSize
diff --git a/tests/metatype/tcompilesregression.nim b/tests/metatype/tcompilesregression.nim
new file mode 100644
index 000000000..489cd06d6
--- /dev/null
+++ b/tests/metatype/tcompilesregression.nim
@@ -0,0 +1,18 @@
+discard """
+  output: '''ok'''
+"""
+
+# bug #5638
+
+type X = object
+  a_impl: int
+
+proc a(x: X): int =
+  x.a_impl
+
+var x: X
+assert(not compiles((block:
+  x.a = 1
+)))
+
+echo "ok"