Commit Graph
100 Commits
Author SHA1 Message Date
Bob Nystrom 78deace9a4 Merge pull request #365 from underscorediscovery/patch-1
docs; iterator protocol link relative to core/ not modules/
2016-05-27 07:23:07 -07:00
Bob Nystrom 2b0878ec6d Platform.isWindows. 2016-05-21 12:53:21 -07:00
Bob Nystrom 6002cc4d65 Add Stdin.isTerminal. 2016-05-21 12:51:11 -07:00
Bob Nystrom 06731f66d4 Add a Platform class.
- Rename the "process" module to "os".
- Add Platform to it.
- Static "name" method.
- Static "isPosix" method.
- Docs and tests!
2016-05-21 12:44:17 -07:00
Bob Nystrom 6bcc64eb61 Wren 0.1.0!
There's nothing new in this "release", but now is as good a time as any
to start versioning. Going forward, I plan to do periodic releases and
update the changelog so users can see what's going on.
2016-05-21 10:53:05 -07:00
Bob Nystrom 0a060a9678 WrenValue -> WrenHandle. 2016-05-20 20:55:28 -07:00
Bob Nystrom 5d98d20175 Add Stdin.isRaw. 2016-05-20 15:19:18 -07:00
Bob Nystrom 500dd41ccd Add Stdin.readByte(). 2016-05-20 11:50:14 -07:00
Bob Nystrom 872cfdcd42 Mention the subreddit on the community docs.
Fix #360.
2016-05-20 10:02:57 -07:00
Bob Nystrom 1d252d1970 First draft of docs for calling Wren from C. 2016-05-19 16:01:54 -07:00
Bob Nystrom d64af5d6a5 Fix output formatting in Firefox. 2016-05-19 09:30:38 -07:00
Bob Nystrom befe90501b Start writing comprensive embedding docs.
- Break embedding out into a separate section with multiple pages.
- Document the constraints on the API.
- Document the slot array and WrenValue.

Still lots more to do, but getting there...
2016-05-16 08:09:14 -07:00
Bob Nystrom 856390c3fa Merge pull request #357 from hoop33/master
Fix typo
2016-05-04 13:29:59 -07:00
Bob Nystrom 2ce5913501 Correctly count subscript parameters in wrenMakeCallHandle().
Fixes #351.
2016-05-04 06:29:44 -07:00
Bob Nystrom 3b7446738c Merge pull request #354 from ElFeesho/master
Fix typos and re-word explanation of gc heapGrowthPercentage
2016-05-03 12:27:16 -07:00
Bob Nystrom 2f066f0b66 Merge pull request #355 from hoop33/master
Fix typo
2016-05-03 12:26:39 -07:00
Bob Nystrom 33ce3677f3 Merge pull request #353 from radarhere/patch-1
Fixed typo
2016-05-03 10:19:10 -07:00
Bob Nystrom 94eb22cd9d Merge pull request #348 from crimsun/patch-1
Clarified grammatical inversion
2016-05-02 21:54:42 -07:00
Bob Nystrom 020b1b7661 Merge branch 'master' of https://github.com/munificent/wren 2016-05-02 16:23:56 -07:00
Bob Nystrom 66e7def128 Style nits. 2016-05-02 16:23:52 -07:00
Bob Nystrom 1f37068b39 Oops, correct year that C++ was standardized. 2016-05-02 16:23:08 -07:00
Bob Nystrom 18b638b797 Merge pull request #347 from ianmackenzie/patch-1
Fix small typo in method call documentation
2016-04-15 10:13:54 -04:00
Bob Nystrom 694186810b Test that multiple closures of the same code are unequal. 2016-03-26 14:22:38 -07:00
Bob Nystrom 6dc4286ffa Always wrap functions in closures.
This has a couple of pros:

- It simplifies some code that used to have to check whether a called
  thing is a bare function or a closure.
- It's faster because we don't need to do the above checks every time
  something is called.
- It lets us more precisely type some fields that used to be Obj*
  because they could hold an ObjClosure* or ObjFn*.

The cost is that we allocate a closure every time a function is
declared, even if it has no upvalues. Since functions are called way
more often than they are declared, this is still a net win.

On my Mac laptop:

api_call - wren            0.06s 0.0020 104.73%
api_foreign_method - wren  0.32s 0.0040 101.89%
binary_trees - wren        0.23s 0.0057  98.82%
binary_trees_gc - wren     0.79s 0.0170  98.46%
delta_blue - wren          0.13s 0.0031 101.36%
fib - wren                 0.23s 0.0038 103.15%
fibers - wren              0.04s 0.0017  98.97%
for - wren                 0.08s 0.0017 107.81%
method_call - wren         0.12s 0.0024  98.60%
map_numeric - wren         0.31s 0.0052 103.93%
map_string - wren          0.11s 0.0113  97.97%
string_equals - wren       0.20s 0.0023 107.75%
2016-03-26 14:00:17 -07:00
Bob Nystrom a5f95b90e9 Lazy load optional libraries and let the host override them. 2016-03-17 07:49:43 -07:00
Bob Nystrom 984fa1ddd1 Use errorFn for runtime errors. 2016-03-17 07:17:03 -07:00
Bob Nystrom 66b7acd862 Remove unneeded includes. 2016-03-17 07:04:09 -07:00
Bob Nystrom c5855a6fe9 Squashed commit of the following:
commit f93ec6430f9629b5a28765a3961379d1e8296e50
Author: Bob Nystrom <robert@stuffwithstuff.com>
Date:   Wed Mar 16 08:03:25 2016 -0700

    Tiny tweaks.

commit 332a08fe33cddffec82dbd377ee0c941a0066f64
Merge: a673981 14b7a08
Author: Bob Nystrom <robert@stuffwithstuff.com>
Date:   Wed Mar 16 08:01:00 2016 -0700

    Merge branch 'errorFn' of https://github.com/ppvk/wren into ppvk-errorFn

commit 14b7a086ce3dae1b12697319bc2894048fad469f
Author: Paul VanKeuren <paul.vankeuren@gmail.com>
Date:   Tue Mar 15 11:33:37 2016 -0500

    missing semicolon, accessing vm through parser in

commit 924eaa1f9d3fbb26dc07d3ac8be7dc00287138d9
Author: Paul VanKeuren <paul.vankeuren@gmail.com>
Date:   Tue Mar 15 11:25:32 2016 -0500

    fixed missing errorFn in wren.h

commit 3761df111f9dce3bd67407754675c9efbbf2c0b4
Author: Paul VanKeuren <paul.vankeuren@gmail.com>
Date:   Tue Mar 15 11:23:51 2016 -0500

    Added an errorFn to the CLI

commit d51137b4abe339a3f07d7e2f4c5ee0d8d062a009
Author: Paul VanKeuren <paul.vankeuren@gmail.com>
Date:   Tue Mar 15 11:21:16 2016 -0500

    Added a WrenErrorFn typedef, an errorFn slot in WrenConfiguration.  exits early if  is not defined, otherwise it runs the errorFn .
2016-03-16 08:04:03 -07:00
Bob Nystrom a6739819b2 Report undefined variable errors on the line where they are used.
This also more importantly ensures the error message for one has a
bounded length even if the variable name is pathologically long.
2016-03-16 08:00:28 -07:00
Bob Nystrom 1478d6b7e2 Add a few comments. 2016-03-16 07:27:03 -07:00
Bob Nystrom 6f0ee7e52b Merge branch 'master' of https://github.com/RallyTronics/wren into RallyTronics-master 2016-03-16 07:23:24 -07:00
Bob Nystrom 678051c5e1 Tweak makefile formatting. 2016-03-16 07:22:18 -07:00
Bob Nystrom 38699e3a81 Rearrange the code a bit for duplicate method detections. 2016-03-15 07:15:55 -07:00
Bob Nystrom c1cea30131 Merge branch 'no-duplicate-methods' of https://github.com/Qard/wren into Qard-no-duplicate-methods 2016-03-15 06:54:49 -07:00
Bob Nystrom 001db02c81 Remove unused DUP opcode. 2016-03-13 22:11:21 -07:00
Bob Nystrom 22a95265f2 Simplify the formatting used to print compile errors.
Avoids using multiple calls to fprintf() to print a single compile
error. This should make it easier to allow the host to provide a
callback function to print errors.
2016-03-11 21:30:54 -08:00
Bob Nystrom 5be9377d93 Simplify shebang parsing. 2016-03-11 17:23:31 -08:00
Bob Nystrom 485e91ab05 Redo metrics script. 2016-03-07 07:56:44 -08:00
Bob Nystrom fb0e01bfe9 Fix some nits in the FAQ. 2016-03-07 07:41:00 -08:00
Bob Nystrom 139b447898 Compile functions in place instead of copying when done.
The compiler used to maintain all of the data that defines a function,
which it incrementally built up. Then, when it was done, it copied all
of that to a new ObjFn. In theory, that was to trim down some memory
and avoid unneeded fields in ObjFn.

In practice, the performance benefit is negligible and the memory saving
is nullified by the fact that it copies anyway.

This moves all of that mutable state directly into ObjFn. The compiler
creates a new empty ObjFn at the beginning and then just fills it in
in place.

This shaves off about 40 lines of code, is simpler, and doesn't seem to
impact perf.
2016-03-04 07:49:34 -08:00
Bob Nystrom f2f779d3b8 Fix bug with the compiler root not being popped. 2016-03-03 17:48:47 -08:00
Bob Nystrom a3505fa060 Simplify runtime error reporting. 2016-03-03 17:11:52 -08:00
Bob Nystrom 9fda7cb526 Unify Fiber.try() with the other methods to execute fibers. 2016-03-03 17:00:33 -08:00
Bob Nystrom d717ddf817 Simplify how assignment expressions are compiled. 2016-03-03 16:30:48 -08:00
Bob Nystrom 84bcb5801c Add a test for creating a VM without a config. 2016-03-03 14:31:47 -08:00
Bob Nystrom 223d66a01c I can spell gooder. 2016-02-27 16:23:48 -08:00
Bob Nystrom 0a83697bd4 Minor janitorial work. 2016-02-27 16:05:50 -08:00
Bob Nystrom 1e4b9e5175 File.realPath().
Not tested yet, because we can't create symlinks from Wren and I don't
want to check symlinks into the repo, but it seems to do the right
thing.
2016-02-27 15:53:02 -08:00
Bob Nystrom e6b48de598 Fix precedence table in docs.
It was out of sync with the actual implemented precedence in a few
places.
2016-02-27 10:14:09 -08:00
Bob Nystrom fa2598c601 Upgrade to libuv 1.8.0. 2016-02-27 09:19:56 -08:00
Bob Nystrom b7e189fe11 Desugar import statements to core library calls.
This is simpler than having special opcodes for them. It's also a bit
faster, and gets some non-critical code out of the interpreter loop.

Also, this is good prep work for being able to write some of the module
loading process in Wren to make things more flexible for embedders and
the CLI.
2016-02-26 22:43:54 -08:00
Bob Nystrom edca85827a Combine block() and statement().
The separation between the two didn't really do anything useful.
2016-02-25 07:04:48 -08:00
Bob Nystrom d46dfc9500 Allow "*" on lists and strings to repeat them.
This is not implemented on Sequence because, at least for lists and
strings, I think users expect an eager result. Multiplying a string
should give you back a string, not a lazy sequence of repeated
characters.

This also mirrors "+" on strings and lists, which is eager. I like the
idea of having a general guideline that operators are eager.

Repetition is useful for arbitrary sequences, but for that maybe we
should add a "repeat()" method.
2016-02-24 07:48:03 -08:00
Bob Nystrom 919605b7ba Couple of tiny tweaks. 2016-02-24 06:52:12 -08:00
Bob Nystrom 2c4e497c54 Fix a couple of doc bugs. 2016-02-22 07:48:53 -08:00
Bob Nystrom 60162575ee More file system checking functions:
- Stat#isFile
- Stat#isDirectory
- Directory.exists()
- File.exists()
2016-02-21 12:23:33 -08:00
Bob Nystrom c6148f8941 Make Stat a foreign class.
Instead of copying the uv_fs_stat struct to a list of Wren numbers, we
store it directly in the Stat object. This is important because we'll
need to implement later methods like isDirectory() in C so we can use
S_ISDIR(). For that, we need to have access to the original stat data.
2016-02-21 11:34:10 -08:00
Bob Nystrom b331915259 Add stat instance method to File. 2016-02-21 10:18:45 -08:00
Bob Nystrom 3101d9c499 Fix file flags to be OS-independent. 2016-02-20 17:25:41 -08:00
Bob Nystrom ff96a179ac Include stdio.h when debugging is enabled. 2016-02-20 13:36:22 -08:00
Bob Nystrom 8e90e3577b More file IO!
Can now create, delete, and write to files.
2016-02-20 09:23:42 -08:00
Bob Nystrom bec5181bdb Add separate targets for building just the shared or static library.
make static
make shared

Running "make vm" will build both, as usual.

Fixes #322.
2016-02-19 07:22:10 -08:00
Bob Nystrom ef3aa07d84 Add API to get the type of object in a slot. 2016-02-19 07:18:00 -08:00
Bob Nystrom fa0a507b48 Error on jump distance overflow. 2016-02-19 06:57:38 -08:00
Bob Nystrom 5b7cd12e76 Don't run the skynet example from the tests.
It's too slow on the Travis bots and times out.
2016-02-14 22:28:14 -08:00
Bob Nystrom b8e85c83a8 Fix test and add skynet example. 2016-02-14 22:21:50 -08:00
Bob Nystrom d823896136 Merge branch 'master' of https://github.com/munificent/wren 2016-02-14 22:18:53 -08:00
Bob Nystrom 1a6d3703d2 Merge pull request #320 from 4d47/small-doc-update
Fix two small code samples in doc
2016-02-12 10:35:40 -08:00
Bob Nystrom edbffc9a95 Simplify method() and defineMethod().
Passing along a Variable lets us get rid of some duplicate code around
loading the class.
2016-02-12 07:43:44 -08:00
Bob Nystrom 68f801a525 Unnecessary strncmp -> memcmp. 2016-02-12 07:27:42 -08:00
Bob Nystrom 5b5c258f55 Make a little Variable struct.
Gets rid of the slightly ugly loadInstruction output parameter that
gets passed around. Now a reference to a variable is a first-class
concept in the compiler.
2016-02-12 07:16:41 -08:00
Bob Nystrom 68ab4e88c0 Merge branch 'master' of https://github.com/munificent/wren 2016-02-09 07:24:55 -08:00
Bob Nystrom 8b36e2f00b Add sample(_) and sample(_,_) to Random. 2016-02-09 07:24:45 -08:00
Bob Nystrom 895136b78c Merge pull request #319 from 4d47/small-doc-update
Update wrenInterpret doc/site/embedding-api
2016-02-08 17:43:05 -08:00
Bob Nystrom d4a4b26203 Add Random.shuffle(). 2016-02-07 10:38:39 -08:00
Bob Nystrom 79558d95e5 Move File.stat() -> Stat.path().
Thanks, Michel!
2016-02-07 09:56:16 -08:00
Bob Nystrom ffb5ada9fb Move the community docs to the wiki. 2016-01-24 15:39:35 -08:00
Bob Nystrom fde6cfc142 Generate wrenAllocateForeign() to match the other setSlot methods.
Thanks, Michel!
2016-01-24 09:25:04 -08:00
Bob Nystrom 71e2458a6c Add API for accessing command-line arguments.
- Add process module with Process class.
- Add "arguments" and "allArguments" methods.
- Docs for same.
- Support passing additional arguments to command line.
- Add "--help" support to command line.
2016-01-22 07:57:26 -08:00
Bob Nystrom 860220869a Oops. Completely disable lto. 2016-01-22 07:01:56 -08:00
Bob Nystrom f19888d328 Merge branch 'master' of https://github.com/munificent/wren 2016-01-22 06:42:16 -08:00
Bob Nystrom 7e8bc2a89a Disable link-time-optimization for now.
It's failing when building with clang on Travis. The underlying problem
seems to be something broken with how LLVM is looking for the gold
linker, and working around that is outside of my skillset.

To learn more, Google: "LLVMgold.so: error loading plugin" lto
2016-01-22 06:42:01 -08:00
Bob Nystrom 056ae61493 Tweak some docs. 2016-01-21 21:38:27 -08:00
Bob Nystrom 46a03e3a2d Merge pull request #318 from pra85/patch-1
Update license year range to 2016
2016-01-21 15:20:58 -08:00
Bob Nystrom 39b29ee07a Enable link time optimization in the CLI.
One little compiler flag makes a surprisingly large difference:

api_call - wren            0.05s 0.0017 130.52% relative to baseline
api_foreign_method - wren  0.24s 0.0017 144.54% relative to baseline
binary_trees - wren        0.21s 0.0032 112.27% relative to baseline
binary_trees_gc - wren     0.75s 0.0288 115.02% relative to baseline
delta_blue - wren          0.13s 0.0031 103.24% relative to baseline
fib - wren                 0.20s 0.0036 120.56% relative to baseline
fibers - wren              0.04s 0.0007 108.52% relative to baseline
for - wren                 0.07s 0.0009 124.45% relative to baseline
method_call - wren         0.12s 0.0010  95.58% relative to baseline
map_numeric - wren         0.30s 0.0031 110.11% relative to baseline
map_string - wren          0.11s 0.0098 111.38% relative to baseline
string_equals - wren       0.19s 0.0064 115.49% relative to baseline
2016-01-20 07:47:00 -08:00
Bob Nystrom f9d1e9954a Make File.stat() directory test less file system sensitive. 2016-01-05 07:32:51 -08:00
Bob Nystrom 94208647ab Test File.stat() on a directory. 2016-01-01 10:05:31 -08:00
Bob Nystrom 5cd8a06fa0 File.stat(). 2016-01-01 09:58:44 -08:00
Bob Nystrom b054526df8 Add an optional offset to File.readBytes(). 2015-12-30 08:13:19 -08:00
Bob Nystrom 6e2ec92e0d Fix parameter format in docs. 2015-12-29 22:35:14 -08:00
Bob Nystrom 452cc88082 Fix a few typos in the docs. 2015-12-29 22:29:13 -08:00
Bob Nystrom 8854dfb07e Docs for the io module! 2015-12-29 21:56:44 -08:00
Bob Nystrom 678251a00c Fix type for fileFinalizer(). 2015-12-29 21:07:26 -08:00
Bob Nystrom 2c31985e54 Make Directory.list() create and return a list from C. 2015-12-29 08:37:47 -08:00
Bob Nystrom e0ac88c22a Revamp wrenCall to work with slots.
Now, you call wrenEnsureSlots() and then wrenSetSlot___() to set up the
receiver and arguments before the call. Then wrenCall() is passed a
handle to the stub function that makes the call. After that, you can
get the result using wrenGetSlot___().

This is a little more verbose to use, but it's more flexible, simpler,
and much faster in the VM. The call benchmark is 185% of the previous
speed.
2015-12-29 07:58:47 -08:00
Bob Nystrom ed6fad6153 Get rid of fiber for finalizers.
Instead, finalizers just get access to the foreign object's raw bytes.
This is deliberately limiting, since it discourages the user from
interacting with the VM in the middle of a GC.
2015-12-28 08:06:29 -08:00
Bob Nystrom a447b66380 Make slots available to the API outside of foreign methods.
At any point in time, the user can call wrenEnsureSlots() which will
implicitly create a fiber and point to its stack if needed.
2015-12-28 07:49:47 -08:00
Bob Nystrom a09892de32 Use a fiber for a finalizer's foreign stack. 2015-12-27 21:43:08 -08:00
Bob Nystrom 9512ce74c3 Merge branch 'master' into api
# Conflicts:
#	src/module/io.c
2015-12-26 20:42:53 -08:00
Bob Nystrom fbc76cdc05 Fix C++ compile error in Directory.list(). 2015-12-26 20:26:05 -08:00