laisi png
(31.1 KB, 434x756)
llvm ir png
(99.32 KB, 648x857)
Оуфигеть, еле скомпилировал пикрилейтед.
В итоге ввёл большую часть класса, ещё и self-тип. Можете поглядеть на LLVM IR, если поймёте что-то. Что закоментировано тоже работает, проверил.
В классах надо ещё ввести передачу self*. Потом пора будет переходить к перегрузке функций и операторов. В частости, внутри классов можно будет писать методы для перегрузки init, del, index, get, set и другие одноаргументные.
Перегружать операторы сложения, умножения и прочих двуаргументных как-то мне видится некрасивым. Лучше их писать отдельно, к тому же те же вектора math.vec надо иметь возможность складывать, у которых разные подтипы. Например vec3 и vec3 и написать просто template with V0(vec!N!),V1(vec!N!) func (V0 out,[V0 in0,V1 in1])...
А в случае именованных классов это же на самом деле макросы, представляющие из себя дженерики и если сделать add методом, то можно, чтобы только один тип самого себя принимался.
только заметил, что функция метода называется .m0, а не abc.m0, надо исправить