Commit graph

266 commits

Author SHA1 Message Date
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
Jan Nieuwenhuizen 989bfdbd25 mescc: Tinycc support: array of struct of any size.
* module/language/c99/compiler.mes (accu*value): New function
  (expr->accu*): Use it to support array of struct of any size.
* scaffold/tests/7l-struct-any-size-array.c: Test it.
* make.scm (add-scaffold-test): Build it.
2017-08-27 11:23:45 +02:00
Jan Nieuwenhuizen 69073e1954 mescc: Tinycc support: pointer arithmetic with pointer-variable.
* module/language/c99/compiler.mes (expr->accu): pointer arithmetic with pointer-variable.
* scaffold/tests/76-pointer-arithmetic.c (test): Test it.
* mlibc/include/stdarg.h (va_start): Update for fixed pointer arithmetic.
2017-08-26 10:16:53 +02:00
Jan Nieuwenhuizen 8649f7a923 mescc: Tinycc support: pointer arithmetic with &variable.
* module/language/c99/compiler.mes (expr->pointer): Handle ref.
* scaffold/tests/76-pointer-arithmetic.c: Test it.
2017-08-25 06:58:15 +02:00
Jan Nieuwenhuizen 0875ce655a mescc: Tinycc support: pointer arithmetic with variable.
* module/language/c99/compiler.mes (expr->accu): Support pointer
  arithmetic with variable: p + i, p - i, p += i, p -= i.
* scaffold/tests/76-pointer-arithmetic.c (test): Test it.
2017-08-23 07:08:16 +02:00
Jan Nieuwenhuizen 1e23dbaf17 mescc: Tinycc support: handle pointerness, siziness for cast foo*.
* module/language/c99/compiler.mes (expr->pointer): Support cast foo*.
  (expr->size): Likewise.
* scaffold/tests/7k-for-each-elem.c: Test it
* make.scm (add-scaffold-test): Build it.
2017-08-23 06:55:25 +02:00
Jan Nieuwenhuizen 3392f7241a mescc: Tinycc support: struct.struct.
* module/language/c99/compiler.mes (field:name):
  (field:pointer):
  (field:size):
  (field:type):
  (field-field):
  (field-offset):
  (struct-field): Support struct.struct.
* scaffold/tests/7i-struct-struct.c: Test it.
* make.scm (add-scaffold-test): Build it.
2017-08-10 21:36:49 +02:00
Jan Nieuwenhuizen 8fcf2b36b2 mescc: Tinycc support: --*p, ++*p.
* module/language/c99/compiler.mes (expr->accu): Remove specific --/++.
  (expr->accu*): Support p, *p.
* scaffold/tests/76-pointer-arithmetic.c (test): Test it.
2017-08-10 20:57:43 +02:00
Jan Nieuwenhuizen b16c9dbf16 mescc: Tinycc support: word array assignment.
* stage0/x86.M1 (movzwl_(%eax),%eax): New define.
* module/mes/as-i386.mes (i386:word-mem->accu): New function.
* module/mes/as-i386.scm: Export it.
* module/language/c99/compiler.mes (expr->accu): word array assignment.
  (expr->accu*): word array assignment.
* scaffold/tests/7a-struct-char-array.c (test): Test it.
2017-08-08 10:00:13 +02:00