diff --git a/collects/profj/check.ss b/collects/profj/check.ss index 8b51cbfae9..74ac9a76e9 100644 --- a/collects/profj/check.ss +++ b/collects/profj/check.ss @@ -803,9 +803,9 @@ #f)) ((throw? body) #t) ((return? body) #t) - ((while? body) (reachable-return? (while-loop body))) - ((doS? body) (reachable-return? (doS-loop body))) - ((for? body) (reachable-return? (for-loop body))) + ((while? body) #f #;(reachable-return? (while-loop body))) + ((doS? body) #f #;(reachable-return? (doS-loop body))) + ((for? body) #f #;(reachable-return? (for-loop body))) ((try? body) (and (reachable-return? (try-body body)) (or (and (try-finally body) diff --git a/collects/profj/parsers/parse-error.ss b/collects/profj/parsers/parse-error.ss index 9e7bdc707c..f119b8e042 100644 --- a/collects/profj/parsers/parse-error.ss +++ b/collects/profj/parsers/parse-error.ss @@ -206,8 +206,12 @@ (format "malformed string ~a" (car (token-value tok)))) ((eq? (get-token-name tok) 'NUMBER_ERROR) (format "malformed number ~a" (token-value tok))) + ((eq? (get-token-name tok) 'HEX_LIT) + (format "hexadecimal formatted number ~a" (token-value tok))) + ((eq? (get-token-name tok) 'OCT_LIT) + (format "octal formatted number ~a" (token-value tok))) ((eq? (get-token-name tok) 'OTHER_SPECIAL) - (parse-error "Found special which is not a legal character in ProfessorJ" + (parse-error "Found a special which is not a legal character in ProfessorJ" (cadr (token-value tok)) (caddr (token-value tok)))) ((eq? (get-token-name tok) 'TEST_SUITE) (format "Test Suite Test")) ((eq? (get-token-name tok) 'INTERACTIONS_BOX) (format "Java Interactions Box")) @@ -754,6 +758,10 @@ (else (parse-members next (parse-expression null assign-exp 'start getter #f #f) 'field-init-end getter #f just-method?))))) ((o-paren? n-tok) (parse-members next (getter) 'method-parms getter abstract-method? just-method?)) + ((o-bracket? n-tok) + (parse-error + "'[' cannot appear here. Array specifications must immediately follow the type. Methods begin with '('." + srt ne)) ((open-separator? n-tok) (parse-error (format "Method parameters must begin with '(' found ~a." n-out) srt ne)) ((id-token? n-tok) @@ -1737,8 +1745,34 @@ (else (parse-error (format "Expected a name after '.', ~a is not a valid name" (format-out (get-tok next))) start (get-end next)))))) - ((O_PAREN) (parse-statement cur-tok (parse-expression pre cur-tok 'method-call-args getter #f #t) - 'end-exp getter id-ok? ctor? super-seen?)) + ((O_PAREN) + (if (and (advanced?) (close-to-keyword? (get-tok pre) 'for)) + (let* ((next (getter)) + (next-tok (get-tok next))) + (cond + ((prim-type? next-tok) + (parse-error + (format "Primitive type ~a cannot appear here.~nSection began with ~a, which is close to 'for'. Check spelling and capitalization." + (format-out next-tok) + (format-out (get-tok pre))) + ps (get-end next))) + ((c-paren? next-tok) + (let ((after-c (getter))) + (if (semi-colon? (get-tok after-c)) + (parse-statement cur-tok (getter) 'end-exp getter id-ok? ctor? super-seen?) + (parse-statement cur-tok + (parse-expression next-tok after-c 'dot-op-or-end + getter #f #t) + 'end-exp getter id-ok? ctor? super-seen?)))) + (else + (parse-statement + cur-tok + (parse-expression cur-tok + (parse-expression cur-tok next-tok 'start getter #f #t) + 'method-args getter #f #t) + 'end-exp getter id-ok? ctor? super-seen?)))) + (parse-statement cur-tok (parse-expression pre cur-tok 'method-call-args getter #f #t) + 'end-exp getter id-ok? ctor? super-seen?))) (else (cond ((and (advanced?) (eq? kind 'O_BRACKET)) diff --git a/collects/tests/profj/advanced-tests.ss b/collects/tests/profj/advanced-tests.ss index 6c15178c0d..12ad86f744 100644 --- a/collects/tests/profj/advanced-tests.ss +++ b/collects/tests/profj/advanced-tests.ss @@ -267,6 +267,23 @@ class WeeklyPlanner{ }" 'advanced #t "If with no else, and return in if") + (execute-test + "class Blah { + boolean same (int[] these, int[] those) { + int which = 0; + while ((which < these.length) && (which < those.length)) { + if (these[which] == those[which]) { + which = which + 1; + return true; + } + return false; + } + } + }" + 'advanced #t "No reachable return -- while loop has returns") + + + ;;Interaction tests, mix of right and error (interact-test