Commit Graph

215 Commits

Author SHA1 Message Date
9645ddcb26 Add a little ASCII art Mandelbrot example. 2014-01-07 23:04:30 -08:00
8f316f39f8 Support longer jumps. 2014-01-07 23:03:38 -08:00
074c016c89 Num.floor. 2014-01-07 23:03:25 -08:00
e64d8ace9a Ensure upvalue value is initialized.
Avoids a crash if a GC happens before the upvalue is closed.
2014-01-07 23:03:15 -08:00
3be059a137 Fix scoping and break statements.
Variables declared in the loop were not properly disposed of
when you broke out of the loop.
2014-01-06 08:01:04 -08:00
90a769b6d1 Correctly terminate debug function name. 2014-01-06 07:54:00 -08:00
46e1e7f069 Make string buffer for converting number to string large enough. 2014-01-06 07:53:41 -08:00
b979272305 Clean up text handling a bit:
- Rename IO.write -> IO.print.
- Make IO.write not print a newline.
- Support \u Unicode escapes in strings.
2014-01-05 12:27:12 -08:00
870f3b8b93 Allow more than 256 methods and constants.
Class symbol tables now grow on demand, and the relevant
instructions take 16-bit arguments. There's a small perf hit
for this, but only a few percent, which is good.
2014-01-04 11:08:31 -08:00
f82a034b57 Add time to GC tracing. 2014-01-03 13:17:14 -08:00
058c2606b0 Better argument validation for core methods. 2014-01-03 10:47:26 -08:00
a89386b4e8 Better argument validation for some list methods. 2014-01-02 07:32:00 -08:00
a0c32f2e6e Clean up compiler initialization a bit. 2014-01-02 07:31:31 -08:00
e46b4b30b9 Make Buffer "generic".
This lets us make a growable line-number buffer.
2014-01-01 22:23:03 -08:00
a6fd0b2dd2 Move SymbolTable to wren_utils. 2014-01-01 20:57:58 -08:00
b750ece08b Move object freeing over to wren_value.
That's where allocation is, so it makes sense.
2014-01-01 13:31:19 -08:00
48db3a9620 Start adding support for runtime errors:
- Primitives can now signal an error.
- An error prints a callstack and ends the current (and right 
  now only) fiber.
- Arithmetic operators error if the operand is not a number.
- Real error for method not found.
- Associate source file name, and method names with functions.
- Debug line number info for functions.

Unfortunately, this regresses perf on fib about 15%, mostly
because of the better checking in arithmetic ops.

There's still a bunch of clean up to do, but this is a big step
in the right direction.
2014-01-01 13:25:24 -08:00
45456733aa Fix a few GC bugs.
Adding a to a symbol table can trigger a GC, so we need to make
sure we don't do that while sitting on an unpinned object.
2013-12-30 07:30:50 -08:00
c8fe27d6c4 Allow empty blocks. 2013-12-29 10:46:21 -08:00
a9323376ec "native" -> "foreign". 2013-12-29 10:14:38 -08:00
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