Commit graph

655 commits

Author SHA1 Message Date
Jan Nieuwenhuizen 010ab2032f
mescc: Tinycc support: Fix sizeof interesting expressions.
* module/language/c99/compiler.mes (ast->type): Return type for
  sizeof-expr, sizeof-type.
* scaffold/tests/85-sizeof.c: Test it.
2018-05-14 20:14:42 +02:00
Jan Nieuwenhuizen 0f87473105
mescc: Tinycc support: Support bit-fields.
* module/language/c99/compiler.mes (struct->fields): Support bit-fields.
  (ast->type):
  (field-field):
  (field-offset):
  (expr->accu*):
  (expr->accu):
  (struct-field):
  (->size):
* module/language/c99/info.scm (<bit-field>): New type.
* stage0/x86.M1 (and____$i32,%eax, and____(%edx),%eax,
  mov____(%edx),%eax, or____(%edx),%eax): New macro.
* module/mes/as-i386.mes (i386:base-mem->accu): Use
  it.
  (i386:accu-and, i386:accu-and-base-mem, i386:accu-or-base-mem): New
  function.
* module/mes/as-i386.scm: Export them.
* scaffold/tests/7q-bit-field.c: Test it.
* build-aux/check-mescc.sh (tests): Run it.
2018-05-13 17:05:28 +02:00
Jan Nieuwenhuizen dae4a30417
mescc: Tinycc support: Anonymous string array.
* module/language/c99/compiler.mes (global->info): Anonymous string
  array.
  (local->info): Likewise.
  (array-init->string): Support array of char.
  (init-local): Likewise.
  (->size): Fix for array.
* scaffold/tests/4a-char-array.c: Test it.
* build-aux/check-mescc.sh (tests): Run it.
2018-05-12 12:03:01 +02:00
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 1cd97f1172
mes: Add unfold.
* module/srfi/srfi-1.mes (unfold): New function.
2018-05-20 13:04:20 +02:00
Jan Nieuwenhuizen 479a5ef7f1
mes: Add const.
* module/mes/scm.mes (const): New function.
* tests/scm.test ("const"): Test it.
2018-05-20 13:18:36 +02:00
Jan Nieuwenhuizen 7f0af1b46a
mes: string-join: Support optional delimiter, support grammar.
* module/srfi/srfi-13.mes (string-join): Support optional infix and
  grammar.
* tests/srfi-13.test ("string-join"): Test it.
2018-05-16 23:31:39 +02:00
Jan Nieuwenhuizen 10bd43d222
mes: Support srfi-9-gnu.
* module/srfi/srfi-9/gnu.mes: New file.  Support srfi-9-gnu.
* tests/srfi-9.test: Test it.
* tests/srfi-9.test-guile:
2018-05-04 12:44:05 +02:00
Jan Nieuwenhuizen 7b476693c2
core: Have core:eval expand macros.
* src/mes.c (core:eval-expand): Remove
  (core:eval-expanded): New variable.
  (eval_apply): Have core:eval expand macros; core:eval-expanded evals
  expanded sexps.
2018-04-28 18:31:10 +02:00
Jan Nieuwenhuizen 1400489a94
Revert "core: Remove pmatch-car, pmatch-cdr hack."
This reverts commit be1e84624ea4a158173f34af923e3c4a3793412a.
2018-04-29 07:46:40 +02:00
Jan Nieuwenhuizen c03449ac5a
core: Remove pmatch-car, pmatch-cdr hack.
* src/mes.c (scm_vm_eval_pmatch_car, scm_vm_eval_pmatch_cdr): Remove
  (eval_apply): Remove cell_vm_eval_pmatch_car,
  cell_vm_eval_pmatch_cdr hack.
  (mes_symbols): Remove cell_symbol_pmatch_car, cell_symbol_pmatch_cdr.
* scaffold/mini-mes.c: Likewise.
* module/mes/guile.scm (mes): Remove pmatch-car, pmatch-cdr.
* module/mes/pmatch.scm (ppat): Use plain car, cdr.
2018-04-28 12:19:40 +02:00
Jan Nieuwenhuizen 98ccaceb25
mes: Remove debugging.
* module/mes/module.mes (mes-load-module-env): Remove debugging.
2018-05-02 22:52:31 +02:00
Jan Nieuwenhuizen 81ed6564cf
mescc: Use file-name as global prefix.
* module/mes/M1.mes (object->M1): Add file-name parameter.
2018-05-03 09:01:00 +02:00
Jan Nieuwenhuizen f8eaebf713
mescc: Fix dumping of strings > M1_STRING_MAX.
* module/mes/M1.mes (object->M1): Skip opening quote.
2018-05-02 15:53:37 +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 1b0089111f
mes: Support -C and -L for Guile compatibility.
* module/mes/boot-0.scm): Support -C and -L for Guile compatibility.

Signed-off-by: Jan Nieuwenhuizen <janneke@gnu.org>
2018-04-29 19:06:11 +02:00
Jan Nieuwenhuizen 4ca4e9a6ff
mes: Support -e,--main option.
* module/mes/boot-0.scm: Support -e,--main option.
2018-04-29 18:37:00 +02:00
Jan Nieuwenhuizen 08d6c24263
mes: Upgrade Guile module support.
* module/mes/boot-0.scm (define-module): New macro with minimal Guile support.
  (use-modules): New macro.
2018-04-29 18:35:22 +02:00
Jan Nieuwenhuizen a2e9a6925c
mes: Add srfi-8.
* module/srfi/srfi-8.mes: New file.
2018-04-29 23:31:22 +02:00
Jan Nieuwenhuizen 8d866b6441
mes: string-join: Handle empty list.
* module/mes/boot-0.scm (string-join): Handle empty list.
2018-04-29 18:34:21 +02:00
Jan Nieuwenhuizen b209378fca
mes: Add basename.
* module/mes/posix.mes (basename): New function.
2018-04-29 18:33:14 +02:00
Jan Nieuwenhuizen 4dfe6e00cc
mes: Add delete-duplicates.
* module/srfi/srfi-1.mes (delete-duplicates): New function.
2018-04-29 18:32:35 +02:00
Jan Nieuwenhuizen 75db8bed91
mes: filter-map: Handle two lists.
* module/srfi/srfi-1.mes (filter-map): Handle two lists, add error
  when called with three or more.
2018-04-29 18:29:26 +02:00
Jan Nieuwenhuizen 56ef2f3f2d
mes: Add string-replace.
* module/srfi/srfi-13.mes (string-replace): New function.
* tests/srfi-13.test ("string-replace"): Test it.
2018-04-29 18:27:29 +02:00
Jan Nieuwenhuizen 563d1d92f9
mes: Add string-map.
* module/srfi/srfi-13.mes (string-map): New function.
* tests/srfi-13.test ("string-map"): Test it.
2018-04-29 18:26:46 +02:00
Jan Nieuwenhuizen 59d4d90a90
mes: Add string-trim, string-trim-right, string-trim-both.
* module/srfi/srfi-13.mes (string-trim, string-trimn-right,
  string-trim-both): New function.
* tests/srfi-13.test ("string-trim"): Test it.
  ("string-trim-right"):
  ("string-trim-both"):
2018-04-29 18:24:29 +02:00
Jan Nieuwenhuizen 3c9b5f433d
mes: Add string-contains.
* module/srfi/srfi-13.mes (string-contains): New function.
* tests/srfi-13.test ("string-contains"): Test it.
  ("string-contains not"):
2018-04-29 18:21:52 +02:00
Jan Nieuwenhuizen 1f216444f6
mes: string-drop: Error on negative droppings.
* module/srfi/srfi-13.mes (string-drop, string-take,
  string-drop-right): Error on negative droppings.
* tests/srfi-13.test ("string-drop"): Test it.
2018-04-29 18:15:04 +02:00
Jan Nieuwenhuizen dc24a7f76f
core: Add string ports.
* src/mes.c (type_t): Add TPORT.
  (scm_type_port): New symbol.
  (PORT): New macro.
  (MAKE_STRING_PORT): New macro.
  (eval_apply): Handle string ports in primitive-load.
  (mes_symbols): Add scm_type_port.
* src/posix.c (peekchar): Handle string ports.
  (readchar): New function.  Replace all getchar callers.
  (unreadchar): Likewise.
* module/mes/type-0 (port?): New function.
* module/mes/guile.mes (with-input-from-file): Rewrite.
  (open-input-string): Remove.
* module/mes/guile.scm (guile): Update cell types.
* src/gc.c (gc_loop): Support TPORT.
* src/lib.c (display_helper): Support TPORT.
* module/mes/display.mes (display): Support TPORT.
2018-04-29 17:48:38 +02:00