2
0
Эх сурвалжийг харах

* fix for Mantis #36631: it's an error if a POINT after an array is not followed by an identifier
+ added tests

git-svn-id: trunk@44082 -

svenbarth 5 жил өмнө
parent
commit
1407aa2b4b

+ 2 - 0
.gitattributes

@@ -16197,6 +16197,8 @@ tests/webtbf/tw3643.pp svneol=native#text/plain
 tests/webtbf/tw3644.pp svneol=native#text/plain
 tests/webtbf/tw36554.pp svneol=native#text/pascal
 tests/webtbf/tw3662.pp svneol=native#text/plain
+tests/webtbf/tw36631a.pp svneol=native#text/pascal
+tests/webtbf/tw36631b.pp svneol=native#text/pascal
 tests/webtbf/tw3680.pp svneol=native#text/plain
 tests/webtbf/tw3716.pp svneol=native#text/plain
 tests/webtbf/tw3738.pp svneol=native#text/plain

+ 23 - 13
compiler/pexpr.pas

@@ -2463,22 +2463,32 @@ implementation
                    begin
                      if is_dynamic_array(p1.resultdef) then
                        begin
-                         if (token=_ID) and not try_type_helper(p1,nil) then
+                         if token=_ID then
                            begin
-                             if pattern='CREATE' then
+                             if not try_type_helper(p1,nil) then
                                begin
-                                 consume(_ID);
-                                 p2:=parse_array_constructor(tarraydef(p1.resultdef));
-                                 p1.destroy;
-                                 p1:=p2;
-                               end
-                             else
-                               begin
-                                 Message2(scan_f_syn_expected,'CREATE',pattern);
-                                 p1.destroy;
-                                 p1:=cerrornode.create;
-                                 consume(_ID);
+                                 if pattern='CREATE' then
+                                   begin
+                                     consume(_ID);
+                                     p2:=parse_array_constructor(tarraydef(p1.resultdef));
+                                     p1.destroy;
+                                     p1:=p2;
+                                   end
+                                 else
+                                   begin
+                                     Message2(scan_f_syn_expected,'CREATE',pattern);
+                                     p1.destroy;
+                                     p1:=cerrornode.create;
+                                     consume(_ID);
+                                   end;
                                end;
+                           end
+                         else
+                           begin
+                             Message(parser_e_invalid_qualifier);
+                             p1.destroy;
+                             p1:=cerrornode.create;
+                             consume(_ID);
                            end;
                        end
                      else

+ 23 - 0
tests/webtbf/tw36631a.pp

@@ -0,0 +1,23 @@
+{ %FAIL }
+
+program tw36631a;
+
+{$APPTYPE CONSOLE}
+{$mode objfpc}{$H+}
+
+uses
+  Classes,
+  SysUtils;
+
+var
+  LongStr: String;
+  SingleStr: String;
+
+begin
+  LongStr := 'Some example, test text. Another one, or something like that.';
+
+  SingleStr := LongStr.Split([',', '.']).[1];
+  writeln(SingleStr); // ' test text'
+
+  writeln('done');
+end.

+ 23 - 0
tests/webtbf/tw36631b.pp

@@ -0,0 +1,23 @@
+{ %FAIL }
+
+program tw36631b;
+
+{$APPTYPE CONSOLE}
+{$mode delphi}
+
+uses
+  Classes,
+  SysUtils;
+
+var
+  LongStr: String;
+  SingleStr: String;
+
+begin
+  LongStr := 'Some example, test text. Another one, or something like that.';
+
+  SingleStr := LongStr.Split([',', '.']).[1];
+  writeln(SingleStr); // ' test text'
+
+  writeln('done');
+end.