Commit Graph

159 Commits

Author SHA1 Message Date
Bob Nystrom
e5176607d9 Move meta and random to "aux" modules.
Wren now has three classes of modules:

- The one magic "core" module that's built in and always needed.
- Auxiliary libraries like "meta" and "random". These do not have any
  dependencies, so can be used even when you embed Wren inside an
  application. But they're also optional and can be disabled if you
  don't need them.
- CLI modules. These ones need libuv and are tied to the CLI wrapper
  around the VM.
2015-10-17 22:09:48 -07:00
Will Speak
d45c0d7f82 Add Support for \U Style Unicode Escapes
This allows fuky things such as 🚀 and 😀 to be Direclty encoded in
Wren strings.
2015-10-17 10:35:46 +01:00
Bob Nystrom
49601e67c5 Don't require nonstandard __builtin_unreachable() in UNREACHABLE().
Fix #304 (I hope).
2015-10-16 21:51:30 -07:00
Bob Nystrom
c714c53c83 "Library" -> "module". 2015-10-15 19:38:25 -07:00
Bob Nystrom
3b09b35b59 Get rid of source path in module.
It wasn't useful anyway since it always had the module name for all but
the main script.
2015-10-15 18:17:42 -07:00
Bob Nystrom
d5b9f0096c Move Meta to a separate module.
Also cleaned up some of the code around loading the core module.
2015-10-15 18:08:56 -07:00
Bob Nystrom
06a4e00f31 Store the module debug path in the ObjModule.
Thanks, Michel!
2015-10-14 07:37:13 -07:00
Bob Nystrom
8980d34ee5 Only close an upvalue for a local if there actually is one for it. 2015-10-08 08:06:29 -07:00
Bob Nystrom
24cbb7f399 Fix closures in methods.
A local name inside a method should always resolve to a self send even
if there is a local variable with that name outside of the method.
2015-10-05 07:44:51 -07:00
Bob Nystrom
76d188e018 Get rid of PrimitiveResult.
Primitives still have a return value to indicate normal value returning
versus runtime errors or fiber switching since it minimizes branches
in the common case of a normal value result.
2015-10-03 20:43:12 -07:00
Bob Nystrom
812bc15380 Get rid of the special "call" primitive result type.
Instead, Fn.call(...) is a special *method* type that has the same
special sauce. The goal is eventually to get rid of the primitive
result type entirely.
2015-10-03 19:04:11 -07:00
Bob Nystrom
d61d7fd5b4 Don't pass fiber explicitly to primitives.
Thanks, Michel!
2015-10-02 07:51:12 -07:00
Bob Nystrom
bacbd85543 Add .isInfinity and .isInteger to Num. 2015-09-30 08:41:43 -07:00
Bob Nystrom
5129597c63 Unify PRIM_ERROR and PRIM_RUN_FIBER. 2015-09-30 07:32:39 -07:00
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
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
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
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
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
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
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