Commit Graph

134 Commits

Author SHA1 Message Date
JeffBezanson c2026ba77c adding gc handles, making evaluator stack static
this provides a better interface and could only help performance
starting to add some useful library code
2009-05-19 02:54:56 +00:00
JeffBezanson c38c47d264 adding R6RS div, mod, div0, mod0
small improvement to cmp_eq
explicit -fomit-frame-pointer was causing test failures with gcc4.3.2
2009-05-14 17:54:59 +00:00
JeffBezanson e365cb1d33 adding divide by 0 check in div 2009-05-14 02:53:04 +00:00
JeffBezanson ae2a4dd156 adding integer division function div
changing / to do real division always
fixing equal? to distinguish -0.0 and 0.0
making equal? and eqv? false on numbers of different exactness
2009-05-14 01:30:25 +00:00
JeffBezanson 6c549f0399 fixing hash of circular structure to avoid tree recursion (very important!!)
simplifying vector_grow
2009-05-13 04:03:13 +00:00
JeffBezanson 77e37368c9 fixing trace and untrace
replacing function->vector with function:code, function:vals, and
  function:env
2009-05-13 01:13:40 +00:00
JeffBezanson a7a31cf53a fixing vararg apply to work properly 2009-05-11 23:55:40 +00:00
JeffBezanson c94774a5df adding *error-stream* variable
removing unnecessary byte after :let in bytecode encoding
adding script for easy bootstrapping
2009-05-05 23:51:13 +00:00
JeffBezanson 63edc82ba4 using global variables uniformly for print settings instead of passing
around one of them
fixing unwind-protect not to duplicate code
2009-05-05 04:01:06 +00:00
JeffBezanson 264df1f90b improving closure representation
some performance tweaks
2009-04-28 04:10:18 +00:00
JeffBezanson 14d625bd83 some performance tweaks 2009-04-27 03:21:53 +00:00
JeffBezanson de19e4f401 adding return special form
eliminating some unnecessary top-level bindings
adding opcodes add2, sub2, neg
2009-04-26 22:19:32 +00:00
JeffBezanson 0dc4c16276 making procedure? a builtin
fixing type error trying to apply #t, #f, nil
2009-04-24 20:43:56 +00:00
JeffBezanson 909b91ffcc fixing printing of invalid UTF-8 2009-04-23 00:22:03 +00:00
JeffBezanson e4488bb065 some tweaks to the vm 2009-04-22 23:00:13 +00:00
JeffBezanson 27120b0ce4 fixing bug in truncate
simplifying nconc loop
2009-04-22 15:02:49 +00:00
JeffBezanson d6f73d0bf0 implementing #vu8 read and print syntax for uint8 vectors
much more compact string representation of bytecode
2009-04-21 15:35:46 +00:00
JeffBezanson 305c350c56 a couple small fixes
making bytecode representation more space-efficient
2009-04-21 14:53:18 +00:00
JeffBezanson 25812731cc eliminating interpreter. the bytecode VM is now fully bootstrapped.
making the empty vector a singleton
removing syntax environment stuff from core
reimplementing eval using the compiler
fixing a couple bugs in long argument lists
2009-04-21 00:56:05 +00:00
JeffBezanson 5ab7a7c1e1 adding new "translucent" function type for byte-compiled lambdas 2009-04-19 22:22:17 +00:00
JeffBezanson 86b7738c89 cleaning up implementation of apply() entry point
removing use of interpreter in computed calls to builtins
2009-04-17 03:40:52 +00:00
JeffBezanson 94814a2e34 a bug fix and a first pass at let-optimization 2009-04-16 21:20:15 +00:00
JeffBezanson 0a3590aa01 some optimizations 2009-04-16 14:21:16 +00:00
JeffBezanson ad4a086790 converting for to a special form
adding loadi8 instruction
cleaning up numeric comparison, reducing repeated code
2009-04-16 03:05:38 +00:00
JeffBezanson 36a209cd5f making = a builtin
fixing = and eqv? to work properly on NaNs
fixing other comparison predicates to be consistent
2009-04-15 23:54:43 +00:00
JeffBezanson 81641a2240 fixing glaring bug in last revision 2009-04-15 00:30:24 +00:00
JeffBezanson 672558d30f bytecode vm is now working, off by default
various bug fixes

language changes:
• constant symbols no longer shadow everything
• eval* removed
• vararg lists always allocated on entry, dotted argument
  lists not preserved

new applyn() entry point
2009-04-15 00:12:01 +00:00
JeffBezanson b9a1be78a0 implementing op_closure, fix to loadc/setc 2009-04-09 16:09:02 +00:00
JeffBezanson debf3fd517 moving (length) out of core
changing another recursive call to goto
adding special cases in compiler for 0 and 1 argument versions of some
  vararg builtins
beginning implementation of bytecode interpreter
2009-04-09 04:04:27 +00:00
JeffBezanson ea5d334626 some cleanup, removing some unnecessary global bindings 2009-04-08 18:17:02 +00:00
JeffBezanson 43cb51f640 replacing a recursive call with a goto; saves lots of stack space. 2009-04-07 15:55:13 +00:00
JeffBezanson e119a66bcd moving lognot out of core
fixing type check in ash
2009-04-02 03:53:38 +00:00
JeffBezanson 43e8d1fbf0 adding the ability to heap-allocate extentions to the value stack,
so recursion depth is limited only by the process stack limit.

reorganizing evaluator so the same code is used for evaluating
and pushing arguments for both builtin functions and lambdas.
for now this is slower, but it was done in preparation for
Things To Come.

adding list-head

implementing the calling convention for long argument lists in
bytecode compiler. arguments are broken down into a nest of
list and nconc calls.
also implementing vararg builtins.
2009-04-01 04:31:49 +00:00
JeffBezanson 4cb9685266 adding support for arbitrarily-long argument lists
argument lists are heap-allocated after a certain cutoff (currently 127)
2009-03-27 03:06:55 +00:00
JeffBezanson fe72c101e2 avoiding sprintf for error messages where possible
moving raise, logand, logior, logxor, and ash out of core
changing prog1 to a special form
2009-03-25 02:28:21 +00:00
JeffBezanson a9b0f7879b removing some unnecessary stuff
improving key-error
2009-03-23 20:44:19 +00:00
JeffBezanson 9023705d27 adding some error messages
adding io.seek, io.copyuntil
adding #\uHHHH hex character literal read syntax
2009-03-22 02:05:26 +00:00
JeffBezanson 5edb75af2c making nconc, assq, and memq builtins
some small optimizations to string.map, string.trim,
string.inc, string.dec, aref
2009-03-17 03:29:17 +00:00
JeffBezanson 5681745bc3 adding apply1, using it in trycatch (avoids consing)
allowing left bit shift to overflow to larger types
fixing bug in number->string on uint64
fixing bug in rand.uint64
2009-03-13 22:26:44 +00:00
JeffBezanson bfa30fb095 allowing logand, logior, logxor to accept any number of arguments
adding negative?, positive?, zero?, even?, odd?, for-each
adding *linefeed*, terpri
2009-03-12 02:47:34 +00:00
JeffBezanson d81e6c2d57 adding ash function
making more functions static
removing list_nth, using vectors for enums instead
making more operators return fixnums where possible
2009-03-11 19:16:40 +00:00
JeffBezanson 05ef9f42a5 simplifying (string) to just princ-to-string
small printing improvements
2009-03-11 14:52:37 +00:00
JeffBezanson 40cff81550 more reorganization of LLT
adding io.readuntil, io.readline
improvements to ios_readprep
2009-03-03 03:16:30 +00:00
JeffBezanson c1610f0a9f changing load to expand each expression before evaluating
improve performance by reloading system.lsp with this loader
other misc. changes
2009-02-26 18:15:38 +00:00
JeffBezanson 6c56120669 better solution for allowing an input stream to be relocated while
reading from it
improving prettyprinting of lists of short strings
2009-02-24 02:21:16 +00:00
JeffBezanson 3aad0bd6be fixing some bugs in lerror and read
making memory errors non-consing (duh)
cleaning up main() a bit
adding case macro, moving other stuff around a bit
2009-02-20 05:11:05 +00:00
JeffBezanson 0c0471e856 moving implementation of startup, repl, load, and top-level
exception handler into system.lsp

adding several iostream functions

adding support for internal define
2009-02-19 03:31:40 +00:00
JeffBezanson 1097597437 file stream creation and io.read 2009-02-09 03:22:31 +00:00
JeffBezanson 2c1bb59486 adding integer? and number->string
a bit more renaming
2009-02-01 05:41:43 +00:00
JeffBezanson 17d81eb4e6 adding #b, #o, #d, #x numeric literals
accepting r6rs IEEE literals +-nan.0 and +-inf.0
printing distinguished -0.0, indicating float with .0f instead
of #float, double with .0 instead of #double

more renaming (? on predicates, ! on mutating operators)
changing T to #t :( all those #s are so ugly
2009-02-01 01:53:58 +00:00
JeffBezanson a55b46e9a6 switching to scheme #t, #f, and () values
porting code to sort out which NILs are false and which are
empty lists

switching to scheme-style special forms. however you feel about
scheme names vs. CL names, using both is silly.

mostly switching to scheme predicate names, with compatibility
aliases for now. adding set-constant! to make this efficient.

adding null?, eqv?, assq, assv, assoc, memq, memv, member

adding 2-argument form of if
allowing else as final cond condition

looking for init file in same directory as executable, so flisp
can be started from anywhere

renaming T to FL_T, since exporting a 1-character symbol is
not very nice

adding opaque type boilerplate example file

adding correctness checking for the pattern-lambda benchmark

bugfix in int2str
2009-01-29 01:04:23 +00:00
JeffBezanson 808d92dfb6 some micro-optimizations 2009-01-16 14:12:35 +00:00
JeffBezanson 8197197ced misc. cleanup
adding without-delimited-continuations

adding skeleton for stream objects
2009-01-05 02:45:21 +00:00
JeffBezanson 209b77a534 simplified and improved some of the prettyprinting logic
• eliminated bad behavior near screen edge, added wrapping
• added behavior: indent after some number of non-indented elements
• indent after head symbols with really long names
• don't indent after first argument to setq

improvements to cps converter
• correctly dispatch to non-cps functions
• handle vararg lambdas in head position
2009-01-03 05:30:22 +00:00
JeffBezanson d8132ad204 adding CPRIM type, smaller representation for primitives
bug fixes in opaque type handling
2009-01-02 23:00:21 +00:00
JeffBezanson 9716ee3452 making list a builtin
increasing default heapsize, giving better performance

adding hexdump and int2str functions to llt
2008-12-31 04:45:08 +00:00
JeffBezanson dc50df083c adding branch probability annotations
wrote a CPS transformer that can be used to provide coroutines

misc. cleanup
2008-12-28 08:01:18 +00:00
JeffBezanson b99d8715ce generic aref/aset for all arrays
(string v) now works on any value, by printing to a string

some bug fixes in ios
2008-12-27 06:02:53 +00:00
JeffBezanson 830e1c986c renaming 'char' type to 'byte' to avoid confusion
wchar will be used for all individual characters

adding string.find function

fixing bug in #sym(...) if sym was undefined
2008-12-24 04:43:36 +00:00
JeffBezanson 8e4ba69a7b more efficient representation for small tables
adding tablep and table.clone

fixing bug with filename string in load
2008-12-22 06:36:50 +00:00
JeffBezanson dfacb4d897 making all builtins print readably; (builtin 'sym) function
hash table functions:
adding get,put,has,del,table.foldl,table.pairs,table.keys,table.values
2008-12-21 05:55:00 +00:00
JeffBezanson b5dda68eab adding support for finalization of values
enabling type-specific print and relocate behavior

allowing GC to be triggered by large buffer allocations

adding hash table constructor and print function

renamed some functions
2008-12-20 06:16:00 +00:00
JeffBezanson ee9f565d89 fixing bug in for where lambda body was self-evaluating 2008-12-12 21:06:20 +00:00
JeffBezanson 6962211e76 changing representation of cvalue types so each type is
explicitly represented in an fltype_t struct, and symbolic
types are hash-consed. a lot of code is smaller and simpler
as a result. this should allow more features in less space
(both code and data) going forward.

changing \DDD and \x escape sequences to read bytes instead of
characters

re-fixing uint64 cast bug

adding Paul Hsieh's hash function, to be evaluated later
2008-12-11 04:04:17 +00:00
JeffBezanson a4bb09bcb2 adding equalhash.c
some cleanup

moving some library code around for size optimization

now using == instead of flt_equals for float comparison, mostly
for hash compatibility
2008-11-28 21:44:59 +00:00
JeffBezanson e7e5677d51 support reading hex float literals
better text representation of infs and nans

removing construction of low-level numeric types directly from strings

adding hash function corresponding to equal

better way to initialize builtins

moving advanced bitvector ops to separate compilation unit

rearranging hash table code so it can be specialized for different
comparison functions

one good way to bloat a piece of software is to add several
ASCII pictures of the mona lisa
2008-11-23 07:12:37 +00:00
JeffBezanson c89111f7cb refactored escape sequence handling a bit, added error for invalid hex
discarding rest of input line after a parse error
made compare() do less work for unordered comparison
added peekc and purge to ios
2008-11-06 04:04:04 +00:00
JeffBezanson 120522c212 updating bitvector functions to use int64s in more places, since
after all that's the whole point of bitvectors

some prettyprinting tweaks

more uniform way to handle forwarding pointers. fix forwarding
of gensyms

:keyword symbols
2008-10-31 02:50:00 +00:00
JeffBezanson c8c59b1dfc added globals *install-dir* and *print-width*, parameterized
prettyprinter by screen width

decent accumulate-while and accumulate-for
2008-09-11 02:37:38 +00:00
JeffBezanson 6f934a817b I decided it was rather random that set was the only function
that could access the current environment dynamically. It also
differed unnecessarily from common lisp set in this respect.

So now setq is a builtin special form that sets lexical or
global variables, and set is a function that sets global variables.

Rather than eliminate the power of the dynamic set, I extended it
by adding eval*, which evaluates its argument in the current
environment. The justification for this is that the interpreter
is already dynamic enough to allow it with no overhead, so the
ability might as well be exposed.

cleanup; removing some magic numbers

beginning hash tables
2008-09-06 22:19:51 +00:00
JeffBezanson af8b332367 fixed some small flaws in (compare) 2008-08-30 22:18:20 +00:00
JeffBezanson 7cdd489f86 changing license, since google code does not support the CPL 2008-08-30 02:56:46 +00:00
JeffBezanson d6470ac62f fixed array constructor so it doesn't require allocating a generic
container first

updates and improvements to ios
2008-08-29 03:27:59 +00:00
JeffBezanson 9acdf313b9 adding more ios functions
porting femtolisp to use ios for all I/O
2008-08-17 18:16:31 +00:00
JeffBezanson 6e515a532e fix oops in new apply()
more cvalues design
2008-08-07 05:08:10 +00:00
JeffBezanson 62e5c359d0 adding string.inc and string.dec
moving string functions to their own file
2008-08-05 04:34:14 +00:00
JeffBezanson 46f2f47b14 switched to 3-bit type tags for simpler checking
fixnums still have 30 bits

moving towards making "guest functions" more opaque; their type is now
just 'builtin

pretty printing some forms better: defun, defmacro, for, label
support *print-pretty*
2008-08-05 01:43:12 +00:00
JeffBezanson c3811312a7 adding vector.map, string.char
fixing 0-trip-count case in (for)
2008-08-02 16:18:39 +00:00
JeffBezanson e08091e4a1 adding (for lo hi f) construct, changing library funcs to use it
setting license to CPL v1
2008-07-26 22:04:02 +00:00
JeffBezanson 60644c760e made apply() entry point more efficient (now non-consing)
added selfevaluating(v) predicate
2008-07-26 04:03:48 +00:00
JeffBezanson 180b05fa8e storing environment size on the stack so lambda doesn't need to
compute it. changed penv from pointer to stack index.
result is best performance yet.

fixing constantp to be true for quoted values
2008-07-18 04:16:07 +00:00
JeffBezanson ed61ae48a5 fixing mistake re: dotted arglists in last revision 2008-07-15 01:24:50 +00:00
JeffBezanson b76bbe3724 changing environment representation to contiguous values
eliminating built-in label form
2008-07-15 01:20:52 +00:00
JeffBezanson 0c9010a117 import femtolisp source 2008-07-01 01:54:22 +00:00