summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2016-03-05 17:55:51 +0100
committerAndreas Rumpf <rumpf_a@web.de>2016-03-05 17:55:51 +0100
commitb02e31e409d032849553089016e77bbdf11afef3 (patch)
tree2ece7c0a5d23c6b24a6f7a0e263d28123a684055 /compiler
parentdb67e95bb230f1ce0c503e1ecf86b392d089b663 (diff)
downloadNim-b02e31e409d032849553089016e77bbdf11afef3.tar.gz
PHP codegen: function pointers work
Diffstat (limited to 'compiler')
-rw-r--r--compiler/jsgen.nim14
1 files changed, 11 insertions, 3 deletions
diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim
index 5ae01a67d..8af6239a5 100644
--- a/compiler/jsgen.nim
+++ b/compiler/jsgen.nim
@@ -56,7 +56,8 @@ type
   TResKind = enum
     resNone,                  # not set
     resExpr,                  # is some complex expression
-    resVal                    # is a temporary/value/l-value
+    resVal,                   # is a temporary/value/l-value
+    resCallee                 # expression is callee
   TCompRes = object
     kind: TResKind
     typ: TJSTypeKind
@@ -1096,7 +1097,10 @@ proc genSym(p: PProc, n: PNode, r: var TCompRes) =
       p.declareGlobal(s.id, r.res)
   of skProc, skConverter, skMethod:
     discard mangleName(s, p.target)
-    r.res = s.loc.r
+    if p.target == targetPHP and r.kind != resCallee:
+      r.res = makeJsString($s.loc.r)
+    else:
+      r.res = s.loc.r
     if lfNoDecl in s.loc.flags or s.magic != mNone or
        {sfImportc, sfInfixCall} * s.flags != {}:
       discard
@@ -1231,6 +1235,8 @@ proc genInfixCall(p: PProc, n: PNode, r: var TCompRes) =
     r.typ = etyNone
   add(r.res, "." | "->")
   var op: TCompRes
+  if p.target == targetPHP:
+    op.kind = resCallee
   gen(p, n.sons[0], op)
   add(r.res, op.res)
   genArgs(p, n, r, 2)
@@ -1239,6 +1245,8 @@ proc genCall(p: PProc, n: PNode, r: var TCompRes) =
   if thisParam(p, n.sons[0].typ) != nil:
     genInfixCall(p, n, r)
     return
+  if p.target == targetPHP:
+    r.kind = resCallee
   gen(p, n.sons[0], r)
   genArgs(p, n, r)
 
@@ -1907,7 +1915,7 @@ proc genCast(p: PProc, n: PNode, r: var TCompRes) =
 
 proc gen(p: PProc, n: PNode, r: var TCompRes) =
   r.typ = etyNone
-  r.kind = resNone
+  if r.kind != resCallee: r.kind = resNone
   #r.address = nil
   r.res = nil
   case n.kind