Commit Graph

1639 Commits

Author SHA1 Message Date
Torsten Ruger
da5823a1a0 move parfait up one, as per its module structure 2017-01-18 20:09:43 +02:00
Torsten Ruger
f0c0128b38 improve to_code a bit
variable names mainly, some description
2017-01-18 12:24:15 +02:00
Torsten Ruger
a39fc76a12 create vm file to require vm parts 2017-01-18 08:45:42 +02:00
Torsten Ruger
7abd777d05 rename melon to rubyx
melon was still from the salama days and rubyx describes it much better
2017-01-18 00:05:36 +02:00
Torsten Ruger
54b8a9f6de minor 2017-01-17 21:25:18 +02:00
Torsten Ruger
2a57a59c8e do not create already existing classes
wrong logic, also messes with parfait
2017-01-17 21:25:02 +02:00
Torsten Ruger
cd211f970f make method creation class methods in MethodCompiler
and pass the wish to use main explicitly, which is really a test
feature
2017-01-17 21:23:58 +02:00
Torsten Ruger
7223ca9a1c clean and refactor 2017-01-16 17:44:34 +02:00
Torsten Ruger
4ba182a822 rename compilers to passses 2017-01-16 17:24:32 +02:00
Torsten Ruger
5f7ea08a43 Splitting NameExpression into three, Known,Local,Argument
The decision which to use can be made higher up, in ruby, and so it
should.
2017-01-16 09:33:49 +02:00
Torsten Ruger
96f19d18c0 starting on ruby send 2017-01-15 20:30:47 +02:00
Torsten Ruger
cf0a123866 boot_function test 2017-01-15 20:04:52 +02:00
Torsten Ruger
fc96f1d2da checking classes don't get created twice 2017-01-15 16:59:29 +02:00
Torsten Ruger
83f2459a8a implement ivar assignment 2017-01-15 14:44:23 +02:00
Torsten Ruger
680fc7ecce minor fixes 2017-01-15 14:44:11 +02:00
Torsten Ruger
85eec2f3cb adding instance variables to class 2017-01-15 14:21:57 +02:00
Torsten Ruger
f9824079d6 splitting assignment into three, for args, locals and ivars
The decision on which is moving up to the ruby  compiler, so it can at
the same time emit the correct assignment form.
Just another example of moving away from a language and to an
intermediate form (that has no language equivalent)
2017-01-15 13:01:28 +02:00
Torsten Ruger
a0cf5bffc0 small rename to align has_locals and has_arguments
for semantic and code unification
2017-01-15 12:59:03 +02:00
Torsten Ruger
4095bb397f starting to create vm_method from ruby_method
issues galore though
2017-01-15 12:10:37 +02:00
Torsten Ruger
9eeb9f65f3 add normalizing and method compilation phases (empty) 2017-01-14 20:30:19 +02:00
Torsten Ruger
2e62c5bbb6 create compilers directory, found and renamed salama.rb 2017-01-14 20:05:58 +02:00
Torsten Ruger
01fe3b4b04 small rename 2017-01-14 19:52:16 +02:00
Torsten Ruger
bd78a2d555 renames Typed to Vm 2017-01-14 19:28:44 +02:00
Torsten Ruger
75c7ca950e bit more method collector/creation testing 2017-01-13 22:16:06 +02:00
Torsten Ruger
3f6c1bc3a3 manage to create ruby methods 2017-01-12 20:38:04 +02:00
Torsten Ruger
9d36d72ee5 load arg type directly into the object
Was going through the method, but the type is just as constant and
saves 2 instructions 4 every call
2017-01-04 21:34:51 +02:00
Torsten Ruger
78f7420ef7 add locals type into the call preable
calling already sets the argument type
so now we set the locals type too- symmetry
(lots of tests affected)
2017-01-04 21:33:43 +02:00
Torsten Ruger
f2c4e542ac rename to to array function to to_arr 2017-01-04 21:32:09 +02:00
Torsten Ruger
0383532cd4 the number keeps changing, but why 2017-01-03 22:56:00 +02:00
Torsten Ruger
1647b746ea starting to rename to rubyx 2017-01-02 00:29:20 +02:00
Torsten Ruger
0397d4064d fix all positioned uses as helper (not included anymore) 2017-01-01 21:52:55 +02:00
Torsten Ruger
cd474f66f6 stop including positioned 2017-01-01 21:52:35 +02:00
Torsten Ruger
fafcd15ce8 make positioned a helper module 2017-01-01 21:52:00 +02:00
Torsten Ruger
06cfbdf066 minor 2017-01-01 21:50:54 +02:00
Torsten Ruger
86dafccb04 stop including padding
use it as a helper module
2016-12-31 20:08:33 +02:00
Torsten Ruger
dccd097fef remove collecting from the machine
use as stand alone module
2016-12-31 19:54:18 +02:00
Torsten Ruger
671512b96c avoid fixnum overflow for hashes 2016-12-31 19:53:43 +02:00
Torsten Ruger
113b349af5 unlinking the objects collection from the machine
passing it around instead
2016-12-31 18:46:17 +02:00
Torsten Ruger
b094bcc64f rename unit and sint to human readable forms 2016-12-31 18:45:22 +02:00
Torsten Ruger
5f3744d6af remove unused attributes functions 2016-12-31 15:20:02 +02:00
Torsten Ruger
7bb1c361a5 small word test 2016-12-31 15:17:45 +02:00
Torsten Ruger
47c0f62212 error message 2016-12-31 15:10:07 +02:00
Torsten Ruger
a2ece04b6d a little more minimal elf tests 2016-12-31 15:08:32 +02:00
Torsten Ruger
fb414cecd6 use helper 2016-12-31 14:54:53 +02:00
Torsten Ruger
838aba470d move fix_types in order of usage 2016-12-31 14:54:34 +02:00
Torsten Ruger
853a531578 Move add_object to collector
more changes to come
2016-12-31 14:54:15 +02:00
Torsten Ruger
b9073d0c88 redid the type hashing
account for the class the type is for
by adding it to the hash code, so even the ivars are identical the
types are not
2016-12-31 14:51:06 +02:00
Torsten Ruger
0fa7f54bcc found and fixed hashing bug 2016-12-31 14:04:04 +02:00
Torsten Ruger
d6c503ecf4 inlined indexed into list
which was the only one using it.
A whole lot simpler, considering it will have to be bootstrapped someday
2016-12-30 21:00:18 +02:00
Torsten Ruger
7f06e00ccd making types private in space
turned out to be unnecessary, but still better
2016-12-30 20:47:28 +02:00
Torsten Ruger
ef66a87527 fixed silly dictionary bug
also finally duplicating keys and values and not handing them out
2016-12-30 20:46:18 +02:00
Torsten Ruger
a7935db107 cleaner way to generate argument types
possibly more correct
2016-12-30 19:17:59 +02:00
Torsten Ruger
83b6628f1a whitespace and code style 2016-12-30 19:17:15 +02:00
Torsten Ruger
db798d1a4a no default arg on init
also making sure the type is in the hash
but also that the order of type does not matter
2016-12-30 18:41:36 +02:00
Torsten Ruger
a82c9e8fb1 minor whitespace and renaming 2016-12-30 18:39:49 +02:00
Torsten Ruger
f0350601a7 Move the space instance to the parfait module
A better fit, maybe even a pattern for singletons
2016-12-30 14:10:49 +02:00
Torsten Ruger
a00f6be3ba remove the space instance from register machine
bad design, probably from the booting
2016-12-30 14:04:59 +02:00
Torsten Ruger
ef872edd7a rename instance_methods to just methods 2016-12-30 13:33:07 +02:00
Torsten Ruger
631038dfbd add another test (still failing) 2016-12-30 13:15:08 +02:00
Torsten Ruger
8aae8f7425 disabling failing test for now
have to add more test and code climate will show where
2016-12-29 21:24:11 +02:00
Torsten Ruger
4b5c590afe rework the boot process
Using a BootSpace mock to use more of the ruby new as before
Still some allocating and mucking about, but less
2016-12-29 18:53:24 +02:00
Torsten Ruger
e69d9a492e mostly moving to ruby instance variables 2016-12-29 18:51:24 +02:00
Torsten Ruger
25f44949e4 removing the fake memory form object
just in word and list now
2016-12-29 18:49:03 +02:00
Torsten Ruger
6214040888 changing to ruby instance variables
from the fake memory
2016-12-29 18:47:45 +02:00
Torsten Ruger
b5f04ec718 mostly renames from the type change
also making setters as explicit set_xx methods
2016-12-29 18:45:32 +02:00
Torsten Ruger
f4b3c645e5 rework type with separate arrays for names and types
Means no more indexed
also using ruby instances
small rename for names
2016-12-29 18:42:38 +02:00
Torsten Ruger
4c3007e6c0 removing meta class (for now) 2016-12-29 18:39:59 +02:00
Torsten Ruger
80237e5033 rename position accessor
for future
2016-12-28 21:40:06 +02:00
Torsten Ruger
c60949fe24 small refactor on arg loading 2016-12-28 21:10:14 +02:00
Torsten Ruger
e551732f18 tighter integration with factory methods for adding code
define methods to collapse the code Register.
in add_code Register.factory_method
most instructions done, except op and branch that are rare
2016-12-28 20:37:54 +02:00
Torsten Ruger
af31774074 implement assignment type check 2016-12-28 19:20:16 +02:00
Torsten Ruger
9cf56b3aa6 use factory functions consistently to create instructions 2016-12-28 19:01:58 +02:00
Torsten Ruger
4cf732d395 use transfer factory 2016-12-28 18:37:15 +02:00
Torsten Ruger
57c038f13b use load_constant factory method 2016-12-28 18:31:29 +02:00
Torsten Ruger
7d29a85187 remove legacy :int type 2016-12-28 18:25:14 +02:00
Torsten Ruger
a3585870b9 remove unused code 2016-12-28 18:17:52 +02:00
Torsten Ruger
4412eda105 small refactor and rename 2016-12-28 18:16:39 +02:00
Torsten Ruger
184f129107 dead comment removal 2016-12-28 18:10:33 +02:00
Torsten Ruger
25ae6e3d26 remove next_list from NamedList
Was legacy from the days of (linked) Frames
Now only messages are linked
2016-12-28 18:08:07 +02:00
Torsten Ruger
8867b13240 yep, opal != OPAL
engine has to be in small letters it seems
OPAL came from the original commit in 2013, but alas
2016-12-28 14:35:07 +02:00
Torsten Ruger
9226de4502 testing to_s 2016-12-28 14:11:05 +02:00
Torsten Ruger
266764be06 testing to_s on Code 2016-12-28 13:59:02 +02:00
Torsten Ruger
a8f3d5a634 had to fix the string hash for opal 2016-12-28 13:53:57 +02:00
Torsten Ruger
4940bc41a3 keep positions globally, not in the object
hopefully cleaner switch after bootstrapping
2016-12-28 12:51:18 +02:00
Torsten Ruger
903fc3e4cf much ripples from changing the calling convention
See previous commit
Now args and locals are arrays in the Message
2016-12-27 20:39:39 +02:00
Torsten Ruger
f1cfd3c379 change calling convention
Message carries arrays for arguments and locals
This means an extra load for any access
Also fix silly bug: using the wrong method (the one we’re in, not the
one we’re calling)
2016-12-27 20:37:53 +02:00
Torsten Ruger
3c3dedadd1 remove indexed_length from NamedList 2016-12-27 20:34:47 +02:00
Torsten Ruger
aaa94f0743 small fixes 2016-12-27 20:34:11 +02:00
Torsten Ruger
a5946cb644 same renames for bytes (set/get_byte) 2016-12-25 18:11:58 +02:00
Torsten Ruger
f648bf7bd5 rename also get_slot, to slot_to_reg
makes source and target clear
2016-12-25 18:05:39 +02:00
Torsten Ruger
35adf9a5e6 rename set_slot
set_slot was clear about the target, but not the source.
Better with reg_to_slot (and soon it’s inverse slot_to_reg)
2016-12-25 18:02:39 +02:00
Torsten Ruger
1b8d6149dd adding to_s to code for debugging 2016-12-23 21:31:31 +02:00
Torsten Ruger
6c9bd7e476 remove unused code
also just came through opal
2016-12-22 21:16:56 +02:00
Torsten Ruger
3b888b203d crude rework of the hashing to work in opal 2016-12-22 21:16:36 +02:00
Torsten Ruger
2adec3226c opal gods require explicit requires 2016-12-22 21:15:20 +02:00
Torsten Ruger
c3c52d36b8 seperate args from message (just like frame) 2016-12-21 22:35:36 +02:00
Torsten Ruger
ed12108425 rename locals from type to role in message 2016-12-21 19:01:42 +02:00
Torsten Ruger
0e99ff33ae use frame type rather than the indexed construct 2016-12-21 18:59:07 +02:00
Torsten Ruger
93ba5543b3 more renaming of frame 2016-12-21 18:51:22 +02:00
Torsten Ruger
0040baae28 rename frame to named_list to be shared soon 2016-12-21 18:45:18 +02:00
Torsten Ruger
b242f9e223 bringing the locals into the ruby method 2016-12-21 11:30:35 +02:00
Torsten Ruger
9ec9ccb9b6 start on collector for local variables 2016-12-21 11:20:36 +02:00
Torsten Ruger
8b05951883 extracting processor comonality before adding a third 2016-12-21 10:51:33 +02:00
Torsten Ruger
8507bef08b extracting methods for the compiler to handle 2016-12-20 20:02:52 +02:00
Torsten Ruger
a70d20d63e add a ruby method
including source ast and args, later locals
2016-12-20 20:02:20 +02:00
Torsten Ruger
9e89306733 rename to get guard matches 2016-12-20 20:01:28 +02:00
Torsten Ruger
aa6685a0cb test collector for ivar assignment 2016-12-20 15:46:23 +02:00
Torsten Ruger
aa5f48e3c6 remove instance_names from class again
and use types names instead. For now assuming Object class
2016-12-19 14:20:47 +02:00
Torsten Ruger
af9fed863f small rename 2016-12-19 14:16:10 +02:00
Torsten Ruger
107e3e6d58 pick up instance variables from the class
Crude first set to creating types
2016-12-18 20:05:11 +02:00
Torsten Ruger
e77298f4b1 Give the class a list of ivars
Which is redundant with the type’s names, so let’s see
2016-12-18 20:04:40 +02:00
Torsten Ruger
af9987659f create and test derived classes too 2016-12-18 17:17:58 +02:00
Torsten Ruger
170d453a36 start with melon and tests
First step, create a basic class
2016-12-18 17:02:55 +02:00
Torsten Ruger
756cb52a98 renames compiler to method_compiler 2016-12-18 14:15:19 +02:00
Torsten Ruger
272f99daf7 the cop struck again 2016-12-17 20:09:17 +02:00
Torsten Ruger
48af14f5c9 removes class statements
classes have to be created in melon, a level up
2016-12-17 18:31:26 +02:00
Torsten Ruger
ffb69a2c55 remove function statements
functions need to be defined a level up
2016-12-17 18:28:42 +02:00
Torsten Ruger
8845b91529 remove FieldDef
and on_field_def , :field_def and fixed all related tests
local variables will have to be determined outside the typed layer
2016-12-17 13:12:49 +02:00
Torsten Ruger
c12f11fba5 try both ree and cop 2016-12-17 09:44:21 +02:00
Torsten Ruger
782627ae79 small rename
to avoid confusion with type.create_method
2016-12-17 00:21:12 +02:00
Torsten Ruger
5c34835ae3 type converts method args if needed 2016-12-17 00:17:54 +02:00
Torsten Ruger
681b53cc4c make compiler default to compiling Space.main 2016-12-17 00:17:35 +02:00
Torsten Ruger
f8cefcde3c retiring ClassField and class_field from typed layer
Creating classes is the responsibility of melon
2016-12-16 19:05:49 +02:00
Torsten Ruger
dd6dede6ef refactor object file somewhat 2016-12-16 16:18:14 +02:00
Torsten Ruger
e10fc3eedd some reek assited coding on assembler 2016-12-16 15:41:26 +02:00
Torsten Ruger
5cd05f6135 refactor memory instruction (needs better tests) 2016-12-16 15:40:52 +02:00
Torsten Ruger
190a0ffa47 adds set_byte interpreter test 2016-12-16 01:43:54 +02:00
Torsten Ruger
b2579a2b82 dead code removal 2016-12-16 01:31:38 +02:00
Torsten Ruger
6f9955a726 more auto guard rules
and related renaming of files
2016-12-16 01:14:09 +02:00
Torsten Ruger
516bbd10b7 little fat of meta class
meta is firmly in the ruby world, not implemented in type world
2016-12-16 00:57:10 +02:00
Torsten Ruger
f7e01ff05e remove the value class
more of an idea, had no impact on implementation
2016-12-16 00:56:25 +02:00
Torsten Ruger
fd519314cb strip down compare instruction
not really used, using conditional branches instead.
(in arm any instruction can execute conditionally)
2016-12-16 00:41:37 +02:00
Torsten Ruger
ed0900df7f extracting to_s from getter and setter 2016-12-16 00:30:26 +02:00
Torsten Ruger
bc22c40101 Get Byte interpreter test 2016-12-15 22:15:58 +02:00
Torsten Ruger
886220d388 remove unused variable class 2016-12-15 19:43:53 +02:00
Torsten Ruger
dc56274940 refactor also building word
obviously created by copy/paste, more refactoring possible
2016-12-15 19:31:39 +02:00
Torsten Ruger
5ea6bfed27 refactor builtin object, some machine too 2016-12-15 19:20:54 +02:00
Torsten Ruger
94c423c2b3 whittling arm_translator 2016-12-15 18:21:08 +02:00
Torsten Ruger
e2c006b5ad minor 2016-12-15 18:08:55 +02:00
Torsten Ruger
884bf23e5f fix elf test 2016-12-15 17:57:45 +02:00
Torsten Ruger
1571c796bb remove unused from type 2016-12-15 14:00:34 +02:00
Torsten Ruger
2b3f9c398e add find method to indexed 2016-12-15 14:00:03 +02:00
Torsten Ruger
b93f207638 some common instruction extration 2016-12-15 12:38:22 +02:00
Torsten Ruger
fdefb8e7a5 more refactoring on compare 2016-12-15 12:38:03 +02:00
Torsten Ruger
ec2b0a563e bunch of method extraction on instructions 2016-12-14 21:53:26 +02:00
Torsten Ruger
55c108a8d7 refactor move_instruction a bit 2016-12-14 21:13:41 +02:00
Torsten Ruger
b3eeb7db21 memory instruction refactor (small) 2016-12-14 21:05:24 +02:00
Torsten Ruger
6eea3f2b2a refactor logic instruction 2016-12-14 20:31:37 +02:00
Torsten Ruger
c1d23a8d48 whitespace round plusses 2016-12-14 19:57:09 +02:00
Torsten Ruger
27e7a362db comment unused code 2016-12-14 19:52:08 +02:00
Torsten Ruger
56bf875f36 refactor call_instruction 2016-12-14 19:07:03 +02:00
Torsten Ruger
bf4ddd16ee remove dead code 2016-12-14 19:06:48 +02:00
Torsten Ruger
456e9b1ec0 folded salama-arm in 2016-12-14 13:43:13 +02:00
Torsten Ruger
9a0e2bcb11 typed methods now for type only 2016-12-14 13:24:42 +02:00
Torsten Ruger
b3a9d8b1bc register and boot consequences of typed method 2016-12-14 13:23:46 +02:00
Torsten Ruger
021fab31db small things 2016-12-14 13:22:47 +02:00
Torsten Ruger
bd875be023 move typed method's home to type
class should in the future have ruby_methods
2016-12-14 13:21:55 +02:00
Torsten Ruger
012b5d683c change method locals to type object too (same as args) 2016-12-13 19:18:17 +02:00
Torsten Ruger
16b3a77350 fixes from the method argument change
Affects
method creation
argument manipulation
compiler / to_code
2016-12-13 18:49:45 +02:00
Torsten Ruger
c346260bde change method arguments to be a type instance
where is was a list of variables (half baked)
variables also having values (not applicable)
2016-12-13 18:47:44 +02:00
Torsten Ruger
1c28926c6b improve type tests 2016-12-13 18:46:03 +02:00
Torsten Ruger
357490ff5f add little bit docs 2016-12-13 11:02:53 +02:00
Torsten Ruger
17023fdeb1 rename method to typed_method 2016-12-12 23:38:55 +02:00
Torsten Ruger
4ff684b6a4 even more refactoring for assembler 2016-12-11 16:48:01 +02:00
Torsten Ruger
fffe814205 more assembler refactor 2016-12-11 16:12:39 +02:00
Torsten Ruger
90a808b1c5 assebler refactor 2016-12-11 14:48:12 +02:00
Torsten Ruger
6bb23eac56 small interpreter refactor 2016-12-11 14:19:24 +02:00
Torsten Ruger
e479b00b29 introduce base class for get_slot and get_byte called getter 2016-12-11 14:12:35 +02:00
Torsten Ruger
ef285a146f add abstract base class for set_byte and set_slot called setter 2016-12-11 14:06:09 +02:00
Torsten Ruger
1dbd8c86e0 remove parslet dependency 2016-12-11 14:05:43 +02:00
Torsten Ruger
f3248462cc remove references to soml 2016-12-11 12:55:03 +02:00
Torsten Ruger
3715eb94ed uncomment unused code for now 2016-12-11 12:18:11 +02:00
Torsten Ruger
b6fdb51ed1 fix statement list compilation 2016-12-11 12:13:42 +02:00
Torsten Ruger
661911de0a comment unused fluff 2016-12-10 23:45:24 +02:00
Torsten Ruger
e82c86f6c1 fix class def tests and code 2016-12-10 22:41:49 +02:00
Torsten Ruger
6d4347c7ba finish assignment tests
and related code fixes
2016-12-10 18:48:18 +02:00
Torsten Ruger
f49b0c7356 fix assignment
tests paying off
2016-12-10 18:08:21 +02:00
Torsten Ruger
87693112d4 small fix 2016-12-10 18:07:38 +02:00
Torsten Ruger
4054b61752 fix more expression tests 2016-12-10 15:18:37 +02:00
Torsten Ruger
de5d87cde7 add basic compiler expression tests (back) 2016-12-10 04:01:47 +02:00
Torsten Ruger
5c2f545f8e tests for ast to code converter 2016-12-10 03:43:44 +02:00
Torsten Ruger
29fb2a50f5 refactor while statement 2016-12-09 14:29:06 +02:00
Torsten Ruger
da4a1af074 modulize return and list 2016-12-09 14:19:22 +02:00
Torsten Ruger
99132a92b6 modulize operator_expression 2016-12-09 14:17:01 +02:00
Torsten Ruger
037fd722df clean up function definition, now function statement 2016-12-09 14:12:41 +02:00
Torsten Ruger
059fb38f08 modulize field_access and field_def 2016-12-09 14:04:06 +02:00
Torsten Ruger
4da13c3867 move ast to tree, remove seperate helper file 2016-12-09 13:56:13 +02:00
Torsten Ruger
bab2fe32df modulize class_field and class_statement 2016-12-09 13:46:26 +02:00
Torsten Ruger
2b008dd3da modulize basic_value 2016-12-09 13:40:10 +02:00
Torsten Ruger
fa14e35a50 refactor if_statement 2016-12-09 13:38:07 +02:00
Torsten Ruger
1e7093c63f remodel assignment a bit 2016-12-09 13:20:48 +02:00
Torsten Ruger
395fd2d701 refoactor call site some 2016-12-09 12:22:37 +02:00
Torsten Ruger
224670e449 refactor name expression for compiler 2016-12-09 12:13:33 +02:00
Torsten Ruger
ca4bdcc528 gets rid of soml-parser completely 2016-12-08 20:13:08 +02:00
Torsten Ruger
e2236cf703 move soml ast here, now called type as the language is going 2016-12-08 19:38:50 +02:00
Torsten Ruger
da553f996f move compiler to typed
starting to get rid of soml, bit by bit
2016-12-08 15:25:20 +02:00
Torsten Ruger
c3a28d2abc small collector change 2016-12-08 15:19:37 +02:00
Torsten Ruger
a31f75fe93 basic immutability for type
add_instance_variable now uses global type list to check
adds hash and to_has functions
use backdoor (send) for booting
2016-12-08 12:50:25 +02:00
Torsten Ruger
137d3c9231 add each_with_index to indexed 2016-12-08 12:48:39 +02:00
Torsten Ruger
ad91c0a4bf add inspect method to dictionary 2016-12-08 12:48:08 +02:00
Torsten Ruger
2741f35380 add a each_pair to indexed and use in types 2016-12-07 23:35:51 +02:00
Torsten Ruger
266a04040b add types hash to space 2016-12-07 23:34:45 +02:00
Torsten Ruger
bcba3ed3b2 move parfait to new module 2016-12-06 16:50:54 +02:00
Torsten Ruger
3ed0c4829a log test 2016-12-06 16:44:04 +02:00
Torsten Ruger
adca8b21c1 move soml tests out, small cleanup 2016-12-06 15:08:29 +02:00
Torsten Ruger
5ac14ddccc update gems and fix tests 2016-12-06 12:08:18 +02:00
Torsten Ruger
4b05b48197 some docs 2016-12-06 11:38:09 +02:00
Torsten Ruger
229f5896c6 update to use new ast
soml was updated to have a typed ast layer to make programatic creation
easier
this brings LOTS of syntax change with it, that does not really mean
anything at all
All tests pass again so back to the same
2016-03-07 11:55:28 +02:00
Torsten Ruger
d7b210d63a update parser 2016-03-06 10:48:14 +02:00
Torsten Ruger
a8b815117f rename object_type to instance_type
for better distinction that it is not every object
but only instances of the class
2016-02-25 12:16:13 -08:00
Torsten Ruger
278d71b56c fix docs for rename 2016-02-25 12:03:11 -08:00
Torsten Ruger
d32b51c67b rename layout to type
this one goes to caleb for pointing it out.
Much better word
2016-02-25 11:50:10 -08:00
Torsten Ruger
3480b97eaa rename variable type to value_type
in preparation for next rename
2016-02-25 11:41:03 -08:00
Torsten Ruger
afe16868b5 more some tests 2015-11-30 16:10:08 +02:00
Torsten Ruger
dc560aaa5e move main to space 2015-11-30 16:09:12 +02:00
Torsten Ruger
d0b655d05f implement the div10 as assembler
easy after the some version worked
because it’s not arm it probably twice as long as need be
better (any?) optimisation would take care of that
still, nice to see it works
2015-11-21 14:20:25 +02:00
Torsten Ruger
ffc69fd2a5 add the hackers delight version of div10
better test too
remove remnants of 64bit multiplication
2015-11-21 14:19:07 +02:00
Torsten Ruger
91a0365c2e fix register shortcuts 2015-11-21 14:17:54 +02:00
Torsten Ruger
96972dab29 thats most of the benchmarking
strange about the puts in soml, hard to see where a factor of 10 would
come from
2015-11-20 23:51:58 +02:00
Torsten Ruger
da4003c30a ruby fibs versions and tests for them 2015-11-20 19:12:58 +02:00
Torsten Ruger
02d9a063b0 fix both parfait words to have same indexing 2015-11-20 13:25:49 +02:00
Torsten Ruger
aabde4b9a6 fix word indexes on arm
which affected offsets in the ruby side too
the hidden dead word needed accounting for
2015-11-19 16:40:00 +02:00
Torsten Ruger
a8453c126d use arm shift at runtime
arm indexes are in bytes (x4) at compile time
but at runtime we only have the array indexes, iw word indexes
arm has the nice barrel shifter to save us an extra instruction
2015-11-19 12:48:13 +02:00
Torsten Ruger
4871a52d37 better error reporting for parser 2015-11-19 10:10:13 +02:00
Torsten Ruger
249f43ad34 translate and interpret new instructions 2015-11-19 10:09:55 +02:00
Torsten Ruger
ac5a7ac4ca making parfait (both) use the new byte functions 2015-11-19 10:09:24 +02:00
Torsten Ruger
dffa3fbf42 adding word functions for byte access 2015-11-19 10:08:41 +02:00
Torsten Ruger
ff65952a3e add get/set byte instructions
it seems all cpus have them anyway so best use them
it was a pain to do this on word level, hard to write, hard to debug and
quite unnecessarily slow
2015-11-19 10:07:27 +02:00
Torsten Ruger
5369dc3d52 rename get/set internal
to _word , because _byte versions are coming
2015-11-18 15:36:43 +02:00
Torsten Ruger
979660f282 move parfait into register
register layer uses parfait models to generate object space
so parfait  should be part of register (not above it)
2015-11-18 12:04:25 +02:00
Torsten Ruger
2bc2d4486f move interpreter to register
seems more where it belongs, since it interprets the register machine
instructions
2015-11-18 12:00:30 +02:00
Torsten Ruger
40d81681b5 move parfait adapter into parfait ruby
in the future parfait will be coded in some and translated back into
ruby to “adapt”
until then, all ruby code is the adapter
2015-11-18 11:55:29 +02:00
Torsten Ruger
0643b96641 update arm
and small code changes from the fact that just loading a variable does
not change status flags
2015-11-17 02:28:47 +02:00
Torsten Ruger
303b7eb1f8 putstring unfolds length
which means sys call doesn’t need to
and also interpreter sometimes gets a symbol length
2015-11-16 18:03:29 +02:00
Torsten Ruger
f50d7b57a4 fix the putstring sys call indexing
index 0 is the marker word , so like in some, all indexes 1 based
works :-)
2015-11-15 22:03:06 +02:00
Torsten Ruger
8e82da0b61 fix arm (assembled) indexing
by having a dummy 0 index in salaam. when assembled
2015-11-15 20:42:07 +02:00
Torsten Ruger
9a2fe42167 change assembly order
first objects, then methods.
methods change length, so at least this way objects stay
did mean hacking the arm code (something for later)
2015-11-15 16:24:43 +02:00
Torsten Ruger
458610b970 implement string length 2015-11-15 11:28:16 +02:00
Torsten Ruger
1633bf1289 fix position check
as programs get bigger the distance gets bigger
needs better approach
2015-11-15 00:38:23 +02:00
Torsten Ruger
9602acf3d2 fix label positions 2015-11-15 00:36:15 +02:00
Torsten Ruger
cea60f202a small label changes 2015-11-15 00:35:43 +02:00
Torsten Ruger
b30cf21bbd fix arm indexes
needs rethought
fixed for static use, but what about dynamic
2015-11-15 00:35:12 +02:00
Torsten Ruger
cc9b515752 fix double label names 2015-11-14 22:53:01 +02:00
Torsten Ruger
278eccbed5 derive binary code form word
long ago hacked the binary code to use integers (thus forsaking correct
arm binaries)
Finally fix by deriving from Word which now has correct binary access
Dumped binary.name in the process, that is available from the method
2015-11-14 15:04:04 +02:00
Torsten Ruger
8fa92515b5 update arm and small arm fixes
constants in arm chunks, needs better solution
2015-11-14 13:05:49 +02:00
Torsten Ruger
dbcd39c277 helper do get the register no as int for arm 2015-11-14 00:22:23 +02:00
Torsten Ruger
6e7c6d814a long const avoidance
arm can only load 10 bits and some funny logic
so for now avoid big fffffff const
2015-11-14 00:21:24 +02:00
Torsten Ruger
6127d92ca9 implement arm branches
which backfired into interpreter as
plus actually means 0 or plus in arm
may still change back but for now
2015-11-14 00:20:03 +02:00
Torsten Ruger
9ab3de234d some helper functions
for when i started the assembler div10
in the end i did the div10 in some, so no need
2015-11-13 20:47:08 +02:00
Torsten Ruger
4a8bb32039 serious bit fiddling, div10 using shift magic
forgot that arm has no division (or respectively only later models have)
many magic formulae out there, none seem to work 1000% on the
interpreter. some big 0 ending numbers are 1 off.
2015-11-13 20:46:27 +02:00
Torsten Ruger
f779b5d15f fix interpreter to simulate 32 bit machine 2015-11-13 20:31:35 +02:00
Torsten Ruger
5c862111b9 remove div and add div10
general division is for another day, the 10 version is manageable
also same code produces mod10
wip
2015-11-12 20:03:57 +02:00
Torsten Ruger
a5afca10f6 don't pass machine around, its global 2015-11-12 20:02:44 +02:00
Torsten Ruger
6f0d6d831e update arm and implement most operators
multiplication wasn’t implemented
and division isn’t part if arm
neither is rotate by register
2015-11-12 20:02:14 +02:00
Torsten Ruger
787f727974 simplify i to_s 2015-11-11 20:45:40 +02:00
Torsten Ruger
6137833140 change args argument to create method to be hash
was array and didn’t carry types and names
2015-11-11 20:41:02 +02:00
Torsten Ruger
351a747bfd mod and div for int 2015-11-11 20:36:40 +02:00
Torsten Ruger
1e7935bf85 implement byte access for some word
wouldn’t have been possible without the ruby version
2015-11-11 20:36:07 +02:00
Torsten Ruger
9bfc9cf6c2 implementing missing operators 2015-11-11 20:34:49 +02:00
Torsten Ruger
d870553a1f make ruby word byte size
was hacked as int
interestingly zero change to tests
2015-11-11 19:11:08 +02:00
Torsten Ruger
93ff44bb6f improve reinit of interpreter 2015-11-10 19:28:31 +02:00
Torsten Ruger
1efa36ed4f string sometimes gets to_s in equal while half cooked
during debugger register change or update to be precise.
without the debugger there would be no access to the word
at that point and no need for this hack
2015-11-10 19:16:38 +02:00
Torsten Ruger
daffa0579e another opal hack
in opal 13 / 10 = 1.3 whereas in ruby its 1
2015-11-10 19:10:11 +02:00
Torsten Ruger
c92814440f fix integer to_s and put, with tests 2015-11-10 19:09:17 +02:00
Torsten Ruger
760a4beb86 fix some word with tests 2015-11-10 19:08:48 +02:00
Torsten Ruger
6c2ce66bfc fix old warning 2015-11-10 11:48:53 +02:00
Torsten Ruger
a730dd0c99 fix some, return missing
must write no return error code
2015-11-09 23:29:35 +02:00
Torsten Ruger
70f912f94c allow message as keyword to access current message
the ultimate in meta-programming
2015-11-09 23:29:14 +02:00
Torsten Ruger
a20f1570ee temporary word hack to make it look liked indexed 2015-11-09 23:28:40 +02:00
Torsten Ruger
5d80c38c87 correct register types 2015-11-09 23:28:10 +02:00
Torsten Ruger
9ab7b476d5 opal fix and minor 2015-11-09 23:27:15 +02:00
Torsten Ruger
368263d5a5 rewrite of field access using on_name
much cleaner and revealed a bug
2015-11-09 23:26:37 +02:00
Torsten Ruger
dd7973875c fix interpreter to handle registers in set 2015-11-09 23:25:34 +02:00
Torsten Ruger
9075f1af37 fixes yet another order dependant bug in the test (not the code) 2015-11-09 10:04:37 +02:00
Torsten Ruger
b2de1c6d79 minor fixes 2015-11-08 23:58:54 +02:00
Torsten Ruger
f746218765 reinstate word creation and use for strings
so string constants become words, so we can fiddle with them
2015-11-08 23:58:35 +02:00
Torsten Ruger
c8fa5238ee stdout word too 2015-11-08 23:57:38 +02:00
Torsten Ruger
6b9c472bec refactor load_parfait
so debugger can grab and wire it easily
2015-11-08 18:35:10 +02:00
Torsten Ruger
6f69995284 stab at inter to string
wip
2015-11-08 17:11:03 +02:00
Torsten Ruger
c38775e933 add set_internal
and the set_slot with register
very much like the get_slot for get_internal
2015-11-08 17:10:36 +02:00
Torsten Ruger
64d99d5e68 didn't need big decimal require 2015-11-08 15:18:39 +02:00
Torsten Ruger
d6108e7b3a fix interpreter overflow issue
flag set for bigness, result reduced
tests for + and *
fixed fibs tests
2015-11-08 15:15:55 +02:00
Torsten Ruger
6ea698d397 save some to_s code 2015-11-08 14:30:42 +02:00
Torsten Ruger
37564d9c2e implement message pseudo variable (like self)
too easy
also simplified some tests
2015-11-08 13:55:38 +02:00
Torsten Ruger
69918c8e88 add some message and remove fields
those fields are already present in the classes
(in the future they should be defined in some and integrated to ruby,
but that would mean parsing to boot and parsing doesn’t yet work on
opal)
2015-11-08 13:54:58 +02:00
Torsten Ruger
502cfa357d implement and test field access 2015-11-08 13:39:13 +02:00
Torsten Ruger
b443103ea4 using class fields
instead of internal_get
2015-11-08 01:02:47 +02:00
Torsten Ruger
9fd7c79cfb mixed up class and meta, fixed 2015-11-08 00:55:10 +02:00
Torsten Ruger
bcc366f8fd bit more soml 2015-11-08 00:54:47 +02:00
Torsten Ruger
3e4dcd35c7 better no method no super handling
also revealed bug in booting
2015-11-08 00:54:24 +02:00
Torsten Ruger
5ddc96718b slight call logic modification
simplification, new model is such that the upon start the method:
has a message in r0, works on it and returns to the return address.

Everything else is up to the caller
2015-11-07 21:59:39 +02:00
Torsten Ruger
f2c7ed827d simplify the __init
admittedly more source code, but half the runtime
mainly just using message (not new)
made possible by call sequence change
2015-11-07 21:58:19 +02:00
Torsten Ruger
2315ad6920 minor cleaning 2015-11-07 21:55:04 +02:00
Torsten Ruger
8c68ffc7a4 fixing indexes makes test work
forgot my own rule: all parfait works in 1 based lists
2015-11-07 20:10:55 +02:00
Torsten Ruger
a1aa6b58ac resolve methods, don't just get them
i.e. down the ladder we go
2015-11-07 19:39:15 +02:00
Torsten Ruger
7523bac80a add layout and class accessor and test 2015-11-07 19:38:52 +02:00
Torsten Ruger
484e2d19d4 allow for registers in get slot 2015-11-07 19:38:03 +02:00
Torsten Ruger
1d07c1fb95 fix super class with name mixup 2015-11-07 19:37:38 +02:00
Torsten Ruger
37928b8591 rename internal get/set functions
mainly because the salaam parser chokes on internal…
2015-11-07 17:40:59 +02:00
Torsten Ruger
50b03a5e94 load parfait soml files
No dir glob for precise order
2015-11-07 17:38:27 +02:00
Torsten Ruger
d878ce00d8 framework for parfait runtime testing
with interpreter for now
later with arm exec support
2015-11-07 17:37:41 +02:00
Torsten Ruger
708cdace17 implement indexed object access
one of the few functions that can’t be coded
(or the design specifically is such that it can’t, in c it would be
self[index],
or, worse *(self + index) )
2015-11-07 17:36:28 +02:00
Torsten Ruger
35afe88ede allow get_slot with two registers
before was register and number, but for runtime that doesn’t work
2015-11-07 17:34:41 +02:00
Torsten Ruger
9ebe28450b add global variable space
could in the long run move spaces functionality to the class
and since the class is global anyway, wouldn’t need this
2015-11-07 12:19:04 +02:00
Torsten Ruger
fd7e4afb2f small meta related changes 2015-11-07 00:14:10 +02:00
Torsten Ruger
46e1a112ab metaclass moves down to object 2015-11-07 00:12:17 +02:00
Torsten Ruger
204200b92a metaclass is back
this time with a real purpose and implementation as the intermediary
As the interface to the layout and for replacing an edited layout
2015-11-07 00:11:56 +02:00
Torsten Ruger
ebcc15d314 testing fibo 2015-11-06 14:24:57 +02:00
Torsten Ruger
4eb3d9029a use logger 2015-11-05 16:50:00 +02:00
Torsten Ruger
13d0747b45 test the log_level too 2015-11-05 14:05:12 +02:00
Torsten Ruger
aad50021fe more messages for recursive fibs 2015-11-05 12:23:11 +02:00
Torsten Ruger
4014ad27fe fix and test return
return was in the wrong message
better tests now
2015-11-05 12:22:48 +02:00
Torsten Ruger
ff759bf0c1 increase message size
message size is somewhat like stack size,
but 1-1 related to how deep it can be, now 50 calls
2015-11-05 12:12:15 +02:00
Torsten Ruger
642dcb065a fix while statement
logic was broken, or inversed
had to lay the code out a bit funny, but it works and makes sense
2015-11-04 20:23:26 +02:00
Torsten Ruger
ab2c73f42c right name for return label makes interpreter work 2015-11-04 20:22:28 +02:00
Torsten Ruger
691ae96d71 fix names of branch codes
also store objects in register, avoid the whole object_id thing which
just lead to unclarity about class
2015-11-04 20:22:03 +02:00
Torsten Ruger
428faad25f opal fix for indexes 2015-11-04 16:11:25 +02:00
Torsten Ruger
b5e733cd11 finally simple logging
instead of commenting puts
2015-11-04 11:48:51 +02:00
Torsten Ruger
2236065d02 position filling after the padding changes, works again 2015-11-04 10:34:58 +02:00
Torsten Ruger
c87682b77f fix padding
used to be that type and layout were hidden
now type is gone and layout is an explicit instance, so 0 overhead
2015-11-04 10:34:03 +02:00
Torsten Ruger
5bddbfbb62 rename word_length to padded length
with word_length i was never sure if it was the padded version or not
2015-11-04 10:33:10 +02:00
Torsten Ruger
6ada815735 first stab at fixing the assembly
lots of length fiddling
wip
2015-11-03 16:24:12 +02:00
Torsten Ruger
0f8f0a681c fix padding to only consider layout (1 word) 2015-11-03 16:22:50 +02:00
Torsten Ruger
ca1dc36e3d method marking for labels 2015-11-03 16:22:24 +02:00
Torsten Ruger
6882f39645 fixing lengths 2015-11-03 16:21:50 +02:00
Torsten Ruger
c15445a958 let labels be constants 2015-11-03 16:20:25 +02:00
Torsten Ruger
5a8d7d313f little more tests 2015-11-03 11:23:15 +02:00
Torsten Ruger
c940e25f91 other half of previous call change 2015-11-03 11:22:52 +02:00
Torsten Ruger
1be5d1862f need to collect labels for return
so the interpreter can find the object
2015-11-03 11:22:26 +02:00
Torsten Ruger
bc414fd3e8 function call now saves the return address before calling
that means SaveReturn is obsolete (breaks loads of tests)
first step towards multi - return which obviously can not have the
callee save return address.
In fact this would make FunctionCall redundant too, as it is really
just a branch
2015-11-03 11:20:49 +02:00
Torsten Ruger
cffbc91821 fix field_def to new syntax 2015-11-02 21:27:37 +02:00
Torsten Ruger
45bd4bfdc6 remove save return 2015-11-02 20:11:12 +02:00
Torsten Ruger
ddb1df7362 start to fix the link issue
that came from removing SaveReturn
2015-11-02 20:10:48 +02:00
Torsten Ruger
86b0030f15 refactor on_call 2015-11-02 17:32:21 +02:00
Torsten Ruger
834266e11e improve label names a bit 2015-11-01 19:13:40 +02:00
Torsten Ruger
d3a7809746 use . to mark methods 2015-10-30 00:01:28 +02:00
Torsten Ruger
7e24f63327 polish sources 2015-10-29 22:31:28 +02:00
Torsten Ruger
7d7b7ca995 adding types to layout
so we can test assignment
2015-10-29 12:45:29 +02:00
Torsten Ruger
e4201143b3 last fixes from source change 2015-10-28 21:40:48 +02:00
Torsten Ruger
e6743c7216 (string) source knockoffs 2015-10-28 21:39:59 +02:00
Torsten Ruger
c426f4a6d5 some of the sources methods belonged to method really 2015-10-28 21:38:52 +02:00
Torsten Ruger
bdb4a40f9c only string and ast allowed as source 2015-10-28 21:38:23 +02:00
Torsten Ruger
191be8d2f6 use compiler to generate methods and their instructions 2015-10-28 21:37:42 +02:00
Torsten Ruger
99a695907c move method_source functionality into compiler
the source was there long before the compiler (sis language) came along
and was basically doing the same
Much clearer concept with using compiler to generate methods and code
Also move compile method to method
2015-10-28 21:36:41 +02:00
Torsten Ruger
c245272e52 don't export current 2015-10-28 14:37:40 +02:00
Torsten Ruger
ef6cb2a069 use instruction steam from message
had been attached there last week, but was still used mainly through
the source (which i’m trying to remove)
2015-10-28 14:33:38 +02:00
Torsten Ruger
72b790c107 remove method source receiver
no harm done it seems
2015-10-28 14:24:14 +02:00
Torsten Ruger
e75517ff05 move constants to machine 2015-10-28 13:00:23 +02:00
Torsten Ruger
7e0778dc70 remove return_type
soon to be obsolete with multi returns
2015-10-28 12:19:10 +02:00
Torsten Ruger
142c36a374 fix return statement to actually return
fix a million tests
2015-10-27 21:04:46 +02:00