rubydesign
a496ea7e4b
Derive Class and MetaClass from Behaviour
...
Finally! If i remember the module was from before i had any non Object superclasses
unified code, unified bugs :-) just makes sense
2019-09-21 18:50:33 +03:00
rubydesign
3b7248df4e
more class test and misc
2019-09-21 18:16:58 +03:00
rubydesign
113ba8607c
fix to_s (mostly)
2019-09-19 20:48:21 +03:00
rubydesign
1e2c4d6678
More tests and compiling parfait object
2019-09-19 17:41:26 +03:00
rubydesign
fd46826b9c
Implement class instance variables
...
as they are just the type of the meta_class, that was relatively simple.
I feel this is what oo is meant to be, instance variables and methods for the objects, and since classes are objects, for them too.
Class variables seem like a design mistake, weird scoping rules and no data hiding (left as an exercise to the reader)
2019-09-19 15:48:27 +03:00
rubydesign
b0d1948800
Moving space to object class
...
away from Parfait module, as that gets collapsed
Leaving shortcut outside parfait for now
2019-09-18 22:36:56 +03:00
rubydesign
41617519d9
some class send test changes
...
also ivar, which is still wip
2019-09-18 22:07:58 +03:00
rubydesign
38491d120b
removed unused NamedList
...
args and locals got inlined into message, forgot to delete then
ripples out due to type creation
small type class api change, more ripples, but also more consistent
2019-09-18 22:07:05 +03:00
rubydesign
4b8ff52aa1
forgot to run bundle after removing reporter
2019-09-18 13:40:38 +03:00
rubydesign
f13e8b3bd7
A little work on test times
...
They have been rising of late, installer reporter to check 8and keep checking)
tweaking of cli parameters
removed redundant interpreter tests
2019-09-18 13:36:29 +03:00
rubydesign
e56db0a3ac
get method name out from method_missing
2019-09-17 20:18:00 +03:00
rubydesign
d58ed8e5e8
remove dead code that was produced
2019-09-17 16:08:49 +03:00
rubydesign
61819b7230
removing old brittle tests
...
that were replaced by instruction and macro tests
2019-09-17 14:28:19 +03:00
rubydesign
92f1921e2f
Last mom instruction test
2019-09-17 14:16:56 +03:00
rubydesign
f7f981dca4
Tests for return instructions
2019-09-17 13:52:20 +03:00
rubydesign
a256cf1e01
detailed method resolve test
...
revealing first bug (non critical, dead code)
2019-09-17 10:18:45 +03:00
rubydesign
830fe2ab2b
More instruction tests
2019-09-17 10:16:59 +03:00
rubydesign
b46512a1b8
tests for mom check instructions
2019-09-15 19:57:15 +03:00
rubydesign
5ab021de5a
Continue testing mom instructions
...
especially with the custom asserts, gadda say
mesa lika disa
2019-09-15 18:31:10 +03:00
rubydesign
6f108f67d7
Starting to build detailed mom to risc test
...
so we can get rid of brittle risc folder tests
All of those tests rely on many many implementation details
should just test result through interpreter, no chain.
2019-09-15 17:44:35 +03:00
rubydesign
d913bb01de
use method missing in resolve method
...
not just exit
try to print name next
2019-09-15 15:13:11 +03:00
rubydesign
7ee57f2b08
generalize get_main and get_init to get_method
...
to get at those know methods that really
__must__ exists, hence the bang, raise if don't
about to add method missing and raise to the list
2019-09-15 12:58:43 +03:00
rubydesign
b36ba42990
Test complied parfait tests
...
this makes it obvious that we need a working raise
and a correct method_missing, so we can diagnose the
resulting errors
2019-09-15 12:18:31 +03:00
rubydesign
56398e1127
Fix load order, travis obviously different
...
support files were loaded different locally than travis
probably time stamp, vs abc
Anyway, don't rely on dir order, make requires explicit
2019-09-13 22:06:18 +03:00
rubydesign
1ee01622c3
Builtin is no more, final conversions done
...
All preloading where it needs to be
(some)tests for the preload
split compiler test
remembered binary tests (usually just run on travis)
2019-09-13 20:34:41 +03:00
rubydesign
8af17a69ea
splitting commpiler commands and adding preload option
2019-09-13 19:08:59 +03:00
rubydesign
12b29285d7
Lots of preloading for tests
...
so many relied (implicitly( on some builtin function
after all can't do much in ruby without calling
Now all those dependencies are explicit
Small risc changes come because the macro version has a return label and unreachable label
2019-09-13 14:07:12 +03:00
rubydesign
c9d7539479
rework macro tests, or are they builtin
...
small fixes too
2019-09-13 10:42:20 +03:00
rubydesign
4bf23defc8
fix many tests with preloading
...
preloading, something akin to builtin, loads some very small predefined (macro) methods for the tests to work (ie call)
2019-09-12 22:27:26 +03:00
rubydesign
e33b9f565d
some renames before main fixes commences
2019-09-12 13:10:31 +03:00
rubydesign
dced6b12e6
removing builtin as a concept (wip)
...
the "old" way of generating compilers is now obsolete
we can use ruby code with mom macros to achieve the same
Three step wip
remove old builtin
fix tests (including adding necessary methods)
fixup and inclusion of builtin code to parfait
2019-09-12 13:09:30 +03:00
rubydesign
616dd3487c
renaming mom builtin to macro
2019-09-11 20:33:49 +03:00
rubydesign
5ea91df4c1
Integer macros tests and defs
2019-09-11 19:23:56 +03:00
rubydesign
e8bfb9a58c
tests for word macros
2019-09-11 18:53:20 +03:00
rubydesign
f264aec94a
macro tests for all object mom instructions
2019-09-11 18:43:20 +03:00
rubydesign
2c4f040654
starting to move builtin into parfait
...
single object method for now
little framework next
2019-09-10 20:40:41 +03:00
rubydesign
feeb9332a2
cleaning
2019-09-10 16:21:13 +03:00
rubydesign
c216d224ec
Merge branch 'parfait'
2019-09-10 14:49:52 +03:00
rubydesign
72643ebb08
Fix last parfait bug
...
missing return statement (duh)
2019-09-10 14:49:02 +03:00
rubydesign
f6bab0e633
downgrade parser for opal
2019-09-10 14:42:10 +03:00
rubydesign
63323376e4
use more instances in parfait
...
and misc
2019-09-10 12:33:57 +03:00
rubydesign
c3c2ab606c
type attr cleanup
...
and sizes up top
2019-09-10 00:18:20 +03:00
rubydesign
d82cedf4c0
Quite small amount of parfait tests needed changing after that
...
But something is amiss anyway, especially dynamic jumps
2019-09-09 20:29:18 +03:00
rubydesign
81e3c0c270
moving to instance variables in parfait
2019-09-09 20:26:54 +03:00
rubydesign
fc8de10964
remove parfait module magic
...
since we are now ruby sorcerers, not just wizards, we remove the Parfait module in the compiler (Still have to avoid the name clashes)
2019-09-09 11:54:45 +03:00
rubydesign
104f4c5109
Start on parsing parfait tests
...
Hanging on .new currently, but there is surely more
2019-09-09 11:48:29 +03:00
rubydesign
0ae7c5d8aa
hacking method not found
...
was using exit, since raise is not implemented. This was ambiguous as all programs exit.
Using :died as special kernel code and bending it, and reporting it in interpreter.
2019-09-09 11:47:37 +03:00
rubydesign
7334e72458
Weird to be finding Parfait word bugs now
...
but index maths is also much easier 10th time around
2019-09-08 21:14:54 +03:00
rubydesign
6811fc4174
fix interpreter to output symbols
...
which amazingly lets us get at classnames etc
2019-09-08 15:31:03 +03:00
rubydesign
a99abd7ad0
update gems, remove ssh
2019-09-08 13:44:51 +03:00
rubydesign
1a096110a8
basic require_relative (hack)
...
opted to hack require to be getting on
need require for the test helper
and the files in lib/parfait
General require mechanism would still be ok, but require_ralative means implementing file source, which needs to be dragged around. I'll make an issue
2019-09-07 22:13:53 +03:00
rubydesign
b13c19def3
cache booted functions
...
remove more redundant parfait boots
2019-09-07 17:56:06 +03:00
rubydesign
2c681bf2e5
Add mom boot options
...
and remove a lot of stale parfait boots from tests
(from before using rubyxc)
2019-09-07 16:43:47 +03:00
rubydesign
1539904ee2
Starting to parse parfait tests
...
will have to detour via require next
2019-09-06 21:02:09 +03:00
rubydesign
363d1cb36f
fix module handling at ruby level
...
Was returning arrays instead of Statements, which messed things up
2019-09-06 21:00:37 +03:00
rubydesign
646797301e
rearrange test helpers for later
2019-09-06 20:59:14 +03:00
rubydesign
f126aa52df
Descope Parfait in the compiler
...
Compiler now removes the module Parfait scope
and also the ::Parfait:: Scope in module names
Which means we can compile scoped code
and get unscoped code. for Parfait
Handy for tests too
2019-09-06 13:59:33 +03:00
rubydesign
7d92ee9e6a
add a statistics command to compiler
...
just to see how many objects make up a binary
2019-09-05 13:25:40 +03:00
rubydesign
91995dc1b3
make elf symbols optional
...
and default to false. Smaller executables by at least half
also add option for compiler cli
2019-09-03 02:02:21 +03:00
rubydesign
160d860db2
using new macro approach for builtin, testing first
2019-08-26 09:24:06 +03:00
rubydesign
b9bdc55059
A good start on the macro idea
...
I call it macro because it lets you insert basically arbitrary risc code into the ruby level. The way it works:
Reserve namespace X
map any X.some_call to a Mom instruction
by the name SomeCall
which must take the same args in constructor as given
And obviously produce whatever risc it wants
Hoping to rewrite builtin around this idea (with the existing Mom builtn instructions)
2019-08-25 14:40:59 +03:00
rubydesign
c0a3c9b65c
block version of loop
...
no debugging, just worked!
only about 10% slower, nice
also recording qemu-linux times, which are a lot faster(and double bonus, save the startup/syncing)
2019-08-24 17:00:59 +03:00
rubydesign
4676019702
misc
2019-08-24 16:58:14 +03:00
rubydesign
d3a0aa3d8e
redid benchmarks with new options
...
especially calling did improve
also binaries don't get crazy big even for bigger heaps, because they are just ints
2019-08-24 16:03:35 +03:00
rubydesign
259edb51e9
adding parfait options to compiler
...
to make smaller binaries with larger integer heaps
also ran some benchmarks to see if it makes a difference
at least the binaries are smaller, calling also faster
2019-08-24 11:44:13 +03:00
rubydesign
02261ad79d
changing factory size per factory
...
Before it was one class variable, but ints and messages are not created in equal amounts.
2019-08-24 09:46:33 +03:00
rubydesign
86b27ab319
CC change test fixes finished
2019-08-23 19:25:02 +03:00
rubydesign
4656ea8ffb
fix all mom tests
...
still quite brittle, but easy to fix
2019-08-23 19:24:18 +03:00
rubydesign
1eb6430880
last fixes for cc
...
seems like setup had just worked by chance and change broke that.
2019-08-23 19:22:27 +03:00
rubydesign
4ca16e5f9a
fixing most of the risc tests
2019-08-23 15:31:22 +03:00
rubydesign
50c172915e
fixing most of the mom tests
2019-08-23 15:31:04 +03:00
rubydesign
89f32ed74a
Changing the call setup and return to be more efficient
...
Now we are using a statically linked list of messages. This will not work with procs, but that can be solved then.
Previous (wrong) thinking was that because of procs messages have to be allocated for every call. This was too slow, and not neccessary
2019-08-23 15:30:27 +03:00
rubydesign
8ed013c2b9
Change Locals in calling convention
...
Just like the args, locals are now inlined into the Message.
Message is off course bigger, but as they are created at compile time, that hardly matters
Some programs did get somewhat smaller, especially with both changes, but not super much
2019-08-23 10:23:01 +03:00
rubydesign
5e44e9caaf
fix mom and vool after cc changes
2019-08-23 10:21:22 +03:00
rubydesign
ec1e8c8f3a
Fix risc layer from cc changes
2019-08-23 10:20:39 +03:00
rubydesign
7ca3599c5a
Fixed all after changing argument handling
...
arguments are now fully inlined into the message
locals next
2019-08-22 23:10:29 +03:00
rubydesign
017e7e2971
fix most of mom from calling changes
2019-08-22 22:56:44 +03:00
rubydesign
0c49612e5e
vool working after message change
2019-08-22 21:24:02 +03:00
rubydesign
0a1b05b2ee
Inline arguments into message
...
thus removing indirection for access
does affect rather much, several commits
2019-08-22 17:55:19 +03:00
rubydesign
c13d4fb017
Make builtin tests more stand alone
...
not relying on the whole boot process
easier to test basic when broken (like now)
2019-08-22 17:52:19 +03:00
rubydesign
5dc8c046e7
increase binary_code size to 32
...
save a few jump, adds some size to binary
16 just seemed kind of small
2019-08-22 12:26:40 +03:00
rubydesign
064bb2f90f
Fix compilers link
...
link command varies on systems, hmm
2019-08-19 19:13:51 +03:00
rubydesign
57b0ad2c32
Fix super as statement
...
Super is a statement, a send really.
Not an expression (as maybe in c++)
The actual implementation will be a bit tricky, like raise, a bit of stack walking, but not impossible. Still, later
2019-08-19 18:48:13 +03:00
rubydesign
0e694a38f7
Implicit returns for class methods
...
gets us parsing of parfaits second file data_object
2019-08-19 15:56:15 +03:00
rubydesign
d5d1df951c
Block/Lambda rework done
...
recovered from all renames and redoing the block compilation
all green
2019-08-19 15:23:57 +03:00
rubydesign
a722a4c285
Move vool block compilation into constant generation
...
When the lambda is passed as argument, it must be moved. This triggers the generation of a corresponding parfait object (as before, and as for other constants) but now also triggers the code build. The code being the constant as it were
Also some more name fixes from renames
2019-08-19 14:33:02 +03:00
rubydesign
3ddf2e3837
Redoing ruby block conversion
...
Since the block is actually a constant, it does not need assignment or special hoisting
Just use the send and stick the lambda in as last arg
2019-08-19 14:23:55 +03:00
rubydesign
f87526f86f
Renaming Vool exppressions rightly
...
Class, Method and Lambda (was block) are expressions.
Just making things clearer, especially for the blocks (ahem, lambdas) is matters.
wip
2019-08-19 11:33:12 +03:00
rubydesign
ae16551ed0
Rename Vool Block to Lambda
...
Making the distinction clearer
Some fixing of previous (wip)
2019-08-19 10:40:22 +03:00
rubydesign
02807cf6f9
Rename Block to RubyBlock at Ruby level
...
The parser presents the whole call that defines the block as a block. And so does the Ruby layer, as we don't want to do processing in ast.
Just making it clearer, also Vool:: block will have to be renamed
2019-08-19 10:31:11 +03:00
rubydesign
4f3d117e40
Object dogfood, compiling parfiat to binary
...
Object is the first (obviously) Parfait object to parse and fully compile to binary.
No tests yet, but almost 500 lines of real world code with 17 methods, not bad
2019-08-18 20:41:49 +03:00
rubydesign
ee8927b059
Fix slot access for constants
...
Type access is allowed for any object, including constants.
Needed for parfait
2019-08-18 20:35:01 +03:00
rubydesign
5a80850975
still debugging travis (for arm tests)
2019-08-18 15:40:40 +03:00
rubydesign
6547b1608d
Ok, any fail makes it go red, now i know
...
also making command configurable as they seem different on ubuntu (16?)
than fedora 30 (and who knows where else)
2019-08-18 15:30:52 +03:00
rubydesign
02a4742cc2
Backticks raise exception, who knew
...
catching and tryig different exe name
2019-08-18 15:22:09 +03:00
rubydesign
c9d77a29b2
Running tests on binary through qemu (system, no ssh)
2019-08-18 12:39:23 +03:00
rubydesign
3fa696b527
testin travis
2019-08-18 11:07:39 +03:00
rubydesign
15d1c07a1c
Remove dead code
...
some copy paste in creating full mom layer left dome unused (untested)
code
thanks to code climate stats
2019-08-18 10:19:52 +03:00
rubydesign
5a43cbff15
Fixing tests for implicit return
...
previous commit affected rather many test, as the implicit returns add extra instructions
Also added some explicit returns, so as not to test the return logic too much. return (ie return nl) is a knonwn 3 risc operation.
2019-08-17 23:29:42 +03:00
rubydesign
32f908c127
Adding simple implicit return
...
Ruby return semantics are easy to grasp, not so easy to code. So many cases.
Added support for common cases, return const/variable or call.
2019-08-17 23:27:55 +03:00