Changeset 3193
- Timestamp:
- 12/11/08 04:41:30 (12 months ago)
- Location:
- trunk/ProjectFortress
- Files:
-
- 6 modified
-
astgen/Fortress.ast (modified) (2 diffs)
-
src/com/sun/fortress/compiler/disambiguator/ExprDisambiguator.java (modified) (1 diff)
-
src/com/sun/fortress/compiler/typechecker/TypeChecker.java (modified) (3 diffs)
-
src/com/sun/fortress/nodes_util/ExprFactory.java (modified) (5 diffs)
-
src/com/sun/fortress/nodes_util/NodeFactory.java (modified) (1 diff)
-
src/com/sun/fortress/parser_util/FortressUtil.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ProjectFortress/astgen/Fortress.ast
r3192 r3193 785 785 * e.g.) 7 786 786 */ 787 IntLiteralExpr(String text = in_intVal.toString(), 788 BigInteger intVal); 787 IntLiteralExpr(BigInteger intVal); 789 788 /** 790 789 * char literal 791 790 * e.g.) 'c' 792 791 */ 793 CharLiteralExpr(int charVal = in_text.charAt(0));792 CharLiteralExpr(int charVal); 794 793 /** 795 794 * string literal … … 801 800 * e.g.) () 802 801 */ 803 VoidLiteralExpr( String text = "");802 VoidLiteralExpr(); 804 803 /** 805 804 * variable reference -
trunk/ProjectFortress/src/com/sun/fortress/compiler/disambiguator/ExprDisambiguator.java
r3192 r3193 1166 1166 Option<Expr> with = returnExpr_result.isSome() ? 1167 1167 returnExpr_result : 1168 wrap((Expr) newVoidLiteralExpr(that.getSpan()));1168 wrap((Expr)ExprFactory.makeVoidLiteralExpr(that.getSpan())); 1169 1169 1170 1170 if (target.isNone() || _innerMostLabel.isNone()) { -
trunk/ProjectFortress/src/com/sun/fortress/compiler/typechecker/TypeChecker.java
r3192 r3193 2018 2018 @Override 2019 2019 public TypeCheckerResult forCharLiteralExpr(CharLiteralExpr that) { 2020 CharLiteralExpr new_node = newCharLiteralExpr(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()); 2025 2025 return new TypeCheckerResult(new_node, Types.CHAR); 2026 2026 } … … 2870 2870 @Override 2871 2871 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()); 2873 2876 return new TypeCheckerResult(new_node, Types.INT_LITERAL); 2874 2877 } … … 4464 4467 @Override 4465 4468 public TypeCheckerResult forVoidLiteralExpr(VoidLiteralExpr that) { 4466 VoidLiteralExpr new_node = newVoidLiteralExpr(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()); 4470 4473 return new TypeCheckerResult(new_node, Types.VOID); 4471 4474 } -
trunk/ProjectFortress/src/com/sun/fortress/nodes_util/ExprFactory.java
r3192 r3193 468 468 } 469 469 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 470 550 /***************************************************************************************/ 471 472 public static CharLiteralExpr makeCharLiteralExpr(Span span, String s) {473 return new CharLiteralExpr(span, false, s, s.charAt(0));474 }475 551 476 552 public static Exit makeExit(Span span, Option<Type> typeOp, Option<Id> targetOp, Expr retExpr) { … … 595 671 } 596 672 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 SPACE605 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 637 673 638 674 public static LetExpr makeLetExpr(final LetExpr let_expr, final List<Expr> body) { … … 745 781 } 746 782 747 public static VoidLiteralExpr makeVoidLiteralExpr(Span span) {748 return new VoidLiteralExpr(span, false, "");749 }750 751 783 public static If makeIf(IfClause _if, Expr _else) { 752 784 List<IfClause> ifclauses = Collections.singletonList(_if); … … 1042 1074 } 1043 1075 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()); 1046 1078 } 1047 1079 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()); 1050 1082 } 1051 1083 public Expr forStringLiteralExpr(StringLiteralExpr e) { … … 1053 1085 } 1054 1086 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()); 1056 1089 } 1057 1090 public Expr forVarRef(VarRef e) { -
trunk/ProjectFortress/src/com/sun/fortress/nodes_util/NodeFactory.java
r3186 r3193 1231 1231 public static IntExpr makeIntVal(String i) { 1232 1232 Span span = new Span(); 1233 return new IntBase(span, newIntLiteralExpr(span,1234 new BigInteger(i)));1233 return new IntBase(span, ExprFactory.makeIntLiteralExpr(span, 1234 new BigInteger(i))); 1235 1235 } 1236 1236 -
trunk/ProjectFortress/src/com/sun/fortress/parser_util/FortressUtil.java
r3190 r3193 48 48 public final class FortressUtil { 49 49 public static <T> T syntaxError(Span span, String msg) { 50 return ProgramError.<T>error( newVoidLiteralExpr(span), msg);50 return ProgramError.<T>error(ExprFactory.makeVoidLiteralExpr(span), msg); 51 51 } 52 52

