1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 11:50:28 +02:00

finish support for optional & keyword args; update ecmascript compiler

* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.
* libguile/vm-i-system.c (br-if-nargs-ne, br-if-args-lt)
  (br-if-nargs-gt): New instructions, for use by different lambda cases.
  (bind-optionals, bind-optionals/shuffle, bind-kwargs): New
  instructions, for binding optional and keyword arguments. Renumber
  other ops.

* module/language/ecmascript/compile-tree-il.scm (comp, comp-body):
  Update for new tree-il. Use the new optional argument mechanism
  instead of emulating it with rest arguments.

* module/language/glil/compile-assembly.scm (glil->assembly): Tweaks for
  optional and keyword argument compilation.

* module/language/tree-il.scm (parse-tree-il, unparse-tree-il): Make the
  else case optional, in the s-expression serialization of tree-il.

* module/language/tree-il/compile-glil.scm (flatten): Handle all of the
  lambda-case capabilities.
This commit is contained in:
Andy Wingo 2009-10-17 17:23:09 +02:00
parent 8753fd537c
commit 7e01997e88
7 changed files with 318 additions and 133 deletions

View file

@ -170,6 +170,21 @@ VM_NAME (struct scm_vm *vp, SCM program, SCM *argv, int nargs)
finish_args = SCM_EOL;
goto vm_error;
vm_error_kwargs_length_not_even:
err_msg = scm_from_locale_string ("Bad keyword argument list: odd length");
finish_args = SCM_EOL;
goto vm_error;
vm_error_kwargs_invalid_keyword:
err_msg = scm_from_locale_string ("Bad keyword argument list: expected keyword");
finish_args = SCM_EOL;
goto vm_error;
vm_error_kwargs_unrecognized_keyword:
err_msg = scm_from_locale_string ("Bad keyword argument list: unrecognized keyword");
finish_args = SCM_EOL;
goto vm_error;
vm_error_too_many_args:
err_msg = scm_from_locale_string ("VM: Too many arguments");
finish_args = scm_list_1 (scm_from_int (nargs));