Commit graph

2163 commits

Author SHA1 Message Date
jjgarcia
da0452752b Failure in checking for integer constants. 2008-06-19 16:41:15 +00:00
jjgarcia
7a1fd864e1 Update IHS environment also when using optimized function calls in interpreter 2008-06-19 16:26:48 +00:00
jjgarcia
cea621fc7a Tag changes to the interpreter 2008-06-19 15:10:10 +00:00
jjgarcia
d003cc91fc More consistent undoing of variable bindings in compiler. 2008-06-19 15:09:28 +00:00
jjgarcia
38bbf43237 Opcodes for small integers 2008-06-19 15:09:12 +00:00
jjgarcia
3654ccf8b4 Replace ecl_apply_{lambda|bclosure} with calls to ecl_interpret. 2008-06-19 15:08:52 +00:00
jjgarcia
e65ebd076c Simplify the interpreter code for calling functions 2008-06-19 15:08:38 +00:00
jjgarcia
aa50e7ef4c Separate lisp objects for functions with fixed and variable # arguments 2008-06-19 15:08:03 +00:00
jjgarcia
4475760597 Fixed typo. 2008-06-19 15:07:50 +00:00
jjgarcia
7732ada63b Avoid using FORMAT when it has not been defined. 2008-06-19 15:07:37 +00:00
jjgarcia
aa920784b4 Turn the macros in bytecodes.h into standalone forms that output no value. This restriction allows us to have more complex code in them. 2008-06-19 15:07:24 +00:00
jjgarcia
8ad5c52f70 Split OP_MSETQ into OP_VSETQ and OP_VSETQS. 2008-06-19 15:07:10 +00:00
jjgarcia
8bdaba7f11 Implement bytecodes for calling functions with 1 and 2 arguments. 2008-06-19 15:06:57 +00:00
jjgarcia
a2b260c24d Optimize some common lisp functions 2008-06-19 15:06:43 +00:00
jjgarcia
d8122d6c61 Eliminate all direct references to stack_top 2008-06-19 15:06:31 +00:00
jjgarcia
12986c134c The interpreter now keeps VALUES(0) always in REG0 2008-06-19 15:06:16 +00:00
jjgarcia
28eb316b88 Avoid using STACK_PUSH in loops 2008-06-19 15:05:51 +00:00
jjgarcia
665505205e Inline stack_pop operation 2008-06-19 15:05:36 +00:00
jjgarcia
108a76ed13 OP_MSETQ does not use the VALUES register 2008-06-19 15:05:21 +00:00
jjgarcia
71ed18e2db Inline funcalls and fix problem with multiple-value-prog1 and macrolet + declarations 2008-06-19 15:05:08 +00:00
jjgarcia
90370c96d0 Fixed typo in COMPILED-FUNCTION-NAME. 2008-06-19 15:04:54 +00:00
jjgarcia
9a5f1a7751 Introduce bytecode closure objects to save space in FLET/LABELS forms 2008-06-19 15:04:27 +00:00
jjgarcia
77d53061eb Revert to the old code for multiple-value-setq 2008-06-19 15:04:12 +00:00
jjgarcia
b2d1a996b3 More compact format for bytecodes OP_FLET/LABELS 2008-06-19 15:03:56 +00:00
jjgarcia
590129c767 No need to check when searching environments 2008-06-19 15:03:40 +00:00
jjgarcia
271d33ee3f Slightly leaner code for searching environment 2008-06-19 15:03:28 +00:00
jjgarcia
83c35e01c2 SETQS does not check whether argument is constant, just as in SBCL. 2008-06-19 15:03:12 +00:00
jjgarcia
ce724349c5 Split operator MSETQ into VSETQ and VSETQS. 2008-06-19 15:02:58 +00:00
jjgarcia
5aa07e402d Only use OP_VBIND[S] for values other than 0-th 2008-06-19 15:02:40 +00:00
jjgarcia
0c3af3fbc8 ecl_interpret returns the first value 2008-06-19 15:02:27 +00:00
jjgarcia
311995ae4f Inline the stack push operation 2008-06-19 15:02:12 +00:00
jjgarcia
9dcff352d7 Save a pointer to the current environment in the interpreter. 2008-06-19 15:01:59 +00:00
jjgarcia
f5b4ff25af COND and PROG1 now operate using only REG0 and the stack 2008-06-19 15:01:47 +00:00
jjgarcia
8fca58aec5 OP_JT/JNIL need not set NVALUES 2008-06-19 15:01:35 +00:00
jjgarcia
ecd1053c26 Allow COND forms to use REG0 to store computations, instead of forcing use of VALUES. 2008-06-19 15:01:23 +00:00
jjgarcia
37022df5d6 Since OP_JT/JNIL check reg0, we can simplify the bytecodes for WHILE 2008-06-19 15:01:05 +00:00
jjgarcia
64ca376393 Given that reg0 contains always VALUES(0), we can simplify OP_JT and OP_JNIL. 2008-06-19 15:00:50 +00:00
jjgarcia
aa6b20fad1 Simplify bytecodes compiler by rewriting IF as a COND. 2008-06-19 15:00:20 +00:00
jjgarcia
8e2237108e Use the local IHS frame for storing the lexical environment. 2008-06-19 15:00:01 +00:00
jjgarcia
5668d23f2b Inline OP_PROGV. 2008-06-19 14:59:49 +00:00
jjgarcia
9d3d2b34fe The IHS record is not created in apply lambda but in ecl_interpret 2008-06-19 14:59:37 +00:00
jjgarcia
6870a9753f The lexical environment of a function is stored in the same IHS record as its name. 2008-06-19 14:59:24 +00:00
jjgarcia
c1f08a04e6 Removed global environment field cl_env.lex_env 2008-06-19 14:59:11 +00:00
jjgarcia
8ae45ee30e Remove useless field frs_lex from the frame stack records. 2008-06-19 14:58:57 +00:00
jjgarcia
200ec27464 Inline OP_MSETQ 2008-06-19 14:58:44 +00:00
jjgarcia
327b6b9640 Inline OP_FLET/LABELS and let them access cl_env.lex_env less often. 2008-06-19 14:58:32 +00:00
jjgarcia
ff083d3511 OP_PROTECT also pushes the environment onto the stack. 2008-06-19 14:58:20 +00:00
jjgarcia
45b24c328e OP_TAGBODY also pushes the environment to be saved 2008-06-19 14:58:07 +00:00
jjgarcia
2c3a2f33a6 Avoid using field lex_env in frame stack records, at least for blocks 2008-06-19 14:57:45 +00:00
jjgarcia
33a53695cf ecl_interpret() now takes an explicit lexical environment argument. 2008-06-19 14:57:12 +00:00