Size: a a a

2021 September 03

f

for(int c; (c = getc... in ru.nim.talks
Дико
источник

f

for(int c; (c = getc... in ru.nim.talks
Я сношу 1.2к строк кода на макроса0
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
хм, а как тогда это в flatty было сделано 🤔
источник

f

for(int c; (c = getc... in ru.nim.talks
И вставляю одну прагму
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
источник

f

for(int c; (c = getc... in ru.nim.talks
    while i < s.len:
     var key: string
     parseHook(s, i, key)
     eatChar(s, i, ':')
     when compiles(renameHook(v, key)):
       renameHook(v, key)
     if key == v.discriminatorFieldName:
       var discriminator: type(v.discriminatorField)
       parseHook(s, i, discriminator)
       new(v, discriminator)
       when compiles(newHook(v)):
         newHook(v)
       break
     skipValue(s, i)
     if i < s.len and s[i] == '}':
       error("No discriminator field.", i)
источник

f

for(int c; (c = getc... in ru.nim.talks
jsony аналогично
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
но вроде не так много кода
источник

f

for(int c; (c = getc... in ru.nim.talks
не поддерживает несколько полей
источник

f

for(int c; (c = getc... in ru.nim.talks
требует перепарсить два раза все данные
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
в flatty такого вроде нет же?
источник

f

for(int c; (c = getc... in ru.nim.talks
Точнее перепарсить для каждого поля
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
там сразу по полям
источник

f

for(int c; (c = getc... in ru.nim.talks
если у меня несколько дискриминантов в объекте
источник

f

for(int c; (c = getc... in ru.nim.talks
+ я могу еще нормально обойти бесноватый прувер
источник

f

for(int c; (c = getc... in ru.nim.talks
type
 Requires {.requiresinit.} = object

 Obj = object
   case kind: bool
     of true:
       req: Requires
       
     of false: discard
     
func build(inKind: bool): Obj =
 # I need to init `Obj` with a runtime value for a discriminant, but it is not possible
 # because

 result = Obj(kind: inKind) # Error: The Obj type requires the following fields to be initialized: req.

 result = Obj(kind: inKind, req: default(Requires)) # Error: cannot prove that it's safe to initialize 'req' with the runtime value for the discriminator 'kind'


 # I'm cornered by 'requires init' and 'cannot change discriminant', so I need hack around this
 # limitation using  ... good old `setKind`, which does not
 setKind(result, kind, inKind)
 if result.kind == true:
   result.req = default(Requires)

 # Which is possible on a C backend, not on other ones.
источник

f

for(int c; (c = getc... in ru.nim.talks
Это то во что я упирался если у меня были requiresinit и дискриминанты
источник

f

for(int c; (c = getc... in ru.nim.talks
{.push fieldChecks:off.}

func build(inKind: bool): Obj =
 result = Obj(kind: true, req: default(Requires))

 {.cast(uncheckedAssign).}:
   result.kind = inKind

{.pop.}
источник

f

for(int c; (c = getc... in ru.nim.talks
Это то что получается сейчас
источник

f

for(int c; (c = getc... in ru.nim.talks
И да, еще import {.all.} добавили
источник