Mercurial > projects > dil
comparison trunk/src/Parser.d @ 143:e760d7552f66
- Renamed parseArgumentList() to parseArguments().
- Renamed parseParameters() to parseParameterList().
- Renamed parseTemplateArgumentList() to parseTemplateArguments().
- Renamed parseTemplateParameters() to parseTemplateParameterList().
author | aziz |
---|---|
date | Wed, 11 Jul 2007 21:38:05 +0000 |
parents | 7ab33ee1a641 |
children | cfd890b250e6 |
comparison
equal
deleted
inserted
replaced
142:50251b408965 | 143:e760d7552f66 |
---|---|
544 | 544 |
545 Declaration parseConstructorDeclaration() | 545 Declaration parseConstructorDeclaration() |
546 { | 546 { |
547 assert(token.type == T.This); | 547 assert(token.type == T.This); |
548 nT(); // Skip 'this' keyword. | 548 nT(); // Skip 'this' keyword. |
549 auto parameters = parseParameters(); | 549 auto parameters = parseParameterList(); |
550 require(T.LBrace); | 550 require(T.LBrace); |
551 auto statements = parseStatements(); | 551 auto statements = parseStatements(); |
552 require(T.RBrace); | 552 require(T.RBrace); |
553 return new ConstructorDeclaration(parameters, statements); | 553 return new ConstructorDeclaration(parameters, statements); |
554 } | 554 } |
792 Declaration parseTemplateDeclaration() | 792 Declaration parseTemplateDeclaration() |
793 { | 793 { |
794 assert(token.type == T.Template); | 794 assert(token.type == T.Template); |
795 nT(); // Skip template keyword. | 795 nT(); // Skip template keyword. |
796 auto templateName = requireIdentifier(); | 796 auto templateName = requireIdentifier(); |
797 auto templateParams = parseTemplateParameters(); | 797 auto templateParams = parseTemplateParameterList(); |
798 require(T.LBrace); | 798 require(T.LBrace); |
799 auto decls = parseDeclarationDefinitions(); | 799 auto decls = parseDeclarationDefinitions(); |
800 require(T.RBrace); | 800 require(T.RBrace); |
801 return new TemplateDeclaration(templateName, templateParams, decls); | 801 return new TemplateDeclaration(templateName, templateParams, decls); |
802 } | 802 } |
803 | 803 |
804 Declaration parseNewDeclaration() | 804 Declaration parseNewDeclaration() |
805 { | 805 { |
806 assert(token.type == T.New); | 806 assert(token.type == T.New); |
807 nT(); // Skip new keyword. | 807 nT(); // Skip new keyword. |
808 auto parameters = parseParameters(); | 808 auto parameters = parseParameterList(); |
809 require(T.LBrace); | 809 require(T.LBrace); |
810 auto decls = parseDeclarationDefinitions(); | 810 auto decls = parseDeclarationDefinitions(); |
811 require(T.RBrace); | 811 require(T.RBrace); |
812 return new NewDeclaration(parameters, decls); | 812 return new NewDeclaration(parameters, decls); |
813 } | 813 } |
814 | 814 |
815 Declaration parseDeleteDeclaration() | 815 Declaration parseDeleteDeclaration() |
816 { | 816 { |
817 assert(token.type == T.Delete); | 817 assert(token.type == T.Delete); |
818 nT(); // Skip delete keyword. | 818 nT(); // Skip delete keyword. |
819 auto parameters = parseParameters(); | 819 auto parameters = parseParameterList(); |
820 // TODO: only one parameter of type void* allowed. | 820 // TODO: only one parameter of type void* allowed. |
821 require(T.LBrace); | 821 require(T.LBrace); |
822 auto decls = parseDeclarationDefinitions(); | 822 auto decls = parseDeclarationDefinitions(); |
823 require(T.RBrace); | 823 require(T.RBrace); |
824 return new DeleteDeclaration(parameters, decls); | 824 return new DeleteDeclaration(parameters, decls); |
1135 break; | 1135 break; |
1136 case T.MinusMinus: | 1136 case T.MinusMinus: |
1137 e = new PostDecrExpression(e); | 1137 e = new PostDecrExpression(e); |
1138 break; | 1138 break; |
1139 case T.LParen: | 1139 case T.LParen: |
1140 e = new CallExpression(e, parseArgumentList(T.LParen)); | 1140 e = new CallExpression(e, parseArguments(T.LParen)); |
1141 continue; | 1141 continue; |
1142 case T.LBracket: | 1142 case T.LBracket: |
1143 // parse Slice- and IndexExpression | 1143 // parse Slice- and IndexExpression |
1144 nT(); | 1144 nT(); |
1145 if (token.type == T.RBracket) | 1145 if (token.type == T.RBracket) |
1157 require(T.RBracket); | 1157 require(T.RBracket); |
1158 continue; | 1158 continue; |
1159 } | 1159 } |
1160 else if (token.type == T.Comma) | 1160 else if (token.type == T.Comma) |
1161 { | 1161 { |
1162 es ~= parseArgumentList(T.RBracket); | 1162 es ~= parseArguments(T.RBracket); |
1163 } | 1163 } |
1164 else | 1164 else |
1165 require(T.RBracket); | 1165 require(T.RBracket); |
1166 | 1166 |
1167 e = new IndexExpression(e, es); | 1167 e = new IndexExpression(e, es); |
1246 { | 1246 { |
1247 e = parseAssignExpression(); | 1247 e = parseAssignExpression(); |
1248 if (token.type == T.Colon) | 1248 if (token.type == T.Colon) |
1249 goto LparseAssocArray; | 1249 goto LparseAssocArray; |
1250 else if (token.type == T.Comma) | 1250 else if (token.type == T.Comma) |
1251 values = [e] ~ parseArgumentList(T.RBracket); | 1251 values = [e] ~ parseArguments(T.RBracket); |
1252 else | 1252 else |
1253 require(T.RBracket); | 1253 require(T.RBracket); |
1254 } | 1254 } |
1255 | 1255 |
1256 e = new ArrayLiteralExpression(values); | 1256 e = new ArrayLiteralExpression(values); |
1305 Parameters parameters; | 1305 Parameters parameters; |
1306 if (token.type != T.LBrace) | 1306 if (token.type != T.LBrace) |
1307 { | 1307 { |
1308 if (token.type != T.LParen) // Optional return type | 1308 if (token.type != T.LParen) // Optional return type |
1309 returnType = parseType(); | 1309 returnType = parseType(); |
1310 parameters = parseParameters(); | 1310 parameters = parseParameterList(); |
1311 } | 1311 } |
1312 require(T.LBrace); | 1312 require(T.LBrace); |
1313 auto decls = parseDeclarationDefinitions(); | 1313 auto decls = parseDeclarationDefinitions(); |
1314 require(T.RBrace); | 1314 require(T.RBrace); |
1315 auto func = new FunctionType(returnType, parameters); | 1315 auto func = new FunctionType(returnType, parameters); |
1396 e = new IsExpression(type, ident, specType); | 1396 e = new IsExpression(type, ident, specType); |
1397 break; | 1397 break; |
1398 case T.LParen: | 1398 case T.LParen: |
1399 Token t; | 1399 Token t; |
1400 bool failed; | 1400 bool failed; |
1401 auto parameters = try_(parseParameters(), failed); | 1401 auto parameters = try_(parseParameterList(), failed); |
1402 if (!failed) | 1402 if (!failed) |
1403 { | 1403 { |
1404 // ( ArgumentList ) FunctionBody | 1404 // ( ParameterList ) FunctionBody |
1405 require(T.LBrace); | 1405 require(T.LBrace); |
1406 auto decls = parseDeclarationDefinitions(); | 1406 auto decls = parseDeclarationDefinitions(); |
1407 require(T.RBrace); | 1407 require(T.RBrace); |
1408 auto func = new FunctionType(null, parameters); | 1408 auto func = new FunctionType(null, parameters); |
1409 e = new FunctionLiteralExpression(func, decls); | 1409 e = new FunctionLiteralExpression(func, decls); |
1506 t = parseArrayType(t); | 1506 t = parseArrayType(t); |
1507 break; | 1507 break; |
1508 case T.Function, T.Delegate: | 1508 case T.Function, T.Delegate: |
1509 TOK tok = token.type; | 1509 TOK tok = token.type; |
1510 nT(); | 1510 nT(); |
1511 auto parameters = parseParameters(); | 1511 auto parameters = parseParameterList(); |
1512 t = new FunctionType(t, parameters); | 1512 t = new FunctionType(t, parameters); |
1513 if (tok == T.Function) | 1513 if (tok == T.Function) |
1514 t = new PointerType(t); | 1514 t = new PointerType(t); |
1515 else | 1515 else |
1516 t = new DelegateType(t); | 1516 t = new DelegateType(t); |
1532 // Type Identifier ArrayType | 1532 // Type Identifier ArrayType |
1533 // ArrayType := [] or [Type] or [Expression..Expression] | 1533 // ArrayType := [] or [Type] or [Expression..Expression] |
1534 t = parseArrayType(t); | 1534 t = parseArrayType(t); |
1535 continue; | 1535 continue; |
1536 case T.LParen: | 1536 case T.LParen: |
1537 auto params = parseParameters(); | 1537 auto params = parseParameterList(); |
1538 // TODO: handle ( TemplateParameterList ) ( ParameterList ) | 1538 // TODO: handle ( TemplateParameterList ) ( ParameterList ) |
1539 // ReturnType FunctionName ( ParameterList ) | 1539 // ReturnType FunctionName ( ParameterList ) |
1540 t = new FunctionType(t, params); | 1540 t = new FunctionType(t, params); |
1541 break; | 1541 break; |
1542 default: | 1542 default: |
1591 expected(T.Identifier); | 1591 expected(T.Identifier); |
1592 | 1592 |
1593 return t; | 1593 return t; |
1594 } | 1594 } |
1595 | 1595 |
1596 Expression[] parseArgumentList(TOK terminator) | 1596 Expression[] parseArguments(TOK terminator) |
1597 { | 1597 { |
1598 Expression[] args; | 1598 Expression[] args; |
1599 | 1599 |
1600 nT(); | 1600 nT(); |
1601 if (token.type == terminator) | 1601 if (token.type == terminator) |
1614 | 1614 |
1615 require(terminator); | 1615 require(terminator); |
1616 return args; | 1616 return args; |
1617 } | 1617 } |
1618 | 1618 |
1619 Parameters parseParameters() | 1619 Parameters parseParameterList() |
1620 out(params) | 1620 out(params) |
1621 { | 1621 { |
1622 if (params.length > 1) | 1622 if (params.length > 1) |
1623 foreach (param; params.items[0..$-1]) | 1623 foreach (param; params.items[0..$-1]) |
1624 { | 1624 { |
1682 } | 1682 } |
1683 require(T.RParen); | 1683 require(T.RParen); |
1684 return params; | 1684 return params; |
1685 } | 1685 } |
1686 | 1686 |
1687 Object[] parseTemplateArgumentList() | 1687 Object[] parseTemplateArguments() |
1688 { | 1688 { |
1689 Object[] args; | 1689 Object[] args; |
1690 | 1690 |
1691 require(T.LParen); | 1691 require(T.LParen); |
1692 if (token.type == T.RParen) | 1692 if (token.type == T.RParen) |
1721 | 1721 |
1722 require(T.RParen); | 1722 require(T.RParen); |
1723 return args; | 1723 return args; |
1724 } | 1724 } |
1725 | 1725 |
1726 TemplateParameter[] parseTemplateParameters() | 1726 TemplateParameter[] parseTemplateParameterList() |
1727 { | 1727 { |
1728 require(T.LParen); | 1728 require(T.LParen); |
1729 if (token.type == T.RParen) | 1729 if (token.type == T.RParen) |
1730 return null; | 1730 return null; |
1731 | 1731 |