Changeset 2338


Ignore:
Timestamp:
Feb 5, 2007, 9:54:33 PM (14 years ago)
Author:
orlov
Message:
  • Advances in Java-bytecode generation.
Location:
to-imperative/trunk/compiler
Files:
3 edited

Legend:

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

    r2313 r2338  
    11// $Id$
    22
    3 $use Access Apply Arithm Box Class Compare Convert JavaMangle List StdIO Table Java;
     3$use Access Apply Arithm Box Class Compare Convert File JavaMangle List StdIO Table Java;
    44$use "rfpc";
    55$use "rfp_helper";
    66
    77$import "org.objectweb.asm.ClassWriter";
     8$import "org.objectweb.asm.FieldVisitor";
     9$import "org.objectweb.asm.MethodVisitor";
    810$import "org.objectweb.asm.Opcodes";
    9 $import "java.io.FileOutputStream";
    1011
    1112$box Int;
     
    3132$table Iter-Vars;
    3233
     34$func Module-To-JBC s.cw e.module = ;
     35
    3336$func ASAIL-To-JBC e.body = e.java-code;
    3437
     
    6164$func Op-Arg-To-JBC s.op = s.func-for-converting-args-to-java;
    6265
    63 $func Access-Mode t.name = e.java-access-mode;
     66$func Access-Mode t.name = s.jbc-access-mode;
    6467
    6568$box Free-Idx;
     
    6972$func Declare-Results (e.ress) e.acc-java-ress = e.decls (e.java-ress);
    7073
    71 RFP-ASAIL-To-JBC (e.ModuleName) (e.exports) e.asail =
     74RFP-ASAIL-To-JBC (e.module-name) (e.package) (e.exports) e.module =
    7275  <Store &Free-Idx>,
    7376  <RFP-Clear-Table &Iter-Vars>,
     
    7881  },
    7982  <Store &Exports e.exports>,
    80   <Store &Current-Namespace e.ModuleName>,
     83  <Store &Current-Namespace e.module-name>,
    8184  {
    8285    <Store &Entry <Lookup &RFP-Options ENTRIES>>;
    83     <Store &Entry (e.ModuleName Main)>;
     86    <Store &Entry (e.module-name Main)>;
    8487  },
    8588  <Store &Entry-Name /*empty*/>,
    86   <Store &Module-Name <Intersperse ('.') e.ModuleName>>,
    87   <Rfp2Java e.ModuleName> :: e.java-module-name,
    88   {
    89     <ClassWriter <"+" &"COMPUTE_MAXS" &"COMPUTE_FRAMES">> :: s.cw,
    90       <PrintLN s.cw>,
    91     <ASAIL-To-JBC e.asail> : v.java,
    92       {
    93         <? &Entry-Name> : v.name =
    94           ()
     89  <Concat <Map! &To-Word (<Separate (<? &Dir-Separator>) e.package> <Separate ('.') <Rfp2Java e.module-name>>)>>
     90  :: e.java-module-name,
     91  <Store &Module-Name <Intersperse ('.') e.java-module-name>>,
     92  <ClassWriter <"+" &"COMPUTE_MAXS" &"COMPUTE_FRAMES">> :: s.cw,
     93  //<ASAIL-To-JBC s.cw e.module> : e,
     94  /*{
     95    <? &Entry-Name> : v.name =
     96      ()
    9597          ('public static void main (java.lang.String[] args) {' (
    9698            ('RefalRuntime.setArgs ("'e.java-module-name'", args);')
    97             ('try {' (v.name' (new Result ());') '}')
     99      ('try {' (v.name' (new Result ());') '}')
    98100            ('catch (RefalException e) {' (
    99101              ('java.lang.System.out.println ("$error: " + e);')
     
    101103            )'}')
    102104          )'}');;
    103       } :: e.entry,
    104       <"visit" s.cw 46 &"ACC_PUBLIC" <To-Word e.java-module-name> <Null> "java/lang/Object" ()>,
    105       <"visitEnd" s.cw>,
    106       <"WriteToStream" <"FileOutputStream" "jbc-test.class"> <"toByteArray" s.cw>>,
    107       (e.java-module-name)
    108       (<Domain &Inputs>)
    109       ('public class 'e.java-module-name'\n{'
    110         (v.java e.entry)
    111        '}');
    112     (e.java-module-name) ();
    113   };
    114 
    115 ASAIL-To-JBC e.asail, {
    116   e.asail : t.item e.rest, t.item : {
     105      } :: e.entry,*/
     106  <"visit" s.cw 46 &"ACC_PUBLIC" <To-Word <Intersperse ('/') e.java-module-name>> <Null> "java/lang/Object" ()>,
     107  <Module-To-JBC s.cw e.module>,
     108  <"visitEnd" s.cw>,
     109  <"toByteArray" s.cw> e.java-module-name;
     110
     111Module-To-JBC s.cw e.module, {
     112  e.module : e t.item e, t.item : {
     113    (s.tag t.name (e.args) (e.ress) e.body),
     114                        s.tag : \{
     115                                FUNC  = 'V';
     116                                FUNC? = 'Z';
     117                        } : s.retType,
     118      <"+" &"ACC_STATIC" <Access-Mode t.name>> :: s.accessMode,
     119      <To-Word <Name-To-JBC t.name>> :: s.funcName,
     120      <To-Word '(' <Replicate <Length e.args> "Lorg/refal/plus/Expr;">
     121        <Replicate <Length e.ress> "Lorg/refal/plus/Result;">')' s.retType> :: s.desc,
     122      <"visitMethod" s.cw s.accessMode s.funcName s.desc <Null> ("org/refal/plus/RefalException")> :: s.mv,
     123      s.tag : {
     124                                FUNC  = <MVvisitInsn s.mv &RETURN>;
     125                                FUNC? = <MVvisitInsn s.mv &"ICONST_1"> <MVvisitInsn s.mv &IRETURN>;
     126      },
     127      <MVvisitEnd s.mv>;
     128    (CONSTEXPR s.linkage t.name (e.comment) e.expr) =
     129      <"+" &"ACC_STATIC" <"+" &"ACC_FINAL" <Access-Mode t.name>>> :: s.accessMode,
     130      {
     131        t.name : (STATIC e) = <Rfp2Java t.name>;
     132        //<RFP-Extract-Qualifiers t.name> :: (e.qualifiers) e.name = e.name;
     133        <Name-To-JBC t.name>;
     134      } :: e.n,
     135      <"visitField" s.cw s.accessMode <To-Word e.n> "Lorg/refal/plus/Expr;" <Null> <Null>> :: s.fv,
     136      <FVvisitEnd s.fv>;
     137      //<Const-Expr-To-JBC e.expr> :: e.a (e.j-expr),
     138      //e.a ('static '<Access-Mode t.name>' final Expr 'e.n' = 'e.j-expr';');
     139    (OBJ s.linkage s.tag t.name) =
     140      <To-Chars s.tag> : s1 e2,
     141      'Named' s1 <To-Lower e2> :: e.class-name,
     142      <Bind &Inputs ('org.refal.plus.library.'e.class-name) ()>,
     143      <"+" &"ACC_STATIC" <"+" &"ACC_FINAL" <Access-Mode t.name>>> :: s.accessMode,
     144      <"visitField" s.cw s.accessMode <To-Word <Name-To-JBC t.name>> "Lorg/refal/plus/Expr;" <Null> <Null>> :: s.fv,
     145      <FVvisitEnd s.fv>;
     146      //<RFP-Extract-Qualifiers t.name> :: (e.qualifiers) e.n,
     147      //('static '<Access-Mode t.name>' final Expr '<Name-To-JBC t.name>
     148      //        ' = new Expr (new 'e.class-name' ("'e.n'"));');
     149    (DECL-OBJ t.name) = ;
     150    (DECL-FUNC t.name) = ;
     151  },
     152    $fail;;
     153};
     154
     155ASAIL-To-JBC s.cw e.module, {
     156  e.module : t.item e.rest, t.item : {
    117157    (s.tag t.name (e.args) (e.ress) e.body),
    118158      s.tag : \{
     
    578618
    579619Access-Mode t.name, {
    580   <? &Exports> : e t.name e = 'public';
    581   'private';
     620  <? &Exports> : e t.name e = &"ACC_PUBLIC";
     621  0;
    582622};
    583623
  • to-imperative/trunk/compiler/rfp_asail_jbc.rfi

    r2309 r2338  
    1 // $Source$
    2 // $Revision$
    3 // $Date$
     1// $Id$
    42
    5 $func RFP-ASAIL-To-JBC t.ModuleName (e.exports) e.asail = (e.ModuleName) (e.inputs) e.java;
     3$func RFP-ASAIL-To-JBC t.module-name (e.package) (e.exports) e.module = s.bytecode e.java-module-name;
    64
  • to-imperative/trunk/compiler/rfpc.rf

    r2323 r2338  
    3636$use "rfp_asail_optim"; //rfp_asail_optim.rfi
    3737$use "rfp_asail2asail";
     38
     39$import "java.io.FileOutputStream";
    3840
    3941$use Access Arithm Box Class Compare Convert CppMangle File JavaMangle
     
    365367            <In-Table? &RFP-Options JBC>,
    366368              <Verbose "compilation from as-ail to java-bytecode started">,
     369              {
     370                <? &RFP-Include-Path> : e (e.dir) e,
     371                  e.dirname : \{
     372                    e.dir = (e.dir s.dir-separator) /*empty*/;
     373                    e.dir s.dir-separator e.package = (e.dir s.dir-separator) e.package;
     374                  };
     375                () e.dirname;
     376              } :: (e.dir) e.package,
    367377              t.interf : (INTERFACE t e.headers),
    368378              {
     
    374384                  e.exports;
    375385              } :: e.exports,
    376               <RFP-ASAIL-To-JBC t.asail-mod-name (e.exports) e.module>
    377                 :: (e.java-module-name) (e.inputs) e.module,
     386              <RFP-ASAIL-To-JBC t.asail-mod-name (e.package) (e.exports) e.module> :: s.bytecode e.java-module-name,
     387              <WriteToStream <FileOutputStream
     388                  <To-Word e.dir <Intersperse (s.dir-separator) e.java-module-name> ".class">>
     389                s.bytecode>,
    378390              <Verbose "compilation from as-ail to java-bytecode finished">,
    379               {
    380                 <In-Table? &RFP-Options NAME> = e.basename;
    381                 e.dirname : v = e.dirname s.dir-separator e.java-module-name;
    382                 e.java-module-name;
    383               } :: e.java-module-name,
    384               <Open-Channel e.java-module-name ('.java')> :: s.channel s.need-close?,
    385               {
    386                 <? &RFP-Include-Path> : e (e.dir) e,
    387                   e.dirname : \{
    388                     e.dir = /*empty*/;
    389                     e.dir s.dir-separator e.package = e.package;
    390                   };
    391                 e.dirname;
    392               } :: e.package,
    393               {
    394                 e.package : v =
    395                   <PrintLN! s.channel
    396                   'package '<Subst (s.dir-separator) (('.')) e.package>';\n'>;;
    397               },
    398               <PrintLN! s.channel 'import org.refal.plus.*;'>,
    399               {
    400                 e.inputs : e (v.java-module) e, \{
    401                   <Lookup &RFP-Includes v.java-module> : \{
    402                     BOOT e = 'org.refal.plus.library.'v.java-module;
    403                     LOCAL e.path,
    404                       <? &RFP-Include-Path> : e (e.dir) e,
    405                       e.path : \{
    406                         e.dir = /*empty*/;
    407                         e.dir s.dir-separator e.p = e.p;
    408                       } :: e.p,
    409                       <Subst (s.dir-separator) (('.')) e.p>
    410                       <Rfp2Java <To-Word v.java-module>>;
    411                   };
    412                   v.java-module;
    413                 } :: e.java-module,
    414                   \{ e.java-module : e '.' e; },
    415                   <PrintLN! s.channel 'import 'e.java-module';'>,
    416                   $fail;;
    417               },
    418               <CPP-Pretty-Print 0 s.channel () e.module>,
    419               { s.need-close? : 1 = <Close-Channel s.channel>;; },
    420391              $fail;
    421392          };
Note: See TracChangeset for help on using the changeset viewer.