1
0
forked from Mirror/wren
Commit Graph

1795 Commits

Author SHA1 Message Date
63d1255566 Start sketching in the FFI. 2013-12-29 10:06:35 -08:00
667d393fbb Write a bunch of docs. 2013-12-28 09:37:41 -08:00
afdcafcecb Remove explicit calls to free() and malloc(). 2013-12-27 09:07:35 -08:00
a8c725ea3f Use growable buffers for bytecode and strings.
Ensures the compiler can handle long chunks of code and strings.
2013-12-27 07:22:43 -08:00
3506a39e27 Pass in all data when creating function. 2013-12-26 17:28:33 -08:00
24686eb4be First step towards making FnObjs smarter about size.
Currently, they have a hardcoded number of constants and 
bytecodes. That wastes memory in most cases and fails 
catastrophically when there is too much bytecode.

To fix this, we should use growable buffers for both during
compilation and then only create the FnObj when done compiling.

This moves a bunch of stuff around and gets it to the point
where functions are created at the end of compilation. It
doesn't yet size functions appropriately, but all tests are
passing, so this is a good checkpoint.
2013-12-26 16:58:03 -08:00
350c0194b6 "unsigned char" -> "uint8_t". 2013-12-25 16:31:30 -08:00
e62bccd7f2 Inline the bytecode array in ObjFn. 2013-12-25 16:19:35 -08:00
8c4a58a0a3 Make CallFrame and Method use Obj* for functions.
There's no point in packing it in a Value since it will always
be an ObjFn or ObjClosure. Leaving it an Obj* is a bit faster.

Also fixed a bug where it was freeing the closure's flexible
array of upvalues.
2013-12-25 16:12:07 -08:00
ba0f39a5e0 Tweak README. 2013-12-25 15:03:17 -08:00
507e89d3b3 Range operators!
Added ".." and "..." infix operators. Num implements them to
return Range objects. Those in turn implement the iterator
protocol, so now numeric for loops are easy:

    for (i in 1..10) { ... }

I also cleaned up the Wren benchmarks to use this.

In the process, I discovered the method_call benchmark really
just showed loop peformance, so I unrolled the loops in all of
the languages to stress method calls.
2013-12-25 15:01:45 -08:00
2b65e47747 Use getNumArguments() in method bind. 2013-12-24 22:10:30 -08:00
e6e7b2594c For loops! 2013-12-24 21:04:11 -08:00
1e0401bfc1 Allow statement bodies for flow control.
This means this works now:

  if (foo) return bar
2013-12-24 10:27:48 -08:00
8c85232b90 Break statements. 2013-12-24 10:15:50 -08:00
a30a5daa29 Clean out a few TODOs. 2013-12-23 15:38:00 -08:00
5a2fde0c2c Collapse duplicate constants and check for overflow. 2013-12-23 15:08:47 -08:00
c8cb0be816 Better handling for lexing errors. 2013-12-23 14:51:06 -08:00
1503e74233 Get rid of unused DUP instruction. 2013-12-23 11:37:47 -08:00
9235a7e38f Fields in closures. 2013-12-23 11:17:40 -08:00
c0169896e6 Get rid of ResolvedName. 2013-12-22 20:53:35 -08:00
ad1fcf66bc Superclass calls in closures. 2013-12-22 20:46:12 -08:00
3c8b4c009f Allow variables without initializers. 2013-12-22 18:47:58 -08:00
034fec6eaa Make fibers real objects. 2013-12-22 14:31:33 -08:00
7625de7536 Make ip an actual pointer. 2013-12-22 13:46:13 -08:00
7868287f89 Make IO.write() call toString on its argument. 2013-12-22 11:50:00 -08:00
2ec01c558f Clean up the root of the class/metaclass hierarchy. 2013-12-21 20:44:37 -08:00
6c3aa85228 Make IO a static class instead of a singleton. 2013-12-21 19:25:09 -08:00
24a6f4cd8c Closing over "this". 2013-12-21 15:55:08 -08:00
76ac818eaf Subscript setters. 2013-12-21 09:37:59 -08:00
6fdcf800a8 Do a bit more documentation. 2013-12-21 09:15:30 -08:00
f2b036420d Fix a bunch of test TODOs.
- Added a bunch of tests.
- Removed some TODOs for stuff that's already done.
- Made list literals handle newlines better.
2013-12-20 12:42:11 -08:00
315ed1c425 Make heap usage configurable. 2013-12-20 07:41:35 -08:00
e83d0bb360 Setters! 2013-12-20 07:05:31 -08:00
61e745d548 Bump default heap size up.
This makes the binary_trees benchmark much faster.
2013-12-20 07:05:13 -08:00
b937597ea7 Make benchmarks score based instead of time based. 2013-12-20 07:04:04 -08:00
f9099791a1 Add another test for constructor syntax. 2013-12-19 09:10:45 -08:00
4d67f2270a Use more conventional syntax for constructors.
They are now invoked like "new Foo".
Also, superclass constructors are now much less semantically
and syntactically weird. Since the instance is created before
any constructor is called, there's no point in time where the
instance isn't there.
2013-12-19 07:02:27 -08:00
b880b17db9 Add TODO about resolving ctors. 2013-12-18 07:39:46 -08:00
e7cf8ffe2e Make method_call benchmark use inheritance.
This also fixes a bug where constructors weren't being bound
correctly, and eliminates some unneeded instructions when
compiling ifs.

I also tweaked the other method_call languages to match Wren's.
Since Wren needs to do a super call to get to the parent _count,
the other languages do now too.

This is nice too because it means we're benchmarking super 
calls.
2013-12-18 07:37:41 -08:00
caafa96252 More work on docs. 2013-12-17 09:39:26 -08:00
271fcec81b Start getting superclass constructors working.
This also means the metaclass inheritance hierarchy parallels
the regular inheritance chain so that the subclass can find
the superclass constructor.
2013-12-17 09:39:05 -08:00
70e548657e Don't allow "super" outside of methods. 2013-12-15 22:08:40 -08:00
5fb2d5af71 Use flexible array for upvalues in closure. 2013-12-15 22:02:22 -08:00
9e67cd3220 Use stdbool.h and bool for booleans. 2013-12-14 23:41:23 -08:00
f5e4f95069 Write some more scope edge case tests. 2013-12-14 16:36:19 -08:00
7fe60499db Get rid of my name from TODOs. Anyone can do them. 2013-12-14 15:28:18 -08:00
5c807c0ec5 Track memory during deallocation correctly.
It used to subtract the number of bytes during deallocation, but
that required knowing the size of an object at free time. That
isn't always available. The old code could read a freed object
while doing this. Bad!

Instead, this tracks how much memory is still being used by
marked objects. It's correct, and is also a bit less code and
faster.
2013-12-14 14:17:16 -08:00
3fd7fa56fb Inline wrenObjectToValue().
Seems to give a slight speed bump. Inlining the wrenIs___
functions doesn't seem to help (may make it a bit worse.)
2013-12-14 11:34:49 -08:00
088b1be98c Clean up config #defines. 2013-12-14 11:06:54 -08:00