Commit Graph

2089 Commits

Author SHA1 Message Date
b46512a1b8 tests for mom check instructions 2019-09-15 19:57:15 +03:00
5ab021de5a Continue testing mom instructions
especially with the custom asserts, gadda say
mesa lika disa
2019-09-15 18:31:10 +03:00
d913bb01de use method missing in resolve method
not just exit
try to print name next
2019-09-15 15:13:11 +03:00
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
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
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
8af17a69ea splitting commpiler commands and adding preload option 2019-09-13 19:08:59 +03:00
c9d7539479 rework macro tests, or are they builtin
small fixes too
2019-09-13 10:42:20 +03:00
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
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
616dd3487c renaming mom builtin to macro 2019-09-11 20:33:49 +03:00
5ea91df4c1 Integer macros tests and defs 2019-09-11 19:23:56 +03:00
e8bfb9a58c tests for word macros 2019-09-11 18:53:20 +03:00
f264aec94a macro tests for all object mom instructions 2019-09-11 18:43:20 +03:00
2c4f040654 starting to move builtin into parfait
single object method for now
little framework next
2019-09-10 20:40:41 +03:00
72643ebb08 Fix last parfait bug
missing return statement (duh)
2019-09-10 14:49:02 +03:00
63323376e4 use more instances in parfait
and misc
2019-09-10 12:33:57 +03:00
c3c2ab606c type attr cleanup
and sizes up top
2019-09-10 00:18:20 +03:00
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
81e3c0c270 moving to instance variables in parfait 2019-09-09 20:26:54 +03:00
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
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
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
6811fc4174 fix interpreter to output symbols
which amazingly lets us get at classnames etc
2019-09-08 15:31:03 +03:00
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
b13c19def3 cache booted functions
remove more redundant parfait boots
2019-09-07 17:56:06 +03:00
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
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
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
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
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
160d860db2 using new macro approach for builtin, testing first 2019-08-26 09:24:06 +03:00
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
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
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
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
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
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
ec1e8c8f3a Fix risc layer from cc changes 2019-08-23 10:20:39 +03:00
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
017e7e2971 fix most of mom from calling changes 2019-08-22 22:56:44 +03:00
0c49612e5e vool working after message change 2019-08-22 21:24:02 +03:00
0a1b05b2ee Inline arguments into message
thus removing indirection for access
does affect rather much, several commits
2019-08-22 17:55:19 +03:00
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
064bb2f90f Fix compilers link
link command varies on systems, hmm
2019-08-19 19:13:51 +03:00
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
0e694a38f7 Implicit returns for class methods
gets us parsing of parfaits second file data_object
2019-08-19 15:56:15 +03:00
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
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
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