forked from davidbkemp/redline-smalltalk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCHANGES
701 lines (412 loc) · 21.4 KB
/
CHANGES
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
<<<<<<< HEAD
=======
17/09/2011 Changes
**FIXED** Pathname issues on Windows, Mac and Linux.
>>>>>>> branch 'master' of https://github.com/jamesladd/redline-smalltalk.git
14/09/2011 Changes
**FIXED** bug where an instance method called class is not parsed correctly.
This was fixed with a 'hack' where the preprocessor outputs a class method as
'Object _class_ >>' which works, but needs to be changed later.
Removing instanceVariableNames etc from Class.st and adding to the Bootstrapper
so that they're accessible from within other class definitions.
Adding other parts of the "testing" protocol to Object
Adding superClass and inheritsFrom to Behavior. inheritsFrom is commented out
until we add variable support.
Fixing a pathname issue causing runtime issues in Windows.
Added generation of Character instances.
13/09/2011 Changes
Added support for traditional subclass keywords, plus new shorthand.
Added outstanding super sends.
Added trace output as a guide for TODO items.
12/09/2011 Changes
Added support for cascading message expressions. Tested with unary messages.
Added warning about a possible stack balance problem with cascaded messages. Posted to
ASM news group to find out if I need to add more code to balance stack.
Added long subclass: keyword support - see examples/st.redline.Subclass.
Adding creation of an Array via Smalltalk - creates a ProtoObject array.
Implementing a few indexable primitives - size, at:, at:with:
11/09/2011 Changes
Changed creation of Integer instances to use single method. Need to make rest of instance
creation use this approach.
Add back some output when methods are applied - helps with debugging while we wait for
Transcript support. (Coming later today).
Added method argument load support, so you can reference method arguments. Working on
store side, which is an error. ie: Can't methodArgument := value.
Replaced long license comment with simpler one liner.
Multiple argument method calls.
Basic Magnitude protocol.
Parts of the Boolean protocols.
Switching Integer to be backed by a BigDecimal.
True and False classes.
10/09/2011 Changes
Adding PowerMock and EasyMock for unit testing
Adding first unit test of an Integer primitive
Removed unnecessary Bootstrapping of Number classes
Fixing equality checks on Integers
Adding Cobertura plugin to generate code coverage reports on demand
Adding 100% unit test coverage of Integer primitives
10/09/2011 Changes
Start of Number support. Adding object creation for basic Numbers.
All LiteralNumbers parse as Integers now.
10/09/2011 Changes
Removed trailing separator from source paths.
Added Transcript class with ability to output to Console.
08/09/2011 Changes
Changed use of "/" in some places to use File.separator, so things work on windows.
(Suggestion from Stefan Krecher)
Modified stic usage message to use File.separator.
More modifications around replacing File paths correctly under windows and linux.
07/09/2011 Changes
Adjusted snapshot version number.
06/09/2011 Changes
Pulled contribution. Now supporting Maven.
Modified maven pom to copy across 'extras' into target/redline-deploy/extras.
Changed runtime path to match where maven puts the runtime soruces.
Added reserved word Smalltalk and associated SmalltalkImage class.
03/09/2011 Changes
Added paths spec for Redline runtime so you can choose which runtime you want.
02/09/2011 Changes
Added command line argument parsing back into Redline.
29/08/2011 Changes
Implementing primitives.
Fixed bug preprocessing binary message patterns.
27/08/2011 Changes
Continuing implementation of Stout and associated methods needed in Redline Runtime.
Adding handler for more arguments to methods. There is a limit.
26/08/2011 Changes
Implemented import. Moving onto further Stout functionality.
24/08/2011 Changes
Adding implementation of import: method.
21/08/2011 Changes
Adding ability to emit JVM bytecode from within a Smalltalk method.
Adding wrap and dispatch to Stout web framework.
Adding start of import from a namespace
15/08/2011 Changes
Cleaned up Exception handling so we don't nest causal exceptions that don't need nesting.
(smaller stack traces)
14/08/2011 Changes
Added example script calling a call. Shows up a need to handle exceptions a little better.
ie: when the script throws an exception, it looks like the class isnt found which isnt true.
13/08/2011 Changes
Removed a lot of trace - will put back later.
Continuing with implementing Runtime.
12/08/2011 Changes
Empty methods now answer receiver.
Changed message send when a class is invoked by stic to "main:"
11/08/2011 Changes
Added start of method analyser to handle setup of method bytecode writing.
Method compilation and dispatch to dynamically created methods working.
Primitives <primitive: xx> being called.
Implemented basicNew.
10/08/2011 Changes
Added trampoline of registering a method to be compiled and a message send to have method
compiled.
09/08/2011 Changes
Added support for requesting the compiling of methods.
Added MethodBytecodeWriter to handle writing method classes.
08/08/2011 Changes
Added generator support for reserved words nil, false, true, self and super.
07/08/2011 Changes
Finished bootstrap resolution. Full Runtime required to run is now compiled and loaded
before a 'user' class is compiled and run.
06/08/2011 Changes
Turning bootstrapped classes into full classes at load, rather than on first message not found.
This loading increased startup time, and makes run more predictable.
04/08/2011 Changes
Added start of stout - the Redline simple web tool - started by Pat Maddox and myself at
ESUG Las Vegas 2011.
Fixed silly bug in hierarchy.
03/08/2011 Changes
Added placeholder/start of Smalltalk Runtime.
Added bootstrap hieararchy for String and Symbol.
Added bootstrap hierarchy for Boolean, True, False and UndefinedObject including the
creation of singleton instances for True, False and Nil (UndefinedObject).
02/08/2011 Changes
Added namespace (package) support. Can lookup classes from other packages - Yay.
Bootstrapped more of the hierarchy needed to start a Smalltalk. Still have a few more
classes as part of Symbol hierarchy.
Changed primitive subclass methods to check if new subclass is one of the bootstrapped
classes and to use that, rather than create a new class.
01/08/2011 Changes
Added bootstrapped class for String. Need to add rest of hierarchy for bootstrapped
classes.
Used Pharo naming of MetaClass. Was Metaclass.
Added start of Smalltak Runtime source.
Added scanning of st/redline package for objects.
*NOTE* We should change from using '.' as a package separator and use '/' to cut down
processing - since java wants '/' at bytecode level.
31/07/2011 Changes
Added primitive for creating a subclass and used this primitive from builder class
which is generated and executed for each .st file. This special subclass extends
ProtoObject but is never registered.
30/07/2011 Changes
Modified package registry to use stack. You have a default package name for all
classes defined in a file. You can override but don't - people wont be expecting
it.
Modified proprocessor grammer to support short hand import statements. These expand to longer hand
messages.
29/07/2011 Changes
Added creation and registration of subclasses using new/simpler approach.
Working on namespace support.
Adding special thread local registry to handle registering a package against the
objects created in a .st file.
28/07/2011 Changes
Added method dispatch and with simplified bootstrapped hierarchy.
Moved class and instance data object out of ProtoObject - reduce lines in file.
Added bootstrap methods to get runtime working.
27/07/2011 Changes
Added boostrapper and initial bootstrap class Symbol.
Added creation of Symbol with primitive java value.
26/07/2011 Changes
Added simpler handling of common bytecodes.
Added primitive for creating Symbols.
25/07/2011 Changes
Restructured the implementation hierarchy, not Java object st.redline.ProtoObject
is base of all things.
ClassBytecodeWriter made simpler.
Fixed bug with resolving a class - if the loading of a class doesn't register itself
in the class hierarchy then all hell breaks loose (NullPointerException).
23/07/2011 Changes
Adding base support in Object to be an object. Working towards class parts.
22/07/2011 Changes
Modified <init> method to call applyTo() on itself (instance of java dynamic class) so
calls 'self' have a proper receiver. In preparation for namespaces/packages.
ie: so in a statement like "self import: 'package'", self refers to a proper object.
Using Object cache in resolving class Objects.
Added primitive to register an object in classes cache.
21/07/2011 Changes
Moves primitives inline - might make Object class really big but stack traces are shorter.
Intoduced Redline runtime exception to wrap non-runtime exceptions.
Started adding runtime support in Object
Added root of all objects ProtoObject to fill gap between Smalltalk Object and Java Object.
20/07/2011 Changes
Added first of new primitives - primitiveVariableAt - which will look for the referenced
variable and then when not found will call primitiveResolveObject - which may load a new
class from source.
19/07/2011 Changes
Added ClassBytecodeWriter - used to be a single generator but cleaner if I separate.
Class being written and executed without problem.
Removed source paths from sources found in source path.
Changing Object resolution support - moved into primitive - will support name spaces this way.
17/07/2011 Changes
Added a preprocessor to process the method definitions starting with "+" and "-".
It is expected this preprocessor will be extended over time to turn many things into
message sends the backend compiler will handle.
03/07/2011 Changes
Added runtime probe of instance, class, class instance and pool variables.
02/07/2011 Changes
Clean up how output is done - using print writers defined in environment.
Added default 'src/main/smalltalk' as path for sources.
Thinking about adding 'src/test/smalltalk'
30/06/2011 Changes
Replaced the command line processing so you can turn verbose on to get more information about
what Redline is doing. Removed console output - will replace with log output.
25/06/2011 Changes
Refactored grammer to remove backtracing - no backtracking at all making grammar very fast.
Changed compilation model for methods to trigger a send to a class to compile the method
from source - more smalltalk like - using message sends.
Introduced a preprocessor to enable parsing of +/- decorators on method to define a class + or
instance - method. Preprocessor turns these into messages to compile methods with source.
This version of the Compiler is much neater, simpler, faster and dynamic.
26/03/2011 Changes
Refactoring grammar to not have backtrace. This is a work in progress and the grammar may not work
until it is complete!
19/03/2011 Changes
Adding grammar fragments to support full/edge case Smalltalk-80 grammar.
15/03/2011 Changes
Parsing sequences within a block.
Added variations on keyword messages where they are preceeded by a binary or unary message send.
13/03/2011 Changes
Added parsing of primary blocks, as start of block support.
Added start of generating block class.
04/03/2011 Changes
Added parsing of cascaded messages and generation of cascaded message sends.
Fixed bug with which object is kept for subsequent message sends in cascade.
03/03/2011 Changes
Added output of string for ASM mnemonic to provide more meaningful trace of bytecodes being generated.
25/02/2011 Changes
Added handling of Assignment expressions.
Added handling of expressions made up of only a Primary.
24/02/2011 Changes
Adding index to local variables, so they can be referenced in load or store.
Added load and store of temporary and method argument variables.
Added registry of temporaries and variables. Used for lookup when a variable is referenced.
23/02/2011 Changes
Parsing temporaries in methods and scripts.
Assigning local variable slot index to each temporary.
18/02/2011 Changes
Generating code for call of primitives. ie: <primitive: x>. Not complete - need to create a method
for each primitive.
17/02/2011 Changes
Parsing pragmas ie: <primitive:>. Need to add generation of primitive system calls.
14/02/2011 Changes
Parsing Arrays "{ statements }", and generating code.
Parsing (expression)'s, and generating code for them.
13/02/2011 Changes
Looking into array {statements} support.
12/02/2011 Changes
Implemented smalltalk instance resolution enhancement suggested by Jose Antonio Illescas del Olmo.
(We now use a thread local to cache instance, rather than lookup current thread.)
Backed out enhancement, however it did help reveal a logic error. We need to use current instance
(this) class classloader to get Smalltalk instance.
Refactored test to make it easier to change the way Smalltalk instance is fetched.
Now we fetch the smalltalk instance by looking at the receiver class' classloader.
11/01/2011 Changes
Added generation of array creation and add of array elements for Literal arrays.
+ tests around this.
Added grammar for numbers.
Added generation of Number instances from primitive numbers.
Added Smalltalk Runtime class library placeholders.
10/01/2011 Changes
Added grammar rules to parse nested literals.
Added Analyser rules for nested literal arrays.
09/01/2011 Changes
Parsing LiteralArrays and generating code for them.
04/01/2011 Changes
Parsing String Symbols.
Parsing Literal arrays. Still need to handled nested literal arrays.
03/01/2011 Changes
Parsing literals for True, False and Nil and resolving them to instances of the associated class.
Added a few placeholder Smalltalk Runtime sources.
02/01/2011 Changes
Ensured turning bootstrapped class into real class resolved the superclass chain, not just
current class. Including metaclass chain.
Added method comment chunk to TestMethod to ensure !! chunks were processed correctly.
Added parsing of Characters and conversion to Character instances.
Added paring of additional # symbols.
31/01/2011 Changes
Binding method into dictionary of owning object.
30/01/2011 Changes
Adding call to bind method into dictionary of owning object.
29/01/2011 Changes
Checked balancing of stack for <init> methods and normal methods.
Added additional 'applyToWith' signatures. We support 10 arguments.
Added additional tests to generator.
28/01/2011 Changes
Adding tests to Analyser to drive out generation of method classes.
Added concept of current "Context" to generator to support coming method generation.
Modifed generator to use contexts and push and pop them.
Methods are being generated. Now to add code to instantiate and put into an Objects
method dictionary.
27/01/2011 Changes
Implemented parsing of 'chunk' file format fragments.
Add node creation and analysis for chunks, including method patterns.
26/01/2011 Changes
Lookup existing class when making subclass (dont assume it is a new class).
Modified message send handling to reload classes that are bootstrapped from source
when they dont understand a message. After reload message is resent.
25/01/2011 Changes
Cleaned up Bootstrapper class and added more to the hierarchy of classes that gets
bootstrapped. These placeholder skeleton classes will be reloaded from source at a later
point.
I think the hierarchy is correct and I need to double check.
Reimplemented primitive subclassing to use cleaned up Bootstrapper methods.
Removed duplicate registration of new class during subclass.
Added primitive names to classes - java toString() returns this name. Helps debugging.
21/01/2011 Changes
Added bootstrap superclass to bootstrapped String and Symbol so that method lookup
doesnt throw NPE.
Renamed basicAt/basicAtPut to primitiveAt and primitiveAtPut to remove possible confusion with
Smalltalk runtime method of same name.
20/01/2011 Changes
Added generation of Binary Message Send.
19/01/2011 Changes
Added logging around Smalltalk class so verbose option shows what is being done by Redline.
Added parsing of BinaryMessageSends. Still need to support generating code from them.
18/01/2011 Changes
Added logging using a Java Logging Framework. Logging has to work for simple apps as well as
those that run within a J2EE Web Container.
Using SL4J for logging to users can choose their own framework.
Added bootstrap of UndefinedObject and 'nil'.
16/01/2011 Changes
Loading classes from source to registered instances!
Added Trace option to command line. Turn trace on for *lots* of output.
15/01/2011 Changes
Added bootstrap of Symbol and String class so we can create Classes.
Need to implement bootstrapped Subclass creation method, and mechanism for turning
bootstrapped classes into full classes from their source.
14/01/2011 Changes
Refactored Bootstrapper to correctly bootstrap ProtoObject hierarchy according to Smalltalk rules.
Renamed a few methods to make their meaning more clear.
Added RMethod support for applyToWith methods for up to 10 arguments. Redline doesnt support more than
10 keyword arguments right now. It can if required.
Added RObject send method support for up to 10 arguments.
Modified src/test/smalltalk/TestKeyword.st to be an example Class creation message.
Added creation of String and Symbol instances from primitive value string.
Added bootstrap method for 'subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:'
13/01/2011 Changes
Refactored ProtoObject to have more dynamic data depending on being used for a class or instance.
Refactored method dispatch to use new structure of ProtoObject.
*Note* Bootstrapper needs redoing so execution right now will result in NullPointerException. Will
fix a.s.a.p
12/01/2011 Changes
Added grammar to recognise Symbols and Strings.
Added generator methods to generate calls to Smalltalk to convert the primitive String and Symbol into
Objects.
Added send of keyword messages with simple String or Symbol arguments.
11/01/2011 Changes
Added to grammar to allow parsing of each kind of statement. See 'statements:' in grammar file.
Answering the result of an expression is now implemented. If an expreesion result is not answered
the value is popped off the stack to keep it balanced.
Added Bootstrapper class which initializes ProtoObject instance and registers it in Smalltalk dictionary.
Changed Test.st to call ProtoObject to show method resolving. *Currently* will result in Runtime exception
with a TODO. Will be adding to ProtoObject method dictionary shortly.
Added grammar and nodes to support parsing of keyword messages. *Currently* Keyword message arguments can
only be primary values.
10/01/2011 Changes
Added ProtoMethod as base for all methods.
Made fixes suggested by David Kemp for Windows platform.
Added Tests for ProtoObject to drive out method lookup and dispatch.
Added instance variables holder in ProtoObject. Offset 0 is always the
class object.
Added src/main/smalltalk/Redline folder, which will contain the Smalltalk
source for the runtime.
Default namespace for Smalltalk Runtime Objects is Redline.
Tracking line number for Parse tokens and adding to generated bytecode. Now any
exception shows corresponding line in Smalltalk source file
Added grammar to allow for multiple expressions seperated by '.'
Added pop of stack when expression result is not answered.
07/01/2011 Changes
Add 'sourcepath' command line option for specifying which folder to look in
for source files. The leading sourcepath names are removed from source filenames.
eg: sourcepath src/test and a source file of src/test/smalltalk/Object.st
will result in a source filename of smalltalk/Object.st and a class Object in
the package smalltalk.
06/01/2011 Changes
Cleaned up Smalltalk class and readying it for resolving Classes.
Send being called but dispatch wont be implemented until Class resolution in place.
Thinking through Class resolution process.
04/01/2011 Changes
Changed Smalltalk Class to be a Class Loader, and set itself as context class loader,
so code can use Thread.currentThread().getContextClassLoader() to get hold of the active
Smalltalk instance.
Added Test around generating message sends.
Added ObjectWeb ASM library for generating java bytecodes.
Added GeneratorTest to drive out Generator functionality.
Added Tracing versions of the ObjectWeb classes so I can see what is happening.
Removed verifyNoMoreInteractions from tests until I work out how to properly ensure no
unsolicited calls are made to mocks.
01/01/2011 Changes
Adding more tests around analyser. Fleshing out interaction with generator.
28/10/2010 Changes
Added SourceFile to add methods to File that we need.
Added Tests around Analysis and interaction with generator.
24/10/2010 Changes
Added AnalyserTest to drive out interaction with Nodes and Generator.
Added Analyser class.
Added Generator class.
23/12/2010 Changes
Added parsing of source input into Node tree.
Added visiting of Node tree.
Fixed an error in capturing multiple unary messages in grammar.
Slapped self on wrist for not updating this file more frequently.
21/12/2010 Changes
Added delegation to Interpreter to interpret source code. Added Tests around delegation.
20/12/2010 Changes
Added stic.bat supplied by Jeff Heon. Adapted from Kasim's ClojureW Project (https://bitbucket.org/kasim/clojurew)
Refactored File related functionality out into FileReader class. Need tests around FileReader.
16/12/2010 Changes
Refactored SticTest to use PrintWriters rather than PrintStreams, since PrintWriters
will be used later. Makes for less code = good. Refactoring suggested by David Kemp.
Added Smalltalk and Environment Tests and Classes.
Added Mockito mocking framework to help with Testing.