ladybird/Userland
mattco98 adb4accab3 LibJS: Add template literals
Adds fully functioning template literals. Because template literals
contain expressions, most of the work has to be done in the Lexer rather
than the Parser. And because of the complexity of template literals
(expressions, nesting, escapes, etc), the Lexer needs to have some
template-related state.

When entering a new template literal, a TemplateLiteralStart token is
emitted. When inside a literal, all text will be parsed up until a '${'
or '`' (or EOF, but that's a syntax error) is seen, and then a
TemplateLiteralExprStart token is emitted. At this point, the Lexer
proceeds as normal, however it keeps track of the number of opening
and closing curly braces it has seen in order to determine the close
of the expression. Once it finds a matching curly brace for the '${',
a TemplateLiteralExprEnd token is emitted and the state is updated
accordingly.

When the Lexer is inside of a template literal, but not an expression,
and sees a '`', this must be the closing grave: a TemplateLiteralEnd
token is emitted.

The state required to correctly parse template strings consists of a
vector (for nesting) of two pieces of information: whether or not we
are in a template expression (as opposed to a template string); and
the count of the number of unmatched open curly braces we have seen
(only applicable if the Lexer is currently in a template expression).

TODO: Add support for template literal newlines in the JS REPL (this will
cause a syntax error currently):

    > `foo
    > bar`
    'foo
    bar'
2020-05-04 16:46:31 +02:00
..
allocate.cpp Userspace: Add missing #includes now that AK/StdLibExtras.h is smaller 2020-03-08 13:06:51 +01:00
aplay.cpp LibAudio/aplay: Handle WAV header errors properly 2020-02-10 14:04:27 +01:00
arp.cpp Userland: Add arp utility (#1962) 2020-04-26 12:54:22 +02:00
avol.cpp LibGUI: Add forwarding header 2020-02-16 09:41:56 +01:00
basename.cpp basename: Use pledge() 2020-02-18 13:29:54 +01:00
cal.cpp LibCore: Moved cal.cpp functions to DateTime 2020-03-18 08:17:01 +01:00
cat.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
chgrp.cpp Userland: Fix null-pointer deref on unknown user/group in chown/chgrp 2020-04-04 19:29:30 +02:00
chmod.cpp chmod: Tweak usage string 2020-02-16 09:51:49 +01:00
chown.cpp Userland: Fix null-pointer deref on unknown user/group in chown/chgrp 2020-04-04 19:29:30 +02:00
chroot.cpp LibCore: Remove leading C from filenames 2020-02-06 15:04:03 +01:00
clear.cpp clear: Use pledge() 2020-02-18 11:35:47 +01:00
copy.cpp copy: Use StringBuilder::join() 2020-03-20 14:41:23 +01:00
cp.cpp LibCore: Remove all remaining C prefix references 2020-03-07 01:33:53 +01:00
crash.cpp Userland: Use ArgsParser in crash 2020-03-06 22:46:17 +01:00
cut.cpp Userland: Correction in the the copyright 2020-03-11 10:12:36 +01:00
date.cpp Userland: Add functionality of changing system date in date utility 2020-03-19 15:48:00 +01:00
df.cpp Userland: Add optional human readable output to /bin/df 2020-03-31 09:08:30 +02:00
disasm.cpp LibX86: Run the instruction decoder in 32-bit mode by default 2020-04-11 13:24:55 +02:00
disk_benchmark.cpp Userspace: Add missing #includes now that AK/StdLibExtras.h is smaller 2020-03-08 13:06:51 +01:00
dmesg.cpp AK: Use size_t for ByteBuffer sizes 2020-02-20 13:20:34 +01:00
du.cpp Userland: Add du program 2020-03-04 18:06:17 +01:00
echo.cpp echo: Use pledge() 2020-02-18 11:35:47 +01:00
env.cpp env: Use pledge() 2020-02-18 13:29:54 +01:00
false.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
fgrep.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
flock.cpp Meta: Add missing copyright headers 2020-04-06 11:09:01 +02:00
functrace.cpp functrace: Log syscalls 2020-04-16 11:17:33 +02:00
gron.cpp AK: Make Vector use size_t for its size and capacity 2020-02-25 14:52:35 +01:00
head.cpp Userspace: Add missing #includes now that AK/StdLibExtras.h is smaller 2020-03-08 13:06:51 +01:00
host.cpp host: Use ArgsParser to parse arguments, and add man page (#1252) 2020-02-20 15:12:55 +01:00
hostname.cpp Kernel: Added the ability to set the hostname via new syscall 2020-04-26 12:59:09 +02:00
html.cpp LibGUI: Make MenuBar a Core::Object 2020-04-21 16:19:18 +02:00
id.cpp LibCore: Remove leading C from filenames 2020-02-06 15:04:03 +01:00
ifconfig.cpp Userland: ifconfig can change the IP address of the default gateway 2020-03-15 19:09:31 +01:00
jp.cpp jp: Use pledge() 2020-02-11 12:16:07 +01:00
js.cpp LibJS: Add template literals 2020-05-04 16:46:31 +02:00
keymap.cpp Userland: Fix leak in keymap 2020-05-03 11:42:32 +02:00
kill.cpp Userland: Fix kill to support negative pid values. 2020-04-26 12:54:10 +02:00
killall.cpp LibCore: Remove leading C from filenames 2020-02-06 15:04:03 +01:00
ln.cpp ln: Use pledge() 2020-02-18 13:29:54 +01:00
ls.cpp Userland/ls: Remove unnecessary output 2020-04-25 12:09:46 +02:00
lsirq.cpp Userland: Replace lsinterrupts with lsirq 2020-03-06 11:19:51 +01:00
lspci.cpp Userland: Fix nullptr dereference if we fail to open the PCIDB 2020-02-20 15:13:42 +01:00
Makefile LibTextCodec: Start fleshing out a simple text codec library 2020-05-03 23:01:58 +02:00
man.cpp LibMarkdown: Drop MD prefixes and move into "Markdown" namespace :^) 2020-04-28 21:04:25 +02:00
md.cpp LibMarkdown: Drop MD prefixes and move into "Markdown" namespace :^) 2020-04-28 21:04:25 +02:00
mkdir.cpp mkdir: Add -p option to create parent directories 2020-04-28 09:36:09 +02:00
mknod.cpp mknod: Use pledge() 2020-01-27 21:38:36 +01:00
modload.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
modunload.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
more.cpp more: Read keystrokes from stdout instead of trying to re-open it 2020-02-08 15:50:00 +01:00
mount.cpp Kernel & Userland: Allow to mount image files formatted with Ext2FS 2020-04-06 15:36:36 +02:00
mv.cpp mv: Use ArgsParser, and check lstat for failure 2020-02-21 15:16:28 +01:00
nc.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
nl.cpp LibCore: Remove leading C from filenames 2020-02-06 15:04:03 +01:00
notify.cpp LibGfx+LibIPC: Add Gfx::ShareableBitmap, a bitmap for easy IPC usage 2020-03-29 19:37:23 +02:00
open.cpp Userland: Add open(1) 2020-04-19 11:14:26 +02:00
pape.cpp LibCore: Remove all remaining C prefix references 2020-03-07 01:33:53 +01:00
paste.cpp LibGUI: Remove leading G from filenames 2020-02-06 20:33:02 +01:00
pidof.cpp Userspace: Add missing #includes now that AK/StdLibExtras.h is smaller 2020-03-08 13:06:51 +01:00
ping.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
pro.cpp ProtocolServer: Pass HTTP response headers to the client 2020-05-03 23:01:58 +02:00
profile.cpp profile: Allow launching a command with profiling enabled 2020-02-22 11:01:37 +01:00
ps.cpp ps: Add some options and slim down the default output style 2020-03-01 17:46:06 +01:00
purge.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
realpath.cpp realpath: Use pledge() 2020-02-18 13:29:54 +01:00
reboot.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
rm.cpp rm: Allow specifying multiple paths to remove 2020-03-01 12:11:31 +01:00
rmdir.cpp rmdir: Use pledge() 2020-02-18 11:35:47 +01:00
shutdown.cpp LibCore: Remove leading C from filenames 2020-02-06 15:04:03 +01:00
sleep.cpp Userspace: Add missing #includes now that AK/StdLibExtras.h is smaller 2020-03-08 13:06:51 +01:00
sort.cpp Userspace: Add missing #includes now that AK/StdLibExtras.h is smaller 2020-03-08 13:06:51 +01:00
stat.cpp Userland: Use ArgParser in stat and support multiple files + links 2020-03-09 12:37:49 +01:00
strace.cpp strace: Update ptrace() usage 2020-04-13 00:53:22 +02:00
su.cpp Userspace: Add missing #includes now that AK/StdLibExtras.h is smaller 2020-03-08 13:06:51 +01:00
sync.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
syscall.cpp AK: Add global FlatPtr typedef. It's u32 or u64, based on sizeof(void*) 2020-03-08 13:06:51 +01:00
sysctl.cpp sysctl: Permit 'sysctl -a' invocation 2020-05-04 09:41:43 +02:00
tail.cpp LibCore: Remove all remaining C prefix references 2020-03-07 01:33:53 +01:00
tee.cpp AK: Make Vector use size_t for its size and capacity 2020-02-25 14:52:35 +01:00
test_efault.cpp Kernel: Fail with EFAULT for any address+size that would wrap around 2020-01-29 12:56:07 +01:00
test_io.cpp Kernel: rmdir("/") should fail instead of asserting 2020-04-19 18:07:16 +02:00
test-bindtodevice.cpp Meta: Add missing copyright headers 2020-04-06 11:09:01 +02:00
test-crypto.cpp LibCrypto: Small fixes in BigInteger & test-crypto 2020-05-03 14:31:26 +02:00
top.cpp AK: Make quick_sort() a little more ergonomic 2020-03-03 16:02:58 +01:00
touch.cpp Userland: "touch" can now handle multiple paths as arguments 2020-05-01 17:08:46 +02:00
tr.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
true.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
truncate.cpp Userland: Delete redundant code in truncate 2020-02-23 06:46:38 +01:00
tt.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
tty.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
umount.cpp LibCore: Remove leading C from filenames 2020-02-06 15:04:03 +01:00
uname.cpp uname: Remove trailing space character 2020-03-25 15:48:35 +01:00
uptime.cpp uptime: Use pledge() 2020-02-18 13:29:54 +01:00
useradd.cpp LibCore: Remove leading C from filenames 2020-02-06 15:04:03 +01:00
userdel.cpp Meta: Adjust some copyright dates by Fei Wu 2020-03-02 14:24:25 +01:00
wc.cpp wc: Use pledge() 2020-02-18 11:35:47 +01:00
which.cpp which: Use pledge() 2020-02-18 11:35:47 +01:00
whoami.cpp whoami: Use pledge() and unveil() 2020-02-18 11:35:47 +01:00
yes.cpp yes: Use pledge() 2020-02-18 11:35:47 +01:00