summaryrefslogtreecommitdiff
path: root/module/language
AgeCommit message (Collapse)AuthorFilesLines
2012-03-08elisp rngBT Templeton1-0/+15
* module/language/elisp/boot.el (random): New function.
2012-03-08elisp i/oBT Templeton1-0/+13
* module/language/elisp/boot.el (send-string-to-terminal) (read-from-minibuffer, prin1-to-string): New functions.
2012-03-08elisp: symbol-name, internBT Templeton1-0/+2
* module/language/elisp/boot.el (symbol-name, intern): New functions.
2012-03-08elisp: when, unlessBT Templeton1-0/+8
* module/language/elisp/boot.el (when, unless): New macros.
2012-03-08elisp sequence functionsBT Templeton1-0/+82
* module/language/elisp/boot.el (nreverse, assoc, assq, rplaca, rplacd) (caar, cadr, cdar, cddr, dolist, stringp, string-equal, string=) (substring, upcase, downcase, string-match, make-vector, mapc, aref) (aset, concat): New functions.
2012-03-08integerp, wholenump return nil for non-numbersBT Templeton1-5/+3
* module/language/elisp/boot.el (integerp, wholenump): Call `integer?' before `exact?' so that these predicates return nil for non-numbers instead of signalling an error.
2012-03-05use #nil as default for elisp rest parametersBT Templeton1-1/+8
* module/langauge/elisp/compile-tree-il.scm (compile-lambda): Bind the rest parameter to `#nil' instead of `()' by default.
2012-03-05Merge branch 'bt/elisp'BT Templeton16-1395/+1092
Conflicts: am/guilec libguile/_scm.h libguile/vm-i-scheme.c module/language/elisp/compile-tree-il.scm module/language/elisp/runtime.scm module/language/elisp/runtime/macros.scm module/language/tree-il/compile-glil.scm module/language/tree-il/primitives.scm
2012-03-03Merge branch 'stable-2.0'Mark H Weaver2-164/+806
Conflicts: module/ice-9/psyntax-pp.scm module/language/tree-il.scm
2012-03-03tree-il->scheme improvementsMark H Weaver2-153/+797
* module/language/tree-il.scm (tree-il->scheme): New implementation that simply calls 'decompile-tree-il'. * module/language/scheme/decompile-tree-il.scm (choose-output-names, do-decompile): New internal procedures. (decompile-tree-il): New and improved implementation. Print source identifiers where possible, otherwise add minimal numeric suffixes. Previously we printed the gensyms. Avoid 'begin' in contexts that provide an implicit 'begin'. Produce 'cond', 'case', 'and', 'or', 'let*', named let, and internal defines where appropriate. Recognize keyword arguments in 'opts' to disable the production of these derived syntactic forms, and to optionally strip numeric suffixes from variable names. * module/ice-9/compile-psyntax.scm: Disable partial evaluation, letrec fixing, and primitive expansion when producing psyntax-pp.scm, in order to produce output as close to the original source as practical. Disable production of derived syntactic forms as needed during bootstrap. Strip numeric suffixes from variable names. Adjust pretty-printing parameters. * module/ice-9/psyntax-pp.scm: Regenerate. It is now less than half of the original size.
2012-03-03optimize dynamic-wind when we know winders are thunksAndy Wingo1-0/+24
* libguile/vm-i-system.c (wind): * module/language/tree-il/compile-glil.scm (flatten-lambda-case): Instead of making `wind' call `scm_thunk_p' on the winder and unwinder at runtime, make it the responsibility of the compiler to emit code to call thunk? and error, but only if the compiler cannot prove them to be thunks. * libguile/vm-engine.c (vm_engine): Remove a now-unused error block.
2012-03-02Merge remote-tracking branch 'origin/stable-2.0'Andy Wingo1-9/+9
2012-03-02tweaks to -Wformat's gettext detectionAndy Wingo1-9/+9
* module/language/tree-il/analyze.scm (proc-ref?): Change to use less false-if-exception and more variable-bound?. If a variable is present in the local module but not bound, assume that it is gettext if it has the right name. This is to allow for (define _ gettext). * test-suite/tests/tree-il.test ("warnings"): Update (_ "foo") example.
2012-03-02Merge remote-tracking branch 'origin/stable-2.0'Andy Wingo4-32/+47
There are a some failures currently: FAIL: tree-il.test: warnings: format: non-literal format string with forward declaration ERROR: srfi-18.test: current-exception-handler: current handler returned at top level - arguments: ((wrong-type-arg "car" "Wrong type argument in position ~A (expecting ~A): ~S" (1 "pair" #<unspecified>) (#<unspecified>))) ERROR: srfi-18.test: current-exception-handler: multiple levels of handler nesting - arguments: ((wrong-type-arg "car" "Wrong type argument in position ~A (expecting ~A): ~S" (1 "pair" #<unspecified>) (#<unspecified>))) ERROR: srfi-18.test: current-exception-handler: exception handler installation is thread-safe - arguments: ((wrong-type-arg "car" "Wrong type argument in position ~A (expecting ~A): ~S" (1 "pair" #<unspecified>) (#<unspecified>))) Conflicts: module/language/tree-il/peval.scm module/language/tree-il/primitives.scm test-suite/tests/tree-il.test
2012-03-02peval: inline applications of lambda to rest argsAndy Wingo1-10/+26
* module/language/tree-il/peval.scm (peval): Add optimization to hoist the inner procedure out of e.g. (lambda args (apply (lambda ...) args)) This commit restores the ability to detect escape-only prompts at compile-time. * test-suite/tests/tree-il.test: Update test for prompt with a lambda, and add a specific test for lambda application.
2012-03-02tree-il: fix `canonicalize!' for promptsAndy Wingo1-5/+5
* module/language/tree-il/canonicalize.scm (canonicalize!): Fix a bug in which the sense of `escape-only?' was reversed. We never saw this though, because for other reasons, no prompts were being identified as escape-only.
2012-03-02more general treatment of call-with-promptAndy Wingo1-16/+15
* module/language/tree-il/primitives.scm (*primitive-expand-table*): Don't limit the call-with-prompt to <prompt> transition to lambda expressions. Instead we can lexically bind the handler, and rely on peval to propagate a lambda expression.
2012-02-27Avoid failure when `format-analysis' stumbles upon unbound variables.Ludovic Courtès1-1/+2
* module/language/tree-il/analyze.scm (proc-ref?): Wrap `variable-ref' in `false-if-exception'. * test-suite/tests/tree-il.test ("warnings")["format"]("non-literal format string with forward declaration"): New test.
2012-02-23Merge remote-tracking branch 'local-2.0/stable-2.0'Andy Wingo1-30/+57
Conflicts: module/language/tree-il/analyze.scm
2012-02-20Optimize Equality PrimitivesNoah Lavine2-1/+21
* module/language/tree-il/primitives.scm: add equality-primitive?, which is true for eq?, eqv?, and equal? * module/language/tree-il/peval.scm: if an equality primitive is applied to the same variable twice, fold it to #t * test-suite/tests/tree-il.test: add tests for pevaling equality primitives
2012-02-19Have `-Wformat' recognize `ngettext' calls.Ludovic Courtès1-33/+43
* module/language/tree-il/analyze.scm (gettext?): Rename to... (proc-ref?): ... this. Add `proc' and `special-name' parameters. (gettext?): Define in terms of `proc-ref?'. (ngettext?): New procedure. (const-fmt): Recognize `ngettext' calls. (format-analysis)[<down>](check-format-args]: Check constant-but-non-string 2nd argument in the (not (const-fmt ...)) case. [check-simple-format-args]: Use `const-fmt'. * test-suite/tests/tree-il.test ("warnings")["format"]("non-literal format string using ngettext", "non-literal format string using ngettext as N_"): New tests. ("simple-format")["unsupported, ngettext"]: New test.
2012-02-19Have `-Wformat' better recognize the `gettext' procedure.Ludovic Courtès1-7/+24
Fixes <http://bugs.gnu.org/10846>. Reported by Bruno Haible <bruno@clisp.org>. * module/language/tree-il/analyze.scm (gettext?): New procedure. (const-fmt): Add `env' parameter; update callers. Use `gettext?'. (format-analysis)[check-simple-format-args]: Actually support gettextized format strings. * test-suite/tests/tree-il.test ("warnings")["format"]("non-literal format string using gettext"): Use `gettext' as the procedure name. ("non-literal format string using gettext as _"): New test. ["simple-format"]("unsupported, gettext"): New test.
2012-02-08Merge remote-tracking branch 'origin/stable-2.0'Andy Wingo1-1/+7
Conflicts: GUILE-VERSION libguile/gc-malloc.c libguile/ports.c
2012-02-03function binding fixesBT Templeton2-62/+78
* module/language/elisp/bindings.scm (bindings): Add `function-bindings' field. (make-bindings): Initialize the `function-bindings' field. (get-function-binding, with-function-bindings): New functions. (access-variable, reference-variable, set-variable!): Remove the `module' argument and only handle references to the value cell. All callers changed. Callers passing `function-slot' as the module changed to use the corresponding functions for the function cell instead. (access-function, reference-function, set-function!): New procedures. (compile-flet, compile-labels): Use `with-function-bindings' instead of `with-lexical-bindings'.
2012-02-03sharpsign-colon for uninterned symbolsBT Templeton1-1/+6
* module/language/elisp/lexer.sm (lex): Add support for `#:' syntax for uninterned symbols.
2012-02-03elisp I/OBT Templeton1-0/+14
* module/language/elisp/boot.el (princ, print, terpri, format*): New functions.
2012-02-03improve management of global special variablesBT Templeton2-151/+109
* module/language/elisp/bindings.scm (bindings): Remove `globals' field. (global?, mark-global!, map-globals): Remove. All callers changed. * module/language/elisp/compile-tree-il.scm (generate-ensure-global, ensuring-globals): Remove. All callers changed. (global?, ensure-globals!): New procedures. (bind-lexically?): Use new `global?'. (compile-lambda, compile-let, compile-let*): Use `ensure-globals!'.
2012-02-03more lexical declarationsBT Templeton1-0/+5
* module/language/elisp/boot.el (condition-case, catch): Add `lexical' declarations in macro expansions.
2012-02-03signal an error for uncaught throwsBT Templeton1-3/+6
* module/language/elisp/boot.el (%catch): New variable. (catch): Bind `%catch' to `t' during the evaluation of `body'. Call `throw' instead of signalling an exception directly. (throw): Signal a `no-catch' error if there is no `catch' to throw to.
2012-02-03`catch' in terms of `condition-case'BT Templeton1-21/+16
* module/language/elisp/boot.el (throw): Define an `error-conditions' property for this symbol. (catch): Define in terms of `condition-case' instead of using Guile exceptions directly. (throw): Signal a `throw' condition instead of throwing a Guile exception directly.
2012-02-03standard error symbolsBT Templeton1-0/+6
* module/language/elisp/boot.el (error, wrong-type-argument, no-catch, invalid-function): Define `error-conditions' properties for these standard error symbols.
2012-02-03`%plist-member' fixBT Templeton1-5/+7
* module/language/elisp/boot.el (%plist-member): Use recursion to avoid using `catch' and `throw'.
2012-02-03condition-caseBT Templeton1-2/+27
* module/language/elisp/boot.el (signal): Accept only two arguments, and throw an `elisp-condition' exception instead of an `elisp-error' exception. (condition-case): New macro.
2012-02-03elisp `member' subrsBT Templeton1-0/+18
* module/language/elisp/boot.el (%member, member, memql, memq): New functions.
2012-02-03use `dynlet' for dynamic bindingBT Templeton1-41/+36
* module/language/elisp/compile-tree-il.scm (let-dynamic): Remove. All callers changed to use `dynlet' instead.
2012-02-03inline `generate-let' and `generate-let*'BT Templeton1-97/+79
* module/language/elisp/compile-tree-il.scm (generate-let, compile-let): Inline the former into the latter. (generate-let*, compile-let*): Likewise.
2012-02-03define `flet' directlyBT Templeton1-7/+15
* module/language/elisp/compile-tree-il.scm (compile-flet): Compile `flet' directly instead of using `generate-let'.
2012-02-03lexical binding macrosBT Templeton3-28/+25
* module/language/elisp/boot.el (lexical-let, lexical-let*): New macros. * module/language/elisp/compile-tree-il.scm (bind-lexically?): Remove the check for a `lexical' flag, since `lexical-let' and `lexical-let*' are no longer special operators. (compile-lexical-let, compile-lexical-let*): Remove. * module/language/elisp/runtime/function-slot.scm: Update module definition.
2012-02-03use `lexical' declarations in "boot.el"BT Templeton1-5/+9
* module/language/elisp/boot.el (prog1, cond, or, catch): Use `let' with `lexical' declarations instead of `lexical-let'. (%plist-put): Use `let' instead of `lexical-let', since "boot.el" now uses lexical binding by default.
2012-02-03elisp `while' macroBT Templeton3-50/+8
* module/language/elisp/compile-tree-il.scm (compile-while): Remove. * module/language/elisp/boot.el (while): New macro. * module/language/elisp/runtime/function-slot.scm: Update module definition.
2012-02-03elisp `labels'BT Templeton2-0/+23
* module/language/elisp/compile-tree-il.scm (compile-labels): New special operator. * module/language/elisp/runtime/function-slot.scm: Update module definition.
2012-02-03fix `flet' syntaxBT Templeton1-97/+113
* module/language/elisp/compile-tree-il.scm (process-let-bindings): Remove. (parse-let-binding, parse-flet-binding): New procedures. (generate-let, generate-let*): Now takes an association list mapping symbols to values for the `bindings' argument. (compile-let, compile-let*, compile-lexical-let) (compile-lexical-let*): Parse the bindings list with `parse-let-binding'. (compile-flet): Parse the bindings list with `parse-flet-binding'.
2012-02-03elisp binding declarationsBT Templeton1-68/+52
* module/language/elisp/compile-tree-il.scm (bind-lexically?): Accept a new `decls' argument and check it for `lexical' declarations. Establish the same kind of binding whether or not a lexical binding for `sym' exists, whereas previously the presence of a lexical binding would cause newly-established bindings to be lexical bindings as well. (split-let-bindings): Remove. All callers changed. (generate-let, generate-let*, compile-lambda): Pass the declarations list to `bind-lexically?'. * test-suite/tests/elisp-compiler.test: Explicitly disable the lexical-binding mode. Add `lexical' declarations where necessary.
2012-02-03declaration parsingBT Templeton1-105/+147
* module/language/elisp/compile-tree-il.scm (parse-body-1, parse-body) (parse-lambda-body, parse-declaration): New procedures. (generate-let, generate-let*): Use `parse-body'. (compile-lambda): Use `parse-lambda-body'.
2012-02-03elisp lambda list parsingBT Templeton1-171/+90
* module/language/elisp/compile-tree-il.scm (split-lambda-arguments): Remove. (parse-lambda-list, make-simple-lambda): New procedures. (compile-lambda): Use `parse-lambda-list' and `make-simple-lambda'. Set empty rest arguments to the empty list instead of `#nil'. * test-suite/tests/elisp-compiler.test ("Lambda Expressions")["rest argument"]: Use Elisp `null' instead of a Scheme equality check.
2012-02-03elisp function subrsBT Templeton5-69/+90
* module/language/elisp/boot.el (null, consp, listp, car, cdr) (make-symbol, signal): Use `%funcall' instead of `funcall' or `fset'. (symbolp, symbol-function, eval): Use `%funcall', since `funcall' now calls these functions. (functionp, %indirect-function): New functions. (funcall): Define in terms of `%funcall' and `%indirect-function'. (apply): New function. Previously defined in "module/language/elisp/runtime/subrs.scm". (fset): If `definition' is not a function, set the function cell of `symbol' to an falias for `definition'. * module/language/elisp/falias.scm: New file. * module/language/elisp/subrs.scm: Remove file. (apply): Remove. Now defined in "boot.el". * module/language/elisp/runtime/function-slot.scm: Update module definition. * module/Makefile.am: Update.
2012-02-03remove dynamic function bindingBT Templeton2-22/+12
* module/language/elisp/compile-tree-il.scm (find-operator): Assume that `name' is lexically bound. * module/language/elisp/runtime.scm (symbol-fbound?, fmakunbound!): Assume that `symbol' is lexically bound. (defspecial): Bind special operators lexically.
2012-02-03elisp nil equalityBT Templeton1-2/+14
* module/language/elisp/boot.el (eq, equal): Return `#t' if both arguments are nil. (eql): New function.
2012-02-03use lexical binding in boot.elBT Templeton1-1/+1
* module/language/elisp/boot.el: Use lexical binding.
2012-02-03remove unused codeBT Templeton2-32/+1
* module/language/elisp/compile-tree-il.scm (runtime-error): Remove. * module/language/elisp/runtime.scm (macro-error, runtime-error, elisp-bool, prim): Remove.