summary refs log tree commit diff stats
path: root/rod/ecmasgen.nim
diff options
context:
space:
mode:
Diffstat (limited to 'rod/ecmasgen.nim')
-rwxr-xr-xrod/ecmasgen.nim23
1 files changed, 13 insertions, 10 deletions
diff --git a/rod/ecmasgen.nim b/rod/ecmasgen.nim
index b86b5dd59..6898b01d1 100755
--- a/rod/ecmasgen.nim
+++ b/rod/ecmasgen.nim
@@ -1,7 +1,7 @@
 #
 #
 #           The Nimrod Compiler
-#        (c) Copyright 2010 Andreas Rumpf
+#        (c) Copyright 2011 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
@@ -547,7 +547,7 @@ proc genRaiseStmt(p: var TProc, n: PNode, r: var TCompRes) =
     a: TCompRes
     typ: PType
   genLineDir(p, n, r)
-  if n.sons[0] != nil: 
+  if n.sons[0].kind != nkEmpty: 
     gen(p, n.sons[0], a)
     if a.com != nil: appf(r.com, "$1;$n", [a.com])
     typ = skipTypes(n.sons[0].typ, abstractPtrs)
@@ -610,7 +610,7 @@ proc genBlock(p: var TProc, n: PNode, r: var TCompRes) =
     sym: PSym
   inc(p.unique)
   idx = len(p.blocks)
-  if n.sons[0] != nil: 
+  if n.sons[0].kind != nkEmpty: 
     # named block?
     if (n.sons[0].kind != nkSym): InternalError(n.info, "genBlock")
     sym = n.sons[0].sym
@@ -633,7 +633,7 @@ proc genBreakStmt(p: var TProc, n: PNode, r: var TCompRes) =
     sym: PSym
   genLineDir(p, n, r)
   idx = len(p.blocks) - 1
-  if n.sons[0] != nil: 
+  if n.sons[0].kind != nkEmpty: 
     # named break?
     assert(n.sons[0].kind == nkSym)
     sym = n.sons[0].sym
@@ -991,7 +991,7 @@ proc genVarInit(p: var TProc, v: PSym, n: PNode, r: var TCompRes) =
   var 
     a: TCompRes
     s: PRope
-  if n == nil: 
+  if n.kind == nkEmpty: 
     appf(r.com, "var $1 = $2;$n", 
          [mangleName(v), createVar(p, v.typ, isIndirect(v))])
   else: 
@@ -1135,7 +1135,7 @@ proc genMagic(p: var TProc, n: PNode, r: var TCompRes) =
   of mExcl: binaryStmt(p, n, r, "", "delete $1[$2]")
   of mInSet: binaryExpr(p, n, r, "", "($1[$2] != undefined)")
   of mNLen..mNError: 
-    liMessage(n.info, errCannotGenerateCodeForX, n.sons[0].sym.name.s)
+    localError(n.info, errCannotGenerateCodeForX, n.sons[0].sym.name.s)
   of mNewSeq: binaryStmt(p, n, r, "", "$1 = new Array($2)")
   of mEcho: genEcho(p, n, r)
   else: 
@@ -1231,7 +1231,7 @@ proc genReturnStmt(p: var TProc, n: PNode, r: var TCompRes) =
   var a: TCompRes
   if p.procDef == nil: InternalError(n.info, "genReturnStmt")
   p.BeforeRetNeeded = true
-  if (n.sons[0] != nil): 
+  if (n.sons[0].kind != nkEmpty): 
     genStmt(p, n.sons[0], a)
     if a.com != nil: appf(r.com, "$1;$n", mergeStmt(a))
   else: 
@@ -1297,7 +1297,7 @@ proc genStmt(p: var TProc, n: PNode, r: var TCompRes) =
   r.com = nil
   r.res = nil
   case n.kind
-  of nkNilLit: nil
+  of nkNilLit, nkEmpty: nil
   of nkStmtList: 
     for i in countup(0, sonsLen(n) - 1): 
       genStmt(p, n.sons[i], a)
@@ -1324,9 +1324,9 @@ proc genStmt(p: var TProc, n: PNode, r: var TCompRes) =
      nkFromStmt, nkTemplateDef, nkMacroDef, nkPragma: 
     nil
   of nkProcDef, nkMethodDef, nkConverterDef: 
-    if (n.sons[genericParamsPos] == nil): 
+    if (n.sons[genericParamsPos].kind == nkEmpty): 
       var prc = n.sons[namePos].sym
-      if (n.sons[codePos] != nil) and not (lfNoDecl in prc.loc.flags): 
+      if (n.sons[codePos].kind != nkEmpty) and not (lfNoDecl in prc.loc.flags): 
         genProc(p, n, r)
       else: 
         discard mangleName(prc)
@@ -1391,6 +1391,7 @@ proc gen(p: var TProc, n: PNode, r: var TCompRes) =
   of nkCStringToString: convCStrToStr(p, n, r)
   of nkPassAsOpenArray: gen(p, n.sons[0], r)
   of nkStmtListExpr: genStmtListExpr(p, n, r)
+  of nkEmpty: nil
   else: InternalError(n.info, "gen: unknown node type: " & $n.kind)
   
 var globals: PGlobals
@@ -1416,6 +1417,7 @@ proc genModule(p: var TProc, n: PNode, r: var TCompRes) =
         makeCString(toFilename(p.module.module.info)), r.com])
 
 proc myProcess(b: PPassContext, n: PNode): PNode = 
+  if passes.skipCodegen(n): return n
   var 
     p: TProc
     r: TCompRes
@@ -1428,6 +1430,7 @@ proc myProcess(b: PPassContext, n: PNode): PNode =
   app(p.globals.code, mergeStmt(r))
 
 proc myClose(b: PPassContext, n: PNode): PNode = 
+  if passes.skipCodegen(n): return n
   result = myProcess(b, n)
   var m = BModule(b)
   if sfMainModule in m.module.flags: