/
chlog.txt
12299 lines (11970 loc) · 654 KB
/
chlog.txt
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
20240322:
- The compiler has been fixed to be able to compile itself without
using the X11 library. Many thanks to Pietro Cerutti for pointing
out that compiling s7c.sd7 under FreeBSD failed. Now the function
colorPixel() is only used if there is at least one non-empty
window object.
- In drw_x11.c the function drwRgbColor() has been improved to raise
GRAPHIC_ERROR if it is called without a successful drawInit().
Many thanks to Zachary Menzies for pointing out that the
compilation of the Seed7 compiler on AlmaLinux 9 triggered a
segmentation fault.
- In tim_win.c the function timAwait has been improved to always
raise RANGE_ERROR on february 29th of a non-leap-year. Many thanks
to Joe Thompson for pointing out that the chktime.sd7 test failed
with MinGW (gcc 8.1). The program chkccomp.c has been improved to
define the macro CHECK_NON_LEAP_YEAR_FEBRURARY_29 in version.h if
SystemTimeToFileTime() allows february 29th of a non-leap-year.
- The file readjson.s7i with experimental functions to read JSON
files has been added. Thanks to Bruce Axtens for driving the
attention towards reading JSON.
- The program make7 hase been improved to support commands enclosed
in backticks. The change has been made in cli_cmds.s7i.
- The Seed7 compiler (s7c.sd7) has been improved:
- A heap corruption is avoided if the RHS (right hand side) of an
assignment changes the target variable. E.g.:
aVariable := changeParameter(aVariable);
This has been fixed for the types string, bstring, bigInteger,
bitset, array, clib_file, struct, window, pointList,
sqlStatement, interface, ref_list, process, program, and
database.
- The generated code to handle assignments has been improved in
arr_act.s7i, big_act.s7i, bst_act.s7i, drw_act.s7i, fil_act.s7i,
itf_act.s7i, pcs_act.s7i, pol_act.s7i, prg_act.s7i, rfl_act.s7i,
sct_act.s7i, set_act.s7i, sql_act.s7i and str_act.s7i.
- In inline.s7i the function process_inline_func() has been fixed
to define the result name. Now the inlining of a result
expression works correctly. A test for this has been added to
chkhsh.sd7 (function chkInlineHashKeys).
- Now the initialization of window constants assumes an identical
pixel encoding if the pixel masks are zero.
- The initialization of POLLOBJECT, REFLISTOBJECT, PROGOBJECT,
DATABASEOBJECT, SQLSTMTOBJECT objects has been improved.
- An explanation about the use of special actions for inlining
has been added to lib/comp/const.s7i.
- Tests for an assignment where the RHS (right hand side) changes
the variable have been added to chkarr.sd7, chkbig.sd7,
chkbst.sd7, chkdb.sd7, chkfil.sd7, chkflt.sd7, chkint.sd7,
chkset.sd7 and chkstr.sd7. The program chk_all.sd7 has been
adjusted for these tests.
- The graphic driver for the browser in drw_emc.c and gkb_emc.c has
been improved:
- The handling of the close button of a browser window (X) has
been improved. In case the browser decides to delete the window
immediately (without asking) the contents of the old window is
copied to a new window at the same location and KEY_CLOSE is
submitted to the program.
- In gkb_emc.c the variable closePopupStateList and the functions
getClosePopupState(), setClosePopupState(), isClosePopupActive()
and leavePageWasPressed() have been added. The functions
maintain the state after the close button (X) has been clicked
(the closePopupState).
- Documentation about the closePopupState has been added to
gkb_emc.c.
- The function decodeFocusEvent() has been added to gkb_emc.c.
- Now drwOpen and copyWindow search for the presence of the
JavaScript function registerWindow. If it is present, it is
invoked with the new window as parameter. The HTML page can
define registerWindow to maintain open windows. This way, the
HTML page can delete open windows.
- Now a local substitute window is opened if the browser does not
allow a new window (popup). This is done in the function
openSubstituteWindow().
- The elements is_substitute and parentWindow have been added to
the emc_winRecord struct.
- The functions windowExists, copyWindow, clickedWindowLeftPos
and clickedWindowTopPos have been added to drw_emc.c.
- The functions clickedXPos and clickedYPos have been improved to
work correctly in the browser.
- Freeing a window object in drwFree() now sets the entries in
mapIdToWindow, mapIdToCanvas and mapIdToContext to undefined
(before, they were set to null).
- In pre_js.js the strategy to determine the program name when
a program runs in the browser has been improved.
- In keybd.s7i the deprecated functions getxpos() and getypos() have
been removed. The function clickedXPos() and clickedYPos() should
be used instead.
- In unicode.s7i the deprecated functions striToUtf16be(),
striToUtf16le(), utf16beToStri(), utf16leToStri() and utf7ToStri()
have been removed. The functions toUtf16Be(), toUtf16Le(),
fromUtf16Be(), fromUtf16Le() and fromUtf7() should be used
instead.
- The actions GKB_BUTTON_XPOS and GKB_BUTTON_YPOS have been renamed
to GKB_CLICKED_XPOS respectively GKB_CLICKED_YPOS. Changes have
been made in keybd.s7i, comp/action.s7i, comp/gkb_act.s7i,
primitiv.c, drwlib.h, drwlib.c, drw_drv.h, drw_dos.c, emc_utl.h,
emc_utl.c, gkb_emc.c, gkb_win.c and gkb_x11.c.
- In kbd_inf.c and kbd_poll.c the functions kbdGetc() and
kbdInputReady() have been improved to call fflush(stdout).
- The X11 function forwarding has been improved to allow direct use
of function pointers. Function forwarding is only used if the X11
libraries were missing at build time. The direct use of function
pointers can be activated by defining the macro
FORWARD_X11_FUNCTION_POINTERS. In this case, logging of X11
functions (that intermediate functions can do) is not possible.
These changes introduce the file fwd_x11.h.
- In gkb_emc.c, gkb_win.c and gkb_x11.c the function
remove_window() has been improved to call hshExcl only if the
window_hash is not NULL.
- In drw_emc.c, drw_win.c and drw_x11.c the function
getCloseAction() has been improved to check that actual_window
is not NULL.
- In drw_win.c the function drwPut() has been improved to check for
RANGE_ERROR at one place.
- Now the empty window is always a singleton. The function
generateEmptyWindow() has been introduced in drw_x11.c and
drw_emc.c. In drawInit() the singelton is generated with a call
of generateEmptyWindow().
- The management of the usage counter (usage_count) for windows,
databases and sqlStatements has been improved. Now they are
permanent if the usage_count is 0. A usage_count of 0 will neither
increase nor decrease. Currently only the empty window is
permanent. The changes took place in gkb_emc.c, gkb_win.c,
gkb_x11.c, ref_data.c, sql_cli.c, sql_oci.c, sql_post.c and
sql_rtl.c.
- The function determineTimeFunctionProperties() has been added to
chkccomp.c. This function checks if SystemTimeToFileTime() accepts
2001-02-29 (which does not exist).
- The program chkccomp.c has been changed to always call
defineX11rgbToPixelMacro() if X11 is used. This function
determines the X11 pixel masks.
- Now the program chkccomp.c defines in version.h that GLX uses an
absolute point list with an int size of 16-bits.
- The makefile mk_emccl.mak has been improved to call node.js with
`which node`. Some make utilities trigger a "Permission denied"
error if node is called directly.
- The logging in graphic drivers has been improved. Changes have
been made in drw_emc.c, drw_rtl.c, drw_win.c, drw_x11.c, drwlib.c,
gkb_emc.c, gkb_win.c and gkb_x11.c.
- Logging functions have been added in arr_rtl.c, drwlib.c,
drw_rtl.c, drw_emc.c, drw_win.c, drw_x11.c, gkb_emc.c, gkb_win.c,
gkb_x11.c, pol_unx.c, ref_data.c and sql_rtl.c.
20240301:
- Many thanks to Neal Collins for correcting the handling of double
quotes in toCsvLine and for fixing /./../ sequences in toAbsPath.
- Many thanks to Jules Amonith for fixing a typo (Respose was used
instead of response).
- Many thanks to Federico Ercole for helping with JavaScript issues.
Now clicks on the close button of a browser window can be
processed in the program (as KEY_CLOSE). Starting programs
from HTML has been improved as well. A terminating program now
calls the JavaScript function reloadPage (defined in the HTML
document).
- The parser has been improved to stop parsing if the include of an
essential file (seed7_05.s7i) fails. Many thanks to Dominik Dorn
for reporting that a misspelled seed7_05.s7i triggered many
errors.
- The build of Seed7 has been fixed to work if CreateSymbolicLinkW()
is missing. Many thanks to Cheap-Ad9743 for pointing out that the
build with tcc under Windows failed.
- The chapters about declarations, parameters, operating system
access and graphics in the manual have been improved.
- In mahjong.sd7 the drawing of mahjong tiles has been improved.
Now the tiles are correctly displayed in the browser as well.
- In lander.sd7 the drawing of the rocket has been improved.
Now the rocket is correctly displayed in the browser as well.
- In osfiles.s7i the function cloneFile has been improved to copy
symbolic links under Windows. FILE_ERROR is raised if cloneFile
cannot create a symbolic link.
- The functions bitLength and lowestSetBit have been added to
bin32.s7i and bin64.s7i. Tests for bitLength and lowestSetBit have
been added to chkbin.sd7.
- The libraries pic_util.s7i, tiff.s7i and png.s7i have been
improved to use mdiv instead of div if the divisor is a power of
two.
- Functions for the type pointList have been refactored in graph.s7i
and progs.s7i. Before pointList used bstring (BST_...) actions.
Now pointList uses PTL_... actions.
- Conversion functions to convert between pointList and bstring have
been added to graph.s7i.
- Definitions of PIXEL_ALPHA_MASK, POINT_LIST_INT_SIZE,
POINT_LIST_ABSOLUTE and USE_START_MAIN have been added to
cc_conf.s7i. The file cmd_rtl.c and the program confval.sd7
have been adjusted accordingly.
- In chkstr.sd7 the checking of stri := aString[start .. stop]
has been refactored.
- The tests of file manipulating functions in chkcmd.sd7 have been
refactored.
- Tests in chkbig.sd7, chkbin.sd7, chkchr.sd7, chkflt.sd7,
chkidx.sd7, chkint.sd7, chkset.sd7, chkstr.sd7 and chktime.sd7
have been refactored to reduce the size of the functions.
- Tests have been added to chkbig.sd7, chkbin.sd7, chkchr.sd7,
chkcmd.sd7, chkdb.sd7, chkflt.sd7, chkidx.sd7, chkint.sd7,
chkset.sd7 and chkstr.sd7 to improve the code coverage of the
compiler.
- Several improvements have been made for Emscripten (running Seed7
programs in the browser):
- In drw_emc.c the function drwText() has been improved to draw
text with the specified background color.
- In drw_emc.c the functions drwPArc(), drwPFArc(), drwPFArcChord()
and drwPFArcPieSlice have been fixed to correctly draw arcs in
the browser if the sweep angle is negative.
- In drw_emc.c the function drwPut() has been improved to do
nothing if the source is an empty pixmap.
- In drw_emc.c the function drwFree() has been improved to remove
the canvas of a sub-window.
- The function getCloseAction has been added to drw_emc.c.
- In fil_emc.c the call of setOsProperties has been fixed.
- The file gkb_emc.c has been improved to allow reading KEY_CLOSE
in the browser.
- The event handling in gkb_emc.c has been improved. Now the
events visibilitychange and unload are used for program
termination. Upon program termination the JavaScript function
reloadPage (defined in the HTML document) is called.
- The functions decodeBeforeunloadEvent, decodeVisibilitychange and
decodeUnloadEvent have been added to gkb_emc.c.
- The functions startMainButtonPresent,
addEventPromiseForStartButton, setupEventPromises,
freeEventPromises, asyncButtonClick and
executeStartMainOnButtonClick have been added to emc_utl.c
- The Seed7 compiler (s7c.sd7) has been improved:
- Now unsupported options trigger an error.
- Now empty temporary files (tmp_*.c) are overwritten.
- An optimization for bin32(a+b) & constBin32 has been added. The
generated code works without overflow checks. Tests for this
case have been added to chkbin.sd7.
- An optimization for bin32(a+b) & constBin32 with bigInteger a
and b has been added. The generated code works with integers
and without overflow checks.
- The optimization for ord(aBigInteger mod number1) + number2
has been improved.
- An optimization for aString[length(aString)] has been added.
- An optimization that recognizes if aString[start .. stop] always
raises an INDEX_ERROR has been added.
- The code generation for aString[start .. stop] has been
improved.
- An optimization for aString @:= [length(aString)] aChar; has
been added
- The code generated for aString @:= [pos] aChar; has been
improved.
- The optimization of aString &:= str(charExpression); has been
improved.
- An optimization for the string multiplication
str(aChar) mult aConstantInteger
has been added.
- An optimization for the division of a product has been added.
- The code generation of card(bitset(anInteger)) has been
refactored. Tests for this case have been added to chkset.sd7.
- The conversion from a bin32 to a single-precision
floating-point number has been optimized. Tests for this case
have been added to chkbin.sd7.
- Image constants are now stored in the target pixel encoding. The
compiler will convert the pixels of an image if necessary. The
target pixel encoding is specified with the configuration values
RED_MASK, GREEN_MASK, BLUE_MASK and ALPHA_MASK.
- The actions PLT_BSTRING, PLT_CMP, PLT_EQ, PLT_HASHCODE, PLT_NE,
PLT_POINT_LIST and PLT_VALUE are listed as pure functions.
- The code generation for the actions STR_ELEMCPY, SQL_CPY_DB and
SQL_CPY_STMT has been refactored.
- The configuration value USE_START_MAIN is used to produce code
for the browser. In this case, main() will check if a startMain
button exists in the HTML page. If no startMain button exists,
the program will start. If a startMain button exists, the program
will wait until it is pressed. After the button is pressed, the
function startMain() will be invoked (which executes the rest of
the program).
- The pointList data is now stored in the target encoding. The
compiler will convert a pointList if necessary. The target
encoding is specified with the configuration values
POINT_LIST_INT_SIZE and POINT_LIST_ABSOLUTE.
- The pointList coordinates are now aligned for Emscripten HEAP32
access. If the macro POINT_LIST_ALIGNMENT is defined, an
alignment is necessary. In this case, the function pltAlign()
will carry out the alignment. If POINT_LIST_ALIGNMENT is not
defined, pltAlign() will just forward its parameter.
- In type.s7i POINTLISTOBJECT and REFLISTOBJECT have been added to
the heapCategories set.
- Unused code has been removed from flt_act.s7i and str_act.s7i.
- The functions optimize_big_mod_dividend, process_const_bin_and,
optimize_div_of_product, pointListLiteral, process_str_push,
process_str_elemcpy_last_char, process_str_idx_last_char,
process_plist_declaration, pixelEncodingIdentical,
pixelEncodingWithoutAlphaChannel, swapRedAndBlue, fixPixels,
pointListEncodingIdentical, toPointListAbsolute,
toPointListRelative16, toPointListRelative32,
toTargetPointListBstring, init_plist_constants and
assign_plist_constants have been added.
- The functions createSymlink and winCopySymlink have been added to
cmd_win.c. Tests for symlinks have been added to chkcmd.sd7.
- The functions set_excl (in setlib.c) and setExcl (in set_rtl.c)
have been improved to resize the set. Tests for
excl(bitset, integer) have been added to chkset.sd7.
- In set_rtl.c and setlib.c the heap statistic has been fixed for
several operations.
- The logging infrastructure has been improved. Now the macros
LOG_FUNCTIONS and VERBOSE_EXCEPTIONS can be set to -1. With -1
logging is deactivated even if LOG_FUNCTIONS_EVERYWHERE
respectively VERBOSE_EXCEPTIONS_EVERYWHERE is active. Support
to activate the function logMessage in every file with
LOG_MESSAGES_EVERYWHERE has been added as well.
- An explanation of the logging infrastructure has been added to
common.h.
- Interpreter and compiler have been improved to support the actions
BIN_BIT_LENGTH, BIN_LOWEST_SET_BIT, DRW_GET_PIXEL_DATA_FROM_ARRAY,
PLT_BSTRING, PLT_CMP, PLT_CPY, PLT_EQ, PLT_HASHCODE, PLT_NE,
PLT_POINT_LIST and PLT_VALUE.
- The unused action LST_ELEM has been removed form interpreter and
compiler.
- Support for the category POINTLISTOBJECT has been added to
interpreter and compiler.
- The functions drwGetPixelDataFromArray and pltAlign have been
added to drw_rtl.c.
- In gkb_win.c the function gkbInputReady() has been improved to
work correctly if GetMessageW() does not return the message
promised by PeekMessageW(). Now it is generally assured that only
fields of the correct message are accessed.
- In drw_x11.c the function drwConvPointList has been fixed to work
for an empty pointList.
- In drw_dos.c, drw_emc.c, drw_win.c, drw_x11.c and drw_drv.h the
function drwImage has been improved to consider an alpha channel.
- In cmd_rtl.c the function doReadLink has been refactored to
distinguish between link_size (from link_stat.st_size) and
dest_buffer_size. This simplifies the check for a truncation.
- Instances of the words minimal and maximal have been replaced
with minimum and maximum in several files.
- The Seed7 build system has been improved:
- The build with emcc under Linux and Windows has been fixed.
The makefiles mk_emccl.mak and mk_emccw.mak and the program
chkccomp.c have been adjusted. Now a stack-size is specified
for 'make utils'.
- Now chkccomp.c uses a better way to determine group and user
functions.
- Now size and signedness of gid_t and uid_t are determined in
chkccomp.c. The macros GID_T_SIZE, GID_T_SIGNED, UID_T_SIZE and
UID_T_SIGNED are defined accordingly.
- In chkccomp.c global variables for sizeof_int, sizeof_long,
sizeof_long_long, sizeof_pointer, sizeof_float and sizeof_double
have been introduced.
- In chkccomp.c the function testOutputToBuffer() has been improved
to work correctly if the first character read is a newline. A
check for the buffer size has been added to testOutputToBuffer()
as well.
- Now chkccomp.c determines if the function symlink() is present
and sets the macro HAS_SYMLINK accordingly.
- Performance measurements for left shift have been added to
chkccomp.c. The macros LSHIFT_BUILTIN_MUL_TIME,
LSHIFT_TWO_ARG_CHECKS_TIME, LSHIFT_ONE_ARG_CHECK_TIME,
LSHIFT_RESULT_CHECK_TIME and LSHIFT_NO_CHECK_TIME are defined
accordingly.
- In chkccomp.c check if ferror() returns true after reading from
write only file (FERROR_WRONG_WHEN_READING_FROM_WRITE_ONLY_FILE).
- The number of C compiler warnings in chkccomp.c has been reduced.
- The functions checkOverflowSignal, timeLShiftOverflowCheck,
determineGrpAndPwFunctions and determineCurrentWorkingDirectory
have been added to chkccomp.c.
- The program chkccomp.c has been improved to define the macros
GID_T_SIZE, GID_T_SIGNED, UID_T_SIZE, UID_T_SIGNED, GROUP_0_NAME,
USER_0_NAME, FERROR_WRONG_WHEN_READING_FROM_WRITE_ONLY_FILE,
HAS_SYMLINK, POINT_LIST_INT_SIZE, POINT_LIST_ABSOLUTE,
POINT_LIST_ALIGNMENT, LSHIFT_BUILTIN_MUL_TIME,
LSHIFT_TWO_ARG_CHECKS_TIME, LSHIFT_ONE_ARG_CHECK_TIME,
LSHIFT_RESULT_CHECK_TIME and LSHIFT_NO_CHECK_TIME.
- In several files flag macros for logging have been introduced:
- In pol_sel.c and pol_unx.c the flag macro DUMP_POLL has been
introduced. This macro decides if detailed information about
pollData should be written.
- In soc_rtl.c the flag macro SHOW_ADDRINFO has been introduced.
This macro decides if detailed information about the address info
should be written.
- In sql_oci.c and sql_post.c the flag macro SHOW_DETAILS has been
introduced. This macro decides if detailed information should be
written.
- In sql_oci.c the flag macro DEBUG_LONG_CALLBACK has been
introduced. This macro decides if detailed information about a
long callback should be written.
- Logging functions have been added or improved in cmdlib.c,
cmd_rtl.c, cmd_unx.c, cmd_win.c, con_inf.c, con_win.c, drw_emc.c,
drw_win.c, drw_x11.c, gkb_x11.c, pol_sel.c, pol_unx.c, scanner.c,
set_rtl.c, sql_cli.c, sql_fire.c, sql_lite.c, sql_my.c, sql_oci.c,
sql_post.c, sql_rtl.c, sql_tds.c, str_rtl.c and timlib.c.
- Deactivated code has been removed from big_rtl.c, blockutl.c,
cmd_rtl.c, con_cap.c, con_inf.c, con_win.c, gkb_x11.c, hshlib.c,
itflib.c, lstlib.c, name.c, parser.c, pol_sel.c, pol_unx.c,
prclib.c, reflib.c, scanner.c, sctlib.c, setlib.c, set_rtl.c,
sql_fire.c, sql_odbc.c, striutl.c, strlib.c, str_rtl.c, tim_win.c,
typlib.c and ut8_rtl.c.
- Documentation comments have been improved in array.s7i,
bigint.s7i, bin32.s7i, bin64.s7i, bitsetof.s7i, bitset.s7i,
csv.s7i, enable_io.s7i, font.s7i, http_response.s7i, idxarray.s7i,
integer.s7i, osfiles.s7i, vectorfont.s7i, big_gmp.c, big_rtl.c,
biglib.c, binlig.c, intlib.c and int_rtl.c.
20231217:
- The FAQ has been improved. Many thanks to Liam O'Brien for creating
a list suggested changes. Thanks for helping to improve Seed7
in general.
- Support for symbolic links under Windows has been added:
- Symbolic link reparse points and mount reparse points are both
treated as symbolic links.
- The interface does not distinguish between directory symbolic
links and normal symbolic links. A normal symbolic link may refer
to a directory and readDir(symlink) reads the directory contents
(like it does under Linux/Unix/BSD).
- The functions fileType() and fileTypeSL() have been improved to
work under Windows like they do under Linux/Unix/BSD:
- fileType() follows symbolic links and returns the file type of
the final destination.
- fileTypeSL() returns FILE_SYMLINK for symbolic links. For
all other file types fileTypeSL() works like fileType().
- fileTypeSL() does return FILE_SYMLINK only if readLink() works
correctly.
- fileTypeSL() has been fixed to return FILE_DIR for the emulated
root directory and FILE_ABSENT if the file path cannot be
mapped to a system path.
- The functions readLink(path) and readLink(path, ABSOLUTE) have
been improved to read the symbolic links of Windows. The function
readLink(path) can read relative and absolute symbolic links.
Both functions can read dangling symlinks. The functions are
implemented with DeviceIoControl(). If DeviceIoControl() is not
available (HAS_DEVICE_IO_CONTROL is not defined), they raise
FILE_ERROR.
- The functions getFileMode(path), setFileMode(path),
getOwner(path), setOwner(path), getGroup(path), setGroup(path)
and readDir(path) have been improved to follow symlinks under
Windows (like they do under Linux/Unix/BSD).
- Owner and group of the emulated root directory is "root".
- The function moveFile() has been improved to avoid following
symlinks under Windows (like it does under Linux/Unix/BSD).
- The function symlink() has been improved to allow the creation
of relative and absolute symbolic links under Windows. Under
Windows administrator rights or the developer mode are necessary
to create symbolic links.
- Several file functions have been improved:
- The function getCTime(path) has been improved to return the
change time instead of the creation time in Windows (like it
does in Linux/Unix/BSD).
- The file owner and group functions have been improved to avoid
localized user and group names under Windows.
- The function finalPath(path), which follows a symbolic link
chain, has been added to the osfiles.s7i library.
- The functions getFileMode(path, SYMLINK),
getATime(path, SYMLINK), getMTime(path, SYMLINK),
setMTime(path, time, SYMLINK), getOwner(path, SYMLINK),
setOwner(path, owner, SYMLINK), getGroup(path, SYMLINK) and
setGroup(path, group, SYMLINK) have been added to the
osfiles.s7i library. These functions work only for symbolic
links and get or set symbolic link data.
They raise FILE_ERROR if 'path' does not refer to a symbolic
link.
- The functions getFileMode(fileSys, path, SYMLINK),
getMTime(fileSys, path, SYMLINK),
getOwner(fileSys, path, SYMLINK) and
getGroup(fileSys, path, SYMLINK) have been added to the
filesys.s7i library.
- The functions copyFile(), cloneFile() and moveFile() have been
improved to prohibit that a dangling symlink is overwritten.
- In osfiles.s7i and filesys.s7i the function fileMode(path) is
deprecated now. The function getFileMode(path) should be used
instead.
- The files ar.s7i, cpio.s7i, ftpserv.s7i, process.s7i, rpm.s7i,
tar_cmds.s7i, tar.s7i and zip.s7i have been altered to use
getFileMode(path) instead of the deprecated fileMode(path).
- The Seed7 build system has been improved:
- The makefiles mk_msys.mak, mk_nmake.mak, mk_mingw.mak and
mk_mingc.mak have been improved to support 32-bit and 64-bit
C compilers.
- Now, definitions of the library names LIBINTL_DLL, LIBEAY32_DLL,
LIBCRYPTO_DLL and LIBSSL_DLL are written to version.h only under
Windows.
- The build tries to load dynamic/shared libraries and logs if
they are present or not.
- For dynamic/shared libraries with an absolute path the build
logs, if they are 32-bit or 64-bit.
- The functionality of setpaths.c has been moved to chkccomp.c.
- The file setpaths.c has been removed.
- The files makefile, mk_bcc32.mak, mk_bccv5.mak, mk_clang.mak,
mk_clangw.mak, mk_cygw.mak, mk_djgp2.mak, mk_djgpp.mak,
mk_emccl.mak, mk_emccw.mak, mk_freebsd.mk, mk_icc.mak,
mk_linux.mak, mk_mingc.mak, mk_mingw.mak, mk_msvc.mak,
mk_msys.mak, mk_nmake.mak, mk_osxcl.mak, mk_osx.mak,
mk_tcc_l.mak and mk_tcc_w.mak have been changed to work without
setpaths.c and to call chkccomp with the parameters of setpaths
(S7_LIB_DIR, SEED7_LIBRARY and CC_ENVIRONMENT_INI).
- The search for the SQLite include file in chkccomp.c has been
improved to continue if the include file is not in C:/sqlite.
- The directory seed7/bin has been added as possible place of the
sqlite3.dll (or .so).
- Tests for the presence of the functions CreateSymbolicLinkW(),
GetFinalPathNameByHandleW(), DeviceIoControl(),
GetFileInformationByHandleEx() and lutimes() have been added to
chkccomp.c.
- In chkccomp.c global variables for buildDirectory, s7LibDir and
seed7Library have been introduced.
- The functions testOutputToBuffer(),
determineCurrentWorkingDirectory(), mapCodePageToUtf8(),
mapToUtf8(), canLoadDynamicLibrary(),
pointerSizeOfDynamicLibrary(), getCodePage(), setS7LibDir(),
setSeed7Library() and setPaths() have been added to chkccomp.c.
- The Seed7 compiler (s7c.sd7) has been improved:
- Now, it writes warnings if parameter aliasing can happen.
A function triggers parameter aliasing if two reference
parameters refer to the same value and one of them is changed
in the function. In this case the other reference parameter
changes as well. The Seed7 compiler checks if a function call
uses the same actual parameter twice and at least one of the
parameters is modified in the function.
- Now, it writes the line that triggers a compilation error.
- The error messages for case statements have been improved.
- The string index access optimizations have been improved.
- The estimation of possible string length results has been
improved.
- Now, the range of possible integer results of BIN_AND is
computed.
- Tests for integer +:=, -:= and *:= with itself have been added to
chkint.sd7 and chkovf.sd7.
- Tests for bigInteger *:= with itself have been added to
chkbig.sd7.
- The function open() has been improved such that opening a
non-existing absolute path under Windows (a path that cannot be
mapped to a system path) returns STD_NULL.
- In aes_gcm.s7i the run-time of gcmMult has been reduced by 7%
(measured with gcc and valgrind).
- The function inputReady(socket) has been added to the socket.s7i
library.
- The library ftpserv.s7i has been improved to use the function
getFileMode(fileSys, path, SYMLINK).
- In bas7.sd7 an error, found by parameter aliasing checks, has
been fixed.
- The program err.sd7, which triggers most parsing errors, has been
updated.
- In sql_lite.c an initialization of the SQLite connection has been
added. This way the connection can be safely checked if
sqlite3_open() fails.
- The file stat_drv.h has been improved to redefine all S_IS...
macros if S_IFLNK is not defined.
- In striutl.c the function stri_to_standard_path() has been
improved to avoid a use after free if realloc changes the pointer.
- In soc_rtl.c the function socInetAddr() has been improved to check
if the host name is the name of the local host.
- Logging functions have been added or improved in cmd_rtl.c,
kbd_inf.c, kbdlib.c, sql_lite.c, stat_win.c and striutl.c.
- In cmd_win.c logging has been changed to log the return code of
security functions.
- Documentation comments have been added or improved in filesys.s7i,
osfiles.s7i, cmdlib.c, cmd_rtl.c, cmd_unx.c and cmd_win.c.
- Macro arguments have been enclosed with parentheses in big_rtl.c,
cmd_rtl.c, drw_emc.c, drw_win.c drw_x11.c, int_rtl.c, levelup.c,
numutl.c pcs_unx.c, pol_unx.c, str_rtl.c, strlib.c and tracutul.c.
- In stat_win.c calls of os_stat_orig() have been replaced with
calls of FindFirstFileW().
- The functions wstati64FollowSymlink(), wstatChangeTime(),
lstati64Ext() and wchmodExt() have been added to stat_win.c. The
function correctAdjustedUnixTime() has been removed from
stat_win.c (it was necessary to correct the times of
os_stat_orig() that is not used anymore).
- The functions winRename(), wSymlink(), winSymlink(),
getSymlinkDestination(), winReadLink(), followSymlinkRecursive(),
winFollowSymlink(), setupWellKnownSids(), cmdGetGroupOfSymlink(),
cmdGetOwnerOfSymlink(), cmdSetGroupOfSymlink(),
cmdSetMTimeOfSymlink() and cmdSetOwnerOfSymlink() have been added
to cmd_win.c.
- Non-ascii characters in con_wat.c have been replaced with
escape sequences.
- The function wOpenDir() has been added to dir_win.c.
- The function cp_from_os_path_buffer() has been added to stritul.c.
- The actions CMD_LS, CMD_FILEMODE and CMD_SET_FILEMODE have been
renamed to CMD_READ_DIR, CMD_GET_FILE_MODE and CMD_SET_FILE_MODE
respectively.
- The actions CMD_FINAL_PATH, CMD_GET_ATIME_OF_SYMLINK,
CMD_GET_FILE_MODE_OF_SYMLINK, CMD_GET_GROUP_OF_SYMLINK,
CMD_GET_MTIME_OF_SYMLINK, CMD_GET_OWNER_OF_SYMLINK,
CMD_SET_GROUP_OF_SYMLINK, CMD_SET_MTIME_OF_SYMLINK and
CMD_SET_OWNER_OF_SYMLINK have been added.
20231104:
- In tim_rtl.c the function timFromIntTimestamp() has been fixed to
work with negative timestamps under Windows. Many thanks to Liam
O'Brien for pointing out that "chk_all" failed on the "chktime" test
in Windows.
- The answer concerning return type overloading in the FAQ has been
improved.
- In the manual links have been added to the list of parsing errors.
The links refer to an example that triggers this parsing error.
- The error messages of the interpreter and compiler have been
improved:
- If something is redeclared an additional error has been added that
refers to the previous declaration. Additionally the lines of
current and previous declarations are shown.
- Error messages referring to functions have been improved to write
function parameter names.
- Now longer identifiers are written correctly in error messages.
- The utility program sydir7.sd7 has been improved to support the
options -t (only do time corrections of identical files) and -a
(only add files that are missing in the destination).
- The new library aes_gcm.s7i has been added. This library supports
the AES GCM cipher.
- Support for the AES GCM cipher has been added to the tls.s7i
library.
- The constant stdEccKeyPair has been added to elliptic.s7i. This
constant defines public and private keys for elliptic curve
cryptography (ECC).
- The constant stdEccCertificate has been added to x509cert.s7i. This
constant defines a certificate for elliptic curve cryptography.
- The function readLink(filePath, ABSOLUTE) has been added to the
library osfiles.s7i.
- In bitdata.s7i the functions getBitLsb(), getBitsLsb(), getBitMsb()
and getBitsMsb() with a file as parameter are deprecated now.
The functions with the types lsbBitStream and msbBitStream should be
used instead.
- The library zstd.s7i has been refactored to use lsbBitStream instead
of the deprecated functions getBitLsb and getBitsLsb.
- The handling of the TIFF magic number in the tiff.s7i library has
been improved.
- In seed7_05.s7i the function isDigitString(), with the base as
parameter, has been fixed to correctly check the range of possible
digits. Additionally the function now raises RANGE_ERROR if the
base is less than 2.
- In seed7_05.s7i the function integer(), with the base as parameter,
has been fixed to trigger RANGE_ERROR if a digit is not in the
allowed range.
- The function sourceLine(PROGRAM) has been added to the
environment.s7i library.
- The compiler (s7c.sd7) has been improved:
- Do not optimize constants with -oc0
- Call optimize_int_add starting with -oc2
- Optimize string expressions starting with -oc2
- The compilation stops if unsupported options are found.
- Optimizations for the string pos function have been added:
- If the main string is actually a byte string.
- If the search string is known to have a length of 1.
- The main string length for char search is reduced if there are
previous occurrences of the last characters.
- An optimization for div and rem operators has been added that
takes effect if the dividend is known to be >= 0 and the divisor
is a power of two.
- The optimization of mod has been improved to consider the case
that dividend or divisor is always >= 0.
- The optimization of addition-/subtraction-chains has been improved
to optimize more overflow checks away.
- The optimization of the integer negate operation has been improved.
- An optimization for the assignment of an array concatenation has
been added.
- Unnecessary range checks in the conversion from integer to byte
strings have been omitted.
- The compiler counts if range checks are optimized away, and the
count is written in the compilation statistics.
- The code generation of several assignment statements has been
refactored.
- An optimization for the string length has been added, if the
result is known at compile-time.
- The computation of possible integer expression results in
lib/comp/intrange.s7i has been improved:
- The function getIntRange has been improved to work for inline
parameters.
- The determination of of possible left shift results has been
improved (in the function getIntLshiftRange). Corresponding
tests have been added to chkint.sd7 and chkovf.sd7.
- The range of possible loop variable values of for-downto loop
has been fixed. Tests for this case have been added to
chkprc.s7i.
- The estimation of possible integer results of the div, mdiv
and ? : operators has been improved.
- The possible result of string search and string length is
estimated more accurately.
- The possible result of a binary to integer conversion is
estimated more accurately. Corresponding tests have been added to
chkint.s7i
- The function getIntRange has been improved to consider the
actions CMD_FILESIZE, CON_HEIGHT, CON_WIDTH, DRW_HEIGHT,
DRW_WIDTH, DRW_SCREEN_HEIGHT, DRW_SCREEN_WIDTH,
INT_BYTES_BE_2_INT, INT_BYTES_LE_2_INT, INT_FACT, INT_PARSE1
and INT_PLUS.
- The functions getIntBytes2IntRange, getIntBytes2UIntRange,
getIntRange, getArrLenRange, getStrLenRange, lessEqualLimit,
greaterEqualLimit, getIntParse1Range and getBlnTernaryRange
have been added.
- An error in the bytes2Int optimization has been fixed and
corresponding tests have been added to chkint.sd7.
- The compiler options have been refactored (they are now stored
locally instead of globally).
- The programs bas7.sd7 and pv7.sd7 have been refactored to use mdiv
instead of div (since the dividend is known to be >= 0).
- The Seed7 build system has been improved:
- Now the system libraries needed for bigInteger, console, database
and drawing support (SYSTEM_BIGINT_LIBS, SYSTEM_CONSOLE_LIBS,
SYSTEM_DATABASE_LIBS, SYSTEM_DRAW_LIBS) are stored as string
with a newline (\n) between individual libraries.
- The functions removeQuotesFromQuotations, appendToMakeMacros,
replaceUnquotedSpacesWithNl, visualDepthOf32BitsSupported and
defineCMacro have been added to chkccomp.c.
- Building Seed7 with tcc under Windows has been fixed.
- The makefiles have been adjusted to work with CLion.
- The warning about missing packages has been improved.
- The description of the build system in src/read_me.txt and
src/read_me.htm has been improved.
- In cmd_unx.c, infile.c, pol_sel.c, pol_unx.c, sql_oci.c and symbol.c
a memory leak is avoided if realloc fails.
- The action CMD_READLINK has been renamed to CMD_READ_LINK.
- Empty statements (;;) have been removed in fltlib.c, gkb_win.c,
pcs_win.c and sql_fire.c.
- Spelling corrections have been made in several files.
- Comments in C files have been changed to use the term function
instead of the term procedure.
- Documentation comments have been added or improved in bitdata.s7i,
cipher.s7i, chkccomp.c, numutl.c, pcs_win.c and striutl.c.
20230913:
- The parameters of getHttp(), getHttps() and getFtp() have been
renamed from 'url' to 'location'. A location is a URL without
http://, https:// and ftp://, respectively. Many thanks to Liam
O'Brien for pointing out that getHttps("https://example.com/") does
not work. The documentation has been improved to contain the example
getHttps("example.com").
- The exit() function has been moved from seed7_05.s7i to the library
environment.s7i. Many thanks to u/IllegalMigrant for pointing out
that exit() was not documented.
- The libraries lower.s7i, more.s7i, upper.s7i, archive_base.s7i,
http_response.s7i, makedata.s7i, tar_cmds.s7i and tee.s7i have been
added to the library section and the subject index of the homepage.
Many thanks to Liam O'Brien for pointing out that they were missing.
- The contrast of menus in the Seed7 homepage has been improved. Many
thanks u/SachemAgogic for pointing out that the contrast was too low.
- The make7 example program has been improved to support C++. Now the
macros CXX and CXXFLAGS are supported as well as the target .cpp.o
and the pattern rule "%.o" with a dependency of "%.cpp" (changes have
been made in make.s7i and makedata.s7i).
- Chapters about the types 'database' and 'sqlStatement' have been
added to the manual.
- The file to generate a man page for the Seed7 compiler (doc/s7c.1)
has been improved.
- A test program for time functions (chktime.sd7) has been added.
- The program findchar.sd7 has been improved to support the option -e
(specify extension) and to allow a search for any char (with the
option c).
- The program calc7.sd7 has been improved to support the function
getFtp().
- The program tar7.sd7 has been improved:
- Wildcards can be used when an archive is created.
This works even if the OS shell does not support wildcards.
- Specific members from an archive can be requested when an archive
is extracted (or when listing archive contents with tell).
- The library tar_cmds.s7i has been improved to support the changes of
tar7.sd7.
- In lib/comp/int_act.s7i the integer overflow checks created by the
compiler have been improved. This improvement is used if both factors
are unknown at compile time and for C compilers that have neither
builtin overflow operations, nor an option like -ftrapv, nor support
for 128-bit integers.
- Tests for the improved overflow checks have been added to chkint.sd7
and chkovf.sd7.
- In the library makedata.s7i, the rule 'name' has been renamed to
'target'. The library make.s7i has been adjusted to use 'target'.
- In scanfile.s7i and scanstri.s7i the functions getNextXmlAttribute()
and getNextHtmlAttribute() have been aligned to behave identically if
there are no more attributes in a tag.
- In htmldom.s7i the function readHtmlNode has been adjusted to the
change of getNextHtmlAttribute().
- Several improvements have been made in the time.s7i library:
- The function time() with a micro seconds parameter has been added.
- The function toLocalTZ() has been added.
- The functions hashCode(), toUTC(), timestamp1601() and
timestamp1601ToTime() have been fixed to work correctly.
- In duration.s7i the function hashCode() has been fixed to work
correctly.
- In httpserv.s7i the functions processHttpRequest() and getRequest()
have been renamed to getHttpRequest(). The webserver comanche.sd7
has been changed to call getHttpRequest() instead of getRequest().
- In tee.s7i the type teeFile has been improved to allow writing to
many files at once.
- The libraries lower.s7i, more.s7i, tee.s7i and lower.s7i have been
refactored to use camel case identifiers and documentation comments.
- In asn1.s7i the struct asn1DataElement has been changed. Using the
tagCategory of an asn1DataElement is deprecated now. Use tagType
instead of tagCategory as tagType is also used in the ASN.1
documentation. The renaming has also been done in x509cert.s7i.
- The program chk_all.sd7 has been improved to write a warning if the
execution of a test program fails.
- Tests for hash tables with time keys and values have been added to
chkhsh.sd7.
- In tim_rtl.c the function timSetLocalTZ() has been improved to raise
RANGE_ERROR if a value is not in the allowed range.
- In sql_cli.c and sql_lite.c calls of timSetLocalTZ() have been
simplified.
- The abstract data type (template) to define enumeration types has
been moved from seed7_05.s7i to the new enumeration.s7i library.
- In drw_emc.c and gkb_emc.c opening a window with a requested size has
been improved to work correctly if the Firefox window is maximized.
- Logging functions have been added in con_emc.c, drw_emc.c, emc_utl.c,
gkb_emc.c, tim_rtl.c and tim_unx.c.
- In str_rtl.c comments about the silencing of a C compiler warning
have been added to strHeadAssign() and strHeadTemp().
- In common.h the definitions of TIME_T_MIN, TIME_T_MAX and
inTimeTRange() have been improved.
- Documentation comments have been added or improved in ar.s7i,
archive_base.s7i, array.s7i, asn1.s7i, bitset.s7i, bitsetof.s7i,
boolean.s7i, cpio.s7i, ftp.s7i, gethttp.s7i, gethttps.s7i,
hashsetof.s7i, http_response.s7i, httpserv.s7i, idxarray.s7i,
lower.s7i, makedata.s7i, more.s7i, pkcs1.s7i, rpm.s7i, scanfile.s7i,
scanstri.s7i, sql_base.s7i, tar.s7i, tar_cmds.s7i, tee.s7i, time.s7i,
upper.s7i, zip.s7i, tim_rtl.c and tim_unx.c.
20230709:
- Explanations about the initialization with 'is', the 'return'
declaration construct and the meaning of dollar signs have been
added or improved in the FAQ.
- A chapter about arrays has been added to the tutorial.
- In the manual, chapters about variants of for-each loops have been
added or improved.
- A chapter about the exception GRAPHIC_ERROR has been added to the
manual.
- The compiler (s7c.sd7) has been improved:
- The generated code for array indexing that always raises
INDEX_ERROR, has been improved to be accepted by clang. A cast to
the desired type has been added.
- The code generation for the hash set functions card() and rand()
has been improved to support temporary sets.
- Spezialized code is now generated, if the hash set function rand()
is used with constant sets.
- The functions strHeadAssign and strTailAssign are used now. They
are always called like this: aString = strHeadAssign(aString, pos);
- In the library gzip.s7i the functions length() and tell() have been
added for a gzipWriteFile.
- In the library tar.s7i the function putFile() has been improved to
check for seekable() before applying seek().
- The function pemObject() which creates a PEM object from 'pemType'
and 'content' has been added to pem.s7i.
- Support for the generation of non-self-signed certificates has been
added to the x509cert.s7i library.
- Support for X509 extensions has been added to the x509cert.s7i
library.
- A function to create an x509Name has been added to x509cert.s7i.
- In x509cert.s7i several things have been renamed:
- The types validityType and nameType have been renamed to
x509Validity and x509Name respectively.
- The function getName() has been renamed to getX509Name().
- The parameter encryptionKey has been renamed to issuerKey.
- In x509cert.s7i the type x509cert is deprecated now. The type
x509Cert should be used instead.
- In asn1.s7i and x509cert.s7i parameters and result variables have
been renamed from 'stri' to 'asn1'.
- In pkcs1.s7i an additional function to generate a RSA key pair has
been added.
- Now 'in varfunc' call-by-name parameters can be specified with 'in'
and 'ref'. This is done in the library seed7_05.s7i by defining
IN_PARAM_IS_REFERENCE(varfunc aType).
- In seed7_05.s7i the boolean condition parameters of loops have been
changed to be defined with 'ref'. This corresponds to the fact that
changing a condition variable in the loop body can terminate the
loop.
- The test suite has been improved to increase the code coverage.
- A test program for enumerations (chkenum.sd7) has been added.
- Tests have been added to chkbig.sd7:
- Tests for bigInteger comparisons (=, <>, <, <=, >=, > and compare).
- Tests for the optimization of ord(a mod b).
- Tests for the multiplication of a constant with a bigInteger.
- Tests for the divRem operator and for the rand and gcd functions.
- Tests for the modulus of a bigInteger by a power of two.
- Tests have been added to chkbin.sd7:
- Tests for the bin64 &, | and >< operators.
- Tests for the optimization of bin64(a mod b).
- Tests for bin64 shift operator have been improved.
- Tests have been added to chkbst.sd7:
- Tests for bstring length.
- Improve tests for bstring assignments.
- Tests have been added to chkchr.sd7:
- Tests for char literals and conversions
- Tests for the char functions succ(), pred(), lower() and upper().
- Tests in chkhsh.sd7 have been improved:
- Tests for hash tables with enumeration type keys and values have
been added.
- Tests for hash tables with bstring keys and values have been added.
- Tests for hash tables with bitset keys and values have been added.
- Tests for hash keys() and values() function have been added.
- Tests in chkstr.sd7 have been improved:
- Tests for c_literal() have been added.
- Tests for string head (stri[.. stop]) have been added.
- Tests for string tail (stri[start ..]) have been added.
- Tests for the string pos(), rpos() and replace() functions have
been added. These tests trigger a Boyer-Moore string search.
- Tests for fromUtf8() have been added.
- Tests for lower() and upper() have been added.
- Tests for string assignment have been added.
- Tests for the expression A * B ** C have been added to chkint.sd7
and chkovf.sd7.
- Tests for string head (stri[.. n]) and string tail (stri[n ..]) have
been added to chkidx.sd7.
- In chkset.sd7 tests for the hash set functions card(), rand() and
toArray() have been added. Tests for the operators 'in' and 'not in'
have been added as well.
- In chkprc.sd7 tests for for-until loops have been added.
- Tests for the type clib_file and for the functions seekable(),
tell(), bigTell() and seek() have been added to chkfil.sd7.
- The handling of the version level (the last number in the version
string) has been improved:
- The file src/level_rl.h which contains the release level has been
introduced.
- The files src/level.h and src/level_bk.h have been removed from the
release.
- In the makefiles the target distclean has been improved to remove
src/level.h and src/level_bk.h.
- The program levelup.c has been improved to maintain the file
level.h. If level_rl.h has changed it will be copied to level.h. If
there is no change in level_rl.h every compilation of s7 will
increment the level.
- The program wrdepend.c has been improved to check if level.h is
missing. In this case, level_rl.h is copied to level.h.
- The minor version number of s7 and s7c has been incremented.
- In seed7_05.s7i, forloop.s7i, chkarr.sd7, chkbig.sd7, chkbin.sd7,
chkbst.sd7, chkfil.sd7, chkflt.sd7, chkidx.sd7, chkint.sd7,
chkovf.sd7, chkset.sd7 and chkstr.sd7 'ref func' parameters have been
replaced with 'in func' parameters.
- In chk_all.sd7, chkarr.sd7, chkfil.sd7, chkidx.sd7, chkovf.sd7 and
chkstr.sd7 'ref proc' parameters have been replaced with 'in proc'
parameters.
- In str_rtl.c the functions strHeadAssign and strTailAssign have been
introduced. These functions leave the string parameter intact in case
of an error.
- In str_rtl.c the function strHeadTemp has been refactored to assume
that the string parameter is always tempory and can be freed in case
of an error.
- Documentation comments have been improved in pem.s7i and
x509cert.s7i.
20230529:
- The FAQ concerning break and continue has been improved.
- Chapters about assignment and constants have been added to the
tutorial, which is part of the manual. A description of the function
fraction() has been added to the chapter about predefined types.
- The new library archive_base.s7i has been added. This library
defines common functions for file archives. It currently defines the
function readDir() which is used by the archive libraries ar.s7i,
cpio.s7i, rpm.s7i, tar.s7i and zip.s7i.
- In the zip.s7i library the function readDir() has been improved to
work for absolute paths (by calling readDir() from archive_base.s7i).
- Several improvements have been made in the rpm.s7i library:
- The signature section digests are checked when the RPM file is
opened.
- The payload digests are only checked if the payload is used.
- Provided and required dependencies are read when the RPM file is
opened.
- The compiler (s7c.sd7) has been improved:
- It recognizes if an array index access would always raise
INDEX_ERROR. This is done for a constant array and with the range
of possible index values.
- The optimization of the floating point power operator with an
integer exponent has been improved. There are cases where the base
is constant, and the range of possible exponents allows a
simplification.
- The optimization of the floating point left and right shift
operators has been improved. It considers cases where the number
that needs to be shifted is constant and cases where nothing is
constant. In both situations the range of possible shift amounts
allows simplifications.
- The optimization of A * B ** C with A and B float and C integer,
has been improved. This considers cases where B is a power of two
and the range of possible exponents C allows a simplification.
- It is recognized if the integer left shift operator would always
raise OVERFLOW_ERROR. Depending on the range of possible values
for the shift amount and the value to be shifted, this optimization
is made.
- The number of checks for OVERFLOW_ERROR and NUMERIC_ERROR of the
integer power operator has been reduced. Depending on the range of
possible values for base and exponent, some checks can be omitted.
- Now the range of possible integer values is determined for the
expression ord(aBigInteger mod 2_ ** n).
- Now the range of possible integer values is determined for the
length of a sub-string.
- The generated code for 'elsif FALSE then end if' as been fixed.
- String index checks are optimized away if the range of possible
index values always remains inside a constant string.
- Computing the length of a fixLen substring has been optimized
(e.g.: length(aString[A fixLen B]) will always return B).
- The optimization of the string length function has been changed to
sum up the length of the components as integers.
- The test suite has been improved to increase the code coverage of the
compiler.
- Tests for array assignment, array length and array index access have
been added to chkarr.sd7.
- Tests of the optimization of expressions like ord((A + B) mod C)
(the modulus of a bigInteger sum converted to an integer) have been
added.
- Several tests have been added to chkflt.sd7:
- Tests for float left shift (<<).
- Tests for float right shift (>>).
- Tests for float ** integer.
- Tests for the A * B ** C optimization.
- Tests for float ** float.
- The tests for decompose() have been improved.
- Tests for ceil(), floor() and trigonometric functions have been
added.
- Tests for the power operator (**) and for the integer >>:= operator
have been added to chkint.sd7.
- Tests for the overflow of shift left (<<) and for the power operator
(**) have been added to chkovf.sd7.
- Tests for string head have been added to chkidx.sd7.
- Tests for empty if-, while- and repeat-statements have been added to
chkprc.sd7.
- Tests for card(), rand() and assignment have been added to
chkset.sd7.
- Several tests have been added to chkstr.sd7: