summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-08-10 03:19:00 +0200
committerAraq <rumpf_a@web.de>2014-08-10 03:19:00 +0200
commit037d7e4e5d3f142fb8486895820c70cf2e1cf641 (patch)
tree6e47c4b4029b9c57d00e3b2d5ff9f6ea5f3e0eda /compiler
parent86b654c58c610df1157538da3e3a86cbbdb4fb99 (diff)
parent0f15ebf8cad19d4f0c1953c789ff46bcb7306085 (diff)
downloadNim-037d7e4e5d3f142fb8486895820c70cf2e1cf641.tar.gz
Merge branch 'devel' of https://github.com/Araq/Nimrod into devel
Diffstat (limited to 'compiler')
-rw-r--r--compiler/ast.nim4
-rw-r--r--compiler/ccgtypes.nim1
-rw-r--r--compiler/semexprs.nim2
3 files changed, 7 insertions, 0 deletions
diff --git a/compiler/ast.nim b/compiler/ast.nim
index 51319127c..7ad294695 100644
--- a/compiler/ast.nim
+++ b/compiler/ast.nim
@@ -1313,6 +1313,10 @@ proc newSons(father: PNode, length: int) =
     setLen(father.sons, length)
 
 proc skipTypes*(t: PType, kinds: TTypeKinds): PType =
+  ## Used throughout the compiler code to test whether a type tree contains or
+  ## doesn't contain a specific type/types - it is often the case that only the
+  ## last child nodes of a type tree need to be searched. This is a really hot
+  ## path within the compiler!
   result = t
   while result.kind in kinds: result = lastSon(result)
 
diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim
index 4c71c6ff7..86142995c 100644
--- a/compiler/ccgtypes.nim
+++ b/compiler/ccgtypes.nim
@@ -122,6 +122,7 @@ proc mapSetType(typ: PType): TCTypeKind =
   else: result = ctArray
 
 proc mapType(typ: PType): TCTypeKind = 
+  ## Maps a nimrod type to a C type
   case typ.kind
   of tyNone, tyStmt: result = ctVoid
   of tyBool: result = ctBool
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim
index b81d53d41..7e97eb293 100644
--- a/compiler/semexprs.nim
+++ b/compiler/semexprs.nim
@@ -199,6 +199,8 @@ proc isCastable(dst, src: PType): bool =
     result = (dstSize >= srcSize) or
         (skipTypes(dst, abstractInst).kind in IntegralTypes) or
         (skipTypes(src, abstractInst-{tyTypeDesc}).kind in IntegralTypes)
+  if result and src.kind == tyNil:
+    result = dst.size <= platform.ptrSize
   
 proc isSymChoice(n: PNode): bool {.inline.} =
   result = n.kind in nkSymChoices