PHP codegen: use nimAt for PHP 5.3 compatibility

This commit is contained in:
Andreas Rumpf 2016-03-04 21:59:58 +01:00
commit 92cf673f37
2 changed files with 17 additions and 2 deletions

View file

@ -944,8 +944,17 @@ proc genArrayAccess(p: PProc, n: PNode, r: var TCompRes) =
else: internalError(n.info, "expr(nkBracketExpr, " & $ty.kind & ')') else: internalError(n.info, "expr(nkBracketExpr, " & $ty.kind & ')')
r.typ = etyNone r.typ = etyNone
if r.res == nil: internalError(n.info, "genArrayAccess") if r.res == nil: internalError(n.info, "genArrayAccess")
if p.target == targetPHP and ty.kind in {tyString, tyCString}: if p.target == targetPHP:
r.res = "ord($1[$2])" % [r.address, r.res] if n.sons[0].kind in nkCallKinds+{nkStrLit..nkTripleStrLit}:
useMagic(p, "nimAt")
if ty.kind in {tyString, tyCString}:
r.res = "ord(nimAt($1, $2))" % [r.address, r.res]
else:
r.res = "nimAt($1, $2)" % [r.address, r.res]
elif ty.kind in {tyString, tyCString}:
r.res = "ord($1[$2])" % [r.address, r.res]
else:
r.res = "$1[$2]" % [r.address, r.res]
else: else:
r.res = "$1[$2]" % [r.address, r.res] r.res = "$1[$2]" % [r.address, r.res]
r.address = nil r.address = nil

View file

@ -275,6 +275,12 @@ proc mnewString(len: int): string {.asmNoStackFrame, compilerproc.} =
return result; return result;
""" """
when defined(nimphp):
proc nimAt(x: string; i: int): string {.asmNoStackFrame, compilerproc.} =
asm """
return `x`[`i`];
"""
when defined(nimphp): when defined(nimphp):
proc nimSubstr(s: string; a, b: int): string {. proc nimSubstr(s: string; a, b: int): string {.
asmNoStackFrame, compilerproc.} = asmNoStackFrame, compilerproc.} =