Commit Graph
910 Commits
Author SHA1 Message Date
Daniel Larimer a3aaad83ea Fix bug #362 calling Foreign methods
I assume that invoking callForeign that the apiStack should be restored
to it's original value, rather than reset to NULL.
2016-10-26 13:51:29 -04:00
Bob Nystrom e7cabbb5e4 Reset the API stack after a foreign constructor returns. 2016-08-28 08:23:27 -07:00
Bob Nystrom d331cbf43d Ensure macro parameter is parenthesized. 2016-08-27 21:44:39 -07:00
Bob Nystrom b59eeaf2d1 Support "--version" in the CLI to print the version. 2016-08-27 17:38:14 -07:00
Bob Nystrom 09ef904d32 Use DBL_MIN instead of DBL_EPSILON for Num.smallest. 2016-08-27 17:25:32 -07:00
Bob Nystrom b8b0f36521 Merge branch 'num-properties' of https://github.com/Nelarius/wren into Nelarius-num-properties 2016-08-27 17:18:21 -07:00
Bob Nystrom a8cf1c9d71 Const correct a couple of functions.
Thanks, Michel!
2016-08-16 07:43:54 -07:00
Bob Nystrom febb1b0437 Use a map to check for constant collisions.
Doing an O(n) lookup was too slow.
2016-08-16 07:43:34 -07:00
Bob Nystrom 08eceb7382 Check for duplicates when adding constants.
This saves a little memory, but, more importantly, allows us to support
functions with large numbers of repeated constants.
2016-08-16 07:24:04 -07:00
Johann Muszynski 50fa77356e Add largest, smallest properties to Num class 2016-08-04 21:15:55 +03:00
Bob Nystrom 3666eae013 Tweak new list constructors.
- Remove List.new(_). I was convinced by the issue discussion that
  using it is probably a bad idea. We don't want to encourage more nulls
  in the world than there are already are. So let's see if we can live
  without it and just have List.filled(). That way users think about
  what they're creating a list *of*.
- Added some more tests.
- Correctly handle being given a negative size.
2016-08-03 22:42:31 -07:00
Bob Nystrom 3de394e8a1 Merge branch 'new-list-constructors' of https://github.com/mooxen/wren into mooxen-new-list-constructors 2016-08-03 22:34:08 -07:00
Bob Nystrom 6845328661 Tweak String.indexOf(_,_) a bit.
- Simplify the arithmetic a little in wrenStringFind().
- Allow the start to be negative.
- Even more tests.
- Docs.
2016-08-03 22:19:34 -07:00
Bob Nystrom e5dce527ac Merge branch 'string-indexof-startindex' of https://github.com/underscorediscovery/wren into underscorediscovery-string-indexof-startindex 2016-08-03 21:51:46 -07:00
Bob Nystrom 83bb043327 Merge branch 'forgotten-bytecode' of https://github.com/minirop/wren into minirop-forgotten-bytecode 2016-08-03 21:45:09 -07:00
Bob Nystrom 60a0353a27 Tweak list C API:
- Rename "size" -> "count" to be consistent with other usage.
- Remove "Slot" from the function names, since that's implicit.
- Make the getListElement() just move the element to another slot. This
  matches other APIs where we distinguish accessing a value and
  converting it to some specific type.
2016-07-28 08:06:36 -07:00
Bob Nystrom b8675e2d91 Merge branch 'get_slot_list_values' of https://github.com/dradtke/wren into dradtke-get_slot_list_values 2016-07-28 07:53:19 -07:00
root 244faa5700 renamed filler constructor in list to match issue 2016-07-17 12:24:19 +10:00
root 45d9794476 added extra arguments to list constructors for default size/ value 2016-07-17 12:01:50 +10:00
underscorediscovery 1f84a10f44 Implement String indexOf(needle, startIndex) 2016-07-14 01:23:01 -02:30
minirop 193d102952 missed bytecode name refactoring 2016-07-12 22:59:02 +02:00
Johann Muszynski 817a5650fe Add highest, lowest, epsilon properties to Num class 2016-07-10 22:54:34 +03:00
Bob Nystrom 5418e4f8f3 Add MapEntry to core to let maps be directly iterated.
Fix #372.
2016-07-06 07:17:07 -07:00
Paul 5468d6d033 Fix build, return false instead of NULL 2016-07-02 12:40:00 +01:00
Bob Nystrom 0837917307 Use a hash function for numbers that doesn't tend to zero low bits.
Just pulling the raw words out of a double means integers often map to
hashes with zero low bits. Then when we map that to an entry in the map,
all small integers end up in entry zero, leading to tons of collisions.

This mixes the bits around some like Java does to fix that.

Makes the map_numeric benchmark about 18% faster on my machine. On a
contrived benchmark that just uses keys up to 1000, this makes it 52x
(yes, *times) faster.
2016-06-27 08:13:45 -07:00
Bob Nystrom 4e94195f26 Properly handle tombstones when inserting items into a map.
Previously, you could get into a state where a key was present in the
map, but after a tombstone in the probe sequence. If they key was added
again, it stopped at the first tombstone and added it there, resulting
in the key being in the map multiple times.

Fix #373.
2016-06-27 07:14:52 -07:00
Bob Nystrom bc29f43bbd Allow hosts with no module loader to still load optional modules.
If the host doesn't set a loadModuleFn at all in the config, it should
still be able to load random, meta, etc.
2016-06-27 07:08:08 -07:00
Bob Nystrom 9c3163d533 Only reset the TTY if we created the stdin stream. 2016-06-09 19:16:41 -07:00
Bob Nystrom 6ece314863 Reset the TTY before closing the underlying stdin stream. 2016-06-09 19:16:41 -07:00
Bob Nystrom 33cf8f7b31 Fall back to a simpler REPL if it seems like ANSI escapes won't work. 2016-06-09 19:16:41 -07:00
Bob Nystrom f47e128978 Tab-completion in REPL based on module variables. 2016-06-09 19:16:41 -07:00
Bob Nystrom 98514188b0 More shortcuts:
- Ctrl-B: Move cursor left.
- Ctrl-F: Move cursor right.
- Ctrl-K: Delete everything after cursor.
- Ctrl-L: Clear screen.
- Ctrl-U: Clear line.
- Ctrl-N: Next in history.
- Ctrl-P: Previous in history.
2016-06-09 19:16:41 -07:00
Bob Nystrom 2ba264bc29 Add history to REPL. 2016-06-09 19:16:41 -07:00
Bob Nystrom bc7f1de758 Execute input in the REPL.
Guesses whether the input is an expression or statement and handles it
appropriately. Finally, after over a year, the Wren REPL automatically
prints "3" if you type in "1 + 2". \o/
2016-06-09 19:16:41 -07:00
Bob Nystrom 689cd42269 Start writing the REPL in Wren.
It doesn't actually execute code yet, but it:

- Supports left and right arrow keys for moving the cursor.
- Ctrl-C, Ctrl-D, Ctrl-A, and Ctrl-E for navigating.
- Syntax highlights the line (!).

The next step is to do a rough parse so that we can tell if the line
is an expression, statement, or needs more input. That will tell us
whether we need to interpret it at the top level (statement) and not
worry about a result, evaluate it as an expression and print the result,
or read more lines.
2016-06-09 19:16:41 -07:00
Bob Nystrom 59e9eb127e Add wrenAbortFiber().
Thanks, @underscorediscovery!
2016-06-09 19:14:21 -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
Damien Radtke cf258b9074 Add support for retrieving list values from a slot
This PR adds support for retrieving list information from a slot. Rather
than take the whole list, two different methods are provided for
retrieving a) the length of the list, and b) a specific value in the
list.
2016-05-19 14:11:48 -05:00
Bob Nystrom 2ce5913501 Correctly count subscript parameters in wrenMakeCallHandle().
Fixes #351.
2016-05-04 06:29:44 -07:00
Chris Sawczuk 0c1fc15e3c Fix typos and re-word explanation of gc heapGrowthPercentage 2016-05-03 18:48:08 +01:00
Andrew Murray 05cc248b00 Fixed typo 2016-05-04 00:16:02 +10:00
Bob Nystrom 66e7def128 Style nits. 2016-05-02 16:23:52 -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