Mercurial > emacs
view etc/CENSORSHIP @ 28062:26edef632c89
This is a big redesign of failure-stack and register handling, prompted
by bugs revealed when trying to add shy-groups. Overall, what happened
is that loops are now structured a little differently, groups can be
shy and the code is a little simpler.
(enum re_opcode_t): Remove jump_past_alt, maybe_pop_jump,
push_dummy_failure and dumy_failure_jump.
Add on_failure_jump_(exclusive, loop and smart).
Also fix the comment for (start|stop)_memory since they now only take
one argument (the second has becomes unnecessary).
(print_partial_compiled_pattern): Adjust for changes in re_opcode_t.
(print_compiled_pattern): Use %ld to printf long ints and flush to make
debugging a little easier.
(union fail_stack_elt): Make the integer unsigned.
(struct fail_stack_type): Add a `frame' element.
(INIT_FAIL_STACK): Init `frame' as well.
(POP_PATTERN_OP): New macro for re_compile_fastmap.
(DEBUG_PUSH, DEBUG_POP): Remove.
(NUM_REG_ITEMS): Remove.
(NUM_NONREG_ITEMS): Adjust.
(FAILURE_PAT, FAILURE_STR, NEXT_FAILURE_HANDLE, TOP_FAILURE_HANDLE):
New macros for the cycle detection.
(ENSURE_FAIL_STACK): New macro for PUSH_FAILURE_(REG|POINT).
(PUSH_FAILURE_REG, POP_FAILURE_REG, CHECK_INFINITE_LOOP): New macros.
(PUSH_FAILURE_POINT): Don't push registers any more.
The pattern address pushed is not the destination of the jump
but the source of it instead.
(NUM_FAILURE_ITEMS): Remove.
(POP_FAILURE_POINT): Adapt to the new stack structure (i.e. pop
registers before the actual failure point).
Don't hardcode any meaning for str==NULL anymore.
(union register_info_type, REG_MATCH_NULL_STRING_P, IS_ACTIVE)
(MATCHED_SOMETHING, EVER_MATCHED_SOMETHING, SET_REGS_MATCHED): Remove.
(REG_UNSET_VALUE): Use NULL (why not?).
(compile_range): Remove declaration since it doesn't exist.
(struct compile_stack_elt_t): Remove inner_group_offset.
(old_reg(start|end), reg_info, reg_dummy, reg_info_dummy): Remove.
(regex_grow_registers): Remove dead code.
(FIXUP_ALT_JUMP): New macro.
(regex_compile): Add shy-groups
Change loops to use on_failure_jump_smart&jump instead of
on_failure_jump&maybe_pop_jump.
Change + loops to eliminate the initial (dummy_failure_)jump.
Remove c1_base (looks like unused variable to me).
Use `jump' instead of `jump_past_alt' and don't bother with
push_dummy_failure in alternatives since it is now unnecessary.
Use FIXUP_ALT_JUMP.
Eliminate a useless `#ifdef emacs' for (re)allocating the stack.
(re_compile_fastmap): Remove dead variables i and num_regs.
Exit from loop when bufp->can_be_null rather than jumping to `done'.
Avoid jumping backwards so as to ensure termination.
Use PATTERN_STACK_EMPTY and POP_PATTERN_OP.
Improved handling of backreferences.
Remove dead code in handling of `anychar'.
(skip_noops, mutually_exclusive_p): New functions taken from the
handling of `maybe_pop_jump' in re_match_2_internal.
Slightly improve mutually_exclusive_p to handle ".+\n".
((lowest|highest)_active_reg, NO_(LOWEST|HIGHEST)_ACTIVE_REG)
Remove.
(re_match_2_internal): Use %p instead of 0x%x when printf'ing ptrs.
Don't SET_REGS_MATCHED anymore. Remove many dead variables.
Push register (in `start_memory') on the stack rather than storing it
in old_reg(start|end).
Remove the cycle detection from `stop_memory', replaced by the use
of on_failure_jump_loop for greedy loops.
Add code for the new on_failure_jump_<foo>.
Remove ad-hoc code in `on_failure_jump' to push more registers
in the case of a loop.
Take out code from `maybe_pop_jump' into separate functions and
adapt it to the semantics of `on_failure_jump_smart'.
Remove jump_past_alt, dummy_failure_jump and push_dummy_failure.
Remove dummy_failure handling and handling of `failures to jump
to on_failure_jump' (this last one was already dead code, it seems).
((group|alt|common_op)_match_null_string_p): Remove.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Wed, 08 Mar 2000 23:25:41 +0000 |
parents | e96ffe544684 |
children | 01772baf50a3 |
line wrap: on
line source
Censoring my Software Richard Stallman [From Datamation, 1 March 1996] Last summer, a few clever legislators proposed a bill to "prohibit pornography" on the Internet. Last fall, right-wing Christians made this cause their own. Last week, President Clinton signed the bill, and we lost the freedom of the press for the public library of the future. This week, I'm censoring GNU Emacs. No, GNU Emacs does not contain pornography. It is a software package, an award-winning extensible and programmable text editor. But the law that was passed applies to far more than pornography. It prohibits "indecent" speech, which can include anything from famous poems, to masterpieces hanging in the Louvre, to advice about safe sex...to software. Naturally, there was a lot of opposition to this bill. Not only from people who use the Internet, and people who appreciate erotica, but from everyone who cares about freedom of the press. But every time we tried to tell the public what was at stake, the forces of censorship responded with a lie: they told the public that the issue was simply pornography. By embedding this lie as a presupposition in their statements about the issue, they succeeded in misinforming the public. So here I am, censoring my software. You see, Emacs contains a version of the famous "doctor program", a.k.a. Eliza, originally developed by Professor Weizenbaum at MIT. This is the program that imitates a Rogerian psychotherapist. The user talks to the program, and the program responds--by playing back the user's own statements, and by recognizing a long list of particular words. The Emacs doctor program was set up to recognize many common curse words, and respond with an appropriately cute message such as, "Would you please watch your tongue?" or "Let's not be vulgar." In order to do this, it had to have a list of curse words. That means the source code for the program was indecent. Because of the censorship law, I had to remove this feature. (I replaced it with a message announcing that the program has been censored for your protection.) The new version of the doctor doesn't recognize the indecent words. If you curse at it, it curses right back to you--for lack of knowing better. Now that people are facing the threat of two years in prison for indecent network postings, it would be helpful if they could access precise rules via the Internet for how to avoid imprisonment. However, this is impossible. The rules would have to mention the forbidden words, so posting them on the Internet would be against the rules. Of course, I'm making an assumption about just what "indecent" means. I have to do this, because nobody knows for sure. The most obvious possibile meaning is the meaning it has for television, so I'm using that as a tentative assumption. However, there is a good chance that our courts will reject that interpretation of the law as unconstitutional. We can hope that the courts will recognize the Internet as a medium of publication like books and magazines. If they do, they will entirely reject any law prohibiting "indecent" publications on the Internet. What really worries me is that the courts might take a muddled in-between escape route--by choosing another interpretation of "indecent", one that permits the doctor program or a statement of the decency rules, but prohibits some of the books that children can browse through in the public library and the bookstore. Over the years, as the Internet replaces the public library and the bookstore, some of our freedom of the press will be lost. Just a few weeks ago, another country imposed censorship on the Internet. That was China. We don't think well of China in this country--its government doesn't respect basic freedoms. But how well does our government respect them? And do you care enough to preserve them here? If you care, stay in touch with the Voters Telecommunications Watch. Look in their Web site http://www.vtw.org/ for background information and political action recommendations. Censorship won in February, but we can beat it in November. Copyright 1996 Richard Stallman Verbatim copying and distribution is permitted in any medium provided this notice is preserved.