mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-03 18:34:43 +00:00
fixes #3799
This commit is contained in:
@@ -255,12 +255,13 @@ proc resolveOverloads(c: PContext, n, orig: PNode,
|
||||
|
||||
|
||||
proc instGenericConvertersArg*(c: PContext, a: PNode, x: TCandidate) =
|
||||
if a.kind == nkHiddenCallConv and a.sons[0].kind == nkSym and
|
||||
isGenericRoutine(a.sons[0].sym):
|
||||
let finalCallee = generateInstance(c, a.sons[0].sym, x.bindings, a.info)
|
||||
a.sons[0].sym = finalCallee
|
||||
a.sons[0].typ = finalCallee.typ
|
||||
#a.typ = finalCallee.typ.sons[0]
|
||||
if a.kind == nkHiddenCallConv and a.sons[0].kind == nkSym:
|
||||
let s = a.sons[0].sym
|
||||
if s.ast != nil and s.ast[genericParamsPos].kind != nkEmpty:
|
||||
let finalCallee = generateInstance(c, s, x.bindings, a.info)
|
||||
a.sons[0].sym = finalCallee
|
||||
a.sons[0].typ = finalCallee.typ
|
||||
#a.typ = finalCallee.typ.sons[0]
|
||||
|
||||
proc instGenericConvertersSons*(c: PContext, n: PNode, x: TCandidate) =
|
||||
assert n.kind in nkCallKinds
|
||||
|
||||
49
tests/converter/tgenericconverter2.nim
Normal file
49
tests/converter/tgenericconverter2.nim
Normal file
@@ -0,0 +1,49 @@
|
||||
# bug #3799
|
||||
|
||||
import macros
|
||||
|
||||
const nmax = 500
|
||||
|
||||
type
|
||||
Complex*[T] = object
|
||||
re*: T
|
||||
im*: T
|
||||
|
||||
converter toComplex*[T](x: tuple[re, im: T]): Complex[T] =
|
||||
result.re = x.re
|
||||
result.im = x.im
|
||||
|
||||
|
||||
proc julia*[T](z0, c: Complex[T], er2: T, nmax: int): int =
|
||||
result = 0
|
||||
var z = z0
|
||||
var sre = z0.re * z0.re
|
||||
var sim = z0.im * z0.im
|
||||
while (result < nmax) and (sre + sim < er2):
|
||||
z.im = z.re * z.im
|
||||
z.im = z.im + z.im
|
||||
z.im = z.im + c.im
|
||||
z.re = sre - sim + c.re
|
||||
sre = z.re * z.re
|
||||
sim = z.im * z.im
|
||||
inc result
|
||||
|
||||
template dendriteFractal*[T](z0: Complex[T], er2: T, nmax: int): int =
|
||||
julia(z0, (T(0.0), T(1.0)), er2, nmax)
|
||||
|
||||
iterator stepIt[T](start, step: T, iterations: int): T =
|
||||
for i in 0 .. iterations:
|
||||
yield start + T(i) * step
|
||||
|
||||
|
||||
let c = (0.36237, 0.32)
|
||||
for y in stepIt(2.0, -0.0375, 107):
|
||||
var row = ""
|
||||
for x in stepIt(-2.0, 0.025, 160):
|
||||
#let n = julia((x, y), c, 4.0, nmax) ### this works
|
||||
let n = dendriteFractal((x, y), 4.0, nmax)
|
||||
if n < nmax:
|
||||
row.add($(n mod 10))
|
||||
else:
|
||||
row.add(' ')
|
||||
echo row
|
||||
Reference in New Issue
Block a user