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
```
This commit is contained in:
parent
b654aa399a
commit
d3bae50c3c
1 changed files with 8 additions and 5 deletions
|
|
@ -731,16 +731,19 @@ proc genericReset(x: JSRef, ti: PNimType): JSRef {.compilerproc.} =
|
||||||
else:
|
else:
|
||||||
discard
|
discard
|
||||||
|
|
||||||
proc arrayConstr(len: int, value: JSRef, typ: PNimType): JSRef {.
|
when defined(nimphp):
|
||||||
asmNoStackFrame, compilerproc.} =
|
proc arrayConstr(len: int, value: string, typ: string): JSRef {.
|
||||||
# types are fake
|
asmNoStackFrame, compilerproc.} =
|
||||||
when defined(nimphp):
|
# types are fake
|
||||||
asm """
|
asm """
|
||||||
$result = array();
|
$result = array();
|
||||||
for ($i = 0; $i < `len`; $i++) $result[] = `value`;
|
for ($i = 0; $i < `len`; $i++) $result[] = `value`;
|
||||||
return $result;
|
return $result;
|
||||||
"""
|
"""
|
||||||
else:
|
else:
|
||||||
|
proc arrayConstr(len: int, value: JSRef, typ: PNimType): JSRef {.
|
||||||
|
asmNoStackFrame, compilerproc.} =
|
||||||
|
# types are fake
|
||||||
asm """
|
asm """
|
||||||
var result = new Array(`len`);
|
var result = new Array(`len`);
|
||||||
for (var i = 0; i < `len`; ++i) result[i] = nimCopy(null, `value`, `typ`);
|
for (var i = 0; i < `len`; ++i) result[i] = nimCopy(null, `value`, `typ`);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue