Changeset 2298


Ignore:
Timestamp:
Jan 30, 2007, 9:25:51 PM (14 years ago)
Author:
yura
Message:
  • First version of Java bytecode generator (option -jbc for rfpc).
Location:
to-imperative/trunk/compiler
Files:
2 added
1 edited

Legend:

Unmodified
Added
Removed
  • to-imperative/trunk/compiler/rfpc.rf

    r2096 r2298  
    2929$use "rfp_asail_java"; //rfp_asail_java.rfi
    3030$use "rfp_asail_tpp"; //rfp_asail_tpp.rfi
     31$use "rfp_asail_jbc";
    3132$use "rfp_as2as";
    3233$use "rfp_check";
     
    186187            <In-Table? &RFP-Options HH>;
    187188            <In-Table? &RFP-Options JAVA>;
     189            <In-Table? &RFP-Options JBC>;
    188190            <In-Table? &RFP-Options TPP>;
    189191            <In-Table? &RFP-Options AS-AIL>;
     
    209211            <In-Table? &RFP-Options HH>;
    210212            <In-Table? &RFP-Options JAVA>;
     213            <In-Table? &RFP-Options JBC>;
    211214            <In-Table? &RFP-Options TPP>;
    212215            <In-Table? &RFP-Options AS-AIL>;
     
    388391              { s.need-close? : 1 = <Close-Channel s.channel>;; },
    389392              $fail;
     393            <In-Table? &RFP-Options JBC>,
     394              e.Items : (INTERFACE t.asail-mod-name e.headers) (MODULE t e.module),
     395              <Extract-Inputs e.module> :: e.module,
     396              {
     397                <In-Table? &RFP-Options NO-OPTIM> = e.module;
     398                <Verbose "as-ail optimization started">,
     399//                  <ASAIL-Optim e.module> :: e.module,
     400                  <Simplify-ASAIL e.module> :: e.module,
     401                  {
     402                    e.module : e t.item e,
     403//                      <RFP-Pretty-Print &StdOut () t.item>,
     404                      $fail;;
     405                  },
     406                  <Verbose "as-ail optimization finished"> =
     407                  e.module;
     408              } :: e.module,
     409              <Verbose "compilation from as-ail to java started">,
     410              {
     411                e.headers (/*e.exports*/) $iter {
     412                  e.headers : (s.decl t.name) e.rest =
     413                    e.rest (e.exports t.name);
     414                } :: e.headers (e.exports),
     415                  e.headers : /*empty*/ =
     416                  e.exports;
     417              } :: e.exports,
     418              <RFP-ASAIL-To-JBC t.asail-mod-name (e.exports) e.module>
     419                :: (e.java-module-name) (e.inputs) e.module,
     420              <Verbose "compilation from as-ail to java finished">,
     421              {
     422                <In-Table? &RFP-Options NAME> = e.basename;
     423                e.dirname : v = e.dirname s.dir-separator e.java-module-name;
     424                e.java-module-name;
     425              } :: e.java-module-name,
     426              <Open-Channel e.java-module-name ('.java')> :: s.channel s.need-close?,
     427              {
     428                <? &RFP-Include-Path> : e (e.dir) e,
     429                  e.dirname : \{
     430                    e.dir = /*empty*/;
     431                    e.dir s.dir-separator e.package = e.package;
     432                  };
     433                e.dirname;
     434              } :: e.package,
     435              {
     436                e.package : v =
     437                  <PrintLN! s.channel
     438                  'package '<Subst (s.dir-separator) (('.')) e.package>';\n'>;;
     439              },
     440              <PrintLN! s.channel 'import org.refal.plus.*;'>,
     441              {
     442                e.inputs : e (v.java-module) e, \{
     443                  <Lookup &Includes v.java-module> : \{
     444                    BOOT e = 'org.refal.plus.library.'v.java-module;
     445                    LOCAL e.path,
     446                      <? &RFP-Include-Path> : e (e.dir) e,
     447                      e.path : \{
     448                        e.dir = /*empty*/;
     449                        e.dir s.dir-separator e.p = e.p;
     450                      } :: e.p,
     451                      <Subst (s.dir-separator) (('.')) e.p>
     452                      <Rfp2Java <To-Word v.java-module>>;
     453                  };
     454                  v.java-module;
     455                } :: e.java-module,
     456                  \{ e.java-module : e '.' e; },
     457                  <PrintLN! s.channel 'import 'e.java-module';'>,
     458                  $fail;;
     459              },
     460              <CPP-Pretty-Print 0 s.channel () e.module>,
     461              { s.need-close? : 1 = <Close-Channel s.channel>;; },
     462                                                        $fail;
    390463          };
    391464      } :: s.type e.Items,
     
    425498  ((('j') ('java')) (BIND JAVA)
    426499    "output Java code")
     500  ((('jbc')) (BIND JBC)
     501    "output Java byte-code")
    427502  ((('t') ('t++')) (BIND TPP)
    428503    "output T++ code")
     
    561636      <In-Table? &RFP-Options TPP>;
    562637      <In-Table? &RFP-Options JAVA>;
     638      <In-Table? &RFP-Options JBC>;
    563639      <In-Table? &RFP-Options AS-REFAL>;
    564640      <In-Table? &RFP-Options AS-TRANSFORMED>;
Note: See TracChangeset for help on using the changeset viewer.