Commit Graph
100 Commits
Author SHA1 Message Date
Bob Nystrom 5454152dff Merge pull request #313 from acook/patch-1
Fixing a couple of typos in the classes docs.
2015-11-25 08:59:16 -08:00
Bob Nystrom 69a5c1d017 Avoid empty array initializer which seems to be problematic on VC++. 2015-11-25 08:36:42 -08:00
Bob Nystrom 5bde04db4c Eagerly evaluate interpolated expressions.
If we ever support custom string templates, we'll need to go back to
compiling them to functions. But, for now, they can be evaluated
eagerly, leading to simpler code.
2015-11-23 07:08:14 -08:00
Bob Nystrom fb72e0fff7 Document method scope. 2015-11-21 14:00:21 -08:00
Bob Nystrom 03163a760f Document interpolation. 2015-11-21 09:20:50 -08:00
Bob Nystrom 78655c68b0 Simple string interpolation.
This allows "%(...)" inside a string literal to interpolate the
stringified result of an expression.

It doesn't support custom interpolators or format strings, but we can
consider extending that later.
2015-11-11 07:55:48 -08:00
Bob Nystrom 71575d9179 Switch to O3 for release builds.
It now seems to be fairly consistently faster on my machine:

binary_trees - wren     0.22s 0.0023 100.10% relative to baseline
binary_trees_gc - wren  0.85s 0.0160 112.63% relative to baseline
delta_blue - wren       0.12s 0.0044 102.91% relative to baseline
fib - wren              0.21s 0.0021 103.34% relative to baseline
fibers - wren           0.26s 0.0083 102.46% relative to baseline
for - wren              0.08s 0.0024 111.82% relative to baseline
method_call - wren      0.11s 0.0087  94.56% relative to baseline
map_numeric - wren      0.32s 0.0042 109.83% relative to baseline
map_string - wren       0.11s 0.0096 105.69% relative to baseline
string_equals - wren    0.19s 0.0028 110.00% relative to baseline
2015-11-10 07:33:15 -08:00
Bob Nystrom aaab14959f Get rid of extraneous "," in module macros.
Thanks, Michel!
2015-11-10 07:13:19 -08:00
Bob Nystrom de7b062a03 Tweak module docs a bit. 2015-11-09 07:42:48 -08:00
Bob Nystrom 902289d7dd Document the "random" module. 2015-11-09 07:37:06 -08:00
Bob Nystrom 82706b74fc Reorganize site to make room for documenting the other built-in modules. 2015-11-08 13:31:22 -08:00
Bob Nystrom 8c0dae1320 Move precedence table to syntax page. 2015-11-08 10:59:23 -08:00
Bob Nystrom 0bf5dc42ef Remove outdated docs. 2015-11-07 13:00:49 -08:00
Bob Nystrom 7ae9888c4f It turns out "is" is just a normal overridable operator. Who knew? 2015-11-07 13:00:24 -08:00
Bob Nystrom 931d9ca4d3 Reorganize the language guide.
- Rename "Expressions" -> "Method Calls".
- Organize "Types" and "Language" into a single linear narrative.
- Mobile-specific navigation to handle the longer guide.
- Rename "Fibers" -> "Concurrency".
- Get rid of duplicate stuff about signatures in "Classes".
- Add next/prev links to each page in the guide.
- Move "Contributing" and "Community" up to the top level.
- Move the precendence table to a separate "Grammar" page.
- Lots of other little stuff.
2015-11-07 11:09:04 -08:00
Bob Nystrom bbd6b827b5 Fix C++ compile errors. 2015-11-04 07:07:33 -08:00
Bob Nystrom 2ff8acbe1a Tweak a few things in the new GC.
- Make sure it handles an empty gray set.
- Make sure growing the gray stack doesn't itself trigger a GC.
- Make sure it works when stress testing is enabled.
- Ensure the tests kick off a GC.
2015-10-29 07:38:09 -07:00
Bob Nystrom 25bd182c58 Fix some typos and rename some functions.
Makes the tri-color abstraction more explicit throughout the code.
2015-10-28 07:55:04 -07:00
Bob Nystrom e3c9324dd9 Merge branch 'master' into iwillspeak-iterative-gc 2015-10-28 07:46:06 -07:00
Bob Nystrom e985e6fe07 Make sure binary_trees_gc actually stresses GC. 2015-10-28 07:45:52 -07:00
Bob Nystrom b365c07d7a Add a benchmark that explicitly invokes the GC. 2015-10-24 11:00:17 -07:00
Bob Nystrom 0f7d4dd4d0 Add a timeout to the test runner.
This ensures that when you run the tests while stress testing the GC,
that a pathological test won't hang forever.
2015-10-24 10:58:21 -07:00
Bob Nystrom 720c03cf49 Add System.gc(). 2015-10-24 10:56:27 -07:00
Bob Nystrom f145662158 "Auxiliary" -> "optional".
Fixes #309.
2015-10-24 09:23:25 -07:00
Bob Nystrom 545a4cbf7e Style example output and errors in the docs. 2015-10-18 15:56:52 -07:00
Bob Nystrom 2174ff31e7 Merge pull request #308 from iwillspeak/master
Add Will Speak to Authors File
2015-10-18 10:35:14 -07:00
Bob Nystrom 30e7d9e508 Move core.wren to be next to wren_core.wren.inc. 2015-10-17 22:17:10 -07:00
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
Bob Nystrom 3ca480cbf4 Merge branch 'master' of https://github.com/iwillspeak/wren into iwillspeak-master 2015-10-17 20:07:52 -07:00
Bob Nystrom a3f3e3ce03 Don't try to run the guess_number example from the test script. 2015-10-17 13:29:50 -07:00
Bob Nystrom 2c5926b32b Add guess a number example. 2015-10-17 11:19:25 -07:00
Bob Nystrom 5d6ed0958c Use explicit constant for 2**53. 2015-10-17 11:07:13 -07:00
Bob Nystrom 8436ce1934 Add a random module. 2015-10-17 11:03:15 -07: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 29eebe4928 Tweak libuv.py a bit. 2015-10-16 21:33:22 -07:00
Bob Nystrom 82d6453a7e Merge branch 'master' of https://github.com/ppearson/wren into ppearson-master 2015-10-16 21:24:22 -07:00
Bob Nystrom d431c2eaa8 Start sketching in support for reading from stdin. 2015-10-16 21:05:24 -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 e968b4bf98 Fix two typos in the docs. 2015-10-03 21:45:59 -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 e41d9eac7c Tweak the embedding docs a bit. 2015-10-02 21:25:55 -07:00
Bob Nystrom d61d7fd5b4 Don't pass fiber explicitly to primitives.
Thanks, Michel!
2015-10-02 07:51:12 -07:00
Bob Nystrom 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
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 a944ead5b4 Give the docs some love. 2015-09-22 21:19:38 -07:00
Bob Nystrom 505b48fdac Add a real Pygments lexer for Wren (finally!). 2015-09-22 07:59:54 -07:00
Bob Nystrom 36f7d74183 Unify "script" and "project" under "util". 2015-09-22 07:45:58 -07:00
Bob Nystrom 2f9ba2beaa Merge branch 'buildfix' of https://github.com/krypt-n/wren into krypt-n-buildfix 2015-09-21 19:48:08 -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 e1cf8e22c3 Merge pull request #300 from jesskay/patch-1
Correct platform.system() call
2015-09-12 10:45:18 -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 e1f979e78a Don't use string length in map benchmark (since it's slow now). 2015-09-12 09:59:30 -07:00
Bob Nystrom 92c2b2d5e0 Copy edit the string docs. 2015-09-12 09:42:31 -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
Bob Nystrom 6559edbc56 Update docs to mention libuv. 2015-08-30 22:38:40 -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 a11450e722 Install g++-multilib for 32-bit std C++ libs on Travis. 2015-08-28 20:25:26 -07:00
Bob Nystrom 647e70a8be Print output when a command fails in libuv.py. 2015-08-28 20:14:55 -07:00
Bob Nystrom 52f7f96813 Get libuv building for all architectures on Linux. 2015-08-28 19:49:19 -07:00
Bob Nystrom b4deb30a02 Reorganize build scripts for libuv.
- Create separate libs for each architecture. OS X doesn't need this
  (we just build a universal binary), but it will help Linux.
- Move the libuv build stuff into wren.mk where the actual dependency
  on the lib is.
- Download libuv to deps/ instead of build/. That way "make clean"
  doesn't blow it away.
- Don't redownload libuv unless needed.
2015-08-28 19:31:03 -07:00
Bob Nystrom 0ae59be11a Use the same libuv output directory on Mac and Linux. 2015-08-27 07:55:12 -07:00
Bob Nystrom f33b362cc0 Clean up delta_blue benchmark. 2015-08-27 06:25:24 -07:00
Bob Nystrom fa4a8148c9 A little bit of code clean-up. 2015-08-22 07:56:38 -07:00
Bob Nystrom 881824227d Don't count "{" or "}" in the line count. 2015-08-22 07:27:32 -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 eda3f89266 Merge branch 'master' of https://github.com/munificent/wren 2015-08-20 22:34:42 -07:00
Bob Nystrom 610952f727 Update line count in docs. 2015-08-20 22:34:33 -07:00
Bob Nystrom f433237ff2 Merge pull request #297 from Fedjmike/patch-1
readme: Updated line count
2015-08-20 22:34:08 -07:00
Bob Nystrom 40fbf6112b Use "init " as the prefix for initializers. 2015-08-20 22:30:44 -07:00