Aria

A low-level systems programming language
git clone git://git.m21c.me/Aria.git
Log | Files | Refs | LICENSE

commit 4b90764e547ea0bb9fdb8d93d9492db3668a033f
parent 27abb47957cb359cc7d3d8a8732d7ecd1f63f647
Author: m21c  <ho*******@gmail.com>
Date:   Wed,  6 Oct 2021 00:01:38 +0200

added keywords for sizeof, alignof, lengthof, bitcast

Diffstat:
Mcompiler.c | 134+++++++++++++++++++++++++++++++++++++++++++++----------------------------------
1 file changed, 77 insertions(+), 57 deletions(-)

diff --git a/compiler.c b/compiler.c @@ -68,6 +68,8 @@ enum Kind { KUSIZE, KSSIZE, KFALSE, KTRUE, KNULL, KUSE, KNOT, KAND, KOR, KIS, + KSIZEOF, KALIGNOF, KLENGTHOF, + KBITCAST, KEXTERN, KINTERN, KSTATIC, KCONST, KVAR, KBREAK, KCONTINUE, KGOTO, KRETURN, KIF, KELSE, KCASE, KOF, KDO, @@ -415,64 +417,67 @@ const int keywordtypeids[] = { const char *const nodestrings[] = { /* Keywords */ - [KVOID] = "void", [KBOOL] = "bool", - [KU8] = "u8", [KS8] = "s8", - [KU16] = "u16", [KS16] = "s16", - [KU32] = "u32", [KS32] = "s32", - [KU64] = "u64", [KS64] = "s64", - [KF32] = "f32", [KF64] = "f64", - [KUCHAR] = "uchar", [KCHAR] = "char", - [KUSHORT] = "ushort", [KSHORT] = "short", - [KUINT] = "uint", [KINT] = "int", - [KULONG] = "ulong", [KLONG] = "long", - [KULLONG] = "ullong", [KLLONG] = "llong", - [KFLOAT] = "float", [KDOUBLE] = "double", - [KLDOUBLE] = "ldouble", [KUSIZE] = "usize", - [KSSIZE] = "ssize", - [KFALSE] = "false", [KTRUE] = "true", - [KNULL] = "null", - [KUSE] = "use", [KNOT] = "not", - [KAND] = "and", [KOR] = "or", - [KIS] = "is", - [KEXTERN] = "extern", [KINTERN] = "intern", - [KSTATIC] = "static", [KCONST] = "const", - [KVAR] = "var", - [KBREAK] = "break", [KCONTINUE] = "continue", - [KGOTO] = "goto", [KRETURN] = "return", - [KIF] = "if", [KELSE] = "else", - [KCASE] = "case", [KOF] = "of", - [KDO] = "do", - [KFOR] = "for", [KLOOP] = "loop", - [KWHILE] = "while", [KUNTIL] = "until", - [KSTRUCT] = "struct", [KUNION] = "union", + [KVOID] = "void", [KBOOL] = "bool", + [KU8] = "u8", [KS8] = "s8", + [KU16] = "u16", [KS16] = "s16", + [KU32] = "u32", [KS32] = "s32", + [KU64] = "u64", [KS64] = "s64", + [KF32] = "f32", [KF64] = "f64", + [KUCHAR] = "uchar", [KCHAR] = "char", + [KUSHORT] = "ushort", [KSHORT] = "short", + [KUINT] = "uint", [KINT] = "int", + [KULONG] = "ulong", [KLONG] = "long", + [KULLONG] = "ullong", [KLLONG] = "llong", + [KFLOAT] = "float", [KDOUBLE] = "double", + [KLDOUBLE] = "ldouble", [KUSIZE] = "usize", + [KSSIZE] = "ssize", + [KFALSE] = "false", [KTRUE] = "true", + [KNULL] = "null", + [KUSE] = "use", [KNOT] = "not", + [KAND] = "and", [KOR] = "or", + [KIS] = "is", + [KSIZEOF] = "sizeof", [KALIGNOF] = "alignof", + [KLENGTHOF] = "lengthof", + [KBITCAST] = "bitcast", + [KEXTERN] = "extern", [KINTERN] = "intern", + [KSTATIC] = "static", [KCONST] = "const", + [KVAR] = "var", + [KBREAK] = "break", [KCONTINUE] = "continue", + [KGOTO] = "goto", [KRETURN] = "return", + [KIF] = "if", [KELSE] = "else", + [KCASE] = "case", [KOF] = "of", + [KDO] = "do", + [KFOR] = "for", [KLOOP] = "loop", + [KWHILE] = "while", [KUNTIL] = "until", + [KSTRUCT] = "struct", [KUNION] = "union", /* Operators */ - [OSUFINC] = "++", [OSUFDEC] = "--", - [OARRAY] = "[]", [OCALL] = "()", - [ODISP] = ".", - [ODEREF] = "*", [OINC] = "++", - [ODEC] = "--", [OBNOT] = "~", - [OLNOT] = "!", [OFLIP] = "~=", - [OADDR] = "&", [OPLUS] = "+", - [OMINUS] = "-", [OCAST] = "(type)", - [OMUL] = "*", [ODIV] = "/", - [OMOD] = "%", [OLSH] = "<<", - [OARSH] = ">>>", [ORSH] = ">>", - [OBAND] = "&", - [OADD] = "+", [OSUB] = "-", - [OBOR] = "|", [OXOR] = "^", - [ORANGE] = "..", - [OLEQ] = "<=", [OLET] = "<", - [OGEQ] = ">=", [OGRT] = ">", - [ONEQ] = "!=", [OEQU] = "==", - [OIDENT] = "===", - [OLAND] = "&&", - [OLOR] = "||", - [OASS] = "=", [OMULA] = "*=", - [ODIVA] = "/=", [OMODA] = "%=", - [OLSHA] = "<<=", [OARSHA] = ">>>=", - [ORSHA] = ">>=", [OANDA] = "&=", - [OADDA] = "+=", [OSUBA] = "-=", - [OORA] = "|=", [OXORA] = "^=", + [OSUFINC] = "++", [OSUFDEC] = "--", + [OARRAY] = "[]", [OCALL] = "()", + [ODISP] = ".", + [ODEREF] = "*", [OINC] = "++", + [ODEC] = "--", [OBNOT] = "~", + [OLNOT] = "!", [OFLIP] = "~=", + [OADDR] = "&", [OPLUS] = "+", + [OMINUS] = "-", [OCAST] = "(type)", + [OMUL] = "*", [ODIV] = "/", + [OMOD] = "%", [OLSH] = "<<", + [OARSH] = ">>>", [ORSH] = ">>", + [OBAND] = "&", + [OADD] = "+", [OSUB] = "-", + [OBOR] = "|", [OXOR] = "^", + [ORANGE] = "..", + [OLEQ] = "<=", [OLET] = "<", + [OGEQ] = ">=", [OGRT] = ">", + [ONEQ] = "!=", [OEQU] = "==", + [OIDENT] = "===", + [OLAND] = "&&", + [OLOR] = "||", + [OASS] = "=", [OMULA] = "*=", + [ODIVA] = "/=", [OMODA] = "%=", + [OLSHA] = "<<=", [OARSHA] = ">>>=", + [ORSHA] = ">>=", [OANDA] = "&=", + [OADDA] = "+=", [OSUBA] = "-=", + [OORA] = "|=", [OXORA] = "^=", /* Ast Nodes */ [ACOMMA] = ",", [ASTMT] = "statement", [ADO] = "do-clause", @@ -2486,7 +2491,22 @@ readatom(Source *source, int flags) gettok(source); lhs->kind = OLNOT; lhs->lhs = readexpr(source, PRELAT); + break; + + case KALIGNOF: + case KSIZEOF: + lhs = tokennode(source, NULL); + gettok(source); + lhs->lhs = readatom(source, PRELAT); + break; + case KBITCAST: + lhs = tokennode(source, NULL); + gettok(source); + expect(source, '(', "expected '('"); + lhs->rhs = exprlist(source, false, NULL); + expect(source, ')', "expected ')'"); + lhs->lhs = readatom(source, PRELAT); break; case KBREAK: