More work on the parser

This commit is contained in:
Hackerpilot 2013-06-22 17:23:30 -07:00
parent 3a66f01405
commit 2802eb20a9
3 changed files with 691 additions and 356 deletions

View File

@ -305,8 +305,8 @@ class AndExpression : ASTNode
{ {
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
/** */AndExpression andExpression; /** */ AndExpression left;
/** */ShiftExpression shiftExpression; /** */ CmpExpression right;
} }
/// ///
@ -355,8 +355,8 @@ class AsmAddExp : ASTNode
{ {
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
/** */Token operator; /** */ TokenType operator;
/** */AsmMulExp left; /** */ AsmAddExp left;
/** */ AsmMulExp right; /** */ AsmMulExp right;
} }
@ -433,9 +433,10 @@ class AsmMulExp : ASTNode
{ {
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
/** */AsmBrExp left; /** */ TokenType operator;
/** */ AsmMulExp left;
/** */ AsmBrExp right; /** */ AsmBrExp right;
/** */Token operator;
} }
/// ///
@ -991,7 +992,9 @@ class EqualExpression : ASTNode
{ {
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
mixin(SHIFT_SHIFT_BODY); /** */ TokenType operator;
/** */ ShiftExpression left;
/** */ ShiftExpression right;
} }
/// ///
@ -999,7 +1002,7 @@ class Expression : ASTNode
{ {
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
/** */ AssignExpression[] assignExpressions; /** */ AssignExpression[] items;
} }
/// ///
@ -1140,8 +1143,7 @@ class GotoStatement : ASTNode
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
/** */ Expression expression; /** */ Expression expression;
/** */ Token identifier; /** */ Token token;
/** */ bool isDefault;
} }
/// ///
@ -1182,7 +1184,9 @@ class IdentityExpression : ASTNode
{ {
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
mixin(SHIFT_SHIFT_BODY); /** */ bool negated;
/** */ ShiftExpression left;
/** */ ShiftExpression right;
} }
/// ///
@ -1320,7 +1324,8 @@ class KeyValuePair : ASTNode
{ {
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
/** */ KeyValuePair[] keyValuePairs; /** */ AssignExpression key;
/** */ AssignExpression value;
} }
/// ///
@ -1328,8 +1333,7 @@ class KeyValuePairs : ASTNode
{ {
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
/** */ AssignExpression key; /** */ KeyValuePair[] keyValuePairs;
/** */ AssignExpression value;
} }
/// ///
@ -1433,8 +1437,8 @@ class MulExpression : ASTNode
{ {
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
/** */ Token operator; /** */ TokenType operator;
/** */ UnaryExpression left; /** */ MulExpression left;
/** */ UnaryExpression right; /** */ UnaryExpression right;
} }
@ -1445,10 +1449,8 @@ public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
/** */ Arguments allocatorArguments; /** */ Arguments allocatorArguments;
/** */ Arguments constructorArguments; /** */ Arguments constructorArguments;
/** */ IdentifierList identifierList; /** */ BaseClassList baseClassList;
/** */ ClassBody /// /** */ ClassBody classBody;
classBody;
} }
/// ///
@ -1541,8 +1543,8 @@ class OrExpression : ASTNode
{ {
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
/** */ XorExpression xorExpression; /** */ OrExpression left;
/** */ OrExpression orExpression; /** */ XorExpression right;
} }
/// ///
@ -1550,8 +1552,8 @@ class OrOrExpression : ASTNode
{ {
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
/** */ OrOrExpression orOrExpression; /** */ OrOrExpression left;
/** */ AndAndExpression andAndExpression; /** */ AndAndExpression right;
} }
/// ///
@ -1614,8 +1616,8 @@ class PowExpression : ASTNode
{ {
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
/** */ UnaryExpression unaryExpression; /** */ PowExpression left;
/** */ PowExpression powExpression; /** */ UnaryExpression right;
} }
/// ///
@ -1650,20 +1652,19 @@ class PrimaryExpression : ASTNode
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
/** */ Token primary; /** */ Token primary;
/** */ bool hasDot; /** */ IdentifierOrTemplateInstance identifierOrTemplateInstance;
IdentifierOrTemplateInstance identifierOrTemplateInstance; /** */ Type type;
Type type; /** */ TypeofExpression typeofExpression;
TypeofExpression typeofExpression; /** */ TypeidExpression typeidExpression;
TypeidExpression typeidExpression; /** */ ArrayLiteral arrayLiteral;
ArrayLiteral arrayLiteral; /** */ AssocArrayLiteral assocArrayLiteral;
AssocArrayLiteral assocArrayLiteral; /** */ Expression expression;
Expression expression; /** */ IsExpression isExpression;
IsExpression isExpression; /** */ LambdaExpression lambdaExpression;
LambdaExpression lambdaExpression; /** */ FunctionLiteralExpression functionLiteralExpression;
FunctionLiteralExpression functionLiteralExpression; /** */ TraitsExpression traitsExpression;
TraitsExpression traitsExpression; /** */ MixinExpression mixinExpression;
MixinExpression mixinExpression; /** */ ImportExpression importExpression;
ImportExpression importExpression;
} }
/// ///
@ -1681,7 +1682,9 @@ class RelExpression : ASTNode
{ {
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
mixin(SHIFT_SHIFT_BODY); /** */ TokenType operator;
/** */ RelExpression left;
/** */ ShiftExpression right;
} }
/// ///
@ -1722,9 +1725,9 @@ class ShiftExpression : ASTNode
{ {
public: public:
mixin(DEFAULT_ACCEPT); mixin(DEFAULT_ACCEPT);
/** */ AddExpression addExpression; /** */ TokenType operator;
/** */ ShiftExpression shiftExpression; /** */ ShiftExpression left;
/** */ Token operator; /** */ AddExpression right;
} }
/// ///

View File

@ -2220,7 +2220,7 @@ private:
// For now a private helper that is tailored to the way lexer works // For now a private helper that is tailored to the way lexer works
// hides away forwardness of range by buffering // hides away forwardness of range by buffering
// RA-version is strightforward thin wrapping // random-access version is a strightforward thin wrapping
// ATM it is byte-oriented // ATM it is byte-oriented
private struct LexSource(R) private struct LexSource(R)
if(isForwardRange!R && !isRandomAccessRange!R) if(isForwardRange!R && !isRandomAccessRange!R)
@ -3038,8 +3038,7 @@ struct StringCache
index = new Slot*[startSize]; index = new Slot*[startSize];
} }
string get(R)(R range) string get(R)(R range) if (isRandomAccessRange!R
if(isRandomAccessRange!R
&& is(Unqual!(ElementType!R) : const(ubyte))) && is(Unqual!(ElementType!R) : const(ubyte)))
{ {
uint h = hash(range); uint h = hash(range);
@ -3052,7 +3051,7 @@ struct StringCache
uniqueSlots++; uniqueSlots++;
return str; return str;
} }
for(;;) while (true)
{ {
if(s.hash == h && s.value.equal(range)) if(s.hash == h && s.value.equal(range))
return s.value; return s.value;

File diff suppressed because it is too large Load Diff