js: Ignore the first line of input if it starts with "#!"

This allows us to create executable programs in JavaScript :^)
This commit is contained in:
Andreas Kling 2020-03-20 14:49:17 +01:00
parent 3823d13e21
commit 0bc6bcc2ed
Notes: sideshowbarker 2024-07-19 08:12:58 +09:00

View File

@ -57,10 +57,22 @@ int main(int argc, char** argv)
}
auto file_contents = file->read_all();
StringView source;
if (file_contents.size() >= 2 && file_contents[0] == '#' && file_contents[1] == '!') {
size_t i = 0;
for (i = 2; i < file_contents.size(); ++i) {
if (file_contents[i] == '\n')
break;
}
source = StringView((const char*)file_contents.data() + i, file_contents.size() - i);
} else {
source = file_contents;
}
JS::Interpreter interpreter;
interpreter.heap().set_should_collect_on_every_allocation(gc_on_every_allocation);
auto program = JS::Parser(JS::Lexer(file_contents)).parse_program();
auto program = JS::Parser(JS::Lexer(source)).parse_program();
if (dump_ast)
program->dump(0);