Changeset 3899
- Timestamp:
- 06/29/09 09:55:45 (5 months ago)
- Location:
- trunk/ProjectFortress
- Files:
-
- 6 added
- 3 modified
-
compiler_tests/Compiled5.at.fss (added)
-
compiler_tests/Compiled5.au.fss (added)
-
compiler_tests/Compiled5.av.fss (added)
-
compiler_tests/XXX5at.test (added)
-
compiler_tests/XXX5au.test (added)
-
compiler_tests/XXX5av.test (added)
-
src/com/sun/fortress/parser/NoNewlineHeader.rats (modified) (1 diff)
-
src/com/sun/fortress/parser/preparser/PreCompilation.rats (modified) (2 diffs)
-
src/com/sun/fortress/parser/preparser/PreParserState.java (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ProjectFortress/src/com/sun/fortress/parser/NoNewlineHeader.rats
r3822 r3899 86 86 NodeUtil.validTraitTypes(writer, Useful.list(a1)); 87 87 } 88 / comprises w void:opencurly w ComprisingTypeList w void:closecurly ; 88 / comprises w opencurly a1:(w ComprisingTypeList)? w closecurly 89 { if (a1 == null) { 90 Span span = createSpan(yyStart,yyCount); 91 log(span, "Comprises clauses should not be empty."); 92 yyValue = new Comprises(span, Collections.<BaseType>emptyList(), false); 93 } else yyValue = a1; 94 }; 89 95 90 96 /* ComprisingTypeList ::= -
trunk/ProjectFortress/src/com/sun/fortress/parser/preparser/PreCompilation.rats
r3845 r3899 76 76 / object { yyState.left(createSpan(yyStart,yyCount), "object"); } 77 77 / trait { yyState.left(createSpan(yyStart,yyCount), "trait"); } 78 / try { yyState.left(createSpan(yyStart,yyCount), "try"); } 78 / try { yyState.beginBlock(); 79 yyState.left(createSpan(yyStart,yyCount), "try"); } 79 80 / typecase { yyState.left(createSpan(yyStart,yyCount), "typecase"); } 80 81 / also { yyState.left(createSpan(yyStart,yyCount), "also"); } … … 88 89 / end s object // ignore the object keyword 89 90 { yyState.right(createSpan(yyStart,yyCount), "end"); } 90 / end { yyState. right(createSpan(yyStart,yyCount), "end"); }91 / end { yyState.handleEnd(createSpan(yyStart,yyCount)); } 91 92 / do { yyState.handleDo(createSpan(yyStart,yyCount)); } 92 93 / at { yyState.handleAt(createSpan(yyStart,yyCount)); } 94 / opr { yyState.handleOpr(createSpan(yyStart,yyCount)); } 95 / then { yyState.beginBlock(); } 96 / fn { yyState.handleFn(); } 97 / "=>" { yyState.handleDoubleArrow(); } 98 / QualifiedName w "=>" w Id 93 99 / Encloser // ignore vertical bars 94 100 / a1:LeftEncloser { yyState.left(a1); } -
trunk/ProjectFortress/src/com/sun/fortress/parser/preparser/PreParserState.java
r3676 r3899 51 51 /** Nested component/API definitions are not allowed. */ 52 52 private boolean sawCompilation = false; 53 54 /** Operator declarations are not allowed in block expressions. */ 55 private boolean inBlock = false; 56 private boolean sawFn = false; 53 57 54 58 /** Region annotation by "at" should be followed by "do". */ … … 125 129 "Unmatched delimiters \"" + open + "\" and \"" + close + "\"."); 126 130 } 131 if ( open.getText().equals("(if") && close.getText().equals(")") ) 132 inBlock = false; 127 133 } 128 134 } … … 147 153 } else { 148 154 lefts.add(0, open); 149 right(close);155 handleEnd(span); 150 156 } 151 157 } … … 163 169 Debug.debug( Debug.Type.PARSER, 1, "HandleAt"); 164 170 sawAt = Option.<Span>some(span); 171 } 172 173 public void handleOpr(Span span) { 174 Debug.debug( Debug.Type.PARSER, 1, "HandleOpr"); 175 for ( IdOrOp left : lefts ) { 176 if ( left.getText().equals("object") ) return; 177 if ( left.getText().equals("do") || 178 left.getText().startsWith("label$") || 179 inBlock ) 180 log(span, "Operator declarations are not allowed in block expressions."); 181 } 182 } 183 184 public void beginBlock() { 185 inBlock = true; 186 } 187 188 public void handleFn() { 189 sawFn = true; 190 } 191 192 // "=>" does not introduce a block for import aliases and fn expressions. 193 public void handleDoubleArrow() { 194 if ( sawFn ) sawFn = false; 195 else if ( ! lefts.isEmpty() && ! lefts.get(0).getText().equals("{") ) 196 inBlock = true; 197 } 198 199 public void handleEnd(Span span) { 200 if ( ! lefts.isEmpty() && 201 ! lefts.get(0).getText().equals("object") ) 202 inBlock = false; 203 right(span, "end"); 165 204 } 166 205

