Commit Graph

1133 Commits

Author SHA1 Message Date
ce8d89d18c Merge branch 'master' into templates 2015-10-08 08:06:40 -07:00
8980d34ee5 Only close an upvalue for a local if there actually is one for it. 2015-10-08 08:06:29 -07:00
fbdf504c76 Include the source text for each interpolated expression.
Since we don't have custom interpolaters yet, this isn't exposed to the
user in any way, but that will come next.

Also added some more tests and explicitly limit the amount of
interpolation nesting.
2015-10-07 07:27:03 -07:00
3dfba7c67a Merge branch 'master' into templates 2015-10-05 07:45:47 -07:00
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
24be23a37d "Template" -> "interpolation".
- Rename the method called on string to "interpolate".
- Make the argument passed to that a first-class StringInterpolation
  object.
- Make that contain a list of strings and InterpolatedField objects.

These first-class objects will make it easier to add things like format
strings and the raw uninterpolated text while still having a pleasant
API.
2015-10-04 15:03:25 -07:00
5aa0a5ee41 Merge branch 'master' into templates 2015-10-04 09:19:51 -07:00
e968b4bf98 Fix two typos in the docs. 2015-10-03 21:45:59 -07:00
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
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
e41d9eac7c Tweak the embedding docs a bit. 2015-10-02 21:25:55 -07:00
d61d7fd5b4 Don't pass fiber explicitly to primitives.
Thanks, Michel!
2015-10-02 07:51:12 -07:00
b7ed774da3 Reading files!
- File.close()
- File.open()
- File.read()
- file.readBytes()

And a few other little methods. Still lots more work to do, but it's a
start.
2015-09-30 21:13:36 -07:00
bacbd85543 Add .isInfinity and .isInteger to Num. 2015-09-30 08:41:43 -07:00
5129597c63 Unify PRIM_ERROR and PRIM_RUN_FIBER. 2015-09-30 07:32:39 -07:00
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
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
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
a944ead5b4 Give the docs some love. 2015-09-22 21:19:38 -07:00
505b48fdac Add a real Pygments lexer for Wren (finally!). 2015-09-22 07:59:54 -07:00
36f7d74183 Unify "script" and "project" under "util". 2015-09-22 07:45:58 -07:00
2f9ba2beaa Merge branch 'buildfix' of https://github.com/krypt-n/wren into krypt-n-buildfix 2015-09-21 19:48:08 -07:00
f6083b1756 Simplify how built-in foreign methods and classes are wired up. 2015-09-21 07:58:39 -07:00
9c92d90374 Use python2 executable for libuv buildscripts
Fixes build for systems with python == python3, as long as a python2
executable exists
2015-09-20 00:49:29 +02:00
8ef4ea6186 Allow super calls in static methods. 2015-09-19 15:19:41 -07:00
b08cadefc0 Fix renamed token type. 2015-09-19 10:09:40 -07:00
46a33a412d String templates (i.e. interpolation).
Still need to do:

- Tagged templates so users can control interpolation.
- Optional format strings.

But basic string interpolation is working now:

System.print("Hi, %(name)! You are %(birth - today) years old.")
2015-09-19 10:07:41 -07:00
19f70b4035 Simplify and optimize how keywords are lexed. 2015-09-17 20:51:24 -07:00
dc527c8d86 Add "io" module with beginnings of a File class. 2015-09-16 07:34:49 -07:00
251752fcfb Make join() require parentheses without a separator. 2015-09-16 07:15:48 -07:00
efceee4320 Let the host application control how System prints text. 2015-09-15 23:01:43 -07:00
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
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
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
f36a795534 Automatically update the string constants when a builtin module changes. 2015-09-13 10:03:02 -07:00
e1cf8e22c3 Merge pull request #300 from jesskay/patch-1
Correct platform.system() call
2015-09-12 10:45:18 -07:00
1a27593993 Error if a class tries to inherit from null.
Fix #246.
2015-09-12 10:14:04 -07:00
e1f979e78a Don't use string length in map benchmark (since it's slow now). 2015-09-12 09:59:30 -07:00
92c2b2d5e0 Copy edit the string docs. 2015-09-12 09:42:31 -07:00
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
c0b5ec9f15 Move codePointAt() to separate CodePointSequence class. 2015-09-11 07:56:01 -07:00
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
adcb5bccba Simplify emitConstant().
Thanks, Michel!
2015-09-09 06:44:26 -07:00
1df7565bb9 Fix bug in passing a range as the string subscript. 2015-09-08 20:59:47 -07:00
6330aae20c Correct platform.system() call
An "arch" somehow ended up in the platform.system() call, which takes no arguments.
2015-09-06 02:11:08 +01:00
783a5b750a Get ranges working in string subscripts (again).
Now with UTF-8 hotness!
2015-09-01 22:14:55 -07:00
2e83f056c1 No more default constructors.
Fixes #296.
2015-09-01 08:16:04 -07:00
36f3059e48 Get finalizers working. 2015-08-31 21:56:21 -07:00
1e0a2e6036 Get rid of WrenMethod and just use WrenValue for both.
Thanks, Michel!
2015-08-31 07:57:48 -07:00
1cea3ca3bc Remove redundant ignoreNewlines(). 2015-08-31 07:46:17 -07:00