Changeset 3193

Show
Ignore:
Timestamp:
12/11/08 04:41:30 (12 months ago)
Author:
sukyoungryu
Message:

[ast refactoring] Removed optional fields of IntLiteralExpr?, CharLiteralExpr?, and VoidLiteralExpr?.

Location:
trunk/ProjectFortress
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • trunk/ProjectFortress/astgen/Fortress.ast

    r3192 r3193  
    785785                                 * e.g.) 7 
    786786                                 */ 
    787                                 IntLiteralExpr(String text = in_intVal.toString(), 
    788                                                BigInteger intVal); 
     787                                IntLiteralExpr(BigInteger intVal); 
    789788                            /** 
    790789                             * char literal 
    791790                             * e.g.) 'c' 
    792791                             */ 
    793                             CharLiteralExpr(int charVal = in_text.charAt(0)); 
     792                            CharLiteralExpr(int charVal); 
    794793                            /** 
    795794                             * string literal 
     
    801800                             * e.g.) () 
    802801                             */ 
    803                             VoidLiteralExpr(String text = ""); 
     802                            VoidLiteralExpr(); 
    804803                        /** 
    805804                         * variable reference 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/disambiguator/ExprDisambiguator.java

    r3192 r3193  
    11661166        Option<Expr> with = returnExpr_result.isSome() ? 
    11671167            returnExpr_result : 
    1168             wrap((Expr)new VoidLiteralExpr(that.getSpan())); 
     1168            wrap((Expr)ExprFactory.makeVoidLiteralExpr(that.getSpan())); 
    11691169 
    11701170        if (target.isNone() || _innerMostLabel.isNone()) { 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/typechecker/TypeChecker.java

    r3192 r3193  
    20182018        @Override 
    20192019        public TypeCheckerResult forCharLiteralExpr(CharLiteralExpr that) { 
    2020                 CharLiteralExpr new_node = new CharLiteralExpr(that.getSpan(), 
    2021                                 that.isParenthesized(), 
    2022                                 Option.<Type>some(Types.CHAR), 
    2023                                 that.getText(), 
    2024                                 that.getCharVal()); 
     2020                CharLiteralExpr new_node = ExprFactory.makeCharLiteralExpr(that.getSpan(), 
     2021                                                                           that.isParenthesized(), 
     2022                                                                           Option.<Type>some(Types.CHAR), 
     2023                                                                           that.getText(), 
     2024                                                                           that.getCharVal()); 
    20252025                return new TypeCheckerResult(new_node, Types.CHAR); 
    20262026        } 
     
    28702870        @Override 
    28712871        public TypeCheckerResult forIntLiteralExpr(IntLiteralExpr that) { 
    2872                 IntLiteralExpr new_node = new IntLiteralExpr(that.getSpan(), Option.<Type>some(Types.INT_LITERAL), that.getText(), that.getIntVal()); 
     2872                IntLiteralExpr new_node = ExprFactory.makeIntLiteralExpr(that.getSpan(), 
     2873                                                                         that.isParenthesized(), 
     2874                                                                         Option.<Type>some(Types.INT_LITERAL), 
     2875                                                                         that.getText(), that.getIntVal()); 
    28732876                return new TypeCheckerResult(new_node, Types.INT_LITERAL); 
    28742877        } 
     
    44644467        @Override 
    44654468        public TypeCheckerResult forVoidLiteralExpr(VoidLiteralExpr that) { 
    4466                 VoidLiteralExpr new_node = new VoidLiteralExpr(that.getSpan(), 
    4467                                 that.isParenthesized(), 
    4468                                 Option.<Type>some(Types.VOID), 
    4469                                 that.getText()); 
     4469                VoidLiteralExpr new_node = ExprFactory.makeVoidLiteralExpr(that.getSpan(), 
     4470                                                                           that.isParenthesized(), 
     4471                                                                           Option.<Type>some(Types.VOID), 
     4472                                                                           that.getText()); 
    44704473                return new TypeCheckerResult(new_node, Types.VOID); 
    44714474        } 
  • trunk/ProjectFortress/src/com/sun/fortress/nodes_util/ExprFactory.java

    r3192 r3193  
    468468    } 
    469469 
     470    public static IntLiteralExpr makeIntLiteralExpr(Span span, String s) { 
     471        BigInteger val; 
     472 
     473        // Delete every apostrophe and U+202F NARROW NO-BREAK SPACE 
     474        s = s.replace("'", "").replace("\u202F", ""); 
     475 
     476        int underLoc = s.indexOf('_'); 
     477        if (underLoc == -1) { 
     478            val = new BigInteger(s); 
     479        } 
     480        else { 
     481            String digits = s.substring(0, underLoc); 
     482            String base_digits = s.substring(underLoc + 1); 
     483            int base; 
     484            if (!Unicode.charactersOverlap(base_digits, "0123456789")) { 
     485                base = Unicode.numberToValue(base_digits); 
     486            } 
     487            else { 
     488                base = Integer.parseInt(base_digits); 
     489            } 
     490            digits = dozenalHack(digits, base); 
     491            val = new BigInteger(digits, base); 
     492        } 
     493        return makeIntLiteralExpr(span, s, val); 
     494    } 
     495 
     496    static String dozenalHack(String digits, int base) { 
     497        if (base == 12 && Unicode.charactersOverlap(digits, "xXeE")) { 
     498            digits = digits.replace('x', 'A'); 
     499            digits = digits.replace('X', 'A'); 
     500            digits = digits.replace('e', 'B'); 
     501            digits = digits.replace('E', 'B'); 
     502        } 
     503        return digits; 
     504    } 
     505 
     506    public static IntLiteralExpr makeIntLiteralExpr(Span span, 
     507                                                    BigInteger intVal) { 
     508        return makeIntLiteralExpr(span, intVal.toString(), intVal); 
     509    } 
     510 
     511    public static IntLiteralExpr makeIntLiteralExpr(Span span, 
     512                                                    String text, 
     513                                                    BigInteger intVal) { 
     514        return makeIntLiteralExpr(span, false, Option.<Type>none(), 
     515                                  text, intVal); 
     516    } 
     517 
     518    public static IntLiteralExpr makeIntLiteralExpr(Span span, 
     519                                                    boolean parenthesized, 
     520                                                    Option<Type> exprType, 
     521                                                    String text, 
     522                                                    BigInteger intVal) { 
     523        return new IntLiteralExpr(span, parenthesized, exprType, text, intVal); 
     524    } 
     525 
     526    public static CharLiteralExpr makeCharLiteralExpr(Span span, String s) { 
     527        return makeCharLiteralExpr(span, false, Option.<Type>none(), 
     528                                   s, s.charAt(0)); 
     529    } 
     530 
     531    public static CharLiteralExpr makeCharLiteralExpr(Span span, 
     532                                                      boolean parenthesized, 
     533                                                      Option<Type> exprType, 
     534                                                      String text, 
     535                                                      int charVal) { 
     536        return new CharLiteralExpr(span, parenthesized, exprType, text, charVal); 
     537    } 
     538 
     539    public static VoidLiteralExpr makeVoidLiteralExpr(Span span) { 
     540        return makeVoidLiteralExpr(span, false, Option.<Type>none(), ""); 
     541    } 
     542 
     543    public static VoidLiteralExpr makeVoidLiteralExpr(Span span, 
     544                                                      boolean parenthesized, 
     545                                                      Option<Type> exprType, 
     546                                                      String text) { 
     547        return new VoidLiteralExpr(span, parenthesized, exprType, text); 
     548    } 
     549 
    470550    /***************************************************************************************/ 
    471  
    472     public static CharLiteralExpr makeCharLiteralExpr(Span span, String s) { 
    473         return new CharLiteralExpr(span, false, s, s.charAt(0)); 
    474     } 
    475551 
    476552    public static Exit makeExit(Span span, Option<Type> typeOp, Option<Id> targetOp, Expr retExpr) { 
     
    595671    } 
    596672 
    597     public static IntLiteralExpr makeIntLiteralExpr(Span span, BigInteger val) { 
    598         return new IntLiteralExpr(span, false, val.toString(), val); 
    599     } 
    600  
    601     public static IntLiteralExpr makeIntLiteralExpr(Span span, String s) { 
    602         BigInteger val; 
    603  
    604         // Delete every apostrophe and U+202F NARROW NO-BREAK SPACE 
    605         s = s.replace("'", "").replace("\u202F", ""); 
    606  
    607         int underLoc = s.indexOf('_'); 
    608         if (underLoc == -1) { 
    609             val = new BigInteger(s); 
    610         } 
    611         else { 
    612             String digits = s.substring(0, underLoc); 
    613             String base_digits = s.substring(underLoc + 1); 
    614             int base; 
    615             if (!Unicode.charactersOverlap(base_digits, "0123456789")) { 
    616                 base = Unicode.numberToValue(base_digits); 
    617             } 
    618             else { 
    619                 base = Integer.parseInt(base_digits); 
    620             } 
    621             digits = dozenalHack(digits, base); 
    622             val = new BigInteger(digits, base); 
    623         } 
    624         return new IntLiteralExpr(span, false, s, val); 
    625     } 
    626  
    627     static String dozenalHack(String digits, int base) { 
    628         if (base == 12 && Unicode.charactersOverlap(digits, "xXeE")) { 
    629             digits = digits.replace('x', 'A'); 
    630             digits = digits.replace('X', 'A'); 
    631             digits = digits.replace('e', 'B'); 
    632             digits = digits.replace('E', 'B'); 
    633         } 
    634         return digits; 
    635     } 
    636  
    637673 
    638674    public static LetExpr makeLetExpr(final LetExpr let_expr, final List<Expr> body) { 
     
    745781    } 
    746782 
    747     public static VoidLiteralExpr makeVoidLiteralExpr(Span span) { 
    748         return new VoidLiteralExpr(span, false, ""); 
    749     } 
    750  
    751783    public static If makeIf(IfClause _if, Expr _else) { 
    752784        List<IfClause> ifclauses = Collections.singletonList(_if); 
     
    10421074        } 
    10431075        public Expr forIntLiteralExpr(IntLiteralExpr e) { 
    1044             return new IntLiteralExpr(e.getSpan(), true, e.getText(), 
    1045                     e.getIntVal()); 
     1076            return makeIntLiteralExpr(e.getSpan(), true, e.getExprType(), 
     1077                                      e.getText(), e.getIntVal()); 
    10461078        } 
    10471079        public Expr forCharLiteralExpr(CharLiteralExpr e) { 
    1048             return new CharLiteralExpr(e.getSpan(), true, e.getText(), 
    1049                     e.getCharVal()); 
     1080            return makeCharLiteralExpr(e.getSpan(), true, e.getExprType(), 
     1081                                       e.getText(), e.getCharVal()); 
    10501082        } 
    10511083        public Expr forStringLiteralExpr(StringLiteralExpr e) { 
     
    10531085        } 
    10541086        public Expr forVoidLiteralExpr(VoidLiteralExpr e) { 
    1055             return new VoidLiteralExpr(e.getSpan(), true, e.getText()); 
     1087            return makeVoidLiteralExpr(e.getSpan(), true, e.getExprType(), 
     1088                                       e.getText()); 
    10561089        } 
    10571090        public Expr forVarRef(VarRef e) { 
  • trunk/ProjectFortress/src/com/sun/fortress/nodes_util/NodeFactory.java

    r3186 r3193  
    12311231    public static IntExpr makeIntVal(String i) { 
    12321232        Span span = new Span(); 
    1233         return new IntBase(span, new IntLiteralExpr(span, 
    1234                 new BigInteger(i))); 
     1233        return new IntBase(span, ExprFactory.makeIntLiteralExpr(span, 
     1234                                                                new BigInteger(i))); 
    12351235    } 
    12361236 
  • trunk/ProjectFortress/src/com/sun/fortress/parser_util/FortressUtil.java

    r3190 r3193  
    4848public final class FortressUtil { 
    4949    public static <T> T syntaxError(Span span, String msg) { 
    50         return ProgramError.<T>error(new VoidLiteralExpr(span), msg); 
     50        return ProgramError.<T>error(ExprFactory.makeVoidLiteralExpr(span), msg); 
    5151    } 
    5252