PHP codegen: function pointers work
This commit is contained in:
parent
db67e95bb2
commit
b02e31e409
1 changed files with 11 additions and 3 deletions
|
|
@ -56,7 +56,8 @@ type
|
||||||
TResKind = enum
|
TResKind = enum
|
||||||
resNone, # not set
|
resNone, # not set
|
||||||
resExpr, # is some complex expression
|
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
|
TCompRes = object
|
||||||
kind: TResKind
|
kind: TResKind
|
||||||
typ: TJSTypeKind
|
typ: TJSTypeKind
|
||||||
|
|
@ -1096,7 +1097,10 @@ proc genSym(p: PProc, n: PNode, r: var TCompRes) =
|
||||||
p.declareGlobal(s.id, r.res)
|
p.declareGlobal(s.id, r.res)
|
||||||
of skProc, skConverter, skMethod:
|
of skProc, skConverter, skMethod:
|
||||||
discard mangleName(s, p.target)
|
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
|
if lfNoDecl in s.loc.flags or s.magic != mNone or
|
||||||
{sfImportc, sfInfixCall} * s.flags != {}:
|
{sfImportc, sfInfixCall} * s.flags != {}:
|
||||||
discard
|
discard
|
||||||
|
|
@ -1231,6 +1235,8 @@ proc genInfixCall(p: PProc, n: PNode, r: var TCompRes) =
|
||||||
r.typ = etyNone
|
r.typ = etyNone
|
||||||
add(r.res, "." | "->")
|
add(r.res, "." | "->")
|
||||||
var op: TCompRes
|
var op: TCompRes
|
||||||
|
if p.target == targetPHP:
|
||||||
|
op.kind = resCallee
|
||||||
gen(p, n.sons[0], op)
|
gen(p, n.sons[0], op)
|
||||||
add(r.res, op.res)
|
add(r.res, op.res)
|
||||||
genArgs(p, n, r, 2)
|
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:
|
if thisParam(p, n.sons[0].typ) != nil:
|
||||||
genInfixCall(p, n, r)
|
genInfixCall(p, n, r)
|
||||||
return
|
return
|
||||||
|
if p.target == targetPHP:
|
||||||
|
r.kind = resCallee
|
||||||
gen(p, n.sons[0], r)
|
gen(p, n.sons[0], r)
|
||||||
genArgs(p, n, 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) =
|
proc gen(p: PProc, n: PNode, r: var TCompRes) =
|
||||||
r.typ = etyNone
|
r.typ = etyNone
|
||||||
r.kind = resNone
|
if r.kind != resCallee: r.kind = resNone
|
||||||
#r.address = nil
|
#r.address = nil
|
||||||
r.res = nil
|
r.res = nil
|
||||||
case n.kind
|
case n.kind
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue