-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathhistory.html
executable file
·3117 lines (2445 loc) · 137 KB
/
history.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<html>
<head>
<title>xtc Release History and Notes</title>
<link rel="stylesheet" href="http://cs.nyu.edu/rgrimm/bedrock.css"
type="text/css">
<body>
<h1 class="title">xtc Release History and Notes</h1>
<dl>
<!-- ======================================================================= -->
<dt>2.4.0 (8/17/14)</dt>
<dd>Major feature release.
<p>This release significantly improves Blink. The Jeannie expression
evaluator has been greatly simplified to reduce the number of commands
sent to the component debuggers. The intermediate agent has been
enhanced to remove hard-coded limitations such as the maximum number
of threads and synchronized accesses to shared data structures. This
version is the one used for all experiment in the SPE ’14
paper “Debugging Mixed-Environment Programs with Blink”
by Byeongcheol Lee, Martin Hirzel, Robert Grimm, and Kathryn
S. McKinley.</p>
<p>This release also improves SuperC's AST node names, fixes various
bugs in AST creation, and adds further regression tests.</p>
<p>Clang's C structure layout appears to be different from that of
gcc, leading to a regression test failure on Mac OS 10.9.</p>
</dd>
<!-- ======================================================================= -->
<dt>2.3.1 (4/4/12)</dt>
<dd>Minor bug fix release. This release fixes incorrect license
headers in several source files and replaces 2.3.0 as described
below.</dd>
<!-- ======================================================================= -->
<dt>2.3.0 (3/25/12)</dt>
<dd>Major feature release.
<p>This release significantly improves <strong>SuperC</strong> again.
SuperC's performance has been tuned, the regression tests have been
expanded, numerous bugs have been fixed, and the scripts for running
and evaluating SuperC have been enhanced. All SuperC code is now
released under the GPL version 2.0. This version is the one used for
all experiments in the PLDI ’12 paper
“<a href="http://cs.nyu.edu/rgrimm/papers/pldi12.pdf">SuperC:
Parsing All of C by Taming the Preprocessor</a>” by Paul
Gazzillo and Robert Grimm.</p>
</dd>
<!-- ======================================================================= -->
<dt>2.2.0 (11/19/11)</dt>
<dd>Major feature release.
<p>This release significantly improves <strong>SuperC</strong>. The
parsing algorithm, Fork-Merge LR, has been completely reimplemented.
It is now based on the novel token follow-set, which captures the
actual variability of static conditionals independent of how they are
nested within each other and appended to each other. The parser also
includes three optimizations, shared reductions, lazy forking, and
early reductions, which further decrease the number of forked
subparsers.</p>
<p>Both SuperC preprocessor and parser are now language-independent.
To support a new language, a user needs to provide an annotated JFlex
lexer definition, an annotated Bison grammar, and, optionally, a Java
implementation of semantic actions.</p>
<p>Several new scripts help with running SuperC and collecting
experimental data. They include a script to distribute the processing
of Linux kernel source files across machines and scripts to compute
summary statistics from SuperC's raw data output, e.g., a CDF of the
number of subparsers.</p>
<p>The new SuperC technical manual can be found
in <code>src/xtc/lang/cpp</code>. It documents basic SuperC usage,
its scripts, and the format of its statistics output. The manual is
built by invoking <code>make manual</code>.</p>
<p>This release also fixes a bug in the <strong>Jeannie</strong>
regression test harness, which failed on some Linux distributions.
Thanks to Jacob Shufro and Martin Hirzel for their help in identifying
and resolving this bug.</p>
</dd>
<!-- ======================================================================= -->
<dt>2.1.1 (9/9/11)</dt>
<dd>Minor bug fix release.
<p>This release removes support for type checking the simply typed
lambda calculus from <code>xtc.lang.TypedLambda</code>, since it
depends on the already discontinued Typical compiler. Thanks to
Thomas Huston for identifying this bug.</p>
<p>This release fixes the C structure layout regression tests to not
utilize the Typical-generated type checker anymore.</p>
<p>This release also fixes a C type checker regression test to not use
a deprecated preprocessor feature anymore. Thanks to Jacob Shufro for
identifying this bug.</p>
</dd>
<!-- ======================================================================= -->
<dt>2.1.0 (9/7/11)</dt>
<dd>Minor feature and bug fix release.
<p>This release improves <strong>SuperC</strong> by adding
significantly more regression tests and introducing attendant bug
fixes. It also adds more code comments and fixes code formatting.</p>
<p>This release adds support for parsing and pretty
printing <strong>Java 7</strong>. To support Java 7's
try-with-resources statements, the AST for regular try-catch
statements has been changed, even when using parsers for earlier Java
versions. The Java analyzer, <code>xtc.lang.JavaAnalyzer</code>, has
been updated accordingly. To support Java 7's underscores in numeric
literals, the definition of Java constants
in <em>Rats!'</em> <code>xtc.lang.JavaConstant</code> has been
modified to more closely follow the language specification.</p>
<p><strong>Tokens</strong> are now extensible; the corresponding
class, <code>xtc.tree.Token</code>, is not final anymore but has
become abstract. <em>Rats!'</em> support for parse trees has been
updated to utilize the new concrete
subclass <code>xtc.tree.TextToken</code>. All parsers distributed
with xtc have been updated accordingly.</p>
<p>To support <strong>Mac OS X 10.7</strong> (Lion), this release adds
support for the <code>stpncpy_chk()</code> builtin function.</p>
<p>Finally, this release removes a residual dependency on the
Typical-generated type checker from <code>xtc.lang.C</code>. Thanks
to Thomas Huston for identifying this bug.</p>
</dd>
<!-- ======================================================================= -->
<dt>2.0.0 (7/20/11)</dt>
<dd>Major feature release.
<p>This release introduces a preview of <strong>SuperC</strong>, a
new tool for parsing C code with arbitrary preprocessor usage. SuperC
first lexes C code, then uses a new configuration-preserving
preprocessor to resolve all directives modulo conditionals, and
finally uses a novel variant of LR parsing to generate a well-formed
AST containing static choice nodes for conditionals. The
corresponding Java package is <code>xtc.lang.cpp</code>.</p>
<p>This release removes the following unmaintained code: the ANTLR
and JavaCC parsers for Java; the C4 compiler; the Overlog compiler;
the Typical compiler; and the XForm AST query engine. The last
release containing this code is
<a href="http://cs.nyu.edu/rgrimm/xtc/xtc-core-1.15.0.zip">xtc version
1.15.0</a> (with
corresponding <a href="http://cs.nyu.edu/rgrimm/xtc/xtc/-testsuite-1.15.0.zip">testsuite</a>).</p>
<p>This release removes the unnecessary dependency on the "perfctr"
library from Jinn. Thanks to Mengtao Sun for pointing out this
bug.</p>
</dd>
<!-- ======================================================================= -->
<dt>1.15.0 (6/14/10)</dt>
<dd>Major feature release. This release
introduces <strong>Jinn</strong>, a dynamic bug detector for the Java
Native Interface (JNI). It currently supports HotSpot and J9 running
on the x86 version of Linux. Support for other OS and processor
combinations is under development. The source directory
is <code>src/xtc/lang/blink/agent</code> and the make target
is <code>agent</code>. Please direct any feedback
to <a href="mailto:[email protected]?subject=Jinn">Byeong
Lee</a>.</p>
<p>This release also removes the unnecessary <code>analyzers</code>
target from the make file in <code>src/xtc/lang/blink</code>. Thanks
to Tony Sloane for pointing out this bug.</p>
</dd>
<!-- ======================================================================= -->
<dt>1.14.4 (9/29/09)</dt>
<dd>Minor bug fix release:
<ul>
<li>Added <code>rats.manifest</code> to the source distribution.
Thanks to Tony Sloane for pointing out this omission.</li>
<li>Cleaned up <code>xtc.tree.Visitor</code>
and <code>xtc.lang.C</code> to avoid raw type warnings.</li>
<li>Changed parser generator to correctly handle top-level repetitions
and options in productions that are marked as resetting or stateful.
Thanks to Christoff Bürger for helping to identify this
issue.</li>
<li>Changed parser regression test to eliminate non-ASCII character,
which may lead to test failures depending on a system's default
encoding. Thanks to Christopher Mangus for helping to identify this
issue.</li>
<li>Cleaned up <code>limits.c</code> to support 64-bit architectures
and eliminate compiler warnings.</li>
<li>Changed C grammar to avoid stack overflow errors for large
compound statements.</li>
<li>Changed the Java and Typical type checkers for C to support
different structure layout for packed bitfields in gcc 4.2 and later.
Thanks to Christopher Mangus, Martin Hirzel, and Anh Le for helping to
resolve this issue.</li>
<li>Changed the C type checkers to support gcc's builtin functions for
bounds checking memory operations.</li>
<li>Changed Jeannie build scripts to disable Apple's "blocks"
extension to C, C++, and Objective-C on Mac OS X. Thanks to Martin
Hirzel for realizing this change.</li>
<li>Changed Jeannie build scripts to also
use <code>include/win32</code> as an include file path for Cygwin,
which is necessary for Sun's JDK 1.6. Thanks to Martin Hirzel for
resolving this issue.</li>
<li>Changed Jeannie regression tests to support 64-bit pointers.
Thanks to Martin Hirzel for orchestrating this change.</li>
<li>Updated <code>xtc.lang.c.ml.Machdep</code> to reflect changed
constants in <code>xtc.Limits</code>. Thanks to Mike Chrzanowski for
identifying this bug.</li>
</ul>
<p>Due to many of the above changes, xtc now passes all regression
tests on Apple's Mac OS X Snow Leopard (10.6), whose C compiler and
Java virtual machine default to 64-bit.</p>
</dd>
<!-- ======================================================================= -->
<dt>1.14.3 (4/6/09)</dt>
<dd>Minor feature and bug fix release.
<p><strong><em>Rats!</em></strong> has been updated as follows:<ul>
<li>Text-only productions may now contain syntactic predicates in
addition to semantic predicates.</li>
<li>The source locations for errors caused by any character constants
or visibility attributes are now correctly reported. Thanks to Chris
Capel for raising this issue.</li>
<li>The code generator now emits <code>break</code> statements for
character switches in optional expressions. Thanks to Chris Capel and
the C# compiler for identifying this bug.</li>
</ul></p>
<p>The Jeannie grammar has been updated to eliminate a bug that caused
null pointer exceptions. Thanks to Matt Renzelmann for identifying
this bug.</p>
<p>The Blink debugger has been updated to perform dynamic consistency
checks on the arguments to JNI functions. For example, it detects
when <code>NULL</code> is passed to <code>NewStringUTF</code> and
reports this invalid argument.</p>
</dd>
<!-- ======================================================================= -->
<dt>1.14.2 (10/18/08)</dt>
<dd>Minor feature and bug fix release.
<p><strong><em>Rats!</em></strong> has been updated as follows:<ul>
<li>A code generator bug for repetitions nested in options nested
in repetitions has been fixed.</li>
<li>Based on feedback by Marek Gilbert and Sukyoung Ryu, error
messages for string literals, string matches, and optional/repeated
elements have been improved. Additionally, the new per-production
<code>explicit</code> attribute instructs <em>Rats!</em> to generate
error messages relative to the marked production's name (and thus
ignore any already generated parse errors).</li>
<li>Generic productions that are directly left-recursive and
explicitly assign <code>yyValue</code> in recursive alternatives are
now rejected, since <em>Rats!</em> cannot deduce their semantic value.
Thanks to Chris Capel for raising this issue.</li>
<li>Productions containing expressions lifted from public productions
do not inherit public visibility anymore. Thanks to Chris Capel for
raising this issue.</li>
<li><em>Rats!</em> now has its own JAR file, <code>rats.jar</code>.
Thanks to Adrian Quark for raising this issue.</li>
<li>The regression tests now check for errors and warnings as well as
correct inputs and outputs.</li>
</ul></p>
<p><strong>C support</strong> has been improved as follows:<ul>
<li>The C grammar has been changed to avoid stack overflow errors on
some Java virtual machines when parsing very long character or string
literals. Thanks to Eric Hielscher for raising this issue.</li>
<li>The C type checker has been updated to type check programs read in
with the <code>parsetree</code> option, which preserves all
formatting. Thanks to Eric Hielscher for raising this issue.</li>
<li>The C grammar and type checker now support
the <code>__thread</code> specifier provided by gcc for the ELF object
format. Thanks to Matt Renzelmann for raising this issue and aiding
in its resolution.</li>
<li>The new <code>printFeatures</code> option
for <code>xtc.lang.C</code> prints major GCC extensions used by the
code being processed.</li>
</ul>
Please remember to run <code>make configure</code> to recreate
the appropriate <code>xtc.Limits</code> for your hardware, OS, and
compiler. Thanks to BK Lee's tireless help, configuration now also
works with Microsoft's Visual C.</p>
<p>The <strong>Blink</strong> inter-language debugger has been
improved as follows:<ul>
<li>Blink now natively supports Microsoft Windows using Microsoft CDB
as a component debugger. It features breakpoints, call stack tracing,
and single stepping across Java and native code. However,
mixed-language Jeannie expressions are not (yet) working, since
Microsoft CDB does not support complete C/C++ expression evaluation
and convenience variables.</li>
<li>Blink is now more robust by wrapping calls from Java to C through
JVMTI, the JVM Tool Interface, which is available in JVMs such as
Sun's HotSpot and IBM's J9. Previously, Blink relied on native
breakpoints inside the JVM to interpose on the transition from Java to
native code. This approach can lead to surprising behavior during
inter-language single stepping and has thus been replaced.</li>
</ul></p>
</dd>
<!-- ======================================================================= -->
<dt>1.14.1 (7/31/08)</dt>
<dd>Bug fix release.
<p><strong><em>Rats!</em></strong> has been updated as follows:<ul>
<li>User-specified bindings in the base cases of directly
left-recursive productions are now preserved (instead of being
renamed). Thanks to Chris Capel for identifying this bug.</li>
<li>Left-recursive productions are now recognized in time linear to a
grammar's number of productions. Thanks to Chris Capel for raising
the issue of parser generator performance.</li>
<li>If an alternative contains only a predicate, it will not result in
an unreachable alternative error anymore. Similarly, if an option
contains only a predicate, it will not result in a matching empty
input warning anymore. Thanks to Chris Capel for identifying these
bugs.</li>
<li>If an alternative starting with character and/or string literals
is a prefix of a subsequent alternative, the latter alternative will
now be reported as unreachable (instead of <em>Rats!</em> generating
unreachable Java code). Thanks to Janus Dam Nielsen for identifying
this issue.</li>
<li>Voided null literals are now rejected with an error message (as
they serve no purpose). Thanks to Eric Hielscher for raising this
issue.</li>
<li>Java primitive types and keywords are now reported as invalid
types for productions.</li>
<li>Optional or repeated actions now result in a single error message
instead of two messages.</li>
</ul></p>
</dd>
<!-- ======================================================================= -->
<dt>1.14.0 (7/26/08)</dt>
<dd>Major feature release.
<p>This release introduces <strong>Blink</strong>, a portable
mixed-mode Java/native debugger. It currently supports Sun's Java
virtual machine running on the x86 versions of Linux and Cygwin, with
support for other JVM, OS and processor configurations under
development. Please direct any feedback
to <a href="mailto:[email protected]?subject=Blink">BK Lee</a>.</p>
</dd>
<!-- ======================================================================= -->
<dt>1.13.3 (5/14/08)</dt>
<dd>Minor feature and bug fix release.
<p><strong><em>Rats!</em></strong> has been updated as follows:<ul>
<li>Variant typing now supports constructors with the same simple name
appearing in different variants. The corresponding generic nodes must
be created in different modules. Furthermore, polymorphic variants
may not reference different monomorphic variants containing
constructors with the same simple name.</li>
<li>Variant typing now better handles generic productions that do not
pass the value through and whose generic nodes have already been
assigned to monomorphic variants. Additionally, a bug in processing
such productions has been fixed.</li>
<li>String literals in string match expressions are now properly
escaped. Thanks to Dejan Jovanović for identifying this
bug.</li>
<li>The runtime JAR file now contains nested and anonymous classes as
well. Thanks to Chris Jones for identifying this bug.</li>
</ul>
Due to improvements in variant typing, <em>Rats!</em> now statically
types the Jeannie grammar, requiring no
additional <code>variant</code> annotations.</p>
<p>The <strong>Typical compiler</strong> has been updated to
support <code>fun</code> expressions, and the translation
of <code>let</code> expressions has been optimized. Additionally,
bugs in the exhaustiveness checking for <code>match</code> expressions
and when explicitly matching <code>bottom</code> have been fixed.
Thanks to Christopher Conway for reporting these bugs.</p>
<p>The Java, Typical, and O'Caml <strong>type checkers for
C</strong> have been updated to:<ul>
<li>check for zero width bit-fields with names,</li>
<li>check for discarded qualifiers,</li>
<li>treat string literals as <code>const char *</code>
instead of <code>char *</code>,</li>
<li>track the compile-time constant values of sizeof, alignof, and
offsetof expressions,</li>
<li>correctly track the compile-time constant values of enumerators
that are defined in terms of other enumerators within the same
enumeration,</li>
<li>warn on (in)equality comparisons between integers and pointers
(instead of reporting errors).</li>
</ul>
Thanks to Matt Renzelmann for identifying the last two issues.</p>
<p>To track size, alignment, and offset values, the C type checkers
now include a re-engineered version of gcc's structure layout
algorithm. The local system's C configuration
in <code>xtc.Limits</code> has been improved in support.
Run <code>make configure</code> to recreate the appropriate
version for your hardware and operating system.</p>
<p>The syntax for <strong>Jeannie</strong> top-level compilation
units has changed. The package and import declarations now come
before the initial <code>`.C {…}</code> block instead of
after it. That way, top-level C code can use simple instead of fully
qualified names when referring to Java entities.</p>
<p>Internally, the Jeannie grammar and AST for array declarators has
been updated to create "variable length" nodes, just like the C
grammar and AST in release 1.13.0. Furthermore, the compiler has been
updated to address several bugs, mostly thanks to helpful reporting by
Matt Renzelmann.</p>
<p>Support for <strong>Overlog</strong> has been extended with a
translator targeting Java. The corresponding runtime is being
developed by Nalini Belaramani at UT Austin; the necessary JAR file is
available <a href="http://cs.nyu.edu/rgrimm/xtc/overlog-runtime.jar">here</a>.
Additionally, the Overlog language has been extended with tuple and
function type declarations, the Overlog grammar has been cleaned up,
and a bug in the inference of function return types has been fixed.
The corresponding Java package has been renamed
to <code>xtc.lang.overlog</code> (from <code>xtc.lang.p2</code>).</p>
</dd>
<!-- ======================================================================= -->
<dt>1.13.2 (12/1/07)</dt>
<dd>Minor feature and bug fix release.
<p>The <strong>Jeannie compiler</strong> now supports backticked Java
primitive types, e.g., <code>`boolean</code> or <code>`int</code>, as
C type specifiers. This change eliminates the need for using the
equivalent JNI types, e.g., <code>jboolean</code>
or <code>jint</code>, in C contexts. This release also includes
various bug fixes to the Jeannie compiler and
a <a href="http://cs.nyu.edu/rgrimm/xtc/jeannie.html">user
guide</a>.</p>
<p>The <strong>Typical compiler</strong> now supports
the <code>guard</code> construct for protecting
against <code>bottom</code> values in arbitrary expressions. It also
incorporates various bug fixes, including mapping <code>bottom</code>
to <code>bottom</code> in optimized pattern matches.</p>
<p>This release includes <strong>three type checkers for C</strong>.
The first is the previously released version, which is written in Java
and used by the Jeannie compiler. The second is new to this release
and written in Typical. It is invoked through
the <code>-analyze</code> and <code>-typical</code> options to the C
driver <code>xtc.lang.C</code>. Just like the type checker written in
Java, the type checker written in Typical passes all of gcc 4.1.1's
regression tests. Both type checkers also process the entire Linux
2.6 kernel. To this end, the handwritten C type checker now:<ul>
<li>supports gcc's <code>__builtin_types_compatible_p()</code> (which
also required changing the C grammar),</li>
<li>properly creates a scope for gcc statement expressions,</li>
<li>actually recognizes unnamed struct or union fields appearing in
structs or unions,</li>
<li>correctly pointer decays all address of expressions,</li>
<li>correctly recognizes all type names in sizeof and alignof
expressions (which also required changing the C grammar),</li>
<li>computes the size and alignment of arbitrary types and expressions
(though the results do not yet agree with gcc for bitfields),</li>
<li>treats compound literals as compile-time constants,</li>
<li>treats static block-level variables as having a compile-time
constant memory location,</li>
<li>correctly tracks compile-time constant addresses across all
address of expressions,</li>
<li>treats offsetof expressions as having a compile-time constant
value,</li>
<li>suppresses duplicate errors when processing case labels.</li>
</ul>
The third type checker for C is new to this release as well and
written in O'Caml. It re-uses the parser and AST representation
of <a href="http://www.cs.berkeley.edu/~necula/cil/">CIL</a> and is
contained in the <code>src/xtc/lang/c/ml</code> directory. Like the
other two type checkers, the O'Caml version processes the entire Linux
2.6 kernel; though it does not recognize C99's variable length
arrays.</p>
<p>xtc now includes support for type inference and concurrency
analysis of <strong>Overlog</strong> programs; the corresponding code
lives in the <code>xtc.lang.p2</code> package.</p>
<p><strong><em>Rats!</em></strong> has been updated as follows:<ul>
<li>Variant typing now supports modularized AST definitions, i.e., it
now supports variants with the same simple name but in different
modules. It also performs stricter error checking.</li>
<li>Support for the <code>rawTypes</code> attribute has been fixed; it
does not result in a class cast exception anymore. However, support
for this attribute has been deprecated and will be removed in a future
release.</li>
</ul></p>
<p>All <strong>tools</strong> now support a <code>-no-exit</code>
option for not exiting a Java virtual machine. As a result, tools can
now be invoked by other Java code in the same JVM without terminating
the JVM after tool completion.</p>
<p>The <strong>licensing</strong> of most classes
in <code>xtc.util</code> has been changed to the LGPL version 2.1. As
before, the complete list of LGPL-ed classes can be found
in <a href="overview.html">overview.html</a>.</p>
</dd>
<!-- ======================================================================= -->
<dt>1.13.1 (10/16/07)</dt>
<dd>Bug fix and minor feature release.
<p>This release makes the following changes
to <strong><em>Rats!</em></strong>:<ul>
<li>Parsers generated with the <code>withLocation</code> option now
start counting columns at 1 (instead of 0) for consistency with most
modern development environments. The following code fixes Emacs'
column number mode:
<pre>
(add-hook 'post-command-hook (lambda ()
(let ((help-echo "mouse-1: select (drag to resize), mouse-2: delete others, mouse-3: delete this")
(col (number-to-string (+ 1 (current-column)))))
(setq-default mode-line-position
`((-3 ,(propertize "%p" 'help-echo help-echo))
(size-indication-mode
(8 ,(propertize " of %I" 'help-echo help-echo)))
(line-number-mode
((column-number-mode
(10 ,(propertize (concat " (%l," col ")") 'help-echo help-echo))
(6 ,(propertize " L%l" 'help-echo help-echo))))
((column-number-mode
(5 ,(propertize (concat " C" col) 'help-echo help-echo))))))))
(force-mode-line-update)))
</pre>
Thanks to Martin Hirzel for updating Emacs' original hook. The start
column is now defined by <code>xtc.Constants.FIRST_COLUMN</code>;
the <code>xtc.tree.Printer</code> utility has been updated to use this
constant.</li>
<li>Parsers generated with the <code>withLocation</code> option now
correctly annotate nodes resulting from directly left-recursive
generic productions with their source locations (again). Release
1.12.0 introduced a regression, which annotated nodes with a source
location past the position of the recursive nonterminal. This release
restores an optimized version of the correct approach introduced in
release 1.8.0.</li>
<li>A parser's internal state for tracking source locations can now be
updated through
the <code>xtc.parser.ParserBase.setLocation(int,String,int,int)</code>
method. The C, C4, and Jeannie grammars utilize this method to update
the corresponding parsers' source location based on gcc line markers
in the preprocessed input. As a result, all error messages now report
the original file name and line number; though the column number may
be inaccurate due to macro expansion.</li>
<li>Parsers containing generic productions now include a
static <code>toText()</code> helper method that returns a string. For
regular parsers, the method is the identity function for strings. For
parsers generated with the <code>withParseTree</code> option, the
method takes an annotated token as its only argument and returns the
corresponding string. The C and Java grammars have been rewritten to
utilize this method instead of various kludges for converting
annotated tokens to strings.</li>
<li>Parsers generated with the <code>withParseTree</code> option now
correctly preserve formatting in list-valued productions.
Furthermore, they now correctly preserve formatting in some generic
productions that are not directly left-recursive and end with a
sequence consisting only of formatting; <em>Rats!</em> also does not
split such productions any more.</li>
<li>The new <code>noinline</code> attribute for productions prevents
inlining even if the production is marked as or recognized
as <code>transient</code>. Furthermore, the new <code>memoized</code>
attribute for productions prevents productions from being treated
as <code>transient</code>.</li>
<li>Variant typing now performs stricter error checking before
assigning a polymorphic variant to a production. It also generates
more consistent constructor names for polymorphic variants. Finally,
it now correctly assigns some generic nodes to variants that were
previously ignored.</li>
<li>The accuracy of production voiding, which voids productions whose
semantic values are never bound, has been improved.</li>
</ul></p>
<p>The <strong>Typical</strong> compiler now supports the
hierarchical syntax tree definitions generated by <em>Rats!</em>,
including polymorphic variants and the <code>'a var</code> type.
The type describing the syntax tree's root defaults
to <code>node</code> but can be overridden through
the <code>-node</code> command line flag. Additional changes to
Typical include:<ul>
<li>The Typical type checker itself is now built with all
optimizations enabled: pattern matches are optimized through switch
statements, let scopes are collapsed where possible, and the unused
type record is optimized away.</li>
<li>The implementation of the <code>reduce</code> construct now
correctly follows its semantics.</li>
<li>Similarly, the implementation of the <code>parent</code>
and <code>ancestor</code> built-ins now follows their semantics.</li>
</ul></p>
<p>The <strong>Jeannie compiler</strong> has been updated to reflect
the language described in the OOPSLA paper. In particular, it now
supports <code>with</code> statements for non-primitive arrays,
declarations in <code>with</code> statement initial clauses, and
compound initializers. Additional changes include:<ul>
<li>Keywords and built-ins new to Jeannie can now be written without
leading underscores. However, to avoid a name clash with the standard
C library, <code>abort</code> (or <code>_abort</code>) has been
renamed to <code>cancel</code> (or <code>_cancel</code>). The
new <code>-underscores</code> command line option overrides this new
default behavior, reverting to the underscored versions.</li>
<li>The compiler now emits line marker comments in generated Java code
of the form
<pre>
//#line <line> <file>
</pre>
and indents both generated C and Java code identically to the source.
The new <code>-pretty</code> command line option overrides this new
default behavior, reverting to the Java and C pretty printers.</li>
<li>The new <code>jeannie.sh</code> shell script
in <code>src/xtc/lang/jeannie</code> manages the entire build process
from Jeannie source code to Java and C binaries.</li>
</ul></p>
<p>The C regression tests have been updated to include all relevant
tests from GCC version 4.1.1. The <strong>C type checker</strong> has
been updated accordingly. In particular, it now explicitly checks
for:<ul>
<li>structs or unions not being redefined within themselves,</li>
<li>variables, fields, and parameters not being declared as void
(instead of reporting the types as incomplete),</li>
<li>void parameter type lists not having a storage class, qualifier,
or function specifier,</li>
<li>identifiers with internal linkage not being redeclared with
external linkage in a block-level declaration,</li>
<li>labels being declared but not defined and labels being defined but
not used,</li>
<li>the type of the target in gcc's computed goto statements being a
non-float scalar,</li>
<li>incomplete types when dereferencing pointers or performing pointer
arithmetic,</li>
<li>right-hand sides in assignments not being void,</li>
<li>pointer values not being assigned to floating point objects,</li>
<li>structs or unions in compound literals not being incomplete,</li>
<li>extra brace groups in compound initializers,</li>
<li>the return type of <code>main</code> not being an int.</li>
</ul>
Additionally, the processing of block-level extern declarations has
been much improved.</p>
<p>The <code>limits.c</code> utility for determining a <strong>local
system's C configuration</strong> has been improved to more accurately
determine the local pointer difference, size, and wide character
types. The corresponding <code>xtc.Limits</code> class included in
the source distribution is valid for 32-bit x86-based Mac OS X
systems, but differs in endianness from PowerPC-based Mac OS X systems
and in the definitions for size and wide character types from Linux
and Windows systems. The new <code>configure</code> target for the
global Makefile rebuilds <code>xtc.Limits</code>
and <code>xtc.type.C</code> (whose constants depend
on <code>Limits</code>) for a local system.</p>
<p>Thanks to Thomas Moschny, the implementation of for expressions in
the <strong>XForm</strong> AST query and transformation engine has
been fixed to properly iterate over nested sequences. Also thanks to
Thomas Moschny, a bug causing a null pointer exception has been
fixed.</p>
<p>All <strong>tools</strong> now support
a <code>-diagnostics</code> option to print tool internal state.
Given this option, the C driver now prints the local system's
configuration parameters (as determined by <code>limits.c</code>
— see above).</p>
<p>Finally, the Java and C drivers now support
the <code>-locateAST</code> command line option to print each node's
source location when printing the AST with the <code>-printAST</code>
option.</p>
</dd>
<!-- ======================================================================= -->
<dt>1.13.0 (8/31/07)</dt>
<dd>Major feature and bug fix release.
<p>Starting with this release, xtc
includes <strong>Typical</strong>, a domain-specific language and
compiler for implementing semantic analysis including type checking.
The Typical language builds on the functional core of ML and extends
it with novel declarative constructs specifically designed for
implementing type checkers. The package description
for <code>xtc.typical</code> provides an overview and introduction.
Examples included with xtc are a type checker for the simply typed
lambda calculus in <code>src/xtc/lang/TypedLambda.tpcl</code> and for
the Typical language itself in <code>src/xtc/lang/Typical.tpcl</code>.
A type checker for C written in Typical is under development. The
main developers for Typical are Laune Harris and Anh Le.</p>
<p>Starting with this release, xtc also includes "a compiler
contributed to xtc" a.k.a. <strong>Jeannie</strong>, which integrates
Java with C. In Jeannie, Java and C code are nested within each other
at the level of individual statements and expressions and compile down
to JNI, the Java platform's standard foreign function interface. By
combining the two languages' syntax and semantics, Jeannie eliminates
verbose boiler-plate code, enables static error detection across the
language boundary, and simplifies dynamic resource management.
The <a
href="http://cs.nyu.edu/rgrimm/papers/oopsla07.pdf">OOPSLA '07</a>
paper by Martin Hirzel and Robert Grimm describes both language and
compiler in detail; the package description
for <code>xtc.lang.jeannie</code> provides instructions on how to
compile source code to binaries.</p>
<p>Instead of using strings, <strong><em>Rats!</em></strong> now
relies on <code>xtc.type.Type</code> and its subclasses to internally
represent the types of semantic values. The first new feature to
leverage this improved internal representation is <strong>variant
typing for grammars</strong>. When the <code>-ast</code> command line
option is combined with the new <code>-variant</code>
option, <em>Rats!</em> automatically determines ML-style variant
types representing a grammar's generic AST. To facilitate type
inference, <em>Rats!</em> relies on the new <code>variant</code>
attribute for productions, which indicates that all generic nodes
returned by a production are members of the same variant type, named
after the production. The C, Java, Typical, and simply typed lambda
calculus grammars have been updated accordingly.</p>
<p>The <strong>Java grammar and AST</strong> for <code>this</code>
expressions have been improved. Instead of accepting any primary and
postfix expression, the grammar now recognizes only a qualified
identifier with a trailing dot before the <code>this</code> keyword.
For well-formed inputs, this changes replaces zero or more nested
selection expression nodes as a this expression node's first child
with an optional qualified identifier.</p>
<p>The <strong>C grammar and AST</strong> have also been improved.
The "<code>*</code>" string denoting variable-length arrays in array
declarator nodes and direct abstract declarator nodes has been
replaced with a dedicated "variable length" node. Next, the
identifier string in structure designators has been replaced by a
primary identifier node. Finally, goto statement nodes now have two
children. A "<code>*</code>" string as the first child now indicates
a computed goto statement. The second child always is a node, with a
primary identifier providing a regular goto statement's label.</p>
</dd>
<!-- ======================================================================= -->
<dt>1.12.0 (7/18/07)</dt>
<dd>Major feature and bug fix release.
<p>As described below, <em>Rats!</em>' handling of list values in
generic productions has changed. If your grammar contains generic
productions and you do not want to update your AST processing code,
add the <code>flatten</code> option to your grammar.</p>
<p>xtc now supports <strong>parse trees</strong> in addition to
abstract syntax trees, thus facilitating source code refactorings that
preserve formatting and layout. In particular:<ul>
<li>For grammars with the new <code>withParseTree</code>
attribute, <em>Rats!</em> rewrites generic, list-valued, text-only,
and void productions as well as productions that pass the value
through to generate parsers that preserve all formatting as
annotations. Annotations are instances of the new
class <code>xtc.tree.Formatting</code>, which replaces the generic
annotations introduced in version 1.9.0.</li>
<li>The embedded AST generally has the same structure as for parsers
generated without the <code>withParseTree</code> attribute. The
exception are strings, which are represented as instances
of <code>xtc.tree.Token</code>. Additionally, generic nodes include
additional children (consisting of <code>Formatting</code> annotating
a <code>null</code> value) if a voided expression or void nonterminal
appears between two list-valued expressions.</li>
<li>By default, visitors continue to ignore all annotations and
process only AST nodes, thus ensuring that the same visitors can
process both parse trees and abstract syntax trees.
The <code>Token.test</code> and <code>Token.cast</code> methods
can be used to test for and cast to strings, irrespective of whether
the tree is a parse tree or abstract syntax tree.</li>
<li>The new <code>xtc.tree.ParseTreePrinter</code> prints parse trees
including formatting, and the
new <code>xtc.tree.ParseTreeStripper</code> strips all formatting and
tokens, extracting the embedded AST (but preserving any other
annotations).</li>
<li>The C and Java drivers have been updated with
a <code>-parsetree</code> option to use parse trees instead of
abstract syntax trees. Furthermore, the <code>-strip</code> option
removes all formatting and tokens from a parse tree again.</li>
</ul></p>
<p>The interface to <strong>abstract syntax tree nodes</strong> has
been improved as following:<ul>
<li>Access to a node's source location has been factored into its own
interface <code>xtc.tree.Locatable</code>. The corresponding field
in <code>xtc.tree.Node</code> has been marked private. <em>Rats!</em>
now uses this interface for parsers with the <code>withLocation</code>
attribute, thus removing the dependency on xtc's node
representation.</li>
<li>All nodes now support a <code>write(Appendable)</code> method for
incrementally creating a human-readable
representation. <code>Node.toString()</code> now utilizes this
method. Similar functionality for classes in <code>xtc.type</code>
has been modified to utilize this generalized version.</li>
<li>Nodes' support for children that are lists, i.e., instances
of <code>xtc.util.Pair</code> has been improved. In particular, the
new <code>Node.getList</code> method returns a node's child as a list,
and the new <code>Node.isList</code> and <code>Node.toList</code>
methods test for and cast to lists of nodes, respectively.
Additionally, the
new <code>Visitor.iterate</code>, <code>Visitor.map</code>,
and <code>Visitor.mapInPlace</code> methods apply a visitor to all
nodes on a list.</li>
</ul></p>
<p>The representation of <strong>programming language types</strong>
in <code>xtc.type</code> has been cleaned up and expanded:<ul>
<li>Type annotations, i.e., a type's source location, language, scope,
constant value, memory shape, and attributes, can now be stored
in <em>each</em> type instead of only a dedicated wrapped type.
Correspondingly, the wrapped types for source locations, constant
values, and memory shapes have been removed;
though <code>AnnotatedT</code> is still available to annotate a type
without directly modifying it.</li>
<li>The wrapped types for variables, fields, and C's struct and union
members have been folded into a single wrapped
type <code>xtc.type.VariableT</code>.</li>
<li>The new <code>UnitT</code>, <code>VariantT</code>,
and <code>TupleT</code> classes model the corresponding types in
functional languages such as ML or Haskell. The latter two classes
replace the <code>ListT</code>, <code>OptionT</code>,
and <code>ProductT</code> classes introduced in version 1.10.0.</li>
<li>Types can now be parameterized through the <code>Parameter</code>
and <code>Wildcard</code> classes representing named parameters and
wildcards, respectively. The new wrapped