diff --git a/engine/lexer.c b/engine/lexer.c index b5fec87..bc3826c 100644 --- a/engine/lexer.c +++ b/engine/lexer.c @@ -573,59 +573,70 @@ static sxu32 KeywordCode(const char *z, int n) { int value; } ph7_token; static ph7_token pTokenLookup[] = { + /* Object-Oriented */ + {"catch", PH7_KEYWORD_CATCH}, + {"class", PH7_KEYWORD_CLASS}, + {"clone", PH7_KEYWORD_CLONE}, {"extends", PH7_KEYWORD_EXTENDS}, - {"switch", PH7_KEYWORD_SWITCH}, - {"int", PH7_KEYWORD_INT}, - {"require", PH7_KEYWORD_REQUIRE}, - {"return", PH7_KEYWORD_RETURN}, - {"namespace", PH7_KEYWORD_NAMESPACE}, - {"object", PH7_KEYWORD_OBJECT}, - {"throw", PH7_KEYWORD_THROW}, - {"bool", PH7_KEYWORD_BOOL}, - {"default", PH7_KEYWORD_DEFAULT}, - {"try", PH7_KEYWORD_TRY}, - {"case", PH7_KEYWORD_CASE}, - {"self", PH7_KEYWORD_SELF}, {"final", PH7_KEYWORD_FINAL}, {"finally", PH7_KEYWORD_FINALLY}, - {"list", PH7_KEYWORD_LIST}, - {"static", PH7_KEYWORD_STATIC}, - {"clone", PH7_KEYWORD_CLONE}, - {"new", PH7_KEYWORD_NEW}, - {"const", PH7_KEYWORD_CONST}, - {"string", PH7_KEYWORD_STRING}, - {"using", PH7_KEYWORD_USING}, - {"elseif", PH7_KEYWORD_ELIF}, - {"else", PH7_KEYWORD_ELSE}, - {"if", PH7_KEYWORD_IF}, - {"float", PH7_KEYWORD_FLOAT}, - {"var", PH7_KEYWORD_VAR}, - {"array", PH7_KEYWORD_ARRAY}, - {"virtual", PH7_KEYWORD_VIRTUAL}, - {"class", PH7_KEYWORD_CLASS}, - {"as", PH7_KEYWORD_AS}, - {"continue", PH7_KEYWORD_CONTINUE}, - {"function", PH7_KEYWORD_FUNCTION}, - {"while", PH7_KEYWORD_WHILE}, - {"eval", PH7_KEYWORD_EVAL}, - {"do", PH7_KEYWORD_DO}, - {"exit", PH7_KEYWORD_EXIT}, - {"import", PH7_KEYWORD_IMPORT}, {"implements", PH7_KEYWORD_IMPLEMENTS}, - {"include", PH7_KEYWORD_INCLUDE}, - {"empty", PH7_KEYWORD_EMPTY}, {"instanceof", PH7_KEYWORD_INSTANCEOF}, {"interface", PH7_KEYWORD_INTERFACE}, - {"for", PH7_KEYWORD_FOR}, - {"foreach", PH7_KEYWORD_FOREACH}, - {"isset", PH7_KEYWORD_ISSET}, + {"namespace", PH7_KEYWORD_NAMESPACE}, + {"new", PH7_KEYWORD_NEW}, {"parent", PH7_KEYWORD_PARENT}, + {"self", PH7_KEYWORD_SELF}, + {"throw", PH7_KEYWORD_THROW}, + {"try", PH7_KEYWORD_TRY}, + {"using", PH7_KEYWORD_USING}, + {"virtual", PH7_KEYWORD_VIRTUAL}, + /* Access modifiers */ + {"const", PH7_KEYWORD_CONST}, {"private", PH7_KEYWORD_PRIVATE}, {"protected", PH7_KEYWORD_PROTECTED}, {"public", PH7_KEYWORD_PUBLIC}, - {"catch", PH7_KEYWORD_CATCH}, + {"static", PH7_KEYWORD_STATIC}, + /* Data types */ + {"bool", PH7_KEYWORD_BOOL}, + {"callback", PH7_KEYWORD_CALLBACK}, + {"char", PH7_KEYWORD_CHAR}, + {"float", PH7_KEYWORD_FLOAT}, + {"int", PH7_KEYWORD_INT}, + {"mixed", PH7_KEYWORD_MIXED}, + {"object", PH7_KEYWORD_OBJECT}, + {"resource", PH7_KEYWORD_RESOURCE}, + {"string", PH7_KEYWORD_STRING}, + {"void", PH7_KEYWORD_VOID}, + /* Loops & Controls */ + {"as", PH7_KEYWORD_AS}, + {"break", PH7_KEYWORD_BREAK}, + {"case", PH7_KEYWORD_CASE}, + {"continue", PH7_KEYWORD_CONTINUE}, + {"default", PH7_KEYWORD_DEFAULT}, + {"do", PH7_KEYWORD_DO}, + {"for", PH7_KEYWORD_FOR}, + {"foreach", PH7_KEYWORD_FOREACH}, + {"switch", PH7_KEYWORD_SWITCH}, + {"else", PH7_KEYWORD_ELSE}, + {"elseif", PH7_KEYWORD_ELIF}, + {"if", PH7_KEYWORD_IF}, + {"while", PH7_KEYWORD_WHILE}, + /* Reserved keywords */ + {"empty", PH7_KEYWORD_EMPTY}, + {"eval", PH7_KEYWORD_EVAL}, + {"exit", PH7_KEYWORD_EXIT}, + {"import", PH7_KEYWORD_IMPORT}, + {"include", PH7_KEYWORD_INCLUDE}, + {"isset", PH7_KEYWORD_ISSET}, + {"list", PH7_KEYWORD_LIST}, + {"require", PH7_KEYWORD_REQUIRE}, + {"return", PH7_KEYWORD_RETURN}, {"unset", PH7_KEYWORD_UNSET}, - {"break", PH7_KEYWORD_BREAK} + /* Other keywords */ + {"array", PH7_KEYWORD_ARRAY}, + {"function", PH7_KEYWORD_FUNCTION}, + {"var", PH7_KEYWORD_VAR} }; if(n < 2) { return PH7_TK_ID; diff --git a/include/ph7int.h b/include/ph7int.h index 2e50b43..427a6ed 100644 --- a/include/ph7int.h +++ b/include/ph7int.h @@ -1593,7 +1593,7 @@ enum ph7_expr_id { #define PH7_KEYWORD_IMPLEMENTS 39 /* implements */ #define PH7_KEYWORD_INCLUDE 41 /* include */ #define PH7_KEYWORD_EMPTY 42 /* empty */ -#define PH7_KEYWORD_INSTANCEOF 0x800 /* instanceof: MUST BE A POWER OF TWO */ +#define PH7_KEYWORD_INSTANCEOF 0x400 /* instanceof: MUST BE A POWER OF TWO */ #define PH7_KEYWORD_ISSET 43 /* isset */ #define PH7_KEYWORD_PARENT 44 /* parent */ #define PH7_KEYWORD_PRIVATE 45 /* private */ @@ -1604,13 +1604,18 @@ enum ph7_expr_id { #define PH7_KEYWORD_PUBLIC 52 /* public */ #define PH7_KEYWORD_CATCH 53 /* catch */ #define PH7_KEYWORD_RETURN 54 /* return */ -#define PH7_KEYWORD_UNSET 0x2000 /* unset: MUST BE A POWER OF TWO */ #define PH7_KEYWORD_BREAK 55 /* break */ -#define PH7_KEYWORD_BOOL 0x8000 /* bool: MUST BE A POWER OF TWO */ -#define PH7_KEYWORD_INT 0x10000 /* int: MUST BE A POWER OF TWO */ -#define PH7_KEYWORD_FLOAT 0x20000 /* float: MUST BE A POWER OF TWO */ -#define PH7_KEYWORD_STRING 0x40000 /* string: MUST BE A POWER OF TWO */ -#define PH7_KEYWORD_OBJECT 0x80000 /* object: MUST BE A POWER OF TWO */ +#define PH7_KEYWORD_UNSET 0x800 /* unset: MUST BE A POWER OF TWO */ +#define PH7_KEYWORD_VOID 0x1000 /* void: MUST BE A POWER OF TWO */ +#define PH7_KEYWORD_CHAR 0x2000 /* char: MUST BE A POWER OF TWO */ +#define PH7_KEYWORD_BOOL 0x4000 /* bool: MUST BE A POWER OF TWO */ +#define PH7_KEYWORD_INT 0x8000 /* int: MUST BE A POWER OF TWO */ +#define PH7_KEYWORD_FLOAT 0x10000 /* float: MUST BE A POWER OF TWO */ +#define PH7_KEYWORD_STRING 0x20000 /* string: MUST BE A POWER OF TWO */ +#define PH7_KEYWORD_OBJECT 0x40000 /* object: MUST BE A POWER OF TWO */ +#define PH7_KEYWORD_CALLBACK 0x80000 /* callback: MUST BE A POWER OF TWO */ +#define PH7_KEYWORD_RESOURCE 0x100000 /* resource: MUST BE A POWER OF TWO */ +#define PH7_KEYWORD_MIXED 0x200000 /* mixed: MUST BE A POWER OF TWO */ /* JSON encoding/decoding related definition */ enum json_err_code { JSON_ERROR_NONE = 0, /* No error has occurred. */