CVSROOT: /home/x-cvs
Module name: xc
Changes by: [EMAIL PROTECTED] 02/11/02 14:58:11
Log message:
o Fixed a bug in the regex library, was checking one byte after the end
of the string when matching Eow, the result would only be guaranteed to
be true for null terminated strings.
o Fixed several problems in the bytecode compiler, including:
+ was not compiling functions with &key parameters
+ was not working properly when calling bytecode from bytecode
Now there is a new opcode XBC_BYTECALL, to allow fastly calling
bytecode from bytecode. This needs a review, because there are
some problems:
+ function may be redefined. the bytecode will call the old
definition, and the old definition is gc-protected in the
toplevel bytecode. this is not the better solution, if a
function is redefined, the bytecode should be updated.
+ default argument values and &aux parameters should be
processed in the function body, not in the caller.
o Added lisp functions find, find-if and find-if-not, sharing most of
the code with the definitions of position{,-if,-if-not}.
o Fixed lisp function search, algorithm was completely wrong.
o Added a completely new (experimental) code for indentation. Basically
it uses regex to get tokens, and then allows searching "high-level"
patterns in the result, while scanning the file backwards, tokens
are generated with definitions like:
(indtoken "\\<if\\>" :c-if)
(indtoken "(" :oparen :nospec t)
(indtoken ")" :cparen :nospec t)
...
and then rules are created to search the patterns, rules have a
format like:
(indreduce :parens
t
((:oparen (not oparen) :cparen))
)
(indreduce :if
t
((:c-if :parens))
)
The indentation is calculated in 3 steps, one step to search for tokens
with regex patterns, one "reduction" step, to search for high-level
patterns (in this step the parsers may terminate, rejecting tokens if
it thinks a safe-place was found; a safe-place is a point from where
it can calculate indentation based on the indentation of this safe place),
and a last step where user code is called for every final token.
See the file progmodes/c.lsp for a sample of the concept, and the file
indent.lsp for the indent-macro defintion. The user code attached to the
rules is the argument for several macros, so that it is possible to
bytecode compile the resulting parser/matcher.
Modified files:
xc/programs/xedit/lisp/:
TODO bytecode.c bytecode.h compile.c core.c core.h
internal.h lisp.c package.c
xc/programs/xedit/lisp/modules/:
Imakefile syntax.lsp
xc/programs/xedit/lisp/modules/progmodes/:
c.lsp
xc/programs/xedit/lisp/re/:
re.c
Added files:
xc/programs/xedit/lisp/modules/:
indent.lsp
Revision Changes Path
1.6 +22 -1 xc/programs/xedit/lisp/TODO
1.8 +189 -26 xc/programs/xedit/lisp/bytecode.c
1.3 +5 -1 xc/programs/xedit/lisp/bytecode.h
1.4 +68 -36 xc/programs/xedit/lisp/compile.c
1.53 +93 -47 xc/programs/xedit/lisp/core.c
1.25 +5 -1 xc/programs/xedit/lisp/core.h
1.34 +2 -1 xc/programs/xedit/lisp/internal.h
1.64 +12 -5 xc/programs/xedit/lisp/lisp.c
1.14 +4 -2 xc/programs/xedit/lisp/package.c
1.11 +1 -0 xc/programs/xedit/lisp/modules/Imakefile
1.9 +6 -3 xc/programs/xedit/lisp/modules/syntax.lsp
1.13 +697 -957 xc/programs/xedit/lisp/modules/progmodes/c.lsp
1.6 +3 -2 xc/programs/xedit/lisp/re/re.c
_______________________________________________
Cvs-commit mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/cvs-commit