Jan Nieuwenhuizen
e8969af4ca
mescc: Tinycc support: sizeof: Bugfix for c-array.
...
* module/language/c99/compiler.mes (->size): Bugfix for c-array.
* scaffold/tests/85-sizeof.c: Test it.
2018-05-12 11:25:35 +02:00
Jan Nieuwenhuizen
ad9f171c49
mescc: Tinycc support: Implement ((struct foo*)p)->bar.
...
* module/language/c99/compiler.mes (expr->accu*):
* scaffold/tests/7p-struct-cast.c: Test it.
* build-aux/check-mescc.sh (tests): Run it.
2018-05-12 00:20:51 +02:00
Jan Nieuwenhuizen
057607ca0a
mescc: Tinycc support: Implement (foo--)->bar and permutations.
...
* module/language/c99/info.scm (clone): Add post field.
(make): Handle post parameter.
* module/language/c99/compiler.mes (clone): Handle post parameter.
(expr->accu*): Set it to support foo--/foo--.
(expr->accu): Read it to support foo--/foo--.
* scaffold/tests/7o-struct-pre-post.c: Test it.
* build-aux/check-mescc.sh: Run it.
2018-05-13 13:50:32 +02:00
Jan Nieuwenhuizen
330404125e
mescc: Tinycc support: Function addresses.
2018-05-11 19:46:26 +02:00
Jan Nieuwenhuizen
b254f12d5e
mescc: Tinycc support: Numeric constant expressions.
2018-05-11 19:27:33 +02:00
Jan Nieuwenhuizen
ec13ccc19f
mescc: Tinycc support: Function variables.
2018-05-11 18:53:54 +02:00
Jan Nieuwenhuizen
8cc406c9ff
mescc: Tinycc support: Pointer typedefs.
2018-05-11 18:36:35 +02:00
Jan Nieuwenhuizen
b42ecbd928
mescc: Tinycc support: Array typedefs.
2018-05-11 18:26:01 +02:00
Jan Nieuwenhuizen
6bcc9a91e3
mescc: Tinycc support: Sizeof struct destruct.
2018-05-11 17:13:07 +02:00
Jan Nieuwenhuizen
07e73b8f9a
mescc: Tinycc support: Anonymous union initialization.
2018-05-11 15:52:30 +02:00
Jan Nieuwenhuizen
e3a8316184
mescc: Tinycc support: Fix for ?-operator.
2018-05-11 15:13:55 +02:00
Jan Nieuwenhuizen
70cb56025f
mescc: Tinycc support: Valued function assign.
2018-05-11 13:34:45 +02:00
Jan Nieuwenhuizen
a1862f749f
mescc: Refactor type system: WIP
...
* module/language/c99/compiler.mes (): WIP
* module/language/c99/info.scm (): WIP
2018-05-10 12:40:07 +02:00
Jan Nieuwenhuizen
1b4a994b6d
mescc: Refactor type system: struct/enum fields: (name . <type>).
...
* module/language/c99/compiler.mes (struct-field): Refactor.
(field:name): Update.
(field:pointer): Update.
(field:size): Update.
(field:type): Remove.
(->size): New function.
2018-05-10 17:11:21 +02:00
Jan Nieuwenhuizen
b75dd7eca2
mescc: Refactor type system: introduce <array>, <pointer>, <var>.
...
* module/language/c99/info.scm (<array>, <pointer>, <var>): New type.
* module/language/c99/compiler.mes (ast-><type>): New function.
(ast-type): Use it.
2018-05-09 21:31:23 +02:00
Jan Nieuwenhuizen
c9ba7a619b
mescc: Refactor variable declaration.
...
* module/language/c99/compiler.mes (decl->info): Refactor.
2018-05-05 12:30:06 +02:00
Jan Nieuwenhuizen
1b8d59fd0f
mescc: Handle sizeof expression.
...
* module/language/c99/compiler.mes (expr->accu): Handle sizeof
expression.
* scaffold/tests/85-sizeof.c: Test it.
2018-05-05 00:59:31 +02:00
Jan Nieuwenhuizen
2311b8bd20
mescc: Handle struct field lists.
...
* module/language/c99/compiler.mes (struct-field): Return list of
fields. Update callers.
* scaffold/tests/84-struct-field-list.c: Test it.
* build-aux/check-mescc.sh (tests): Add it.
2018-05-05 00:14:47 +02:00
Jan Nieuwenhuizen
13edbaf4d8
mescc: Support heterogeneous variable init.
...
* module/language/c99/compiler.mes (decl->info): Support heterogeneous
variable init.
* scaffold/tests/83-heterogenoous-init.c: Test it.
* build-aux/check-mescc.sh (tests): Add it.
2018-05-04 22:38:01 +02:00
Jan Nieuwenhuizen
5fba6d1a70
mescc: Handle (Skip) global static.
...
* module/language/c99/compiler.mes (decl->info): Handle (Skip) global
static.
* scaffold/tests/48-global-static.c: Test it.
2018-05-04 20:40:04 +02:00
Jan Nieuwenhuizen
e53f55f002
mescc: Support functions in expression.
...
* module/language/c99/info.scm (<function>): New type.
* module/language/c99/compiler.mes (ast->type): Support function.
(expr->type-size): Likewise.
(expr->type): Likewise.
(expr->accu*): Likewise.
(function->info): Create <function>.
* module/mes/M1.mes (object->M1): Grok <function>.
* scaffold/tests/47-function-expression.c: Test it.
* build-aux/check-mescc.sh: Add it.
2018-05-04 13:58:27 +02:00
Jan Nieuwenhuizen
be60b3e49b
mescc: Support function-static variables.
...
* module/language/c99/info.scm (make): Add statics field.
(<global>): Add name and function fields. Update callers.
(global->string): New function.
* module/mes/M1.mes (object->M1): Update.
* module/language/c99/compiler.mes (clone): Add statics field.
(ident->accu): For <global>, use global in text (WAS: name).
(ident-address->accu): Likewise.
(ident-address->base): Likewise.
(decl-local->info): New function.
(decl->info): New function.
(ast->info): Use them.
(function->info): Keep globals in object (WAS: global:value only).
* scaffold/tests/46-function-static.c: Test it.
2018-05-04 20:45:27 +02:00
Jan Nieuwenhuizen
a937d18c38
build: Simplify, drop make.scm experiment.
...
* build.sh: Rewrite.
* build-aux/build-cc.sh: New file.
* build-aux/build-mes.sh: New file.
* build-aux/build-mlibc.sh: New file.
* build-aux/cc.sh: New file.
* build-aux/cc-mes.sh: New file.
* build-aux/cc-mlibc.sh: New file.
* install.sh: Update.
* make.scm: Remove.
* guile/guix/make.scm: Remove.
* guile/guix/records.scm: Remove.
* guile/guix/shell-utilsg.scm: Remove.
2018-04-29 18:38:57 +02:00
Jan Nieuwenhuizen
ad135d3752
doc: Release udpate.
...
* HACKING: Update.
* INSTALL: Update.
* NEWS: Update.
* README: Update.
* doc/ANNOUNCE-0.12: New file.
* throughout: (janneke) coming out.
2017-11-21 19:22:26 +01:00
Jan Nieuwenhuizen
cd0e3f8ba5
mescc: Remove debugging.
...
* module/language/c99/compiler.mes: Remove debugging.
2018-04-07 13:14:58 +02:00
Jan Nieuwenhuizen
83549786ed
mescc: No comments in M1 when running on Mes.
...
* module/language/c99/compiler.mes (ast-comment): If mes?, return nil.
2018-04-07 13:13:26 +02:00
Jan Nieuwenhuizen
5867ac4afe
mescc: Trace globals.
...
* module/language/c99/compiler.mes (mescc:trace): New function. Use
throughout.
2018-04-07 12:56:17 +02:00
Jan Nieuwenhuizen
5e9c539f57
mescc: trace M1 dumping.
...
* module/language/c99/compiler.mes (info->object): Add tracing.
* module/mes/M1.mes (object->M1): Add tracing.
2018-04-07 10:24:57 +02:00
Jan Nieuwenhuizen
30262dcdc1
mescc: Also print `parsing: input' when using -E.
...
* module/language/c99/compiler.mes (c99-input->ast): Print `parsing:
input'.
(c99-input->info): Remove that.
2018-04-06 07:18:19 +02:00
Jan Nieuwenhuizen
9fc27ee25a
mes: Single environment lookup for variables, SICP chapter 3.
...
* src/mes.c (t): Add TVARIABLE.
(scm_vm_eval_deref): New vm special.
(make_vref_): New internal function.
(eval_apply): WIP: replace symbols with their variable reference.
* src/gc.c (gc_loop): Handle TVARIABLE.
* src/lib.c (display_helper): Handle TVARIABLE.
* module/mes/type-0.mes (<cell:variable>): New variable.
(cell:type-alist): Add it.
(variable?): New function.
* module/mes/display.mes (display): Handle <variable>.
2017-12-09 08:33:50 +01:00
Jan Nieuwenhuizen
fd13741eb3
mescc: Resurrect guile-1.8.
...
* guile/mescc.scm: Use GUILE_LOAD_COMPILED_PATH instead of -C.
[guile]: Include syncase.
* module/language/c99/compiler.scm [guile]: Stub pretty-print-c99.
Set stack to unlimited.
* module/language/c99/info.scm [guile]: Include (ice-9 syncase).
* module/mes/as-i386.scm [guile]: Likewise.
* module/mes/guile.scm [guile]: Add compose, export it.
2018-01-03 08:33:55 +01:00
Jan Nieuwenhuizen
1f8a217694
mescc: cleanups.
...
* guile/mescc.scm: Cleanups.
* module/language/c99/compiler.mes:
* module/language/c99/compiler.scm:
* module/language/c99/info.mes:
* module/language/c99/info.scm:
* module/mes/getopt-long.mes:
* module/mes/optargs.mes:
* module/mes/optargs.scm:
* module/mes/repl.mes:
* module/mes/scm.mes:
* scripts/mescc.mes:
2018-01-02 21:35:55 +01:00
Jan Nieuwenhuizen
72a4f7eba2
mescc: Use records for mes too.
...
* module/language/c99/info.mes: Use info.scm records, remove
simplistic list data structures.
2018-01-01 22:21:15 +01:00
Jan Nieuwenhuizen
4ce75e8f4b
mescc: Tinycc support: Respect word size better.
...
* stage0/x86.M1 (movzwl_0x32(%ebp),%eax,movzwl_0x8(%ebp),%eax): New
define.
* module/mes/as-i386.mes (i386:push-word-local-de-ref,
i386:word-local->accu): New function.
* module/mes/as-i386.scm: Export them.
* module/language/c99/compiler.mes (push-local-de-ref): Respect word size.
(ident->accu): Likewise.
2017-12-03 16:33:35 +01:00
Jan Nieuwenhuizen
60b7048e21
mescc: prefix local labels with _.
...
* module/language/c99/compiler.mes (expr->accu): prefix local labels with _.
2017-12-02 12:59:07 +01:00
Jan Nieuwenhuizen
74c4197467
mescc: Mescc-tools support: char foo[BAR] = {'a', 'b', 'c'}.
...
* stage0/x86.M1 (mov____%al,0x8(%ebp), mov____%al,0x32(%ebp),
mov____%ax,0x8(%ebp), mov____%ax,0x32(%ebp)): New define.
* module/mes/as-i386.mes (i386:accu->local+n,i386:byte-accu->local+n,
i386:word-accu->local+n): New function.
* module/language/c99/compiler.mes (accu->local+n): New function.
(initzer->data): Return char as single byte.
(decl->info): Support char foo[BAR] = {'a', 'b', 'c'}.
* scaffold/tests/66-local-char-array.c: Test it.
* make.scm (add-scaffold-test): Build it.
2017-11-27 19:51:18 +01:00
Jan Nieuwenhuizen
0fa18b338d
build: mlib/include to include, move mlib to lib.
...
* include: Move from mlib/include.
* lib: Move from mlib.
* BOOTSTRAP: Update.
* HACKING: Update.
* guile/guix/make.scm: Update.
* make.scm: Update.
* module/language/c99/compiler.mes: Update.
2017-11-22 16:23:48 +01:00
Jan Nieuwenhuizen
448b167c09
mes: resurrect running MesCC: update info interface.
...
* module/language/c99/info.mes (type?, global?, local?): New function.
(make-global): Remove name parameter.
* module/nyacc/lang/c99/pprint.mes: New file.
2017-11-20 23:17:50 +01:00
Jan Nieuwenhuizen
302282dcdb
Revert "mescc: Grok char foo[] parameter."
...
This reverts commit c4cc75105db48b550cd515751b766b2e7a88ddc3.
2017-11-19 20:50:06 +01:00
Jan Nieuwenhuizen
cb90e51068
mescc: Grok char foo[] parameter.
...
* module/language/c99/compiler.mes (function->text+data): Grok char
foo[] parameter.
2017-11-19 19:59:18 +01:00
Jan Nieuwenhuizen
e77e56c5b0
mescc: Grok char *const foo[];
...
* module/language/c99/compiler.mes (ast-strip-const): Grok char *const argv[];
2017-11-19 16:46:43 +01:00
Jan Nieuwenhuizen
66a78f68cb
mescc: cleanup obsolete Nyacc 0.7x compatibility.
...
* module/language/c99/compiler.mes (ast-type->type, ast->type
expr->accu, struct-field, decl->info,): Remove obsolete Nyacc 0.7x
patterns.
2017-11-18 21:05:43 +01:00
Jan Nieuwenhuizen
02e70486a1
mescc: Tinycc support: struct struct array.
...
Support
struct foo
{
struct bar baz[N];
struct bar bla*[M];
};
* module/language/c99/compiler.mes (expr->accu):
* scaffold/tests/7n-struct-struct-array.c: Test it.
* make.scm (add-scaffold-test): Build it.
2017-11-17 15:24:45 +01:00
Jan Nieuwenhuizen
67afa2a397
mescc: Tinycc support: empty for.
...
* module/language/c99/compiler.mes (test-jump-label->info): Handle
empty expression.
* make.scm (add-tcc-test "45_empty_for"): Test it.
2017-11-16 05:52:47 +01:00
Jan Nieuwenhuizen
b24fcbad60
mescc: Tinycc support: workaround lack of long long support.
...
* module/language/c99/compiler.mes (i386:type-alist): Use size=4 for
long long as a workaround.
2017-11-14 19:39:46 +01:00
Jan Nieuwenhuizen
dc65de59ce
mescc: refactor expr->accu, expr->accu*, fixes nontrivial struct by value assign.
...
* module/language/c99/compiler.mes: (pke): New function.
(expr->number): Rename from p-expr->number. Update callers.
(decl->info, init-declr->pointer, struct-field): Several pointeryness fixes.
(expr->accu*, expr->accu): Remove special-casing for foo.bar,
foo->bar, foo[bar]. Fixes struct by value assign for non-trival
expressions.
(accu->ident, ident-address->accu, ident->accu):
(base->ident-address, ident->base): Remove.
* scaffold/tests/7k-for-each-elem.c (test): Test it.
* scaffold/tests/7c-dynarray.c (test): Test it.
* scaffold/tests/7m-struct-char-array-assign.c: Test it.
* make.scm (add-scaffold-test): Build it.
2017-11-11 13:45:53 +01:00
Jan Nieuwenhuizen
66204d56c0
mescc: Support Nyacc-0.81.0.
...
* module/language/c99/compiler.mes (ast->info): Handle asm-expr from
Nyacc 0.81.0.
2017-09-10 21:09:23 +02:00
Jan Nieuwenhuizen
9555d90174
mescc: Tinycc support: struct by value assign.
...
* module/language/c99/compiler.mes (expr->accu): warn for unsupported
sizes.
* scaffold/tests/7h-struct-assign.c (test): Test it.
2017-09-10 16:59:53 +02:00
Jan Nieuwenhuizen
3560ee6c95
mescc: Tinycc support: fix *--p = 'x'.
...
* module/language/c99/compiler.mes (expr->accu): Respect size in *--p = 'x'.
* scaffold/tests/23-pointer.c (test): Test it.
2017-08-27 16:58:56 +02:00
Jan Nieuwenhuizen
19ea4fa268
mescc: Tinycc support: initializer arithmetic.
...
* module/language/c99/compiler.mes (p-expr->bool): New function
(p-expr->number): Support bitwise-and, bitwise-not, cast, cond-expr.
2017-08-27 12:57:50 +02:00