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
1259c17837
updating interpreter to work better for bootstrapping
...
adding program mkboot0, which can be run in the interpreter to compile
source files into a stage-0 boot image.
2009-04-23 00:55:03 +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
291b5f86e0
fixing nconc on long argument lists
2009-04-22 01:40:10 +00:00
JeffBezanson
2bf87ede4f
fixing !print_pretty on vectors
2009-04-21 21:41:32 +00:00
JeffBezanson
2cceb9e538
fixing function? and disassemble
2009-04-21 15:47:30 +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
aa62ae9e96
allowing (copy x) and other byte stream functions only on plain-old-data types
...
adding plain-old-data? predicate
adding string.join
2009-04-19 16:48:09 +00:00
JeffBezanson
2ed581e62d
adding top-level-value and set-top-level-value!, using them instead of
...
set and eval where appropriate
adding separate integer? and integer-valued? predicates
2009-04-17 14:41:15 +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
8e78e4cdbb
making some utf8 routines more robust against invalid data
...
implementing tail position in compiler
adding arg count checking for instructionized builtins
2009-04-02 02:22:38 +00:00
JeffBezanson
28c39e8cf0
fixing definition of let*
2009-04-01 22:23:19 +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
2ddbac400a
fixing bug in hash table. growth schedule made it possible for
...
maxprobe to decrease, causing growth during rehashing, which leaks
the table.
2009-03-28 23:46:02 +00:00
JeffBezanson
e3158b8640
adding nestlist, to-proper, string.rep, pad-l, pad-r, trace, untrace,
...
table.invert, table.foreach
reorganizing system.lsp so functions are grouped sensibly
scheme implementation of a simple bytecode compiler
2009-03-28 21:39:04 +00:00
JeffBezanson
c076be667b
fixing bug in macroexpand on lambdas
2009-03-27 03:47:11 +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
b63a23eb1a
char read/print improvement
...
adding char.upcase and char.downcase
2009-03-24 21:27:38 +00:00
JeffBezanson
a9b0f7879b
removing some unnecessary stuff
...
improving key-error
2009-03-23 20:44:19 +00:00
JeffBezanson
8f93c9dfc6
adding string->number
2009-03-23 19:49:08 +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
7059a471a1
initial implementation of let-syntax
2009-03-17 21:53:55 +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
dceced2bb0
fix bug in (case)
...
reducing use of strlen
2009-03-13 14:54:48 +00:00
JeffBezanson
0643a4f3a2
fixing bug in datum comment #;
...
improving some library functions
2009-03-13 03:30:10 +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
e2b7652e36
some printing improvements
2009-03-10 19:29:30 +00:00
JeffBezanson
fdfaacfbe5
adding io.putc, io.tostring!, string.map, print-to-string
...
fixing bug in ios, not initializing readonly flag
updating string and sizeof to use new strstream functions
removing some redundant numeric type init functions
2009-03-05 03:48:17 +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
2cf5187ca9
adding dump, memstream, io.read, and io.write
...
more renaming
allowing iostreams to be read-only
fixing bug allowing arrays with 0-size elements
2009-03-02 04:26:16 +00:00
JeffBezanson
923c7d5495
fixing bug reading negative constants with #b,o,d,x
...
adding string.trim
2009-02-28 01:59:01 +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
7883a5de0b
fixing ambiguity in reading hex numbers and floating point
...
making print robust against the undefined value
2009-02-24 18:31:05 +00:00
JeffBezanson
115b2843fb
adding copy and string.count
2009-02-24 04:12:33 +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
76edead57b
adding (do ) form
2009-02-20 19:50:35 +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
f1927a3b57
moving delete-duplicates and new f-body so they can be macroexpanded in advance
...
deprecating setf, labels, and try (weren't used anywhere)
adding string.tail
changing match to use delete-duplicates
2009-02-19 22:29:47 +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
79e12b2dcb
adding io.print and io.princ
...
misc. touch-ups
2009-02-09 05:38:40 +00:00
JeffBezanson
1097597437
file stream creation and io.read
2009-02-09 03:22:31 +00:00
JeffBezanson
2a083db293
adding named let
2009-02-06 03:41:24 +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
38cf75733e
adding #; datum comment
...
allowing #||# comments to nest
2009-01-26 02:03:37 +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
88938bc6d1
fixes and improvements to cps converter
2009-01-02 22:58:14 +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
6ed023e966
adding some ast functions
2008-12-29 21:53:21 +00:00
JeffBezanson
5bff23e790
improvements and bug fixes to CPS converter
2008-12-29 00:00:45 +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
7e04bb948c
fixing several bugs in string.find
...
so hard to get anything right the first time!
2008-12-24 05:02:58 +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
581afbf636
fixing the result of casting floating point numbers to uint64
...
handling NULL locale
2008-10-08 01:14:23 +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
72d8dec7df
adding new UTF8 example text
...
adding new example big expression for ast testcase
2008-09-03 18:39:27 +00:00
JeffBezanson
7412a31af3
removing more clutter
2008-09-03 15:42:00 +00:00
JeffBezanson
af8b332367
fixed some small flaws in (compare)
2008-08-30 22:18:20 +00:00
JeffBezanson
ca1b12064f
removing some redundant/irrelevant files
2008-08-30 05:05:31 +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
fa0e134dd8
adding "d.df" syntax for reading single-precision numbers
...
misc. fixes
more work on ios
2008-08-16 21:15:36 +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
0d5cb73523
updating AST test to work with latest
2008-07-15 00:11:04 +00:00
JeffBezanson
b0e8582c1d
adding performance test files
2008-07-15 00:06:42 +00:00
JeffBezanson
b3b2bc3300
fix to how defun was using macroexpand
2008-07-12 02:58:55 +00:00
JeffBezanson
135492d18c
updating build for new repository structure
2008-07-01 01:58:16 +00:00
JeffBezanson
0c9010a117
import femtolisp source
2008-07-01 01:54:22 +00:00