comparison trunk/src/Parser.d @ 151:2e959f67000b

- Added code for parsing mixin expression declarations.
author aziz
date Thu, 12 Jul 2007 19:18:02 +0000
parents 753bc07bf3a0
children fe2e36eb4b45
comparison
equal deleted inserted replaced
150:753bc07bf3a0 151:2e959f67000b
912 return new DeleteDeclaration(parameters, decls); 912 return new DeleteDeclaration(parameters, decls);
913 } 913 }
914 914
915 /* 915 /*
916 TemplateMixin: 916 TemplateMixin:
917 mixin ( AssignExpression ) ;
917 mixin TemplateIdentifier ; 918 mixin TemplateIdentifier ;
918 mixin TemplateIdentifier MixinIdentifier ; 919 mixin TemplateIdentifier MixinIdentifier ;
919 mixin TemplateIdentifier !( TemplateArgumentList ) ; 920 mixin TemplateIdentifier !( TemplateArgumentList ) ;
920 mixin TemplateIdentifier !( TemplateArgumentList ) MixinIdentifier ; 921 mixin TemplateIdentifier !( TemplateArgumentList ) MixinIdentifier ;
921 */ 922 */
922 Declaration parseMixinDeclaration() 923 Declaration parseMixinDeclaration()
923 { 924 {
924 assert(token.type == T.Mixin); 925 assert(token.type == T.Mixin);
925 nT(); // Skip mixin keyword. 926 nT(); // Skip mixin keyword.
926 927
928 if (token.type == T.LParen)
929 {
930 // TODO: What about mixin(...).ident;?
931 nT();
932 auto e = parseAssignExpression();
933 require(T.RParen);
934 require(T.Semicolon);
935 return new MixinDeclaration(e);
936 }
937
927 Expression[] templateIdent; 938 Expression[] templateIdent;
928 string mixinIdent; 939 string mixinIdent;
929 940
930 if (token.type == T.Dot) 941 if (token.type == T.Dot)
931 { 942 {
936 while (1) 947 while (1)
937 { 948 {
938 string ident = requireIdentifier(); 949 string ident = requireIdentifier();
939 if (token.type == T.Not) // Identifier !( TemplateArguments ) 950 if (token.type == T.Not) // Identifier !( TemplateArguments )
940 { 951 {
941 // No need to peek for T.RParen. This must be a template instance. 952 // No need to peek for T.LParen. This must be a template instance.
942 nT(); 953 nT();
943 templateIdent ~= new TemplateInstanceExpression(ident, parseTemplateArguments()); 954 templateIdent ~= new TemplateInstanceExpression(ident, parseTemplateArguments());
944 } 955 }
945 else // Identifier 956 else // Identifier
946 templateIdent ~= new IdentifierExpression(ident); 957 templateIdent ~= new IdentifierExpression(ident);