-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathE-VO.guide
8333 lines (6404 loc) · 296 KB
/
E-VO.guide
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
@database "e.guide"
@node MAIN
@title "Amiga E-VO v3.8.1"
+-----------------------------------------------+
| |
| Amiga E-VO v3.8.1 |
| Compiler for The E Language |
| Originally By Wouter van Oortmerssen |
| Updates By GRIO 1999-2003 |
| and Darren Coles 2022 - 2024 |
| |
+-----------------------------------------------+
Contents:
0. compiler and introduction
@{" A. introduction " link CH_0A }
@{" B. the distribution " link CH_0B }
@{" C. installing/using the compiler " link CH_0C }
@{" D. changes / history / new features " link CH_0D }
@{" E. additional information " link CH_0E }
1. format
@{" A. tabs,lf etc. " link CH_1A }
@{" B. comments " link CH_1B }
@{" C. identifiers and types " link CH_1C }
2. immediate values
@{" A. decimal (1) " link CH_2A }
@{" B. hexadecimal ($1) " link CH_2B }
@{" C. binary (%1) " link CH_2C }
@{" D. float (1.0) " link CH_2D }
@{" E. character " link CH_2E }
@{" F. strings ('bla') " link CH_2F }
@{" G. lists ([1,2,3]) and typed lists " link CH_2G }
@{" H. lisp-cells (<a|b>) " link CH_2H }
3. expressions
@{" A. format " link CH_3A }
@{" B. precedence and grouping " link CH_3B }
@{" C. types of expressions " link CH_3C }
@{" D. function calls " link CH_3D }
4. operators
@{" A. math (+ - * /) " link CH_4A }
@{" B. comparison (= <> > < >= <=) " link CH_4B }
@{" C. logical and bitwise (AND OR NOT << and >>) " link CH_4C }
@{" D. unary (SIZEOF PSIZEOF ARRAYSIZE OFFSETOF ` ^ {} ++ -- -) " link CH_4D }
@{" E. triple (IF THEN ELSE) " link CH_4E }
@{" F. structure (.) " link CH_4F }
@{" G. array ([]) " link CH_4G }
@{" H. float operator (!) " link CH_4H }
@{" I. assignments expressions (:=) " link CH_4I }
@{" J. sequencing (BUT) " link CH_4J }
@{" K. dynamic memory allocation (NEW) " link CH_4K }
@{" L. unification (<=>) " link CH_4L }
@{" M. pointer typing (::) " link CH_4M }
@{" N. swap (:=:) " link CH_4N }
@{" O. quick compare (==) " link CH_4O }
@{" P. increment decrement etc (+= -= etc) " link CH_4P }
5. statements
@{" A. format (;) " link CH_5A }
@{" B. statement labels and gotos (JUMP) " link CH_5B }
@{" C. assignment (:=) " link CH_5C }
@{" D. assembly mnemonics " link CH_5D }
@{" E. conditional statement (IF) " link CH_5E }
@{" F. for-statement (FOR) " link CH_5F }
@{" G. while-statement (WHILE) " link CH_5G }
@{" H. repeat-statement (REPEAT) " link CH_5H }
@{" I. loop-statement (LOOP) " link CH_5I }
@{" J. select-case-statement (SELECT) " link CH_5J }
@{" K. increase statement (INC/DEC) " link CH_5K }
@{" L. void expressions (VOID) " link CH_5L }
@{" M. memory deallocation (END) " link CH_5M }
@{" N. generate an error or warning (FATAL/WARN) " link CH_5N }
@{" O. code and data sections (SECTION) " link CH_5O }
@{" P. Negative conditions/loops (IFN/ELSEIFN etc) " link CH_5P }
6. function definitions and declarations
@{" A. proc definition and arguments (PROC) " link CH_6A }
@{" B. local and global definitions: scope (DEF) " link CH_6B }
@{" C. endproc/return " link CH_6C }
@{" D. the 'main' function " link CH_6D }
@{" E. built-in system variables " link CH_6E }
@{" F. default arguments to functions " link CH_6F }
@{" G. multiple return values " link CH_6G }
@{" H. function values " link CH_6H }
7. declaration of constants
@{" A. const (CONST) " link CH_7A }
@{" B. enumerations (ENUM) " link CH_7B }
@{" C. sets (SET) " link CH_7C }
@{" D. built-in constants " link CH_7D }
8. types
@{" A. about the 'type' system " link CH_8A }
@{" B. the basic type (LONG/PTR) " link CH_8B }
@{" C. the simple type (CHAR/INT/LONG) " link CH_8C }
@{" D. the array type (ARRAY) " link CH_8D }
@{" E. the complex type (STRING/LIST) " link CH_8E }
@{" F. the compound type (OBJECT) " link CH_8F }
@{" G. initialisation " link CH_8G }
@{" H. the essentials of the E typesystem " link CH_8H }
9. built-in functions
@{" A. io functions " link CH_9A }
@{" B. strings and string functions " link CH_9B }
@{" C. lists and list functions " link CH_9C }
@{" D. intuition support functions " link CH_9D }
@{" E. graphics support functions " link CH_9E }
@{" F. system support functions " link CH_9F }
@{" G. math and other functions " link CH_9G }
@{" H. string and list linking functions " link CH_9H }
@{" I. lisp-cells and cell functions " link CH_9I }
@{" J. boopsi functions " link CH_9J }
10. library functions and modules
@{" A. built-in library calls " link CH_10A }
@{" B. interfacing to the amiga system with the v47 modules " link CH_10B }
@{" C. compiling own modules " link CH_10C }
@{" D. the modulecache " link CH_10D }
11. quoted expressions
@{" A. quoting and scope " link CH_11A }
@{" B. Eval() " link CH_11B }
@{" C. built-in functions " link CH_11C }
12. floating point support
@{" A. float values " link CH_12A }
@{" B. computing with floats " link CH_12B }
@{" C. builtin float functions " link CH_12C }
@{" D. float implementation issues " link CH_12D }
13. Exception handling
@{" A. defining exception handlers (TRY/CATCH or HANDLE/EXCEPT) " link CH_13A }
@{" B. using the Raise() function " link CH_13B }
@{" C. defining exceptions for built-in functions (RAISE/IF) " link CH_13C }
@{" D. use of exception-ID's " link CH_13D }
14. OO programming
@{" A. OO features in E " link CH_14A }
@{" B. object inheritance " link CH_14B }
@{" C. data hiding (EXPORT/PRIVATE/PUBLIC) " link CH_14C }
@{" D. methods and virtual methods " link CH_14D }
@{" E. Constructors, Destructors and Super-Methods (NEW,END,SUPER) " link CH_14E }
@{" F. Unions " link CH_14F }
15. inline assembly
@{" A. identifier sharing " link CH_15A }
@{" B. the inline assembler compared to a macro assembler " link CH_15B }
@{" C. ways using binary data (INCBIN/CHAR..) " link CH_15C }
@{" D. OPT ASM " link CH_15D }
@{" E. Inline asm and register variables " link CH_15E }
16. technical and implementation issues
@{" A. the OPT keyword " link CH_16A }
@{" B. small/large model " link CH_16B }
@{" C. stack organisation " link CH_16C }
@{" D. hardcoded limits " link CH_16D }
@{" E. error messages, warnings and the unreferenced check " link CH_16E }
@{" F. compiler buffer organisation and allocation " link CH_16F }
@{" G. register allocation " link CH_16G }
17. Essential E Utilities / Applications
@{" A. ShowModule " link CH_17A }
@{" B. ShowHunk " link CH_17B }
@{" C. Pragma2Module / Iconvert " link CH_17C }
@{" D. ShowCache / FlushCache " link CH_17D }
@{" E. ecompile.rexx " link CH_17E }
@{" F. o2m " link CH_17F }
@{" G. E-Yacc " link CH_17G }
@{" H. SrcGen " link CH_17H }
@{" I. EBuild " link CH_17I }
@{" J. EE / Aprof " link CH_17J }
@{" K. EDBG " link CH_17K }
@{" L. E-VO PreProcessor " link CH_17L }
@{" M. E-VO Library mode " link CH_17M }
18. Appendices
@{" A. E Grammar description " link CH_18A }
@{" B. Tutorial " link CH_18B }
@{" C. Mapping E to C/C++/Pascal/Ada/Lisp etc. " link CH_18C }
@{" D. Amiga E FAQ " link CH_18D }
@{" E. TODO/BUG list " link CH_18E }
@endnode
@node CH_0A
@title "0A. introduction"
0A. introduction
----------------
E is an object oriented / procedural / unpure functional higher programming
language, mainly influenced by languages such as C++, Ada, Lisp etc. It is
a general-purpose programming language, and the Amiga implementation is
specifically targeted at programming applications. Features of the language
include: speed of >20000 lines/minute on a vanilla A500, inline assembler
and linker integrated into compiler, large set of integrated functions,
great module concept with v47 (OS3.2) includes as modules, flexible
type-system, quoted expressions, immediate and typed lists, parametric and
inclusion polymorphism, exception handling, inheritance, data-hiding,
methods, multiple return values, default arguments, register allocation,
fast memory management, unification, LISP-Cells, gui-toolkit,
(macro-) preprocessor, very intuitive and powerful source-level debugger,
easy .library linking, and much more...
This is what 'HelloWorld' looks like in E:
/* nominated for Most Boring Example */
PROC main()
WriteF('Hello, World!\\n')
ENDPROC
@endnode
@node CH_0B
@title "0B. the distribution"
0B. the distribution
--------------------
The distribution includes:
Bin/ contains the compiler E-VO and the support utilities
Modules/ directory containing all Amiga v47 E modules and
useful tools as linkable modules
Docs/ documentation on E
Src/ example sources in E
This distribution of E-VO Amiga E is FreeWare, and may be freely copied.
It contains the compiler and modules, example code and various additional
tools originally distributed as part of the original Amiga E package which
were also released into the public domain.
Distributing copies of E-VO for more than the price of media+postage, or any
other way of distribution with only the slightest aim of making profit,
is not allowed.
No guarantees, no warranty. If you manage to drown your pet goldfish
using E, or E fails to be suitable for ordering pizzas, that's entirely your
problem. Whatever happens, don't blame it on me.
@endnode
@node CH_0C
@title "0C. installing/using the compiler"
0C. installing/using the compiler
----------------------
To install E-VO on your system, just copy the whole distribution to some
place in your system, extend your path to the BIN directory, and assign
EMODULES: to the 'Modules' directory. If you're upgrading from a previous
version, please reinstall this release which includes the latest OS 3.2
modules and compiler.
syntax of the compiler (2.04+):
SOURCE/A,REG=NUMREGALLOC/N/K,LARGE/S,SYM=SYMBOLHUNK/S,NOWARN/S
QUIET/S,ASM/S,ERRLINE/S,ERRBYTE/S,SHOWBUF/S,ADDBUF/N/K,COMPILESTACK/N/K,
IC=IGNORECACHE/S,HOLD/S,WB/S,LINEDEBUG/S,OPTI/S,LEGACY/S,LEGACYINT/S,
DEBUG/S,DEBUG50/S,NILCHECK/S,SHOWFNAME/S,DEFINE/M',0
for 1.2 to 2.03:
evo [-opts] <sourcefile>
As an example we'll compile the program 'HelloWorld.e'. The compiler will
produce an executable 'HelloWorld'.
1> cd e:src
E:Src> evo helloworld
E-VO E Compiler/Assembler/Linker/PP v3.4.0-rc1 (14.09.2021)
developing as "EC" '1991-97 by Wouter van Oortmerssen
developing as "GEC" '1999/2003 by grio
developing as "E-VO" '2021 by Darren Coles
lexical analysing ...
parsing and compiling ...
no errors
E:Src> helloworld
Hello, World!
E:Src> list
HelloWorld.e 89 ----rwed Oggi 17:37:00
helloworld 656 ----rwed Oggi 17:37:00
2 files - 4 blocks used
E:Src>
note: the compiler cannot be made resident
Options.
These are standard AmigaDos options. You can see them at any time by typing
'EVO ?'. For 1.2 options the old unix-like switches are used (need to be
written together, preceded by a "-"):
LARGE -l compiles with large code/data model (see @{" 16A " link CH_16A }, OPT LARGE)
ASM -a puts E-VO into assembler mode (see @{" 15D " link CH_15D }, OPT ASM).
NOWARN -n suppresses warnings (see @{" 16A " link CH_16A }, OPT NOWARN)
SYM -s adds a symbolhunk to the executable, for use with
profilers, debuggers, disassemblers etc.
LINEDEBUG -L adds a "LINE" debughunk to the executable, for use
with profilers, debuggers etc. (see @{" 17K " link CH_17K }).
REG=N -rN uses N regs per PROC for register-allocation.
(default is 0 for the time being, read elsewhere
about how to use this!)
QUIET -q if there are no errors or warnings, E-VO won't output
anything.
WB -w puts wb to front (for scripts)
SHOWBUF -b shows buffer memory usage information
ADDBUF=X -mX forces E-VO to allocate more memory for its buffers.
X ranges 1..9, the minimum number of 100k blocks to
allocate. default is 1 (never needed).
COMPILESTACK Allows you to override the size of the compilestack in case
you get workspace full errors.
ERRLINE -e give the line# the error was on as returnvalue
ERRBYTE -E give the byte-offset in the file the error was on
as returnvalue
IGNORECACHE -c don't use the module-cache in any way
HOLD -h wait for a <return> on the commandline before
exiting E-VO.
OPTI enable all optimisations (currently equals REG=5 and
STRMERGE on)
LEGACY enable legacy mode - outputs module files in version 10
format and disable the new constants and built in functions
that may cause naming clashes with older code.
LEGACYINT see OPT LEGACYINT. Enables backward compability with
Int() function
DEBUG attach debug infos to executable/module (see @{" 17K " link CH_17K })
DEBUG50 attach debug infos to executable/module in a way that
allows debugging under OS 4.x (see @{" 17K " link CH_17K })
NILCHECK insert code at every "." or "[]" dereference to check
for a NIL pointer. Will throw an exception of the form
Throw("NIL",source_line_number)
SHOWFNAME Displays the filename of the E file being compiled.
DEFINE Equivalent to #DEFINE in your code, defines a macro
example: evo large blabla
compiles blabla.e with large model.
NOTE: in most cases you won't need to use any of these options
@endnode
@node CH_0D
@title "0D. changes / history / new features"
0D. changes / history / new features
------------------------------------
New in E-VO (3.8.1)
- FindModule: add module version 14 support
- Showmodule: add module version 14 support
- fix legacy compile mode so it doesnt include changes in module
version 14
- Fix reaction texteditor tag values in gadgets/texteditor.m
New in E-VO (3.8.0)
- Added variable names + types and procedure line numbers to EVAR debug
info
- Made multi-dimensional arrays memory layout more logical (first
dimension is most significant)
- Fix global variable structure generated for library definitions
- Added object definitions to debug info
- Update EDBG to parse new EVAR structures
- Add _SRCLINE_ define (current line number)
- Add _SRCPROC_ define (current proc name)
- Added EVO_3_8_0 define
- Added support for ARRAY OF PTR TO ... in objects
- Fixed issue where two variables declared with the same initial value
did not get set correctly.
New in E-VO (3.7.0)
- Compiler sometimes produced garbage error message with an error at the very
end of the file.
- Reformatted the Amigaguide document to better fit in 80 columns.
- added Arexx compile scripts
- allow creating a new object directly into an object member
eg. self.a:=NEW self.a.method()
- method table was not correctly initialised for objects declared as
eg. DEF a:b OR DEF a[5]:ARRAY OF b
- heap in compiler is allocated with MEMF_CLEAR in compiler to ensure all
data in the exe is initialised to 0 and not contain random data from
memory
- calling a method on an array element of an object did did not calculate
the correct address for the method.
- compiler was creating 020 opcodes when accessing an array of objects
- added NIL pointer checks when calling methods on array of objects
- self variable was set incorrectly for methods declared with an exception
handler
- fix issue with wrong opcode being generated in this code
DEF a
DEF b:PTR TO LONG
a:=[0,b[0]:=5]
resulting in the value not being stored correctly
- include textfield module
- fix bug in reaction_lib with the freeClickTabs, freeChooserLabels and
freeRadioButtons functions not looping through the list correctly.
- add support for long branch 020 instruction.
- fix invalid memory access when casting the result of a procedure call
to an object
- fix inconsistencies with SIZEOF command
- fix error in branching code for the == operator
- add missing listview module
- add some extra functions in reaction_lib (openClass, openLibs,
closeLibs, libDoGadgetMethodA)
- added PSIZEOF operator
- added ARRAYSIZE operator
- added SelectFirst function
- added debug symbols for methods
- allow CONT and EXIT within SELECT statement
- updated Rnd() function to be pure
- flagged openw, opwns, boolgad, settopaz, sets, gets functions as not pure
- added WARN TRUE/FALSE to enable/disable warnings
- added Rol() and Ror() functions
- the 020 variant of Mod() was not correctly used by the compiler and
was also taking the parameters the wrong way around
- added 020 variant of ListItem function
- track line numbers for warnings
- NOREGS option was not correctly parsed on methods
- taking a reference to a method {obj.method} did not return the
correct address
- 1.3 startup code now updates stack pointers to allow stack space
functions to return the correct values.
- skip NameFromFH call on kick 1.3 meaning the compiler now works
on that OS again
- NOT operator was very broken (inconsistently applied and in some cases
not applied at all)
- Added EVO_3_7_0 define
- casting and PTR TO PTR handling is improved and should now work in all
use cases.
New in E-VO (3.6.1)
- add checks for object going over 64k
- fix 020 optimised address calculation for array of object (or ptr to
object) indexing
- added EXENAME and DESTDIR command line arguments to override the
output file name.
- fix casing for IeeeDPFloor and IeeeDPCeil
- Extend lists to handle 64k items instead of 32k.
- Fix #else preprocessor parsing issues
New in E-VO (3.6.0)
- EDBG: add support for ECX/EEC compiled executables
- fix issue with memfill that could cause odd address exception on 68000
- add TRY..CATCH..ENDTRY allowing more control over exception handling
- Add UNTILN, WHILEN ELSEWHILEN, IFN, ELSEIFN, EXITN, CONTN which are
inverse of their counterparts eg. UNTILN x is equal to UNTIL Not(x)
- Add WORD and BYTE types (unsigned 16 bit and signed 8 bit variable
types) and Word() Byte() functions as well as PutByte() and PutWord()
- Allow SIZEOF object and SIZEOF object.member
- Fix issue where SIZEOF x didnt throw a compile error if x was not
defined
- Added EVO_3_6_0 define
- Added Compare, Ucompare, Fcompare, StrCompare functions
- Fixed Int() function to sign extend result
- Added OPT LEGACYINT to restore old version of Int() command
- Added command line switch LEGACYINT/S which does the same as the
above OPT
- Allow BYTE and WORD types in modules, increase module version to 13.
- FindModule: fix error in memory deallocation
- FindModule: update for BYTE and WORD types (module version 13)
- ShowModule: update for BYTE and WORD types (module version 13)
New in E-VO (3.5.1)
- fix issue with short jump calculations being done incorrect in certain
circumstances, causing crashes.
- fix casing of math ieee functions to match original E modules
- disable OPT POOL and OPT UTILLIB in legacy mode
- disable THISTASK, __POOL and UTILITYBASE in legacy mode
- reinstate [] in immediate list to previous E functionality (a blank
0 item list)
- fix optimisation issue where MOVE.B (A0),D0 and MOVE.W (A0),D0
followed by TST.L would be optimised incorrectly.
- fix issue with immediate lists, ListMax() could not be used as the max
size was not populated.
- allow 0 length lists to be created eg List(0)
- add showhunk source
New in E-VO (3.5.0)
- Added ac020 object with pad int to allow optimised 32 bit writes on
020+ courtesy of Samuel D. Crow
- When compiling in debug, disable the optimisation that removes LINK,
UNLK in procs where not needed (EDBG doesnt step properly when these
aren't present)
- EDBG: Add case insensitive search
- EDBG: Added search next
- EDBG: Display variable values in both hex and decimal
- Fixed: Clears an extra byte in the String() initialisation causing
memory corruption in the case of String(0)
- EDBG: Enhanced breakpoints - multiple can now be set and can be
seen/set in a column next to the code
- EDBG: Support for multiple breakpoints and debugging while code is
running.
- EDBG: Added support for debugging under OS4.x (eg without using CPU
exceptions)
- EDBG: Added support for adding watch variables by entering name
- Added support for DEBUG50 mode which allows debugging using JSR
instructions instead of causing cpu exceptions which allows debugging
under OS 4.x
- Added support for multi-dimensional arrays
- Added support for PTR TO PTR variables
- Added EVO_3_5_0 define
- Added ? operator (ported from CreativE)
- Added OPT FPEXP (fpu floating point support - ported from CreativE)
- Added :=: swap operator (ported form CreativE)
- Added OPT INLINE (ported from CreativE)
- Added OPT NOSTARTUP (ported form CreativE)
- Added OPT UTILLIB (ported from CreativE)
- Added NOREGS option (ported from CreativE)
- Updated module format (now version 12) to account for multi-dimension
arrays and PTR TO PTR type in object members
- Ported some optimisation code from CreativE
- Added ENDPROC WITH function (ported from CreativE)
- Added == operator (range check - ported from CreativE)
- Added new system constants TAG_DONE, TAG_END, TAG_INORE, TAG_MORE,
TAG_SKIP, TAG_USER, OFFSET_BEGINNING, OFFSET_BEGINING, OFFSET_CURRENT,
OFFSET_END (ported from CreativE)
- Added new utilitybase variable
- Added 020+ optimised MOD function
- Added support for += -= etc operators (ported from CreativE)
- ShowModule: Added support for new module format (version 12)
- Added improved LONG,INT,CHAR routines from CreativE which allow
expressions
- Added improved SIZEOF command that allows SIZEOF objectvar
- Allow \xNN for hex char in strings
- Add ELSEWHILE and ALWAYS extension to WHILE LOOP (from CreativE)
- Improvements to SELECT x to allow expressions (from CreativE)
- Added LEGACY option to output module format version 10 and disable
newer features
- Fix: 2 << obj.val was generating corrupt code
- Add SECTION (code and data) support
- Fix: ReadStr return value was not completely compatible with EC (fix
Pragma2Module bug)
- ShowModule: Add -e parameter which will force output into a form that
can be directly recompiled
- Added a scanf module in the other folder
- Allow string consts in modules
- Allow float CONST definitions
- Remove some unused startup code when OPT ASM in use.
- ShowModule: Added support for string CONSTs
- Added OFFSETOF to get the offset of a member of an object
- Added MemFill, AstrClone, ListInsItem, ListRemItem, ListSwapItem
functions
- EDBG: Support for sections
- FindModule: Coded new FindModule application from scratch with support
for latest module format.
- Make second parameter of SetStr optional and if not specified it will
set the calculate the string length automatically
- Added EndsWith function eg EndsWith(s,'A') returns TRUE if a string1
ends with string2
- Fix: CHAR '' or CONST STR='' would cause memory corruption
- Fix "3*SIZEOF LONG" error
- added AstpCopy and UsedStack and StackSize functions
New in E-VO (3.4.1)
- Fix: Optimisation error where multiple variables set to the same value
were not set correctly.
- Made the select source file window wider in EDBG to account for the
full path being displayed.
New in E-VO (3.4.0)
- Name change to E-VO
- New version numbering 3.4.0
- Add CONT command, similar to EXIT but continues the loop at the top
instead of dropping out.
- Make default cpu 68000
- Make stack buffer configurable (and default it to 50k)
- Fix file handle leak
- Fixed breaking defect MIDSTR command
- Allow CONT and EXIT commands to be called inside an IF or SELECT
- Add ANDALSO and ORELSE short circuit versions of AND and OR
- Optimised IF/WHILE/REPEAT expressions and removed TST immediately
following MOVEQ
- Fixed KickVersion not returning true when version number is exactly
equal to the requested version
- Allow String(0) which was valid in E v3.3a
- Show line numbers for unused variables/labels/procs
- Allow new formatting characters \u (unsigned long) \q (double quote)
\! (ascii bell) \v (vertical tab) \xHH (hex char) (taken from
CreativE)
- Allow macros to be defined by passing in DEFINE command line
parameter (taken from CreativE / ECX)
- Allow string consts (taken from CreativE)
- Added #date preprocessor (taken from CreativE but enhanced with hours
minutes and seconds options)
- Added DoMethod, DoMethodA, CoerceMethod, CoerceMethodA,
DoSuperMethod, DoSuperMethodA, Set, Sets, Get, Gets, CtrlD, CtrlE,
CtrlF, Chk, Eof, Fopen, Fclose, Alloc, Free, PutF, ReadB, WriteB,
Size, Lsl, Lsr functions (all taken from CreativE)
- We now have optimised versions of WriteF, PrintF, PutF when targetting
OS 37.
- Added SHOWFNAME command line parameter.
- Reverted order of efunctab back to how it was in E to restore
compatibility with pre-compiled E modules that are using Mul Div or
WriteF.
- Added the following functions:
LowerChar(c), UpperChar(c) - takes a char and returns a char
StrAddChar(s,c) - Adds a single character to an estring
ListAddItem(l,i) - Adds a single item to an elist
- Immediate assignments for values -256 to 254 for even numbers
converted to MOVEQ followed by ADD.L D0,D0
- Optimised NEW [] list creation to remove duplicate moves into D0
eg. NEW [0,0,0,0]
- Added OPT PURE to check for non pure code (eg variables in static
lists/objects and GetA4 call)
- Optimisation: Removed TST.L D0 after EXT.L D0 in IF/WHILE/REPEAT etc
conditions.
- Optimisation for default values for reg vars into single MOVE
instruction.
- Optimisation for reg var assignments where moveq is used into a single
MOVE instruction where possible.
- Added warning when compiling a library that OPT PURE is recommended
- Optimisation for reg var assignments where moveq+add is used.
- Optimisations with FOR loops to remove redundant move instructions.
- Added FATAL 'string' command which generates no code but will fail
the compilation (useful for use with #ifdef)
- Added WARN 'string' command which generates no code but will show
- a warning during compilation
- Added GEC_3_4_0 auto generated #define macro which will allow you
to check for a minimum version of the compiler. New defines will be
additionally created for each new version of the software.
- Added #ELSE #ELIFDEF #ELIFNDEF preprocessor commands
- Added #UNDEF preprocessor command
- Added 020 optimised versions of Long, Int and Char functions
- Added StrIns(estring,estring,pos) - insert string function
- Added StrRem(estring,pos,len) - remove substring function
- Store full path of source files when generating debug hunk (allows
EDBG to find the files if they are not all located in the same
folder).
- v47 (OS3.2) emodules, including all the new reaction interfaces
- ARRAY OF CHAR no longer word aligned in OBJECTS
- NOT operator works correctly with immediate values (eg "NOT 0" did not
work correctly.
- MUL/DIV optimisations also working for 020 generated code.
- NOALIGN now requires 020 as accessing unaligned INT or LONG will
result in exception if you don't have 020.
- Fixed optimiser bug in library calls where IF function was used in
a parameter that prevented the correct value from being passed.
- Fix: x AND 0 was returning incorrect value
New features:
(3.3g)
- Improved fake stack setting , now is more os compatible
( used exec SwapStack() for OS v37 else old things ).
- Added PRIVATE methods in OOP ( PROC bla() OF abc PRIVATE IS EMPTY )
- member can be used as method ( OBJECT abc;a,b;ENDOBJECT -> abc.a(1,2) )
- possible set PROC/label address in static list like this [1,2,main]
( old mode [1,2,{main}] ; is still working ,but code is longer )
- registers can be used as normal variable ( very beta )
- EXTRA keyword for LIBRARY mode (idea taken from CreativE) :
LIBRARY namestring,version,revision,versionstring EXTRA value IS ...;
now library base can have more variables
- PREPROCESS'ing is on at beginnig , OPT PREPROCESS leaved for down
compatibility.
- Added shift expresion (exp. CONST ABC=1<<4; x:=y<<3 ).
- Function added AstringF - like StringF but for normal string's
Fixed Bugs:
(3.3g)
- Another bugs fixed in "get address " sequence (ex.: {a.c[a]} ).
- Problem with definition static OBJECT's and UNION's members.
- Small bug in reg exp
New features:
(3.3f)
-New functions:
StrClone(estr) - duplicate estring
ListClone(elist) - only long size elements
GetA4() - ...
-Keyword SAFE for PROC's ( ex: PROC SAFE bla(a,b) ) :
result push REG's D2-D7/A2-A6 on the stack .
-OPT RUNBG - run background ( 2 vers 4 kick<v37 & kick>=v37 ) .
-Modified startup code (to work with or without RUNBG , and
fake stack is setup ).
-New global var "thistask" .
-Modified LIBRARY startup/Open/Close ; tasks never be hash-tabled
but tabled by dynamic allocated one linked list .
- "//" is a comment .
-Added exporting in MODULE arg name for method's ;
optional can be switched off by new keyword OLD
( ex: OPT MODULE OLD ); update ShowModule tool for display "new"
module .
Fixed Bugs:
(3.3f)
- Bad reporting in case: OBJECT bla; a,b,c ;PROC zzz() ( or CONST ...)
error message "label expected" - now "incorrect object definition" .
- Small fixes in head code in LIBRARY output .
- Raise() in LIBRARY if PROC isn't have HANDLE'r JUMP to $0 address .
- Small bug in geting var address .
- Agrrh... nasty bug in close library routine . Resolved.
- Fake stack maker bug ( in setting Upper/Lower pointers) .
Optimisations:
(3.3f)
Some improvements in EAEXP.
New features:
(3.3e)
-Modified startup code .
-REGS var in HANDLER PROC ( only if you define them ,
no in optimisation ).Becarefull with that this maybe very dangerous
if you use REGS var in HANDLE'r.
-Using LONG label -> we get reloc of entered label .
-Short version ARRAY definition in PROC/OBJECT ( DEF a[10]:CHAR ) .
-NOALIGN keyword for OBJECT definition , it's turn off auto align
odd members (example : OBJECT blah NOALIGN ).
-INC/DEC extension : INC x,20 ( x:=x+20 ) .
-ASM mnemonics:
MUL(U/S) AND DIV(U/S) - long size
EXTB.L
-NOT keyword for IF/WHILE/UNTIL expresion .
-UNION keyword for OBJECT's definitions :
OBJECT abc
a:LONG
UNION
[b:INT,c,d]
[
e:CHAR
f:LONG
g:INT
]
ENDUNION
k:PTR TO LONG
-> or something like that :
UNION [
[b:INT,c,d],
[e:CHAR,f:LONG,
g:INT]
]
ENDOBJECT
-Added operators : & eq AND
|| eq OR
~ eq NOT .
-Possible assigment in member/list elements ([a.e:=0]) .
Fixed Bugs:
(3.3e)
-Getting address member if he not defined .
-Bad brach set in LIBRARY if OPT CPU not used .
-Things like:
IF IF x THEN x ELSE x=y THEN y ELSE 0
generating bad code .
-"IF" optimiser cut TST after functions/procedures;
Example:
IF CtrlC() THEN Raise(ERR_BREAK)
CODE:
BSR CtrlC
BEQ xxx .
New features:
(3.3d)
-In definition OBJECT or var array size can be defined by [4*3+1]
-DEF a:REG abc now accepted .
-"=>" and ">=" it's the same , "=<" and "<=" it's the same .
-Things like that : Func()::blah.a now is possible .
-Using OPT 020+ we get improved code :
1. to the startup compiler put test code for entered CPU
2. inline mul/div (*;/) working for long sizes
3. function Mul()/Div() is patched for 020+
4. EXT.W;EXT.L is changed to EXTB.L .
Fixed Bugs:
(3.3d)
-Get address member then a first is dereference : {a::abc.c} .
Optimisations:
(3.3d)
Removed LINK A5,#-XXXX/UNLK A5:
if PROC haven't args and vars
Put element to the list:
Was: Is:
LEA xx(PC),A0 PEA xx(PC)
MOVE.L A0,D0
MOVE.L D0,-(A7)
Was: Is:
MOVE.L #xx,D0 PEA xx.(W/L)
MOVE.L D0,-(A7)
Was: Is:
MOVE.L xx(A4/A5)/Dx,D0 MOVE.L xx(A4/A5)/Dx,-(A7)
MOVE.L D0,-(A7)
New features:
(3.3c)
-String joining in the list by "+" .
-Get/set list elements by 1+a .
-Function InStri() -> like InStr() but it case sensitive .
-Geting address of object member/method: {abc.a[3].z} .
-Line number report in branches .
-OPT STRMERGE for string merging .
-EXPORT ignored if not used in MODULE .
Fixed Bugs:
(3.3c)
-Bad object reference:
OBJECT bla
brr
ENDOBJECT
PROC main()
DEF i:bla
WriteF('\d\n',i.brr.brr)
ENDPROC
-MOVEQ #-128,D0 now accepted .
-Default member in object now is PTR TO CHAR .
-RAISE error report .
-Error report without "]" in DEF a[ .
-Library base showed unref if called in other module .
-EOR.L #3,D0 changed to EORI.L #3,D0 .
Optimisations:
(3.3c)
Short instruction for interval (-128;127):
Was: Is:
MOVE.L xxxx,D0
CMP.L #0,D0 BEQ xxx
or
TST.L D0
BEQ xxx
Was: Is:
CMP.L #1,D0 MOVEQ #1,D1
BEQ xxx CMP.L D1,D0
BEQ xxx
Was: Is:
OR.L #-1,D0 MOVEQ #-1,D1
OR.L D1,D0
Was: Is:
SUB.L #25,D0 MOVEQ #25,D1
SUB.L D1,D0
Was: Is:
... ...
MOVEM instrunction:
Was: Is:
MOVEM.L D3,-(A7) MOVE.L D3,-(A7)
MOVEM.L (A7)+,A5 MOVEA.L (A7)+,A5
Start value for variable:
Was: Is:
MOVEQ #0,D0 MOVEQ #0,D0
MOVE.L D0,-$0224(A4) MOVE.L D0,-$0224(A4)
MOVEQ #0,D0 MOVE.L D0,-$0228(A4)
MOVE.L D0,-$0228(A4)
NEW [1,x,10000]:
Was: Is:
MOVE.L D0,(A7) MOVE.L D0,(A7)
MOVEQ #1,D0 MOVEA.L D0,A6
MOVE.L (A7),A6 MOVEQ #1,D0
MOVE.L D0,4(A6) MOVE.L D0,4(A6)
MOVE.L x(A5),D0 MOVE.L x(A5),D0
MOVE.L (A7),A6 MOVE.L D0,8(A6)
MOVE.L D0,8(A6) MOVE.L #10000,D0
MOVE.L #10000,D0 MOVE.L D0,12(A6)
MOVE.L (A7),A6
MOVE.L D0,12(A6)
Zero offset to Ax register:
Was: Is:
MOVE.L (A7)+,$0000(A0) MOVE.L (A7)+,(A0)
MOVE.L D0,$0000(A7) MOVE.L D0,(A7)
New features:
(3.3b)
-Possible to use EXIT in LOOP/ENDLOOP and REPEAT/UNTIL .
-Improved functions:
StrCopy()
StrCmp()
StrAdd()
MidStr()
ForAll()
Exitst()
SelectList()
FileLength()
ReadStr() -> much faster
MapList()
ListCmp()
ListAdd()
ListCopy()
String()
OstrCmp() .
-New function StriCmp() -> case sensitive version of StrCmp() .
Fixed Bugs:
(3.3b)
-Functions:
Facos()
Fsinh()
... .
Optimisations:
(3.3b)
Better ELSEIF:
Was: Is:
Scc D0 Bcc xxx
EXT.W D0
EXT.L D0
BEQ xxx
Testing data in D0:
Was: Is:
MOVE.L xx(Ax),D0
OR
MOVE.L Dx,D0
TST.L D0 Bcc xxx
Bcc xxx
Stack back:
Was: Is:
JSR xxxPROC/EFUNC
LEA 4(A7),A7 ADDQ.L #4,A7
New in v3.3a:
- significantly improved version of EasyGUI, including the SOURCE!
- new version of EDBG which a.o. now cooperates with Explorer
(see @{" 17K " link CH_17K } for a full list of new features and bugs fixed).
Now comes with source code as well!
- new version of EBuild
- various new examples, e.g. a texturemapper
- new versions of many modules and examples
- revised docs, e.g. a new "known-bugs" list.
- some new builtins, e.g. the Arc float functions.
- LIBRARY mode now has a PROC close() to match main()
- two (!) new class libraries now part of the distribution,
Gregor's OO modules and Fabio's AFC.
Bugs fixed in v3.3a:
- EC now saves debug information for "self", and EDBG makes use of it.
- OPT RTD removed.
- ENUM now works with negative numbers
- module-cache flushing now definitely fool proof.
- and many smaller bugs...
New in v3.2i:
- make sure you read about the bug in mathieeesingbas.library
(see @{" 12D " link CH_12D }) (!)
- You can explicitly assign registers in own libraries (e.g. 'myfun(A0)').
- 'find' in EDBG
- Iconvert supports PhxAss (with "-p")
- quite a few things in the distribution
Bugs fixed in v3.2i:
- methods with an exception handler could cause problems in the register
allocator.
- various bugs in EDBG (scroller etc.)
- double declaration of object or label identifiers could go unnoticed
- EC would have problems flushing modules from different directories (now
it only looks for the file-part and flushes it).
- problems could occur with method being called before their OBJECT
declarations.
- and various smaller bugs...
New features in v3.2e:
- better EasyGUI (plugins)
- better EDBG (Arexx port and config saving)
Bugs fixed in v3.2e:
- procident.member gave weird errors
- preprocessor failed on 68000 in particular situations
- preprocessor didn't handle international characters
- '\\0' in strings would cut them off
- EC would Lock() with an illegal mode from other dirs
- $FFFF as default arg became $FFFF0000
- macro errors could cause garbage to be printed on screen
- /* */ in comments failed
- inheriting from yourself wasn't detected
- didn't accept 0(A3,a) or 0(A3,a.L) or lab(PC,a) etc. where a:REG
- AND.L D0,a where a:REG changed src-dest
New features in v3.2a:
- EC can now output .library files!!! (see @{" 17M " link CH_17M })
- new EDBG with a massive amount of new features! (see @{" 17K " link CH_17K })
- enhanced EasyGUI (have a look)
- NEW and END now work on subobjects as well (see @{" 4K " link CH_4K }).
- NILCHECK/S, will insert code to check all "." and "[]" dereferences for
NIL pointers (see @{" 0C " link CH_0C })
- v40 emodules, with types!
- new modules (Src/Class/ScrollWin/ and others)
- new docs / beginners guide
- extended distribution with Jason's RKRM examples etc.
Bugs fixed in v3.2a:
- IGNORECACHE was broken
- silly bug in /2
- asm -xx(Ax,Dx.w) addressing mode assembled wrong
- a-- where a:PTR TO o where SIZEOF o>8 translated into ADDI ipv SUBI
- globals in modules used in inline asm were not exported / offsets
adjusted
- exp*globvar in module not compiled ok
- macros of other module would be saved again in current module
- and quite a few smaller ones...
a version history:
vers date k comment