union {
struct {
char *ident;
+ int nfield;
+ char **fields;
struct expr *expr;
} sassign;
struct {
enum unop {negate,inverse};
struct expr {
enum {ebinop, ebool, echar, efuncall, eident, eint, enil, etuple,
- eunop} type;
+ estring, eunop} type;
union {
bool ebool;
struct {
struct expr *left;
struct expr *right;
} etuple;
+ char *estring;
struct {
enum unop op;
struct expr *l;
struct type *rtype, struct list *vars, struct list *body);
struct decl *decl_var(struct vardecl *vardecl);
-struct stmt *stmt_assign(char *ident, struct expr *expr);
+struct stmt *stmt_assign(char *ident, struct list *fields, struct expr *expr);
struct stmt *stmt_if(struct expr *pred, struct list *then, struct list *els);
struct stmt *stmt_return(struct expr *rtrn);
struct stmt *stmt_expr(struct expr *expr);
struct expr *expr_ident(char *ident, struct list *fields);
struct expr *expr_nil();
struct expr *expr_tuple(struct expr *left, struct expr *right);
+struct expr *expr_string(char *str);
struct expr *expr_unop(enum unop op, struct expr *l);
struct type *type_basic(enum basictype type);