Commit Graph
696 Commits
Author SHA1 Message Date
Bob Nystrom b05a74da19 Revamp how runtime errors and fiber switching is handled.
- Add Fiber.transferError(_).
- Primitives place runtime errors directly in the fiber instead of on
  the stack.
- Primitives that change fibers set it directly in the VM.
- Allow a fiber's error to be any object (except null).
2015-09-29 22:57:03 -07:00
Bob Nystrom 79354f5a97 Do some work on wrenCall().
- Add an explicit va_list version. That lets variadic functions
  forward to it.
- Fix a GC bug in wrenCall() with return values.
- Make the call API test not re-enter the VM.
2015-09-29 19:29:10 -07:00
Bob Nystrom f757c9efac Better embedding API support (and tests!) for strings with null bytes.
- Test that a foreign method can return strings.
- Test that a foreign method can return a string with null bytes.
- Test wrenCall().
- Allow passing NULL for "v" to wrenCall().
- Allow "a" for passing an explicit length byte array to wrenCall().
2015-09-24 08:02:31 -07:00
Bob Nystrom f6083b1756 Simplify how built-in foreign methods and classes are wired up. 2015-09-21 07:58:39 -07:00
Bob Nystrom 8ef4ea6186 Allow super calls in static methods. 2015-09-19 15:19:41 -07:00
Bob Nystrom 19f70b4035 Simplify and optimize how keywords are lexed. 2015-09-17 20:51:24 -07:00
Bob Nystrom dc527c8d86 Add "io" module with beginnings of a File class. 2015-09-16 07:34:49 -07:00
Bob Nystrom 251752fcfb Make join() require parentheses without a separator. 2015-09-16 07:15:48 -07:00
Bob Nystrom efceee4320 Let the host application control how System prints text. 2015-09-15 23:01:43 -07:00
Bob Nystrom 58e4d26648 "IO" -> "System".
Get rid of the separate opt-in IO class and replace it with a core
System class.

- Remove wren_io.c, wren_io.h, and io.wren.
- Remove the flags that disable it.
- Remove the overloads for print() with different arity. (It was an
  experiment, but I don't think it's that useful.)
- Remove IO.read(). That will reappear using libuv in the CLI at some
  point.
- Remove IO.time. Doesn't seem to have been used.
- Update all of the tests, docs, etc.

I'm sorry for all the breakage this causes, but I think "System" is a
better name for this class (it makes it natural to add things like
"System.gc()") and frees up "IO" for referring to the CLI's IO module.
2015-09-15 07:46:09 -07:00
Bob Nystrom 66b89a493f Combine io.c and vm.c.
(This is mainly to free up io.c as a built in module.)
2015-09-13 22:29:47 -07:00
Bob Nystrom ea5c3b01eb Add module for Scheduler.
Also reorganizes some code to make it easier to add more modules.
2015-09-13 11:32:39 -07:00
Bob Nystrom f36a795534 Automatically update the string constants when a builtin module changes. 2015-09-13 10:03:02 -07:00
Bob Nystrom 1a27593993 Error if a class tries to inherit from null.
Fix #246.
2015-09-12 10:14:04 -07:00
Bob Nystrom fe143644b3 Rationalize string lengths.
The .count getter on string returns the number of code points. That's
O(n), but it's consistent with the rest of the main string API.

If you want the number of bytes, it's "string".bytes.count.

Updated the docs.

Fixes 68. Woo!
2015-09-11 21:33:26 -07:00
Bob Nystrom c0b5ec9f15 Move codePointAt() to separate CodePointSequence class. 2015-09-11 07:56:01 -07:00
Bob Nystrom bda9ad880a Flesh out string byte handling a bit:
- Get rid of public byteAt(_) method on strings. It's redundant and
  longer than .bytes[_].
- Implement bytes.count natively so it's O(1).
2015-09-10 23:52:18 -07:00
Bob Nystrom adcb5bccba Simplify emitConstant().
Thanks, Michel!
2015-09-09 06:44:26 -07:00
Bob Nystrom 1df7565bb9 Fix bug in passing a range as the string subscript. 2015-09-08 20:59:47 -07:00
Bob Nystrom 783a5b750a Get ranges working in string subscripts (again).
Now with UTF-8 hotness!
2015-09-01 22:14:55 -07:00
Bob Nystrom 2e83f056c1 No more default constructors.
Fixes #296.
2015-09-01 08:16:04 -07:00
Bob Nystrom 36f3059e48 Get finalizers working. 2015-08-31 21:56:21 -07:00
Bob Nystrom 1e0a2e6036 Get rid of WrenMethod and just use WrenValue for both.
Thanks, Michel!
2015-08-31 07:57:48 -07:00
Bob Nystrom 1cea3ca3bc Remove redundant ignoreNewlines(). 2015-08-31 07:46:17 -07:00
Bob Nystrom 2b044666ee Reorganize trailing comma code a bit.
- Split out syntax error tests.
- Avoid redundant handling of empty literals.
2015-08-31 07:23:36 -07:00
Lukas Werling b20c9a1b38 Allow trailing comma in list literal 2015-08-31 06:41:09 -07:00
Lukas Werling e1d3596643 Allow trailing comma in map literal 2015-08-31 06:41:09 -07:00
Bob Nystrom 556af50f83 Revise low level fiber semantics to play nicer with schedulers.
Now that I'm starting to write a real async scheduler on top of Wren's
basic fiber API, I have a better feel for what it needs. It turns out
run() is not it.

- Remove run() methods.
- Add transfer() which leaves the caller of the invoked fiber alone.
- Add suspend() to return control to the host application.
- Add Timer.schedule() to start a new independently scheduled fiber.
- Change Timer.sleep() so that it only transfers control to explicitly
  scheduled fibers, not any one.
2015-08-30 22:15:37 -07:00
Bob Nystrom 91af02ac81 Merge branch 'master' into libuv
# Conflicts:
#	project/xcode/wren.xcodeproj/project.pbxproj
#	script/wren.mk
#	src/cli/main.c
#	src/cli/vm.c
#	src/cli/vm.h
#	test/api/main.c
2015-08-28 23:13:56 -07:00
Bob Nystrom fa4a8148c9 A little bit of code clean-up. 2015-08-22 07:56:38 -07:00
Bob Nystrom 1c941c0258 Make a helper function for matching and consuming a character. 2015-08-21 23:08:11 -07:00
Bob Nystrom 470d2347ff Store number and string literals directly as a Value in the parser.
Thanks, Michel!
2015-08-21 22:54:30 -07:00
Bob Nystrom 40fbf6112b Use "init " as the prefix for initializers. 2015-08-20 22:30:44 -07:00
Bob Nystrom ab3c57d518 Merge branch 'still-seeing-this' of https://github.com/minirop/wren into ctor 2015-08-20 22:23:53 -07:00
minirop af5b654f4b updated comments where "this" was still used for constructors 2015-08-19 19:33:54 +02:00
Rohan Singh 513f272244 Copy the null terminator with the string instead of setting it 2015-08-16 14:00:50 -04:00
Rohan Singh cb603f44c2 Properly dispose of libuv timers when we finish using them 2015-08-16 13:58:24 -04:00
Rohan Singh 0efb943173 Fix timerGetSource() returning a string without a null terminator 2015-08-16 13:58:23 -04:00
Bob Nystrom cd5087d222 Get 32-bit and C++ Mac builds happy with libuv. 2015-08-16 10:28:55 -07:00
minirop 0c539af6ac added scientific notation 2015-08-16 11:50:45 +02:00
Bob Nystrom 48bdbc7745 First pass at implementing foreign classes.
Most of the pieces are there:

- You can declare a foreign class.
- It will call your C function to provide an allocator function.
- Whenever a foreign object is created, it calls the allocator.
- Foreign methods can access the foreign bytes of an object.
- Most of the runtime checking is in place for things like subclassing
  foreign classes.

There is still some loose ends to tie up:

- Finalizers are not called.
- Some of the error-handling could be better.
- The GC doesn't track how much memory a marked foreign object uses.
2015-08-15 12:07:53 -07:00
Bob Nystrom 9845ed5126 Tests for Timer.sleep(). 2015-08-08 07:17:30 -07:00
Bob Nystrom d4acbe8a70 A vertical slice of real libuv integration.
This adds a "timer" module to the CLI that provides a Timer class with
a static sleep() method. Not the most exciting functionality in the
world, but it requires the full hunk of libuv integration:

- The CLI sets up libuv and runs the event loop.
- Added a new directory src/module for CLI modules.
- Updated all the make scripts to handle it.
- Reorganized some other CLI code.
2015-08-07 08:10:55 -07:00
Bob Nystrom 56d4d3e671 Allow passing WrenValues to wrenCall(). 2015-08-07 07:57:23 -07:00
Bob Nystrom 0b97b27cf4 Add an API for storing handles to values outside of the VM.
It's pretty bare bones now, but it lets you get a reference to an object
from a foreign call and then return it later.
2015-08-06 22:24:15 -07:00
Bob Nystrom a1424f8371 Be more explicit about fulling initializing Signature structs.
Thanks, Michel!
2015-08-06 07:34:19 -07:00
Bob Nystrom d18ee3068a Make wrenFindVariable() also take a module.
Thanks, Michel!
2015-08-06 07:13:11 -07:00
Bob Nystrom 0631f3b109 Fix deadlock bug in map insertion. 2015-08-06 06:55:30 -07:00
Bob Nystrom 71ab3ca887 Use "construct" instead of "this" to define constructors. 2015-07-21 07:24:53 -07:00
Bob Nystrom bc822cd4c7 Merge branch 'master' into constructor-methods 2015-07-19 12:49:23 -07:00