source: to-imperative/trunk/compiler/rfp_asail_java.rf @ 2488

Last change on this file since 2488 was 2488, checked in by orlov, 14 years ago
  • ASAIL simplifications: no INT, no EXPR, int-vars contain type-tag INT.
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 17.3 KB
Line 
1// $Id: rfp_asail_java.rf 2488 2007-02-27 18:34:33Z orlov $
2
3$use Access Apply Arithm Box Class Compare Convert JavaMangle List StdIO Table;
4$use "rfpc";
5$use "rfp_helper";
6
7$box Int;
8
9$box Module-Name;
10
11$box Entry;
12
13$box Entry-Name;
14
15$box Current-Namespace;
16
17$box Func-Name;
18
19$box Ress;
20$table Result;
21$box Res-Assigns;
22
23$table Iter-Vars;
24
25$func ASAIL-To-Java e.body = e.java-code;
26
27$func Expr-Ref-To-Java e.ASAIL-Expr-Ref = e.aux-arrays (e.JAVA-Expr-Ref);
28
29$func Expr-Int-To-Java s.acc e.ASAIL-Expr-Int = e.JAVA-Expr-Int;
30
31$func Step-To-Java e.step-operators = e.java-step-operators;
32
33$func Const-Expr-To-Java e.ASAIL-const-expr = e.aux-arrays (e.JAVA-const-expr);
34
35$func Expr-Args-To-Java e.args = e.aux-arrays (e.java-args);
36
37$func Int-Args-To-Java s.acc e.args = e.java-args;
38
39$func Var-Args-To-Java e.args = e.java-args;
40
41$func Symbol-To-Java s.RFP-Symbol = e.JAVA-String;
42
43$func Name-To-Java t.name = e.JAVA-Name;
44
45$func Var-To-Java t.var = e.java-var;
46
47$func Cond-To-Java s.acc t.cond = e.JAVA-Cond;
48
49$func Infix-To-Java s.acc s.func-for-converting-args-to-java s.op e.args = e.java-expr;
50
51$func Access-Mode s.linkage = e.java-access-mode;
52
53$box Free-Idx;
54
55$func Free-Index = e.free-index;
56
57$func Declare-Results (e.ress) e.acc-java-ress = e.decls (e.java-ress);
58
59
60
61$func GetJavaName e.name = e.javaName;
62
63GetJavaName e.name = <Concat <Map! &To-Word (<Map! &Rfp2Java (<Paren e.name>)>)>>;
64
65$func GetJavaQName e.moduleName t.name = s.javaQName;
66
67GetJavaQName e.moduleName t.name = {
68    e.moduleName : "refal" "plus" s.module = "org" "refal" "plus" "library" s.module;
69    e.moduleName;
70  } :: e.moduleName,
71  <To-Word <Intersperse ('.') <GetJavaName e.moduleName t.name>>>;
72
73$func GetJavaModuleName e.moduleName = e.javaModuleName;
74
75GetJavaModuleName e.moduleName = {
76    e.moduleName : "refal" "plus" e.tail = "org" "refal" "plus" "library" e.tail;
77    e.moduleName;
78  } :: e.moduleName,
79  <GetJavaName e.moduleName>;
80
81RFP-ASAIL-To-Java (MODULE (e.moduleName) e.asail) =
82  <Store &Free-Idx>,
83  <Clear-Table &Iter-Vars>,
84  {
85    <Store &Int <Lookup &RFP-Options INT>>;
86    <Store &Int BigInteger>;
87  },
88  <Store &Current-Namespace e.moduleName>,
89  {
90    <Store &Entry <Lookup &RFP-Options ENTRIES>>;
91    <Store &Entry (e.moduleName Main)>;
92  },
93  <Store &Entry-Name /*empty*/>,
94  <To-Word <Intersperse ('.') e.moduleName>> :: s.refal-mod-name,
95  <Store &Module-Name s.refal-mod-name>,
96  <GetJavaModuleName e.moduleName> :: e.javaModuleName,
97  {
98    <ASAIL-To-Java e.asail> : v.java,
99      e.javaModuleName : e.package s.class,
100      {
101        e.package : v = ('package '<Intersperse ('.') e.package>';');;
102      } :: e.package,
103      {
104        <? &Entry-Name> : v.name =
105          ()
106          ('public static void main (java.lang.String[] args) {' (
107            ('RefalRuntime.setArgs ("'s.refal-mod-name'", args);')
108            ('try {' (v.name' (new Result ());') '}')
109            ('catch (RefalException e) {' (
110              ('java.lang.System.out.println ("$error: " + e);')
111              ('java.lang.System.exit (100);')
112            )'}')
113          )'}');;
114      } :: e.entry,
115      e.package ('import org.refal.plus.*;')('public class 's.class' {' (v.java e.entry) '}');;
116  } :: e.java,
117  (e.javaModuleName) (e.java);
118
119ASAIL-To-Java e.asail, {
120  e.asail : t.item e.rest, t.item : {
121    (s.tag IMPORT e) = /*empty*/;
122    (s.tag s.linkage t.name (e.args) (e.ress) e.body),
123      s.tag : \{
124        FUNC  = ('void') /*empty*/;
125        FUNC? = ('boolean') ('return true;');
126      } :: (e.return-type) e.return =
127      <Store &Ress e.ress>,
128      <Clear-Table &Result>,
129      { <? &Entry> : e t.name e = <Store &Entry-Name <Rfp2Java t.name>>;; },
130      <Store &Func-Name <Name-To-Java t.name>>,
131      ()
132      ('static '<Access-Mode s.linkage>' 'e.return-type' '
133        <? &Func-Name>' ('<Var-Args-To-Java Expr e.args Result e.ress>') throws RefalException')
134        ('{' (<ASAIL-To-Java e.body> e.return) '}');
135    (TRACE t.name) =
136      <Bind &RFP-Trace (t.name) ()>;
137    (IF-INT-CMP s.op (e.arg1) (e.arg2) e.body) =
138      <Box> :: s.acc,
139      <Expr-Int-To-Java s.acc e.arg1> ' 's.op' ' <Expr-Int-To-Java s.acc e.arg2> :: e.cond,
140      <? s.acc>
141      ('if (' e.cond ')')
142      ('{' (<ASAIL-To-Java e.body>) '}');
143    (IF t.cond e.body) =
144      <Box> :: s.acc,
145      <Cond-To-Java s.acc t.cond> :: e.j-cond,
146      {
147        t.cond : (CALL-FAILS e) =
148          () (<? &Res-Assigns> <Store &Res-Assigns /*empty*/>);
149        (<? &Res-Assigns> <Store &Res-Assigns /*empty*/>) ();
150      } :: (e.if-yes-assigns) (e.if-not-assigns),
151      <? s.acc>
152      ('if ('e.j-cond')')
153      ('{' (
154        e.if-yes-assigns
155        <ASAIL-To-Java e.body>
156      )'}' )
157      e.if-not-assigns;
158    (FOR (e.cont-label) (e.break-label) () (e.step) e.body) =
159      {
160        e.cont-label : t = <Rfp2Java (LABEL e.cont-label)> ': ';;
161      } :: e.cont,
162      {
163        e.break-label : t = <Rfp2Java (LABEL e.break-label)> ': ';;
164      } :: e.break,
165      {
166        e.step : (s.d e.var), s.d : \{ INC-ITER; DEC-ITER; } =
167          <Lookup &Iter-Vars e.var> : e.new-var t.var1 t.var2,
168          ('Expr '<Rfp2Java t.var1>' = 'e.new-var'.getLeft();')
169          ('Expr '<Rfp2Java t.var2>' = 'e.new-var'.getRight();');;
170      } :: e.split-vars,
171      (e.break e.cont 'for ( ; ; '<Step-To-Java e.step>')')
172      ('{' (
173        e.split-vars <? &Res-Assigns> <Store &Res-Assigns /*empty*/>
174        <ASAIL-To-Java e.body>
175      ) '}');
176    (LABEL (e.label) e.body) =
177      (<Rfp2Java (LABEL e.label)>': {' (<ASAIL-To-Java e.body>) '}');
178    (TRY e.body) =
179      ('try') ('{' (
180        ('if (false)'
181          ('throw new RefalException ("'<? &Module-Name>'", "'<? &Func-Name>'", '
182            '"This is for avoiding \'Unreachable code\' errors");'
183        )   )
184        <ASAIL-To-Java e.body>
185      ) '}');
186    (CATCH-ERROR e.body) =
187      ('catch (RefalException error) {' (
188        ('Expr err = error.getExpr ();')
189        (<ASAIL-To-Java e.body>)
190      ) '}');
191    RETFAIL = ('return false;');
192    FATAL =
193      ('throw new RefalException ("'<? &Module-Name>'", "'<? &Func-Name>'", "Unexpected fail");');
194    (LSPLIT t.name (e.min) t.var1 t.var2) =
195      <Expr-Ref-To-Java t.name> :: e.a (e.n),
196      '_va_' <Free-Index> :: e.new-var,
197      <Bind &Iter-Vars (t.name) (e.new-var t.var1 t.var2)>,
198      <Box> :: s.acc,
199      <Expr-Int-To-Java s.acc e.min> :: e.min,
200      e.a <? s.acc>
201      ('Expr.SplitIterator 'e.new-var' = 'e.n'.leftSplit('e.min');');
202    (RSPLIT t.name (e.min) t.var1 t.var2) =
203      <Expr-Ref-To-Java t.name> :: e.a (e.n),
204      '_va_' <Free-Index> :: e.new-var,
205      <Bind &Iter-Vars (t.name) (e.new-var t.var1 t.var2)>,
206      <Box> :: s.acc,
207      <Expr-Int-To-Java s.acc e.min> :: e.min,
208      e.a <? s.acc>
209      ('Expr.SplitIterator 'e.new-var' = 'e.n'.rightSplit('e.min');');
210    (DECL (INT t.var)) = ('int '<Rfp2Java t.var>';');
211    (ASSIGN (INT t.var) e.expr) =
212      <Box> :: s.acc,
213      <Expr-Int-To-Java s.acc e.expr> :: e.expr,
214      <? s.acc> (<Rfp2Java t.var>' = 'e.expr';');
215    (ASSIGN t.var e.expr) =
216      <Expr-Ref-To-Java e.expr> :: e.a (e.j-expr),
217      {
218        <? &Ress> : e t.var e =
219          e.a (<Rfp2Java t.var>'.assign ('e.j-expr');');
220        e.a (<Lookup &Result t.var>'.assign ('e.j-expr');');
221        e.a (<Rfp2Java t.var>' = 'e.j-expr';');
222      };
223    (DECL s.type t.var) =
224      <Rfp2Java t.var> :: e.j-var,
225      {
226        s.type : Result =
227          <Bind &Result (t.var) (e.j-var)>,
228          ('Result 'e.j-var' = new Result ();');
229        <Unbind &Result t.var>,
230          ('Expr 'e.j-var' = Expr.empty;');
231      };
232    (DROP t.var) =
233      (<Var-To-Java t.var>'.drop ();');
234    (CONTINUE t.label) =
235      ('continue '<Rfp2Java (LABEL t.label)>';');
236    (BREAK t.label) =
237      ('break '<Rfp2Java (LABEL t.label)>';');
238    (ERROR e.expr) =
239      <Expr-Ref-To-Java e.expr> :: e.a (e.j-expr),
240      e.a ('throw new RefalException ('e.j-expr');');
241    (CONSTEXPR s.linkage t.name (e.comment) e.expr),
242      {
243        t.name : (STATIC e) = <Rfp2Java t.name>;
244        <Name-To-Java t.name>;
245      } :: e.n,
246      <Const-Expr-To-Java e.expr> :: e.a (e.j-expr),
247      e.a ('static '<Access-Mode s.linkage>' final Expr 'e.n' = 'e.j-expr';');
248    (OBJ s.linkage s.tag t.name) =
249      <To-Chars s.tag> : s1 e2,
250      'Named' s1 <To-Lower e2> :: e.class-name,
251      t.name :  (e s.n),
252      ('static '<Access-Mode s.linkage>' final Expr '<Name-To-Java t.name>
253        ' = new Expr (new org.refal.plus.library.'e.class-name' ("'s.n'"));');
254    (DECL-OBJ t.name) = ;
255    (DECL-FUNC t.name) = ;
256    /*
257     * s.call can be CALL or TAILCALL or TAILCALL?
258     */
259    (s.call t.name (e.args) (e.ress)) =
260      <Declare-Results (e.ress)> :: e.decls (e.ress),
261      <Expr-Args-To-Java e.args Result e.ress> :: e.arrays (e.args),
262      <Name-To-Java t.name>' ('e.args')' :: e.c,
263      {
264        s.call : TAILCALL? =
265          e.arrays e.decls ('if (!'e.c') {' ('return false;') '}');
266        e.arrays e.decls (e.c';') <? &Res-Assigns>
267          <Store &Res-Assigns /*empty*/>;
268      };
269  } :: e.java-item,
270    {
271      e.java-item : ('break ' e) = e.java-item;
272      e.java-item <ASAIL-To-Java e.rest>;
273    };
274  /*empty*/;
275};
276
277Declare-Results {
278  (t.var e.r) e.ress, {
279    <In-Table? &Result t.var> = <Declare-Results (e.r) e.ress (<Rfp2Java t.var>)>;
280    <? &Ress> : e t.var e     = <Declare-Results (e.r) e.ress (<Rfp2Java t.var>)>;
281    '_va_' <Free-Index> :: e.new-var,
282      <Put &Res-Assigns (<Rfp2Java t.var>' = 'e.new-var'.getExpr ();')> =
283      ('Result 'e.new-var' = new Result ();') <Declare-Results (e.r) e.ress (e.new-var)>;
284  };
285  () e.ress = (e.ress);
286};
287
288
289$func Term-Ref-To-Java s.acc term = e.term;
290
291Expr-Ref-To-Java {
292  /*empty*/ = ('Expr.empty');
293  term =
294    <Box> :: s.acc,
295    <Term-Ref-To-Java s.acc term> :: e.term,
296    <? s.acc> (e.term);
297  t1 t2 =
298    <Box> :: s.acc,
299    <Term-Ref-To-Java s.acc t1> :: e.t1,
300    <Term-Ref-To-Java s.acc t2> :: e.t2,
301    <? s.acc> ('new Expr ('e.t1', 'e.t2')');
302  expr =
303    '_va_'<Free-Index> :: e.new-var,
304    <Box> :: s.acc,
305    <Infix-To-Java s.acc &Term-Ref-To-Java "," <Paren expr>> :: e.arr-init,
306    <? s.acc>
307    ('Expr[] 'e.new-var' = { 'e.arr-init' };')
308    ('Expr.concat ('e.new-var')');
309};
310
311Term-Ref-To-Java s.acc term = term : {
312  (PAREN e.expr) =
313    <Expr-Ref-To-Java e.expr> :: e.a (e.j-expr),
314    <Put s.acc e.a>,
315    'new Expr('e.j-expr')';
316  (DEREF e.expr (e.pos)) =
317    <Expr-Ref-To-Java e.expr> :: e.a (e.j-expr),
318    <Put s.acc e.a>,
319    <Expr-Int-To-Java s.acc e.pos> :: e.pos,
320    '(Expr) 'e.j-expr'.at ('e.pos')';
321  (SUBEXPR e.expr (e.pos) (e.len)) =
322    <Expr-Ref-To-Java e.expr> :: e.a (e.j-expr),
323    <Put s.acc e.a>,
324    <Expr-Int-To-Java s.acc e.pos> :: e.pos,
325    <Expr-Int-To-Java s.acc e.len> :: e.len,
326    'new Expr ('e.j-expr', 'e.pos', 'e.len')';
327  (REF t.name) = <Name-To-Java t.name>;
328  ERROR-EXPR = 'err';
329  (s.var-tag e.ns t.name) = <Var-To-Java term>;
330};
331
332Expr-Int-To-Java s.acc expr = expr : {
333//  /*empty*/ = /*empty*/;
334  s.ObjectSymbol =
335    {
336      <Int? s.ObjectSymbol> = s.ObjectSymbol;
337      $error ("Illegal int-symbol: " s.ObjectSymbol);
338        //FIXME: надо проверять, что число не
339        //       выходит за допустимые границы.
340        //       Задавать эти границы опциями.
341    };
342  (LENGTH e.expr) =
343    <Expr-Ref-To-Java e.expr> :: e.a (e.j-expr),
344    <Put s.acc e.a>,
345    e.j-expr'.getLen ()';
346  (MAX e.args) =
347    'java.lang.Math.max ('<Int-Args-To-Java s.acc e.args>')';
348  (MIN e.args) =
349    'java.lang.Math.min ('<Int-Args-To-Java s.acc e.args>')';
350  (INFIX s.op e.args) =
351    '(' <Infix-To-Java s.acc &Expr-Int-To-Java s.op e.args> ')';
352//  (REF t.name) = <Name-To-Java t.name>;
353  (INT t.var) = <Rfp2Java t.var>;
354  expr = '(' <Infix-To-Java s.acc &Expr-Int-To-Java "+" <Paren expr>> ')';
355};
356
357Cond-To-Java s.acc t.cond = t.cond : {
358  (CALL-FAILS (CALL t.name (e.exprs) (e.ress))) =
359    <Declare-Results (e.ress)> :: e.decls (e.ress),
360    <Expr-Args-To-Java e.exprs Result e.ress> :: e.arrays (e.args),
361    <Put s.acc e.arrays e.decls>,
362    '!'<Name-To-Java t.name>' ('e.args')';
363  (ITER-FAILS e.expr) =
364    '!'<Middle 0 2 <Lookup &Iter-Vars e.expr>>'.isValid ()';
365  (SYMBOL? e.expr (e.pos)) =
366    <Expr-Ref-To-Java e.expr> :: e.a (e.j-expr),
367    <Put s.acc e.a>,
368    e.j-expr'.symbolAt ('<Expr-Int-To-Java s.acc e.pos>')';
369  (EQ e.expr1 (e.expr2) (e.pos)) =
370    <Expr-Ref-To-Java e.expr1> :: e.a1 (e.j-expr1),
371    <Expr-Ref-To-Java e.expr2> :: e.a2 (e.j-expr2),
372    <Put s.acc e.a1 e.a2>,
373    e.j-expr1'.eq ('e.j-expr2', '<Expr-Int-To-Java s.acc e.pos>')';
374  (TERM-EQ e.expr1 (e.expr2) (e.pos)) =
375    <Expr-Ref-To-Java e.expr1> :: e.a1 (e.j-expr1),
376    <Expr-Ref-To-Java e.expr2> :: e.a2 (e.j-expr2),
377    <Put s.acc e.a1 e.a2>,
378    e.j-expr1'.termEq ('e.j-expr2', '<Expr-Int-To-Java s.acc e.pos> ')';
379  (NOT t.not-cond) =
380    '!' <Cond-To-Java s.acc t.not-cond>;
381};
382
383Infix-To-Java s.acc s.arg2java s.op e.args, {
384  e.args : (e.arg) e.rest =
385    <Apply s.arg2java s.acc e.arg> :: e.arg,
386    <Infix-To-Java s.acc s.arg2java s.op e.rest> :: e.rest,
387    {
388      e.arg : v, e.rest : v = e.arg ' ' s.op ' ' e.rest;
389      e.arg e.rest;
390    };;
391};
392
393Step-To-Java {
394  /*empty*/ = /*empty*/;
395  (INC-ITER e.expr) = <Middle 0 2 <Lookup &Iter-Vars e.expr>>'.next ()';
396  (DEC-ITER e.expr) = <Middle 0 2 <Lookup &Iter-Vars e.expr>>'.prev ()';
397};
398
399$func Const-Expr-Aux (e.accum) e.expr = (e.arrays) e.java-expr;
400
401Const-Expr-To-Java {
402  /*empty*/ = ('Expr.empty');
403  (SUBEXPR t.name s.pos s.len) = ('new Expr ('<Rfp2Java t.name>', 's.pos', 's.len')');
404                  //FIXME: надо проверять, что s.pos и s.len
405                  //       не превышают допустимых величин.
406                  //       Задавать эти величины опциями.
407  e.expr =
408    <Const-Expr-Aux () e.expr> : {
409      (e.arrays) (e1)      = e.arrays (e1);
410      (e.arrays) (e1) (e2) = e.arrays ('new Expr ('e1', 'e2')');
411      (e.arrays) e.concat  =
412        '_va_'<Free-Index> :: e.new-var,
413        e.arrays
414        ('static private final Expr[] 'e.new-var' = { '<Concat <Intersperse (', ') e.concat>>' };')
415        ('Expr.concat ('e.new-var')');
416    };
417};
418
419Const-Expr-Aux (e.accum) e.expr, {
420  e.expr : s.sym e.rest, <Char? s.sym> =
421    <Const-Expr-Aux (e.accum <Symbol-To-Java s.sym>) e.rest>;
422  e.accum : v =
423    <Const-Expr-Aux () e.expr> :: (e.arrays) e.j-expr,
424    (e.arrays) ('Expr.fromSequence ("'e.accum'")') e.j-expr;
425  e.expr : t.item e.rest, t.item : {
426    (PAREN e.paren-expr) =
427      <Const-Expr-To-Java e.paren-expr> :: e.arrays (e.j-expr),
428      (e.arrays) ('new Expr ('e.j-expr')');
429    (REF t.name) =
430      () (<Name-To-Java t.name>);
431    (STATIC e) =
432      () (<Rfp2Java t.item>);
433    (FUNC? t.name) = () ('new Expr (new Func () {'
434      ('public boolean eval (Expr arg, Result res) throws RefalException {'
435        ('return '<Name-To-Java t.name>' (arg, res);')
436      '}') '})');
437    (FUNC t.name) = () ('new Expr (new Func () {'
438      ('public boolean eval (Expr arg, Result res) throws RefalException {'
439        ((<Name-To-Java t.name>' (arg, res);')
440         ('return true;'))
441      '}') '})');
442    s.sym, {
443      <Int? s.sym> =
444        {
445          <? &Int> : BigInteger = 'java.math.BigInteger';
446          <? &Int>;
447        } :: e.class,
448        () ('new Expr (new 'e.class' ("'s.sym'"))');
449      <Word? s.sym> =
450        () ('new Expr (new Word ("'<Symbol-To-Java s.sym>'"))');
451    };
452  } :: (e.arrays) e.java-item =
453    <Const-Expr-Aux () e.rest> :: (e.new-arrays) e.java-rest,
454    (e.arrays e.new-arrays) e.java-item e.java-rest;
455  = () /*empty*/;
456};
457
458Symbol-To-Java s.ObjectSymbol, {
459  <To-Chars s.ObjectSymbol> () $iter {
460    e.symbol : s.char e.rest, s.char : {
461      '\\' = '\\\\';
462      '\n' = '\\n';
463      '\t' = '\\t';
464//        '\v' = '\\v';
465//        '\b' = '\\b';
466      '\r' = '\\r';
467//        '\f' = '\\f';
468      '\"' = '\\"';
469//      '\'' = '\\\'';
470      s = s.char;
471    } :: e.java-char,
472    e.rest (e.java-symbol e.java-char);
473  } :: e.symbol (e.java-symbol),
474    e.symbol : /*empty*/ =
475    e.java-symbol;
476};
477
478Int-Args-To-Java s.acc e.args =
479  e.args (/*e.java-args*/) $iter {
480    e.args : (e.arg) e.rest =
481      {
482        e.rest : v = ', ';
483        /*empty*/;
484      } :: e.comma,
485      e.rest (e.java-args <Expr-Int-To-Java s.acc e.arg> e.comma);
486    } :: e.args (e.java-args),
487  e.args : /*empty*/ =
488  e.java-args;
489
490Var-Args-To-Java e.args =
491  e.args (/*e.type*/) (/*e.java-args*/) $iter {
492    e.args : s.t e.rest =
493      e.rest (s.t) (e.java-args);
494    e.args : t.arg e.rest =
495      {
496        e.rest : e (e) e = ', ';
497        /*empty*/;
498      } :: e.comma,
499      e.rest (e.type) (e.java-args e.type' '<Rfp2Java t.arg> e.comma);
500    } :: e.args (e.type) (e.java-args),
501  e.args : /*empty*/ =
502  e.java-args;
503
504Expr-Args-To-Java e.args =
505  e.args (/*e.type*/) (/*e.java-args*/) (/*e.arrays*/) $iter {
506    e.args : s.t e.rest =
507      e.rest (s.t) (e.java-args) (e.arrays);
508    e.args : (e.arg) e.rest =
509      {
510        e.rest : e (e) e = ', ';
511        /*empty*/;
512      } :: e.comma,
513      {
514        e.type : /*empty*/ =
515          <Expr-Ref-To-Java e.arg> :: e.a (e.j-arg),
516          e.rest (e.type) (e.java-args e.j-arg e.comma) (e.arrays e.a);
517        e.rest (e.type) (e.java-args e.arg e.comma) (e.arrays);
518      };
519  } :: e.args (e.type) (e.java-args) (e.arrays),
520  e.args : /*empty*/ =
521  e.arrays (e.java-args);
522
523Name-To-Java (e.obj-name) =
524  <? &Current-Namespace> :: e.namespace,
525  {
526    e.obj-name : e.namespace e.cont = e.cont;
527    e.obj-name;
528  } :: e.name,
529  <To-Word <Intersperse ('.') <GetJavaModuleName e.name>>>;
530
531Var-To-Java t.var = {
532  <Lookup &Result t.var>'.getExpr ()';
533  <Rfp2Java t.var>;
534};
535
536Access-Mode {
537  EXPORT = 'public';
538  s = ;
539};
540
541Free-Index =
542  <? &Free-Idx> : {
543    /*empty*/ = 1;
544    s.idx     = <"+" s.idx 1>;
545  } :: s.idx,
546  <Store &Free-Idx s.idx>,
547  s.idx;
Note: See TracBrowser for help on using the repository browser.