I wonder which would be the smaller patch: The changes you propose for tcc or a patch to support these constructs as is in the bootstrap compiler.
Otherwise if that is not your criterion what would be the arguments for the semantics that you mention that they do not belong to "simple enough C"? Of course from our point of view tcc IS a simple C compiler almost by definition, so, since it can compile itself, it must be written in already sufficiently simple C ;) Also as source tcc is supposed to be C89, except maybe 'long long' and maybe some minor things here or there which we could change indeed if that is wanted (for example usage of compound initializers in arm-gen.c) -- gr Jan Nieuwenhuizen wrote:
Hi! Are you willing to consider discussing/taking patches that reduce the variety and complexity of C constructs used in TinyCC source code? I have a list of about 20 unpolished patches[0] for constructs like: comma operator - p[0] = x & 255, p[1] = x >> 8 & 255; + p[0] = x & 255; p[1] = x >> 8 & 255; or (heterogeneous) initialzer lists - uint8_t buf[1000], *p = buf; + uint8_t buf[1000]; + uint8_t *p = buf; or function return derefencing - v = tok_alloc(astr.data, astr.size - 1)->tok; + TokenSym *tk = tok_alloc(astr.data, astr.size - 1); + v = tk->tok; or complex field access - return table_ident[v]->sym_define; + TokenSym *t = table_ident[v]; + Sym *s = t->sym_define; + return s; or even struct by value assign - vtop->type = *type; + memcpy (&vtop->type, type, sizeof (CType)); that allow tcc to be compiled with a simpler C compiler, so that in time we could add to README something like - BOOTSTRAPPABLE! Because tcc uses only a subset of C99 (C99--), it can be bootstrapped with a simple C compiler. Knowing[1] that TinyCC can build Gcc (wow!) and building tcc is easier than building gcc, it is a good candidate for use in a bootstrap path. The past couple of months I have been working to bootstrap tcc using mescc, a simple C compiler that can (almost) be bootstrapped from source. I have just released[2] Mes 0.10 which can compile a modified version of mes-tcc, which can compile a trivial C program into a working executable. Much work will have to be done before mes-tcc will be able to build a functional Gcc. I would like to start by reducing the delta on tcc that I'm carrying. What do you think, is bootstrappable builds[4] something you would want to support and what could C99-- look like? Greetings, janneke [0] https://gitlab.com/janneke/tinycc/commits/wip-mescc [1] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00099.html [2] http://lists.gnu.org/archive/html/guile-user/2017-09/msg00027.html [3] http://bootstrappable.org
_______________________________________________ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel