#include <string.h>
#include <inttypes.h>
+#include "script/builtins.h"
#include "script/parser.h"
#include "system/lt.h"
#include "system/lt/lt_adapters.h"
case '(': return parse_list(gc, current_token);
/* TODO(#292): parser does not support escaped string characters */
case '"': return parse_string(gc, current_token);
+ case '\'': {
+ struct ParseResult result = parse_expr(gc, next_token(current_token.end));
+
+ if (result.is_error) {
+ return result;
+ }
+
+ result.expr = list(gc, 2, SYMBOL(gc, "quote"), result.expr);
+
+ return result;
+ } break;
default: {}
}
- if (isdigit(*current_token.begin)) {
- return parse_number(gc, current_token);
+ if (*current_token.begin == '-' || isdigit(*current_token.begin)) {
+ struct ParseResult result = parse_number(gc, current_token);
+ if (!result.is_error) {
+ return result;
+ }
}
return parse_symbol(gc, current_token);