comparison trunk/src/dil/parser/Parser.d @ 769:5e3ef1b2011c

Added and improved documentation.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sun, 17 Feb 2008 02:21:55 +0100
parents 1771398583fa
children 846044180d22
comparison
equal deleted inserted replaced
768:d84349a60f5c 769:5e3ef1b2011c
705 return linkageType; 705 return linkageType;
706 } 706 }
707 707
708 auto identTok = requireId(); 708 auto identTok = requireId();
709 709
710 ID identID = identTok ? identTok.ident.identID : ID.Null; 710 IDK idKind = identTok ? identTok.ident.idKind : IDK.Null;
711 711
712 switch (identID) 712 switch (idKind)
713 { 713 {
714 case ID.C: 714 case IDK.C:
715 if (consumed(T.PlusPlus)) 715 if (consumed(T.PlusPlus))
716 { 716 {
717 linkageType = LinkageType.Cpp; 717 linkageType = LinkageType.Cpp;
718 break; 718 break;
719 } 719 }
720 linkageType = LinkageType.C; 720 linkageType = LinkageType.C;
721 break; 721 break;
722 case ID.D: 722 case IDK.D:
723 linkageType = LinkageType.D; 723 linkageType = LinkageType.D;
724 break; 724 break;
725 case ID.Windows: 725 case IDK.Windows:
726 linkageType = LinkageType.Windows; 726 linkageType = LinkageType.Windows;
727 break; 727 break;
728 case ID.Pascal: 728 case IDK.Pascal:
729 linkageType = LinkageType.Pascal; 729 linkageType = LinkageType.Pascal;
730 break; 730 break;
731 case ID.System: 731 case IDK.System:
732 linkageType = LinkageType.System; 732 linkageType = LinkageType.System;
733 break; 733 break;
734 default: 734 default:
735 error(MID.UnrecognizedLinkageType, token.srcText); 735 error(MID.UnrecognizedLinkageType, token.srcText);
736 } 736 }
2154 nT(); 2154 nT();
2155 assert(token.kind == T.LParen); 2155 assert(token.kind == T.LParen);
2156 nT(); 2156 nT();
2157 auto condition = requireIdentifier(MSG.ExpectedScopeIdentifier); 2157 auto condition = requireIdentifier(MSG.ExpectedScopeIdentifier);
2158 if (condition) 2158 if (condition)
2159 switch (condition.identID) 2159 switch (condition.idKind)
2160 { 2160 {
2161 case ID.exit, ID.success, ID.failure: 2161 case IDK.exit, IDK.success, IDK.failure:
2162 break; 2162 break;
2163 default: 2163 default:
2164 error(this.prevToken, MSG.InvalidScopeIdentifier, this.prevToken.srcText); 2164 error(this.prevToken, MSG.InvalidScopeIdentifier, this.prevToken.srcText);
2165 } 2165 }
2166 require(T.RParen); 2166 require(T.RParen);
2567 { 2567 {
2568 case T.Byte, T.Short, T.Int, 2568 case T.Byte, T.Short, T.Int,
2569 T.Float, T.Double, T.Real: 2569 T.Float, T.Double, T.Real:
2570 goto LAsmTypePrefix; 2570 goto LAsmTypePrefix;
2571 case T.Identifier: 2571 case T.Identifier:
2572 switch (token.ident.identID) 2572 switch (token.ident.idKind)
2573 { 2573 {
2574 case ID.near, ID.far,/* "byte", "short", "int",*/ 2574 case IDK.near, IDK.far,/* "byte", "short", "int",*/
2575 ID.word, ID.dword, ID.qword/*, "float", "double", "real"*/: 2575 IDK.word, IDK.dword, IDK.qword/*, "float", "double", "real"*/:
2576 LAsmTypePrefix: 2576 LAsmTypePrefix:
2577 nT(); 2577 nT();
2578 if (token.kind == T.Identifier && token.ident is Ident.ptr) 2578 if (token.kind == T.Identifier && token.ident is Ident.ptr)
2579 nT(); 2579 nT();
2580 else 2580 else
2581 error(MID.ExpectedButFound, "ptr", token.srcText); 2581 error(MID.ExpectedButFound, "ptr", token.srcText);
2582 e = new AsmTypeExpression(parseAsmExpression()); 2582 e = new AsmTypeExpression(parseAsmExpression());
2583 break; 2583 break;
2584 case ID.offset: 2584 case IDK.offset:
2585 nT(); 2585 nT();
2586 e = new AsmOffsetExpression(parseAsmExpression()); 2586 e = new AsmOffsetExpression(parseAsmExpression());
2587 break; 2587 break;
2588 case ID.seg: 2588 case IDK.seg:
2589 nT(); 2589 nT();
2590 e = new AsmSegExpression(parseAsmExpression()); 2590 e = new AsmSegExpression(parseAsmExpression());
2591 break; 2591 break;
2592 default: 2592 default:
2593 goto LparseAsmPrimaryExpression; 2593 goto LparseAsmPrimaryExpression;
2650 require(T.RBracket); 2650 require(T.RBracket);
2651 e = new AsmBracketExpression(e); 2651 e = new AsmBracketExpression(e);
2652 break; 2652 break;
2653 case T.Identifier: 2653 case T.Identifier:
2654 auto register = token.ident; 2654 auto register = token.ident;
2655 switch (register.identID) 2655 switch (register.idKind)
2656 { 2656 {
2657 // __LOCAL_SIZE 2657 // __LOCAL_SIZE
2658 case ID.__LOCAL_SIZE: 2658 case IDK.__LOCAL_SIZE:
2659 nT(); 2659 nT();
2660 e = new AsmLocalSizeExpression(); 2660 e = new AsmLocalSizeExpression();
2661 break; 2661 break;
2662 // Register 2662 // Register
2663 case ID.ST: 2663 case IDK.ST:
2664 nT(); 2664 nT();
2665 // (1) - (7) 2665 // (1) - (7)
2666 int number = -1; 2666 int number = -1;
2667 if (consumed(T.LParen)) 2667 if (consumed(T.LParen))
2668 { 2668 {
2672 expected(T.Int32); 2672 expected(T.Int32);
2673 require(T.RParen); 2673 require(T.RParen);
2674 } 2674 }
2675 e = new AsmRegisterExpression(register, number); 2675 e = new AsmRegisterExpression(register, number);
2676 break; 2676 break;
2677 case ID.FS: 2677 case IDK.FS:
2678 nT(); 2678 nT();
2679 // TODO: is the colon-number part optional? 2679 // TODO: is the colon-number part optional?
2680 int number = -1; 2680 int number = -1;
2681 if (consumed(T.Colon)) 2681 if (consumed(T.Colon))
2682 { 2682 {
2686 if (number != 0 && number != 4 && number != 8) 2686 if (number != 0 && number != 4 && number != 8)
2687 error(MID.ExpectedButFound, "0, 4 or 8", token.srcText); 2687 error(MID.ExpectedButFound, "0, 4 or 8", token.srcText);
2688 } 2688 }
2689 e = new AsmRegisterExpression(register, number); 2689 e = new AsmRegisterExpression(register, number);
2690 break; 2690 break;
2691 case ID.AL, ID.AH, ID.AX, ID.EAX, 2691 case IDK.AL, IDK.AH, IDK.AX, IDK.EAX,
2692 ID.BL, ID.BH, ID.BX, ID.EBX, 2692 IDK.BL, IDK.BH, IDK.BX, IDK.EBX,
2693 ID.CL, ID.CH, ID.CX, ID.ECX, 2693 IDK.CL, IDK.CH, IDK.CX, IDK.ECX,
2694 ID.DL, ID.DH, ID.DX, ID.EDX, 2694 IDK.DL, IDK.DH, IDK.DX, IDK.EDX,
2695 ID.BP, ID.EBP, ID.SP, ID.ESP, 2695 IDK.BP, IDK.EBP, IDK.SP, IDK.ESP,
2696 ID.DI, ID.EDI, ID.SI, ID.ESI, 2696 IDK.DI, IDK.EDI, IDK.SI, IDK.ESI,
2697 ID.ES, ID.CS, ID.SS, ID.DS, ID.GS, 2697 IDK.ES, IDK.CS, IDK.SS, IDK.DS, IDK.GS,
2698 ID.CR0, ID.CR2, ID.CR3, ID.CR4, 2698 IDK.CR0, IDK.CR2, IDK.CR3, IDK.CR4,
2699 ID.DR0, ID.DR1, ID.DR2, ID.DR3, ID.DR6, ID.DR7, 2699 IDK.DR0, IDK.DR1, IDK.DR2, IDK.DR3, IDK.DR6, IDK.DR7,
2700 ID.TR3, ID.TR4, ID.TR5, ID.TR6, ID.TR7, 2700 IDK.TR3, IDK.TR4, IDK.TR5, IDK.TR6, IDK.TR7,
2701 ID.MM0, ID.MM1, ID.MM2, ID.MM3, 2701 IDK.MM0, IDK.MM1, IDK.MM2, IDK.MM3,
2702 ID.MM4, ID.MM5, ID.MM6, ID.MM7, 2702 IDK.MM4, IDK.MM5, IDK.MM6, IDK.MM7,
2703 ID.XMM0, ID.XMM1, ID.XMM2, ID.XMM3, 2703 IDK.XMM0, IDK.XMM1, IDK.XMM2, IDK.XMM3,
2704 ID.XMM4, ID.XMM5, ID.XMM6, ID.XMM7: 2704 IDK.XMM4, IDK.XMM5, IDK.XMM6, IDK.XMM7:
2705 nT(); 2705 nT();
2706 e = new AsmRegisterExpression(register); 2706 e = new AsmRegisterExpression(register);
2707 break; 2707 break;
2708 default: 2708 default:
2709 e = parseIdentifierExpression(); 2709 e = parseIdentifierExpression();