15337e10be
move putstring to use builder
2018-08-15 17:52:21 +03:00
e953cc90d5
remove some more add_xx functions
...
also load labels by dsl now
2018-08-14 20:24:48 +03:00
520dc7b41f
remove ad_transfer in save_message
...
towards removing all add_
change to set_builder and chaining in reg values
2018-08-14 20:08:58 +03:00
37461a1727
add the ! syntax to create variables in builder, fix #8
...
now a variable has to be created before being used
thus it is save to develop contracts where a certain name
must exist in the scope
Maybe the syntax starts getting a bit weird, but at least the ! is a common symbol in ruby
2018-08-14 19:39:46 +03:00
0bf008b351
bit of documentation
2018-08-14 11:23:19 +03:00
fb54d68020
redo restore after syscall with builder
2018-08-13 18:48:54 +03:00
55bc9c5273
rewrite new_int with builder
2018-08-13 18:02:34 +03:00
fee9e261a5
still some names that needed changing
2018-08-12 14:48:20 +03:00
25d7b8bd83
chaning calling convention not to add frame/arg types
...
these types are only needed to debug and can be gotten from the method (also in the mesage)
just saving the 6 instructions for every call
This was made possible through previous commits on fake_memory access
2018-08-12 14:47:05 +03:00
3d113b4d83
fix more of the changed names
...
add a few self.
2018-08-12 13:10:44 +03:00
66e0d4ae26
cache index resolution
...
resolve once and reuse
also use non checking version of get/set
as index per definition must be ok
This creates some speedup, but mostly avoids some weird hang in Thread::Queue.pop for many seconds
2018-08-12 13:09:34 +03:00
84de400529
some test change because of renaming
...
next is a keyword, can't be used as instance writer
fake_memory gets the pobject for debug
2018-08-11 19:17:20 +03:00
b0aefe31fe
make all instances attr read writers
...
unfortunately the writers have to have self.var =
otherwise it is just a local var
Also need to make the type explicit for all
Protocol included memory_length on the class for now
2018-08-11 19:15:34 +03:00
e6df473647
changing the adapter to have fake memory for every object
...
Before instance variables were used to store the actual data
While this worked it was a double mental loop and (more importantly) did not allow the same memory access
Ie, in the interpreter the types for args had to be set correctly
But they don't need to be until we walk the list, when we can get the types from the method.
In short, now the fake memory may be used as memory, by indexing into it
We now have to use attr reader/writers that map to the fake memory
And while this is possible, it means a lot more self. than i would like
Also the compiler whill have to undo those attr to instance acess at some point
2018-08-11 19:13:09 +03:00
d74e9c2c40
removed some obsolete builder helpers
...
cleaner code with dsl,
just div10 undone
2018-08-09 21:10:05 +03:00
99a95d40a6
also redid the get/set internal byte with builder
...
had to pimp register value to use a semblance of the dsl
using <= for bytes and << for words
2018-08-09 20:16:55 +03:00
7002956e81
redid get_set internal byte with builder
...
trying to change style, get rid of some of builders functions
2018-08-09 20:15:52 +03:00
0d52b620ed
redid integer comparison with builder
...
had to add some helpers to builder
2018-08-08 20:53:06 +03:00
fc6aa4e28b
rework operator with builder
2018-08-08 15:49:47 +03:00
78466090b3
add reduce_int and fix bug
...
hardcoded operator, buh
reduce_int to avoid that long constant
2018-08-08 15:49:07 +03:00
6200a35562
add shortcut for class_name
...
for when type is not set
2018-08-08 12:02:59 +03:00
71a7161200
redid div4 with builder
2018-08-08 12:02:24 +03:00
c63e55c2bc
add an operator function
...
to be able to use the builder more
also add ability to load fixnums (for the int functions)
2018-08-07 20:48:36 +03:00
393ac873c9
change return sequence to return messages to space
...
as it was before blocks
(thought blocks would make reuse of messages impossible, but was wrong, this only appilies to lambdas)
(too) many tests affected
2018-08-06 14:07:17 +03:00
fd25f997ce
reqrote return sequence with builder
...
added test _before_ , same code, just much easier to read
in preparation for returning messages
2018-08-06 13:04:47 +03:00
595e032edf
add function_return helper to risc_value
...
create a function_return from within builder
2018-08-06 13:03:33 +03:00
c9d8f750e5
extend type inference for dsl
...
and finally test it
2018-08-06 10:11:12 +03:00
308996bf8e
fix all tests accordingly to new return
2018-08-02 17:37:27 +03:00
5346077a72
use the return jump to jump to the return sequence
...
thus every method only has one exit
should make multi return messages smaller
especially when we have escape analisis
(maybe will help with inlining too)
2018-08-02 17:36:39 +03:00
4d4b691a4b
adds a return jump
...
that will be used to jump to the return sequence
2018-08-02 17:34:44 +03:00
4b4528abb2
propagate constants from block_compiler up
...
up to method_compiler, where they are collected by mom_compiler
(and included in binary)
2018-08-01 16:27:34 +03:00
04bcfea8ce
fix scoping of blockcompiler
...
Was accessing caller scope, but must use caller's caller as the yield itself is a call.
2018-07-31 18:00:42 +03:00
4fe0edd1e3
first risc level block test working
...
assign was not executing yield
baecause it was just testing for send, instead of callable
2018-07-30 20:11:52 +03:00
1d2ec8e8ac
abstract CallStatement base class, just like in ruby
...
to_mom differs much more than the to_vool in ruby,
but data and base functionality still warrent unification
also we can check for CallStatement now
2018-07-30 14:45:37 +03:00
198a43cc8d
rename callable to CallStatement
...
Callable is the Method, whereas here we call the method
2018-07-30 14:44:14 +03:00
9c6a099cde
block test
...
working on return semanitcs
(still avoiding the implicit return)
2018-07-30 14:10:24 +03:00
a3059108eb
compile the blocks too
...
method_compilers have block_compilers just like
methods have blocks
But assemblers are a flat list
2018-07-30 10:27:32 +03:00
165036ea39
misc
2018-07-30 10:26:47 +03:00
2dc03f8d1b
push the callable into the callable compiler
...
thus generalizing for .callable access
keep block and method aliases for destinction in derived classes
2018-07-30 10:26:11 +03:00
285a88b59f
generalize assemblers to use callables
...
not just methods, they are almost the same anyway
2018-07-30 10:23:42 +03:00
4055709529
push the name down into callable
...
blocks need a name too
if just for debug, and stacks
2018-07-30 10:21:43 +03:00
1cb07a4164
block arg access was off by one
2018-07-27 12:16:06 +03:00
e1d5592c55
fix boot to include blocks correctly
2018-07-27 10:48:45 +03:00
4839e0d245
minor naming and spaces
2018-07-27 10:46:22 +03:00
700744e6d5
block assignment ruby to vool
2018-07-25 11:06:42 +03:00
f5c284b3a0
bring the blocks down to mom level
...
reusing message_setup, but adding yield specific instructions
2018-07-24 11:35:49 +03:00
d80ef4bf4e
store method, not name, in message
...
changes the calling and thus too many test
2018-07-22 22:29:32 +03:00
b6c85cd4a4
callable as base for yield and send
...
more yield tests
2018-07-21 14:34:39 +03:00
6022aa4dab
introduce ruby variable and remove ct_type
...
cleaner oo
2018-07-20 20:53:35 +03:00
235853ab2d
first run at ruby block to_vool
...
leaving the parser structure in the ruby layer,
but adopting the constant approach in vool
2018-07-20 20:07:15 +03:00