Explorar el Código

+ odt_javaclass, odt_interfacejava objectdef types
+ it_interfacejava type (not explicitly selectable via -SI nor
{$interfaces xxx}, but default for jvm target)
* disable it_interfacecom/corba for jvm target
+ init_settings for jvm that select it_interfacejava as default interface
type
+ default_class_type constant (in symconst) that is odt_javaclass for the jvm
target and odt_class for other targets (used to determine the meaning of
"type x = class" declarations)

git-svn-id: branches/jvmbackend@18286 -

Jonas Maebe hace 14 años
padre
commit
f67919e9f5
Se han modificado 7 ficheros con 49 adiciones y 13 borrados
  1. 9 0
      compiler/globals.pas
  2. 2 1
      compiler/globtype.pas
  3. 3 0
      compiler/options.pas
  4. 11 5
      compiler/pdecl.pas
  5. 11 5
      compiler/ptype.pas
  6. 4 1
      compiler/scandir.pas
  7. 9 1
      compiler/symconst.pas

+ 9 - 0
compiler/globals.pas

@@ -422,9 +422,18 @@ interface
         optimizecputype : cpu_mips32;
         optimizecputype : cpu_mips32;
         fputype : fpu_mips2;
         fputype : fpu_mips2;
   {$endif mips}
   {$endif mips}
+  {$ifdef jvm}
+        cputype : cpu_none;
+        optimizecputype : cpu_none;
+        fputype : fpu_standard;
+  {$endif jvm}
 {$endif not GENERIC_CPU}
 {$endif not GENERIC_CPU}
         asmmode : asmmode_standard;
         asmmode : asmmode_standard;
+{$ifndef jvm}
         interfacetype : it_interfacecom;
         interfacetype : it_interfacecom;
+{$else jvm}
+        interfacetype : it_interfacejava;
+{$endif jvm}
         defproccall : pocall_default;
         defproccall : pocall_default;
         sourcecodepage : '8859-1';
         sourcecodepage : '8859-1';
         minfpconstprec : s32real;
         minfpconstprec : s32real;

+ 2 - 1
compiler/globtype.pas

@@ -308,7 +308,8 @@ interface
        { interface types }
        { interface types }
        tinterfacetypes = (
        tinterfacetypes = (
          it_interfacecom,
          it_interfacecom,
-         it_interfacecorba
+         it_interfacecorba,
+         it_interfacejava
        );
        );
 
 
        { currently parsed block type }
        { currently parsed block type }

+ 3 - 0
compiler/options.pas

@@ -1269,6 +1269,9 @@ begin
                  IllegalPara(opt);
                  IllegalPara(opt);
                if more[1]='I' then
                if more[1]='I' then
                  begin
                  begin
+{$ifdef jvm}
+                   UnsupportedPara('-SI');
+{$endif}
                    if upper(more)='ICOM' then
                    if upper(more)='ICOM' then
                      init_settings.interfacetype:=it_interfacecom
                      init_settings.interfacetype:=it_interfacecom
                    else if upper(more)='ICORBA' then
                    else if upper(more)='ICORBA' then

+ 11 - 5
compiler/pdecl.pas

@@ -483,12 +483,18 @@ implementation
                   begin
                   begin
                     case token of
                     case token of
                       _CLASS :
                       _CLASS :
-                        objecttype:=odt_class;
+                        objecttype:=default_class_type;
                       _INTERFACE :
                       _INTERFACE :
-                        if current_settings.interfacetype=it_interfacecom then
-                          objecttype:=odt_interfacecom
-                        else
-                          objecttype:=odt_interfacecorba;
+                        case current_settings.interfacetype of
+                          it_interfacecom:
+                            objecttype:=odt_interfacecom;
+                          it_interfacecorba:
+                            objecttype:=odt_interfacecorba;
+                          it_interfacejava:
+                            objecttype:=odt_interfacejava;
+                          else
+                            internalerror(2010122611);
+                        end;
                       _DISPINTERFACE :
                       _DISPINTERFACE :
                         objecttype:=odt_dispinterface;
                         objecttype:=odt_dispinterface;
                       _OBJCCLASS,
                       _OBJCCLASS,

+ 11 - 5
compiler/ptype.pas

@@ -1632,7 +1632,7 @@ implementation
                     def:=object_dec(odt_helper,name,genericdef,genericlist,nil,ht_class);
                     def:=object_dec(odt_helper,name,genericdef,genericlist,nil,ht_class);
                   end
                   end
                 else
                 else
-                  def:=object_dec(odt_class,name,genericdef,genericlist,nil,ht_none);
+                  def:=object_dec(default_class_type,name,genericdef,genericlist,nil,ht_none);
               end;
               end;
             _CPPCLASS :
             _CPPCLASS :
               begin
               begin
@@ -1654,10 +1654,16 @@ implementation
                 if not(m_class in current_settings.modeswitches) then
                 if not(m_class in current_settings.modeswitches) then
                   Message(parser_f_need_objfpc_or_delphi_mode);
                   Message(parser_f_need_objfpc_or_delphi_mode);
                 consume(token);
                 consume(token);
-                if current_settings.interfacetype=it_interfacecom then
-                  def:=object_dec(odt_interfacecom,name,genericdef,genericlist,nil,ht_none)
-                else {it_interfacecorba}
-                  def:=object_dec(odt_interfacecorba,name,genericdef,genericlist,nil,ht_none);
+                case current_settings.interfacetype of
+                  it_interfacecom:
+                    def:=object_dec(odt_interfacecom,name,genericdef,genericlist,nil,ht_none);
+                  it_interfacecorba:
+                    def:=object_dec(odt_interfacecorba,name,genericdef,genericlist,nil,ht_none);
+                  it_interfacejava:
+                    def:=object_dec(odt_interfacejava,name,genericdef,genericlist,nil,ht_none);
+                  else
+                    internalerror(2010122612);
+                end;
               end;
               end;
             _OBJCPROTOCOL :
             _OBJCPROTOCOL :
                begin
                begin

+ 4 - 1
compiler/scandir.pas

@@ -457,11 +457,14 @@ unit scandir;
         {corba/com/default}
         {corba/com/default}
         current_scanner.skipspace;
         current_scanner.skipspace;
         hs:=current_scanner.readid;
         hs:=current_scanner.readid;
+{$ifndef jvm}
         if (hs='CORBA') then
         if (hs='CORBA') then
           current_settings.interfacetype:=it_interfacecorba
           current_settings.interfacetype:=it_interfacecorba
         else if (hs='COM') then
         else if (hs='COM') then
           current_settings.interfacetype:=it_interfacecom
           current_settings.interfacetype:=it_interfacecom
-        else if (hs='DEFAULT') then
+        else
+{$endif jvm}
+             if (hs='DEFAULT') then
           current_settings.interfacetype:=init_settings.interfacetype
           current_settings.interfacetype:=init_settings.interfacetype
         else
         else
           Message(scan_e_invalid_interface_type);
           Message(scan_e_invalid_interface_type);

+ 9 - 1
compiler/symconst.pas

@@ -331,7 +331,9 @@ type
     odt_objcclass,
     odt_objcclass,
     odt_objcprotocol,
     odt_objcprotocol,
     odt_objccategory, { note that these are changed into odt_class afterwards }
     odt_objccategory, { note that these are changed into odt_class afterwards }
-    odt_helper
+    odt_helper,
+    odt_javaclass,
+    odt_interfacejava
   );
   );
 
 
   { defines the type of the extended "structure"; only used for parsing }
   { defines the type of the extended "structure"; only used for parsing }
@@ -614,6 +616,12 @@ const
      );
      );
 
 
 
 
+{$ifndef jvm}
+     default_class_type=odt_class;
+{$else not jvm}
+     default_class_type=odt_javaclass;
+{$endif not jvm}
+
 { !! Be sure to keep these in sync with ones in rtl/inc/varianth.inc }
 { !! Be sure to keep these in sync with ones in rtl/inc/varianth.inc }
       varempty = 0;
       varempty = 0;
       varnull = 1;
       varnull = 1;