Commit Graph
100 Commits
Author SHA1 Message Date
Torsten Ruger acd5cd8f30 rename for_type to self_type
and split a base class off TypedMethod
2018-07-06 20:01:17 +03:00
Torsten Ruger 3f80953385 passing compiler to to_mom, not method
To be able to delegate scope (block/method) things later
2018-07-05 14:02:38 +03:00
Torsten Ruger 16d91f24ce start to test block_statement 2018-07-04 23:21:11 +03:00
Torsten Ruger 2485f7e9eb misc fixes and (finally, sigh) green again
deeeep dive, almost 40 commits
2018-07-04 09:18:55 +03:00
Torsten Ruger d8b58d8da6 fix inital main (again)
stop even compiling a fake main if a real exists (in builtin)
previous version was still buggy: using builting methods types (especially locals) even comiled version had different
2018-07-04 09:17:30 +03:00
Torsten Ruger 6f936f190d misc to_s and small fixes 2018-07-04 08:28:29 +03:00
Torsten Ruger 8b9fd29ce9 Only add Builtin methods that are not in the current compilation
Current bug looks like the original main is used in parts
(not the compiled one, but the builtin on)
2018-07-04 08:28:05 +03:00
Torsten Ruger 2ad24ab0bb add to_s for statements 2018-07-03 22:18:19 +03:00
Torsten Ruger e099014d63 fix dunamic jump in interpreter and misc 2018-07-03 19:15:36 +03:00
Torsten Ruger cab6bc389f misc little test fixes 2018-07-03 10:12:40 +03:00
Torsten Ruger bb1d1495db fix constant propagation through the layers
so they can end up in the binary
2018-07-03 10:12:22 +03:00
Torsten Ruger 63dfee0978 move some tests around (and fix them) 2018-07-02 23:20:54 +03:00
Torsten Ruger 55b5884c4e minor test fixes 2018-07-02 23:03:33 +03:00
Torsten Ruger 56f2742e89 fix code listener logic bug
next's position was only updated initially
previous logic relied on pushing everything long rightly
but it wasn't right, and no harm in setting position twice,
as events only fire if there is real change
2018-07-02 23:03:00 +03:00
Torsten Ruger a1197fb70c interpreter tests working again 2018-07-02 17:29:26 +03:00
Torsten Ruger 6af651a886 text writer working
adjusted ordering as psoitioning, ie
methods in order of the assemblers of the linker
(not the object space)
2018-07-02 17:05:02 +03:00
Torsten Ruger 4b33d1c056 fix many a test especially whole mom
but some positioning bug still in there preventing
binary to work
2018-07-02 17:01:07 +03:00
Torsten Ruger 474cd4b348 linker and collector test work again
had to give space a fixed number of addresses
2018-07-02 16:19:01 +03:00
Torsten Ruger 4e49c0469c fix compiling support
which makes all the vool tests pass again
2018-07-02 15:52:51 +03:00
Torsten Ruger 6a4c90e2bd fix the cpu_init for linker
cpu_init still translates from risc_init
but since interpreter is a platform risc_init is a private thing
and the cpu_init does not need to be lazily created, so it's done in the init
2018-07-02 15:51:50 +03:00
Torsten Ruger 9bd8eab999 remove class attribute that was left dangling
not used, which prompted rename. just forgot to delete it
2018-07-02 15:50:54 +03:00
Torsten Ruger 1132309f6a unify space collection attribute naming
currently space is still acting as a sort of memory manager.
For proper linking, all objects must be reachable from space, hence the plural versions like messages and addresses (even they are instances, it is the list that is important)
To dish out instance to use, the head must be kept, ie next_XXX for intergers, return addresses and messages
2018-07-02 15:49:51 +03:00
Torsten Ruger 07a154be70 code listener now get platform explicitly
used to grab it from global machine.
Now passed in from linker
tests fixed accordingly
2018-07-02 09:39:07 +03:00
Torsten Ruger 8952b39446 linker goes through assemblers, not space
used to traverse all methods in space
now "just" use the passed assemblers, which usually should be compiled and builtin (but for testing . . .)
tests fixed accordingly
2018-07-02 09:37:58 +03:00
Torsten Ruger c6f0dc636d platform helper 2018-07-02 09:36:29 +03:00
Torsten Ruger f4b1290e58 position tests working 2018-07-02 09:35:57 +03:00
Torsten Ruger 22408b86c6 return the linker from mom_compiler
linker holds assemblers
assemblers come from method compilation
and so the layers come into focus
2018-07-01 21:51:48 +03:00
Torsten Ruger 5f2a256608 fix platform derivation and some tests 2018-07-01 21:27:27 +03:00
Torsten Ruger bb49f1be78 rename ClassCompiler to MomComplier
ended up not even using the class, it just came from there
It actually compiles methods, and it turns out is the point where builtin comes into the picture as it's boot process also returns method compilers
2018-07-01 21:26:45 +03:00
Torsten Ruger c947c27a14 clean up booting
many machine boot became obsolete
or just neede parfait to boot
actual linker functionality pending
2018-07-01 14:12:42 +03:00
Torsten Ruger e75aef933d have to pass constants around now
as they are not global anymore
2018-07-01 14:11:29 +03:00
Torsten Ruger e10092a4be rename machine to linker
even work is not quite finished, but helps root out offenders
(needless to say this is wip, deep red wip)
2018-07-01 13:45:14 +03:00
Torsten Ruger 57fc67ddf6 move address list to object_space
where i guess it should have been from the start
2018-07-01 13:43:53 +03:00
Torsten Ruger 35b10c46a3 adds the risc instructions to the compiler
since they are not in the method anymore
2018-07-01 11:59:52 +03:00
Torsten Ruger 22b1fea587 use rubyc_compiler as instance
not as before class methods
so we can carry the state around
2018-07-01 11:59:07 +03:00
Torsten Ruger 1505df894a remove translation
from machine, which is quickly becoming a linker
2018-07-01 11:58:06 +03:00
Torsten Ruger 1a97408e22 return compiler, not generated mom
does make the tests more verbose, but the code cleaner
2018-07-01 11:57:17 +03:00
Torsten Ruger f7dfa1c45e return assemblers from translation
result of translate is cpu instructions, our equivalent of assembly.
So return Assemblers for next stage
2018-07-01 11:56:09 +03:00
Torsten Ruger 3813de19fc finally removing instruction from parfait method
instructions are intermediate results on the way down
and as such never should have been in there
2018-07-01 11:54:44 +03:00
Torsten Ruger 2d83473d74 add assembler
getting the layers better
2018-07-01 11:53:18 +03:00
Torsten Ruger 05669065ca back to method_compiler
it is what it is
2018-06-30 23:26:28 +03:00
Torsten Ruger 91a99b1239 let boot_functions return the compilers
methods are still added, but this is a good step to removing the risc/cpu level from the methods
2018-06-30 23:16:17 +03:00
Torsten Ruger 208b98d709 start to move translate code 2018-06-30 22:53:32 +03:00
Torsten Ruger daf1b56062 start on class compiler
idea is to get cleaner layer seperation
reduce machine and rework builtin boot
2018-06-30 19:20:17 +03:00
Torsten Ruger 4a7cc72732 always list of methods in class
improve vool test dirs
2018-06-30 10:08:18 +03:00
Torsten Ruger 46d8f5002f hoist parfait boot out of the machine boot 2018-06-30 00:39:23 +03:00
Torsten Ruger 8d7a2fe4d6 fix mom tests
and always have a list inside a class
2018-06-29 23:29:10 +03:00
Torsten Ruger 5b87133df2 split rubyx tests
in vool and mom level
2018-06-29 23:04:50 +03:00
Torsten Ruger 7006c8e3aa fix remaining tests
rename ripples
2018-06-29 22:56:49 +03:00
Torsten Ruger c8451d0048 create rubyx dir and move previous vool_compiler there 2018-06-29 22:46:39 +03:00
Torsten Ruger 63dd6d9039 moved statements up one dir 2018-06-29 22:46:00 +03:00
Torsten Ruger 7377522417 fix test ripples and minor parfait naming
Parfait ruby and boot names desynced, fixed that
2018-06-29 21:03:06 +03:00
Torsten Ruger ae35fed0ab fix list to expand
prevously fixed max length list
now expanding on demand, using next
quite like binary_code, a pattern is emerging
2018-06-29 20:58:59 +03:00
Torsten Ruger 5036dd68df remove to_mom from ruby_to_vool
must have slipped in
affects mosty tests
2018-06-29 14:57:48 +03:00
Torsten Ruger 6bd01fd55f rename method_compiler
in line with other compiler XX_Compiler being the compiler for that layer
remove type from compiler as it is in method available
2018-06-29 14:48:52 +03:00
Torsten Ruger 114dc95b60 move parfait boot into parfait
and out of risc
2018-06-29 14:36:11 +03:00
Torsten Ruger e6f01748ff move adapter stuff around 2018-06-29 14:26:25 +03:00
Torsten Ruger 86b1edb40c add seperate builders
remove if with polymorphism for different builders
(easier to understand by naming)
2018-06-29 13:27:57 +03:00
Torsten Ruger 3dffebed3f rename a bit 2018-06-29 13:03:19 +03:00
Torsten Ruger d50893bb0f rename risc_value to register_value
almost to register, but it still carries that value
2018-06-29 11:39:07 +03:00
Torsten Ruger 606c7bf906 remove booted flag
just boot if needed
2018-06-29 11:36:14 +03:00
Torsten Ruger f1b09ac58d move builtin boot to builtin module 2018-06-29 11:23:26 +03:00
Torsten Ruger 75507c69b4 bundle update 2018-06-28 20:17:38 +03:00
Torsten Ruger 18994d2b4b start on yield statement 2018-06-28 20:15:24 +03:00
Torsten Ruger 2e086a78e2 bit of refactoring 2018-06-27 17:09:50 +03:00
Torsten Ruger f0ba863721 remove to_mom / create_objects dichotomy
wsa supposed to be clearer, but even to me seems confusing now.
2018-06-26 20:46:58 +03:00
Torsten Ruger c6a903073a start on blocks 2018-06-26 20:28:27 +03:00
Torsten Ruger 4103da7490 small test fixes 2018-06-25 20:21:15 +03:00
Torsten Ruger 67a6ef9f67 add rewriting of operator assignment
foo += 1 becomes foo = foo + 1 in vool
2018-06-25 16:32:20 +03:00
Torsten Ruger 70d7e654c4 only check object file creation in efl
remote execution only per request
2018-06-25 00:39:13 +03:00
Torsten Ruger b804be5f70 fix dynamic call
which had the method in the regsiter, not the binary.
Single SlotToReg added (and some tests)
Which amazingly fixed all broken binary tests
2018-06-25 00:19:43 +03:00
Torsten Ruger 068bda492c implement DynamicJump for Arm
which is in fact the same as return (moving address into pc)
2018-06-24 19:13:55 +03:00
Torsten Ruger f83f52faa0 reusing ssh instance for arm
some speedup , but hoped for more
2018-06-24 17:44:02 +03:00
Torsten Ruger c8a903cd83 adds arm testing of same files 2018-06-24 17:10:39 +03:00
Torsten Ruger ae976c8fb9 generate mains test methods according to file name 2018-06-24 16:48:23 +03:00
Torsten Ruger 8d369dbfa1 automate mains test more
move sources and include exit code and stdout in filename
2018-06-24 13:37:36 +03:00
Torsten Ruger 563ed4647a extract the ruby from mains tests
move up in directory
in preparation for arm tests
2018-06-24 11:56:10 +03:00
Torsten Ruger 87be6bf9d5 add automated arm tests 2018-06-23 15:58:43 +03:00
Torsten Ruger ce79617875 fix the exit sequence
was returning wrong register (1, not 0)
also saving the message for test, which changes order as the return value destroys the message
2018-06-19 19:52:06 +03:00
Torsten Ruger 5f7683efcf pass return integer back out through exit
for testing of binaries later (and off course general correctness)
Some tests were using the fact that the interpreter was used, changed those to return ints rather than strings
2018-06-19 18:55:47 +03:00
Torsten Ruger db459fcd3d fix label loading in arm
was still loading the integer address
instead of the return address's address
Hello World working
2018-06-19 17:35:00 +03:00
Torsten Ruger 956c2ebe54 make arm use branch_lsteners 2018-06-19 10:51:03 +03:00
Torsten Ruger 9fc7f9b528 fix arm write syscall 2018-06-19 10:49:53 +03:00
Torsten Ruger 046617f8dc add branch listener functionaliy
have to store the branches and loop again as labels
dont neccessarily have positions yet
2018-06-17 22:25:38 +03:00
Torsten Ruger 3298651238 split create_binary into two phases
Which gives instructions a chance to check everything
and in Arms case check the constant loads/ instruction adding
So that during assembly no more change happens (and we don't have to reassemble)
2018-06-17 13:53:17 +03:00
Torsten Ruger c94f6eaa78 small maintanance 2018-06-16 21:01:15 +03:00
Torsten Ruger 7543236f4f objects didn't get positions
positions.empty? was wrong check
2018-06-16 10:58:54 +03:00
Torsten Ruger 698c845297 seperate position create and register
many test fixes
2018-06-15 22:00:49 +03:00
Torsten Ruger 9c93b38b8f crete positions while collecting objects
clear two phase lifecycle for positions
always created invalid and set later
new does not auto add to cache
but create and get_or_create do
2018-06-15 21:54:21 +03:00
Torsten Ruger 2c765c8f14 rename the objects accessor
and move to object keys, not object_id
2018-06-15 09:18:39 +03:00
Torsten Ruger 3cc9175efa start BranchListener
but on hold, since it needs positions before we have them
Must create them during collection phase
2018-06-14 21:29:34 +03:00
Torsten Ruger eaaf61c117 fix position test 2018-06-14 21:19:22 +03:00
Torsten Ruger 5ec235d049 fixes outstanding misc, All green
Well. it's been a while, positioning is fixed (again)
apart from the upcoming BranchListener
2018-06-10 13:19:55 +03:00
Torsten Ruger e1683938ed fix label positioning bug
where a label at the end of a binary code resulted in the
label actually taking up a position, instead of sharing it with it's next
2018-06-10 13:18:56 +03:00
Torsten Ruger 0513cd504f update return address in label
so return jumps go to the right address
2018-06-10 09:15:57 +03:00
Torsten Ruger c7ad1d98ca introduce the LabeListener to move instructions along when first code position changes 2018-06-09 22:13:43 +03:00
Torsten Ruger ec1d38f5a6 reimplement instruction listeners with indexes
easier to understand, as indexes map to Binarycode indexes, and can thus later be used to assemble directoy into the  code
Almost no change in tests (now only multiples of 4 addresses allowed)
2018-06-09 17:41:39 +03:00
Torsten Ruger cf94227b2c fix code init bug
where initial pos wasnt propagated
2018-06-09 09:16:23 +03:00
Torsten Ruger e4b4551acf minor simplification 2018-06-09 08:13:37 +03:00
Torsten Ruger ad3040a846 add position_chaning to event interface
by reacting to the change _before it happens, we can move any BinaryCode out of the way

So when Instruction are inserted and code gets inserted, we don't need to set up the correct listener explicitly (which is tricky across mathods and changing chains), but instead just move anything that is in the way along
2018-06-09 08:10:41 +03:00