Browse Source

+ support exit();

git-svn-id: trunk@1802 -
florian 20 years ago
parent
commit
350c886460
3 changed files with 33 additions and 15 deletions
  1. 1 0
      .gitattributes
  2. 20 15
      compiler/pexpr.pas
  3. 12 0
      tests/webtbs/tw4537.pp

+ 1 - 0
.gitattributes

@@ -6372,6 +6372,7 @@ tests/webtbs/tw4477.pp svneol=native#text/plain
 tests/webtbs/tw4487.pp -text svneol=unset#text/plain
 tests/webtbs/tw4489.pp -text svneol=unset#text/plain
 tests/webtbs/tw4496.pp svneol=native#text/plain
+tests/webtbs/tw4537.pp svneol=native#text/plain
 tests/webtbs/ub1873.pp svneol=native#text/plain
 tests/webtbs/ub1883.pp svneol=native#text/plain
 tests/webtbs/uw0555.pp svneol=native#text/plain

+ 20 - 15
compiler/pexpr.pas

@@ -377,23 +377,28 @@ implementation
                 begin
                   if not (m_mac in aktmodeswitches) then
                     begin
-                      p1:=comp_expr(true);
-                      consume(_RKLAMMER);
-                      if (block_type=bt_except) then
+                      if not(try_to_consume(_RKLAMMER)) then
                         begin
-                          Message(parser_e_exit_with_argument_not__possible);
-                          { recovery }
-                          p1.free;
-                          p1:=nil;
+                          p1:=comp_expr(true);
+                          consume(_RKLAMMER);
+                          if (block_type=bt_except) then
+                            begin
+                              Message(parser_e_exit_with_argument_not__possible);
+                              { recovery }
+                              p1.free;
+                              p1:=nil;
+                            end
+                          else if (not assigned(current_procinfo) or
+                              is_void(current_procinfo.procdef.rettype.def)) then
+                            begin
+                              Message(parser_e_void_function);
+                              { recovery }
+                              p1.free;
+                              p1:=nil;
+                            end;
                         end
-                      else if (not assigned(current_procinfo) or
-                          is_void(current_procinfo.procdef.rettype.def)) then
-                        begin
-                          Message(parser_e_void_function);
-                          { recovery }
-                          p1.free;
-                          p1:=nil;
-                        end;
+                      else
+                        p1:=nil;
                     end
                   else
                     begin

+ 12 - 0
tests/webtbs/tw4537.pp

@@ -0,0 +1,12 @@
+procedure foo;
+  begin
+    exit();
+  end;
+
+function bar: integer;
+  begin
+    exit(42);
+  end;
+  
+begin
+end.