Commit Graph
58 Commits
Author SHA1 Message Date
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 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 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 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
RallyTronics 676f4e1037 io.c fixes to build in Visual Studio 2016-03-15 14:52:09 -06:00
Yasuhiro Matsumoto 8c79501738 Fix windows build 2016-03-16 00:37:23 +09: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 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 8e90e3577b More file IO!
Can now create, delete, and write to files.
2016-02-20 09:23:42 -08:00
Bob Nystrom 79558d95e5 Move File.stat() -> Stat.path().
Thanks, Michel!
2016-02-07 09:56:16 -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 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 8854dfb07e Docs for the io module! 2015-12-29 21:56:44 -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 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
Bob Nystrom 0ac793d4f8 Add Directory.list() to io. 2015-12-24 10:12:12 -08:00
Bob Nystrom 7fcdcf2f1a wrenReturn___() -> wrenSlotSet___().
This turns those functions into general-purpose functions for writing
raw C values into slots on the foreign call stack.

Writing a return just means writing a value to slot 0.
2015-12-16 13:00:13 -08:00
Bob Nystrom 4b3c818ec5 Start moving embedding API towards "slot" register-API.
- wrenGetArgumentCount() -> wrenGetSlotCount()
- wrenGetArgument___() -> wrenGetSlot___()

Also, the get functions assert that the value is the right type instead
of checking at runtime. This puts the onus on the caller to be safe,
but maximizes performance.
2015-12-16 10:22:42 -08:00
Rohan Singh 2125471132 Addressing feedback
* Always include fcntl.h in io.c
* FileReqData -> FileRequestData
* Don't combine allocations
* Make output paths more consistent with the docs
2015-11-25 19:47:13 -05:00
Rohan Singh 2708b0c7ae Fix handleRequestError casting uv_fs_t::data to the wrong type 2015-11-25 12:43:50 -05:00
Rohan Singh 8d63667ce2 Store buffer info in uv_fs_t::data so we don't depend on a private libuv field for it 2015-11-25 12:43:50 -05:00
Rohan Singh f09e75c6e8 Update Visual Studio projects so we can build again 2015-11-25 12:43:19 -05: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 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 d431c2eaa8 Start sketching in support for reading from stdin. 2015-10-16 21:05:24 -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 f6083b1756 Simplify how built-in foreign methods and classes are wired up. 2015-09-21 07:58:39 -07:00
Bob Nystrom dc527c8d86 Add "io" module with beginnings of a File class. 2015-09-16 07:34:49 -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