]> git.lizzy.rs Git - nothing.git/blobdiff - src/script/expr.h
(#301) Make parser support lists
[nothing.git] / src / script / expr.h
index e0bfb53efc54603a6c4e02c9f396bbaba5f04bca..bf77829988f25a85e9c57a9d86eab6cee3cc4f9e 100644 (file)
@@ -9,7 +9,8 @@ struct Atom;
 enum ExprType
 {
     EXPR_ATOM = 0,
-    EXPR_CONS
+    EXPR_CONS,
+    EXPR_VOID
 };
 
 // TODO(#285): there is no way to execute struct Expr
@@ -22,23 +23,10 @@ struct Expr
     };
 };
 
-struct ParseResult
-{
-    bool is_error;
-    union {
-        struct Expr expr;
-        const char *error;
-    };
-};
-
-struct ParseResult parse_success(struct Expr expr);
-struct ParseResult parse_failure(const char *error);
-
 struct Expr atom_as_expr(struct Atom *atom);
 struct Expr cons_as_expr(struct Cons *cons);
-struct ParseResult create_expr_from_str(const char *str,
-                                        size_t *cursor,
-                                        size_t n);
+struct Expr void_expr(void);
+
 void destroy_expr(struct Expr expr);
 void print_expr_as_sexpr(struct Expr expr);
 
@@ -60,7 +48,9 @@ struct Atom
     };
 };
 
-struct Atom *create_atom(enum AtomType type, ...);
+struct Atom *create_number_atom(float num);
+struct Atom *create_string_atom(const char *str, const char *str_end);
+struct Atom *create_symbol_atom(const char *sym, const char *sym_end);
 void destroy_atom(struct Atom *atom);
 void print_atom_as_sexpr(struct Atom *atom);