aboutsummaryrefslogtreecommitdiff
path: root/src/cffc.hff
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-26 22:08:52 +0200
committerlemon <lsof@mailbox.org>2022-08-26 22:11:30 +0200
commit4a7d610bb9a441f6fb7f88caaa803c1c85e4fcfd (patch)
tree3ac01c9be375f30efd09f0a670da74f886ad44ca /src/cffc.hff
parent475125eaba2852f88a4ee8d9be64c8b4964df3a9 (diff)
bitfields
Diffstat (limited to 'src/cffc.hff')
-rw-r--r--src/cffc.hff18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/cffc.hff b/src/cffc.hff
index d1d423f..066c1f7 100644
--- a/src/cffc.hff
+++ b/src/cffc.hff
@@ -19,8 +19,8 @@ struct Loc {
#[lax]
enum TokT : i32 {
// !sorted
- kw_alignof, kw_and, kw_as, kw_break, kw_case, kw_const,
- kw_continue, kw_def, kw_defer, kw_defmacro, kw_do,
+ kw_alignof, kw_and, kw_as, kw_bitfield, kw_break, kw_case,
+ kw_const, kw_continue, kw_def, kw_defer, kw_defmacro, kw_do,
kw_else, kw_enum, kw_extern, kw_fn,
kw_for, kw_if, kw_import, kw_let, kw_offsetof,
kw_or, kw_return, kw_sizeof, kw_static,
@@ -71,6 +71,12 @@ struct AggField {
struct EnumVal { name *const u8, i i64 }
+struct BitFField {
+ name *const u8,
+ ty *const Type,
+ off u16, size u16
+}
+
enum union TeplArg;
struct Type {
@@ -108,6 +114,12 @@ struct Type {
flds [#]AggField,
decls *Env,
},
+ BitF struct {
+ intty *const Type,
+ name *const u8,
+ id int,
+ flds [#]BitFField,
+ },
VaList,
},
@@ -178,9 +190,11 @@ struct Expr {
Cond struct { test *Expr, t *Expr, f *Expr },
Cast *Expr,
Dot struct { lhs *Expr, fld *const AggField },
+ BitDot struct { lhs *Expr, fld *const BitFField },
SLen *Expr,
SPtr *Expr,
EUTag *Expr,
+ BitRaw *Expr,
Index struct { lhs *Expr, rhs *Expr },
Slice struct { lhs *Expr, begin *Expr, end *Expr },
Call struct { lhs *Expr, args [#]Expr },