From d3bae50c3ca2bf38235bbc33f3f08ffa0f8e9a15 Mon Sep 17 00:00:00 2001 From: Hans Raaf Date: Wed, 11 May 2016 22:51:27 +0200 Subject: PHP codegen array constructor hack. Because of PHP can't have refs for literal function parameters I needed to come up with a hack such that the following code compiles with PHP target. ```nim type Foo = tuple[a: string, b: int] var foo: array [0..2, Foo] foo[0] = ("Test", 1) foo[1] = ("Me", 2) for x in foo: echo x.a echo x.b ``` --- lib/system/jssys.nim | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'lib/system') diff --git a/lib/system/jssys.nim b/lib/system/jssys.nim index cdaf7dae6..220683717 100644 --- a/lib/system/jssys.nim +++ b/lib/system/jssys.nim @@ -731,16 +731,19 @@ proc genericReset(x: JSRef, ti: PNimType): JSRef {.compilerproc.} = else: discard -proc arrayConstr(len: int, value: JSRef, typ: PNimType): JSRef {. - asmNoStackFrame, compilerproc.} = - # types are fake - when defined(nimphp): +when defined(nimphp): + proc arrayConstr(len: int, value: string, typ: string): JSRef {. + asmNoStackFrame, compilerproc.} = + # types are fake asm """ $result = array(); for ($i = 0; $i < `len`; $i++) $result[] = `value`; return $result; """ - else: +else: + proc arrayConstr(len: int, value: JSRef, typ: PNimType): JSRef {. + asmNoStackFrame, compilerproc.} = + # types are fake asm """ var result = new Array(`len`); for (var i = 0; i < `len`; ++i) result[i] = nimCopy(null, `value`, `typ`); -- cgit 1.4.1-2-gfad0