Mercurial > projects > dil
diff src/dil/lexer/Identifier.d @ 806:bcb74c9b895c
Moved out files in the trunk folder to the root.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Sun, 09 Mar 2008 00:12:19 +0100 |
parents | trunk/src/dil/lexer/Identifier.d@9f61e8af55d5 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/dil/lexer/Identifier.d Sun Mar 09 00:12:19 2008 +0100 @@ -0,0 +1,54 @@ +/++ + Author: Aziz Köksal + License: GPL3 ++/ +module dil.lexer.Identifier; + +import dil.lexer.TokensEnum; +import dil.lexer.IdentsEnum; +import common; + +/// Represents an identifier as defined in the D specs. +/// +///<pre> +/// Identifier := IdStart IdChar* +/// IdStart := "_" | Letter +/// IdChar := IdStart | "0"-"9" +/// Letter := UniAlpha +///</pre> +/// Unicode alphas are defined in Unicode 5.0.0. +align(1) +struct Identifier +{ + string str; /// The UTF-8 string of the identifier. + TOK kind; /// The token kind. + IDK idKind; /// Only for predefined identifiers. + + static Identifier* opCall(string str, TOK kind) + { + auto id = new Identifier; + id.str = str; + id.kind = kind; + return id; + } + + static Identifier* opCall(string str, TOK kind, IDK idKind) + { + auto id = new Identifier; + id.str = str; + id.kind = kind; + id.idKind = idKind; + return id; + } + + uint toHash() + { + uint hash; + foreach(c; str) { + hash *= 11; + hash += c; + } + return hash; + } +} +// pragma(msg, Identifier.sizeof.stringof);