summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2013-03-24 13:05:19 +0100
committerAraq <rumpf_a@web.de>2013-03-24 13:05:19 +0100
commitba80bd807ca0f8562974aa4deae2b956cf6bf6d2 (patch)
treebaaef873a2b47ea67715a14a518f07297bece06b /compiler
parentdcb0f243de104635ab4b5d3824cb665635c34f1e (diff)
downloadNim-ba80bd807ca0f8562974aa4deae2b956cf6bf6d2.tar.gz
fixes #376
Diffstat (limited to 'compiler')
-rw-r--r--compiler/jsgen.nim26
1 files changed, 14 insertions, 12 deletions
diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim
index 249c65fe9..13463cf35 100644
--- a/compiler/jsgen.nim
+++ b/compiler/jsgen.nim
@@ -56,7 +56,7 @@ type
   TProc{.final.} = object 
     procDef: PNode
     prc: PSym
-    data: PRope
+    locals: PRope
     options: TOptions
     module: BModule
     g: PGlobals
@@ -955,8 +955,8 @@ proc genSym(p: var TProc, n: PNode, r: var TCompRes) =
     elif not p.g.generatedSyms.containsOrIncl(s.id):
       var r2: TCompRes
       genProc(p, s, r2)
-      #app(p.g.code, mergeStmt(r2))
-      app(r.com, mergeStmt(r2))
+      app(p.locals, mergeStmt(r2))
+      #app(r.com, mergeStmt(r2))
   else:
     if s.loc.r == nil:
       InternalError(n.info, "symbol has no generated name: " & s.name.s)
@@ -1454,16 +1454,17 @@ proc genProc(oldProc: var TProc, prc: PSym, r: var TCompRes) =
   resultAsgn = nil
   name = mangleName(prc)
   header = generateHeader(p, prc.typ)
-  if (prc.typ.sons[0] != nil) and sfPure notin prc.flags: 
+  if prc.typ.sons[0] != nil and sfPure notin prc.flags: 
     resultSym = prc.ast.sons[resultPos].sym
-    resultAsgn = ropef("var $1 = $2;$n", [mangleName(resultSym), 
+    resultAsgn = ropef("var $# = $#;$n", [mangleName(resultSym), 
         createVar(p, resultSym.typ, isIndirect(resultSym))])
     gen(p, prc.ast.sons[resultPos], a)
     if a.com != nil: appf(returnStmt, "$1;$n", [a.com])
-    returnStmt = ropef("return $1;$n", [a.res])
+    returnStmt = ropef("return $#;$n", [a.res])
   genStmt(p, prc.getBody, r)
-  r.com = ropef("function $1($2) {$n$3$4$5}$n", 
-                [name, header, resultAsgn, genProcBody(p, prc, r), returnStmt])
+  r.com = ropef("function $#($#) {$n$#$#$#$#}$n",
+                [name, header, p.locals, resultAsgn, 
+                 genProcBody(p, prc, r), returnStmt])
   r.res = nil  
   #if gVerbosity >= 3:
   #  echo "END   generated code for: " & prc.name.s
@@ -1515,9 +1516,10 @@ proc genStmt(p: var TProc, n: PNode, r: var TCompRes) =
      nkFromStmt, nkTemplateDef, nkMacroDef, nkPragma: nil
   of nkProcDef, nkMethodDef, nkConverterDef:
     var s = n.sons[namePos].sym
-    if {sfExportc, sfCompilerProc} * s.flags == {sfExportc}: 
-      var r2: TCompRes
-      genSym(p, n.sons[namePos], r2)
+    if {sfExportc, sfCompilerProc} * s.flags == {sfExportc}:
+      #var r2: TCompRes
+      genSym(p, n.sons[namePos], r)
+      r.res = nil
   of nkGotoState, nkState:
     internalError(n.info, "first class iterators not implemented")
   else:
@@ -1630,7 +1632,7 @@ proc myProcess(b: PPassContext, n: PNode): PNode =
   if m.module == nil: InternalError(n.info, "myProcess")
   initProc(p, globals, m, nil, m.module.options)
   genModule(p, n, r)
-  app(p.g.code, p.data)
+  app(p.g.code, p.locals)
   app(p.g.code, mergeStmt(r))
 
 proc myClose(b: PPassContext, n: PNode): PNode =