/[eiffelstudio]/branches/eth/eve/Src/Eiffel/API/evaluated_type/tuple_type_a.e
ViewVC logotype

Log of /branches/eth/eve/Src/Eiffel/API/evaluated_type/tuple_type_a.e

Parent Directory Parent Directory | Revision Log Revision Log


Links to HEAD: (view) (annotate)
Sticky Revision:

Revision 92723 - (view) (annotate) - [select for diffs]
Modified Fri Jun 21 07:47:04 2013 UTC (6 years, 5 months ago) by jasonw
File length: 7825 byte(s)
Diff to previous 92499
<<Merged from trunk#92722.>>

Revision 92499 - (view) (annotate) - [select for diffs]
Modified Fri Apr 26 23:06:21 2013 UTC (6 years, 7 months ago) by jasonw
File length: 7713 byte(s)
Diff to previous 92434
<<Merged from trunk#92492.>>

Revision 92434 - (view) (annotate) - [select for diffs]
Modified Fri Apr 12 10:41:30 2013 UTC (6 years, 8 months ago) by jasonw
File length: 7710 byte(s)
Diff to previous 89347
<<Merged from trunk#92433.>>

Revision 89347 - (view) (annotate) - [select for diffs]
Modified Fri Aug 10 15:09:25 2012 UTC (7 years, 4 months ago) by jasonw
File length: 7698 byte(s)
Diff to previous 84395
<<Merged from trunk#89346.>>

Revision 84395 - (view) (annotate) - [select for diffs]
Modified Mon Sep 13 13:01:25 2010 UTC (9 years, 3 months ago) by jasonw
File length: 7710 byte(s)
Diff to previous 83441
<<Merged from trunk#84391.>>


Revision 83441 - (view) (annotate) - [select for diffs]
Modified Sat Jun 5 13:52:53 2010 UTC (9 years, 6 months ago) by jasonw
File length: 7651 byte(s)
Diff to previous 83331
Renamed branch eve3 to eve. The eve branch serves as the new branch for the EVE project.

Revision 83331 - (view) (annotate) - [select for diffs]
Modified Wed May 26 18:49:35 2010 UTC (9 years, 6 months ago) by jasonw
Original Path: branches/eth/eve3/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7651 byte(s)
Diff to previous 78938
<<Breanched from trunk@83330>> Created a branch to upgrade Eiffel Transform library to trunk.

Revision 78938 - (view) (annotate) - [select for diffs]
Modified Fri May 29 10:04:37 2009 UTC (10 years, 6 months ago) by jfiat
Original Path: trunk/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7651 byte(s)
Diff to previous 78267
Cleaned object test local expression.

Revision 78267 - (view) (annotate) - [select for diffs]
Modified Thu Apr 16 07:47:49 2009 UTC (10 years, 8 months ago) by alexk
Original Path: trunk/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7660 byte(s)
Diff to previous 77740
Unified setting of attached status for types that are known to be attached.
Supported intermediate levels of void-safety.


Revision 77740 - (view) (annotate) - [select for diffs]
Modified Mon Mar 16 14:57:19 2009 UTC (10 years, 9 months ago) by alexk
Original Path: trunk/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7648 byte(s)
Diff to previous 77520
Used context class settings when checking conformance to discard attachment status for non-void-safe classes (see test#attach058).

Revision 77520 - (view) (annotate) - [select for diffs]
Modified Wed Mar 4 01:50:25 2009 UTC (10 years, 9 months ago) by manus
Original Path: trunk/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7599 byte(s)
Diff to previous 76432
Updated to new syntax of object test and attached/detachable types using the `syntax_updater' tool.


Revision 76432 - (view) (annotate) - [select for diffs]
Modified Mon Dec 29 23:41:59 2008 UTC (10 years, 11 months ago) by manus
Original Path: trunk/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7580 byte(s)
Diff to previous 76125
Removal of `is' keyword.
Replacement of `is' by `=' for constant definitions.
Replaced `indexing' by `note'.


Revision 76125 - (view) (annotate) - [select for diffs]
Modified Tue Dec 9 20:24:44 2008 UTC (11 years ago) by manus
Original Path: trunk/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7628 byte(s)
Diff to previous 74866
Added a context class to `conform_to'. This prevents having to use `System.current_class' in the case
  of formals and thus making the code more robust.


Revision 74866 - (view) (annotate) - [select for diffs]
Modified Mon Sep 29 16:28:32 2008 UTC (11 years, 2 months ago) by manus
Original Path: trunk/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7509 byte(s)
Diff to previous 72584
Refactored the code for simplification of the runtime type encoding code generation.
Fixed an issue where A [INTEGER], A [?INTEGER] and A [!INTEGER] would generate 3 different
  CLASS_TYPEs instances where one is enough since an expanded type is always attached.
Added support (but disabled it for the time being) for encoding the attachment mark in the
  runtime type encoding, this is done via {TYPE_A}.annotation_flags which currently always
  return 0.
Changed the way `eparents' is generated, instead of generating again the class name, we simply
  generate the type id and we use that `type_id' to get the class name via the `cn_generator' field
  of the `struct cnode' structure.


Revision 72584 - (view) (annotate) - [select for diffs]
Modified Tue Mar 4 04:52:08 2008 UTC (11 years, 9 months ago) by alexk
Original Path: trunk/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 8198 byte(s)
Diff to previous 72419
Supported implicitly attached types (of constants, agents, tuples, etc.) in non-void-safe context to simplify transition to void-safe context by allowing reattaching values of these types to explicitly attached entities (this fixes test#attach005).

Revision 72419 - (view) (annotate) - [select for diffs]
Modified Sat Feb 23 00:45:27 2008 UTC (11 years, 9 months ago) by manus
Original Path: trunk/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 8215 byte(s)
Diff to previous 70534
Changed SUPPLIER_AS to only create the supplier on demands.

Merged TYPE_I and TYPE_A hierarchies in just TYPE_A one.
1-The major change is that now to compute the associated class type (CLASS_TYPE instance) of a TYPE_A
  one has to provide a context in which the TYPE_A instance appear. If no context is provided, then
  formal generics are not replaced. For example: LIST [G] alone will simply give you the LIST [G]
  CLASS_TYPE, but if you do it in the context of TEST [INTEGER], then it will return the
  LIST [INTEGER] CLASS_TYPE.
2-Updated all callers accordingly.
3-Simplified a few calls where before we did `type.associated_class_type.associated_class' to just
  `type.associated_class'.
4-Added new preconditions to the context provided, it really helped finding out when we were not doing
  things properly especially in code generation when regenerating code from parent into descendant.
5-Eventhough TYPE_I disappeared, I kept TYPE_C and its descendants since they are useful to have
  them for C code generation and quick discimination for TYPE_A instances.
6-Made validity of types better controled by checking more things in `{TYPE_A}.is_valid'. For example
  that if type used to represent a class which was expanded and that it is not expanded anymore, then
  the type is not valid anymore.
7-The most problematic change with TYPE_I/TYPE_A was that they had different notion of `is_external'
  we have added `is_true_external' to simplify the code in certain areas where the old TYPE_I semantic
  was needed.

Code generation change:
1-We now assume that the default context is always `{BYTE_CONTEXT}.context_class_type'. Then in
  `real_type' and `creation_type' we use `{TYPE_A}.evaluated_type_in_descendant' to properly evaluate
  a type from the ancestor code in the current context. Very useful for regeneration of inherited
  assertions and replicated features. Before it worked, but it was not clear how to do things properly,
  now it is clear.
2-Changed the way we generate the type information for like arguments: we simply nest calls to resolve
  the type of the arguments. This affects the interpreter and C code generation which includes a level
  ID for computing the type of generics.

C Code generation change:
1-Because debugging was too difficult at some point during that work and also because the name mapping
  we were using limited us to 32767 types and 131071 routines, I've changed the mechanism to not use
  the `encode.c' modules in C/bench and did everything in Eiffel. So now we simply write for a feature
  name FXXX_YYY where XXX is the type ID and YYY the body index. The same kind of changes have been
  done for other names (See ENCODER class for details.).
2-We also use `type_id' instead of `static_type_id' for names. The reason it is safe to do so is because
  `type_id' never changes in workbench mode and that in finalized mode, even if you have different
  incremental recompilation, 2 projects should generate more or less the same code at the ID levels
  making it easier to compare them.
3-Changed the way type are created. Instead of having a CREATE_INFO instance in the TYPE_I objects
  used to properly generate the type, we simply use the original TYPE_A instance. That way when we
  have an anchor, we either generate its `actual_type' or its anchor spec depending on the value of
  `use_info. We still use CREATE_INFO to generate the type information but instead of being an object
  in each TYPE_I, it is merely a once that we reinitialize each time we need it.
4-ONE CRITICAL ASPECT OF THE CHANGE #3 was that storable depends on the way type descriptions are generated
  and thanks to eweasel test#storable013 I was able to catch this much earlier in the process.
5-Generates less polymorphic tables for attributes and types specification. What happened before was
  that when we needed a polymorphic type specification for example to create `like x' where x is covariantly
  redefined, we were generating at the same time the polymorphic table for `x' even though if `x'
  was not actually used in the system. This reduces by a tiny amount only the size of the executable.
6-Made the DESCRIPTOR entries much smaller than they used to be by computing the number of ancestors
  instead of allocating for the numbers of routines which was really silly.

IL code generation change:
1-Provided a implementation for creation of BIT constants in .NET however it does not completely work yet,
  it has to do with the manner we generate the BIT_REF class.
2-Changed the way we compare signatures, we store a CLASS_TYPE and a routine ID instead. And then when
  needed we refetch the FEATURE_I object to perform the signature comparions. The issue is that the previous
  solution would not work if NATIVE_ARRAY and TYPED_POINTER do not record all the possible genereric
  derivations in which they are present which is now the case for simplicity.
3-Fixed a bug in code generation for a TYPE_FEATURE_I that is instantiated as a basic type. We would
  generate its associated reference type instead of the basic type. It was not caught before because those
  routines where never called at runtime unless you had a formal generic parameter creation constraint.
4-Fixed an inconsistency shown by eweasel test#incr168 where a precondition check was generated eventhough
  none was needed because one inherited routine had a True precondition. The C code was doing it ok, but
  not .NET
5-Found out see eweasel test#final041 that we first generate inherited assertion and then precondition,
  which is the contrary of what is done in melted or C code generation.
6-Simplified creation of manifest ARRAYS and TUPLE by avoiding a local variable.


Debugger:
1-Updated the code accordingly to the TYPE_I/TYPE_A merge
2-Fixed bug in {DBG_EVALUATOR}.prepare_parameters so that we do not use BYTE_CONTEXT to resolve
  the type but `instantiation_in' instead. It seems to solve one case that the previous debugger did
  not handle (See updated comment).
3-Fixed precondition violation in
  {AST_DEBUGGER_EXPRESSION_CHECKER_GENERATOR}.expression_or_instruction_type_check_and_code where
  we were still trying to evaluate in the descendant if the parent evaluation failed. Causing some
  precondition violations since the AST was not completely annotated with IDs needed for resolution.

Bug fixes:
1-Fixed issue with the way we maintained {CLASS_C}.generic_features, because you could rebuild the list
  without recompiling descendants (case of modifying only a contract of the class) and the rebuilding
  would yield new routine IDs. Then during either type checking or code generation the evaluation of 
  `{TYPE_A}.evaluate_type_in_descendant' could fail because it is not find the new routine ID in the
  descendant class. Now we preserve the routine ID as long as we can, same with feature ID.
2-Made `feature_of_rout_id' works to find the invariant feature.
3-Made sure that when removing an ID from a server it is also removed from the TMP server. Added
  a `not_present' postcondition after calling `remove' to ensure that.


Revision 70534 - (view) (annotate) - [select for diffs]
Modified Tue Oct 9 11:31:35 2007 UTC (12 years, 2 months ago) by alexk
Original Path: trunk/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 5368 byte(s)
Diff to previous 68886
Supported syntax for explicit declaration of attached and detachable types.
Modified conformance rules to take into account attachment status.
Supported syntax for object test.
Added validity rules for object test (including temporary restriction on
object test local names).
Supported the notion of scoped entities with the associated rules for void
test and object test that effectively are the basis for the CAPs.
Modified AST and associated visitors to take into account object test
nodes.


Revision 68886 - (view) (annotate) - [select for diffs]
Modified Tue Jun 5 18:51:04 2007 UTC (12 years, 6 months ago) by martins
Original Path: trunk/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 5314 byte(s)
Diff to previous 67227
Very small change to fix bug#13008.

Revision 67227 - (view) (annotate) - [select for diffs]
Modified Tue Mar 13 01:32:16 2007 UTC (12 years, 9 months ago) by martins
Original Path: trunk/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 5197 byte(s)
Diff to previous 67137
Support for multi constraint generics:
- Central new class is TYPE_SET_A: It provides features for type checking and feature lookup.
  (the TYPE_A interface is not perfectly complete until now)
- Added EXTENDED_TYPE_A: It basically encapsulates a type and a feature renaming.
- Changed parser to accept the new syntax.
- Adapted validity checks for generics to reflect the new rules.
- Changed AST_FEATURE_CHECKER_GENERATOR in particular `process_call' and its siblings
  to select the so called `multi_constrained_static'. This is the actual static type
  of the target. It is done for each access on a multi constraint generic.
- Added error classes VTGC*, VTGD* and VTMC*.
- Changed code which called `constrained_type' feature to make it capable
  of handling multi constraints. This is in most cases achieved through handling these cases
  explicitly: Autocompletion, query language and debugger are not yet adapted and don't work
  properly in the presence of multi constraint formals.
- Changed AST_DECORATED_OUTPUT_STRATEGY and the like to pretty print the multi constraints correctly.

Support for recursive formals:
- I added a second pass AST_FORMAL_GENERICS_PASS2 which handles the registration of suppliers
  and transformation of the types into the right class (formal or class type).

The rest of the changes are targeted to either one of these.


Revision 67137 - (view) (annotate) - [select for diffs]
Modified Thu Mar 8 23:06:19 2007 UTC (12 years, 9 months ago) by manus
Original Path: trunk/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 5082 byte(s)
Diff to previous 58325
Redefined `valid_generic' since it would still fail eweasel test#tuple007 when source
  has more actual generic parameters than the target.


Revision 58325 - (view) (annotate) - [select for diffs]
Modified Thu Apr 20 16:05:16 2006 UTC (13 years, 7 months ago) by manus
Original Path: trunk/Src/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 4509 byte(s)
Diff to previous 58027
Moved trunk/Src/bench/Eiffel to trunk/Src/Eiffel.

Revision 58027 - (view) (annotate) - [select for diffs]
Modified Wed Apr 5 07:08:57 2006 UTC (13 years, 8 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 4509 byte(s)
Diff to previous 57234
Fixed mixing paranthesis in indexing clause for the licensing.
Added missing license reference in newly created Eiffel classes.


Revision 57234 - (view) (annotate) - [select for diffs]
Modified Thu Mar 2 01:57:13 2006 UTC (13 years, 9 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 4499 byte(s)
Diff to previous 56535
Wrote a TYPE_A visitor.


Revision 56535 - (view) (annotate) - [select for diffs]
Modified Tue Jan 17 01:37:10 2006 UTC (13 years, 11 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 4368 byte(s)
Diff to previous 56011
Added text of the GPL license to all classes of the compiler.


Revision 56011 - (view) (annotate) - [select for diffs]
Modified Mon Dec 5 17:36:00 2005 UTC (14 years ago) by alexk
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 2963 byte(s)
Diff to previous 43815
Recorded explicit class type declaration rather than a calculated one to
avoid issues with recompiling classes that change their expandedness
status.
Initialized class types associated with a class using `update_types' to
ensure that all structures (e.g., `derivations') are updated as well.
Used instantiation procedure unconditionally to cover the case of "like
Current" type.
Made a feature `duplicate' available in CL_TYPE_I to avoid using reverse
assignment.
Ensured that parent types are reference.
Created generic attribute descriptor not only for types that depend on
formal generic but also for those depending on anchored type ("like
Current").


Revision 43815 - (view) (annotate) - [select for diffs]
Modified Tue Jun 15 17:48:52 2004 UTC (15 years, 6 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 2968 byte(s)
Diff to previous 41748
Use new creation procedure of GEN_TYPE_I, TUPLE_TYPE_I and NATIVE_ARRAY_TYPE_I.


Revision 41748 - (view) (annotate) - [select for diffs]
Modified Fri Mar 5 22:25:40 2004 UTC (15 years, 9 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 3025 byte(s)
Diff to previous 39271
Removed `same_as', `solved_type', `valid_generic' because the inherited
  version of `GEN_TYPE_A' do a proper job (we now use `like Current' in
  GEN_TYPE_A to ensure that it works smoothly for both GEN_TYPE_A and
  TUPLE_TYPE_A).
Removed `same_class_type', `rotate' and `rotate_right' since they were not
  used.
Removed `internal_conform_to' which has been replaced in parent class by
`conform_to' which also now covers basic types. And in `conform_to' made
an error when inserting an INTEGER type into a location that expects a DOUBLE
type, in 5.4 we were generating a VJAR warning.


Revision 39271 - (view) (annotate) - [select for diffs]
Modified Wed Sep 24 19:00:10 2003 UTC (16 years, 2 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7756 byte(s)
Diff to previous 39048
Fixed error message as we were confusing `target' with `source'.


Revision 39048 - (view) (annotate) - [select for diffs]
Modified Mon Sep 15 00:42:18 2003 UTC (16 years, 3 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7756 byte(s)
Diff to previous 37662
Removed our flexible TUPLE conformance to match the nromal generic conformance.
However not to break any code, if the type still matches like before we only
raise a warning. In our next release we will remove this warning and generate
an error instead.


Revision 37662 - (view) (annotate) - [select for diffs]
Modified Tue Jun 10 23:37:06 2003 UTC (16 years, 6 months ago) by julieng
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7012 byte(s)
Diff to previous 30265
Replace creation keyword with create keyword.


Revision 30265 - (view) (annotate) - [select for diffs]
Modified Mon Jan 21 01:41:16 2002 UTC (17 years, 10 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7007 byte(s)
Diff to previous 30228
Renamed `base_class_id' into `class_id' for consistency with rest of compiler.
Added creation routine to CL_TYPE_A so that `set_base_class_id' has been removed since
  not used. Updated creation routine of GEN_TYPE_A and TUPLE_TYPE_A to add
  an extra argument, the one used in the creation procedure of CL_TYPE_A,
  i.e. the `class_id'.
Cosmetics.


Revision 30228 - (view) (annotate) - [select for diffs]
Modified Thu Jan 17 01:01:42 2002 UTC (17 years, 11 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7254 byte(s)
Diff to previous 26913
Use new creation procedure `make' of CL_TYPE_I, GEN_TYPE_I and TUPLE_TYPE_I
instead of calling `set_base_id'.


Revision 26913 - (view) (annotate) - [select for diffs]
Modified Sun Aug 12 23:50:20 2001 UTC (18 years, 4 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7271 byte(s)
Diff to previous 14244
Merged branch `dev46_manu' to the trunc.


Revision 14244 - (view) (annotate) - [select for diffs]
Modified Tue May 4 18:09:42 1999 UTC (20 years, 7 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 8081 byte(s)
Diff to previous 13232
Modified completeley the validity checking of the constraint part of
a generic class. Before, it was not able starting from scratch to detect
invalid use of creation constraint clause, now it is.

Fixed a bug of command/query separation for `check_constraints' defined in TYPE_A.

The remaining problems are a missing incrementallity check when someone changes
the creation clause of a class used as a generic parameter of a generic class.


Revision 13232 - (view) (annotate) - [select for diffs]
Modified Fri Feb 5 03:57:18 1999 UTC (20 years, 10 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 8360 byte(s)
Diff to previous 12233
Fixed some problems related to the use of expanded types in generic parameter or with
simple expanded types:
- Fixed the byte code generation
- Changed the skeleton to handle correctly expanded type as a generic parameter
- Changed the attribute description to match the new skeleton
- Propagation of the expanded information (which was not done before, especially
  with inheritance)
- Changed the make routine of the TO_SPECIAL class so that it handles correctly
  an expanded type.


Revision 12233 - (view) (annotate) - [select for diffs]
Modified Tue Dec 8 21:07:08 1998 UTC (21 years ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 8319 byte(s)
Diff to previous 12126
New implementation for routine object which can be of the form:
	~r
	~r (a,b)
	~{A}r
	~{A}r (a,b)
	~~r


Revision 12126 - (view) (annotate) - [select for diffs]
Modified Sat Nov 28 04:00:14 1998 UTC (21 years ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 7415 byte(s)
Diff to previous 11342
Changes for the new TUPLE implementation.


Revision 11342 - (view) (annotate) - [select for diffs]
Modified Wed Sep 16 03:03:22 1998 UTC (21 years, 3 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 9952 byte(s)
Diff to previous 11302
Replaced all the occurences to the old AST *_AS_B by *_AS.


Revision 11302 - (view) (annotate) - [select for diffs]
Modified Sun Sep 13 22:35:07 1998 UTC (21 years, 3 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 9956 byte(s)
Diff to previous 11217
Removed `evaluated_type' and `associated_eclass' from TYPE_A and from their
descendants.

The first one, because it was a synonym to `actual_type'
The second one because it was the same as `associated_class'

Removed also useless precondition which were not exactly doing what their author
expected.


Revision 11217 - (view) (annotate) - [select for diffs]
Added Thu Sep 3 23:45:31 1998 UTC (21 years, 3 months ago) by manus
Original Path: trunk/Src/bench/Eiffel/API/evaluated_type/tuple_type_a.e
File length: 10165 byte(s)
New TUPLE classes in the compiler.


This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, enter a numeric revision.

  Diffs between and
  Type of Diff should be a

  ViewVC Help
Powered by ViewVC 1.1.23