// $Id$ // vim: set et ts=2 sw=2 : $use Access Apply Arithm Box Class Compare Convert File JavaMangle List StdIO Table Java; $use "rfpc"; $use "rfp_helper"; $import "java.lang.Integer"; $import "org.objectweb.asm.ClassWriter"; $import "org.objectweb.asm.FieldVisitor"; $import "org.objectweb.asm.Label"; $import "org.objectweb.asm.MethodVisitor"; $import "org.objectweb.asm.Opcodes"; $box Module_Name; $box Refal_Module_Name; $box Class_Name; $box Entry; $box Entry_Name; $box Func_Name; $func Module_To_JBC s.cw e.module = ; $func ASAIL_To_JBC e.body = ; $func Expr_Ref_To_JBC e.ASAIL_Expr_Ref = ; $func Expr_Int_To_JBC e.ASAIL_Expr_Int = ; $func Step_To_JBC e.step_operators = ; $func Const_Expr_To_JBC e.ASAIL_const_expr = ; $func Var_To_JBC t.var = ; $func Cond_To_JBC t.cond = s.if; $func Infix_To_JBC s.func_for_converting_args_to_java s.op e.args = ; $func Access_Mode s.linkage = s.jbc_access_mode; $box Objects; $box Constants; $box Func_Refs; $func GetJavaName e.name = e.javaName; GetJavaName e.name = )>)>>; $func GetJBCName t.name = s.jbcName; GetJBCName t.name = >; $func GetJBCQName e.moduleName t.name = s.jbcModuleName s.jbcName; GetJBCQName e.moduleName t.name = { e.moduleName : "refal" "plus" s.module = "org" "refal" "plus" "library" s.module; e.moduleName; } :: e.moduleName, : e.javaModuleName s.javaName, > s.javaName; $box MVbox; $func MV = s; MV, : s.mv = s.mv; RFP_ASAIL_To_JBC (MODULE (e.moduleName) e.module) = , , , { >; ; }, , , > :: s.refal_mod_name, , :: e.java_module_name, > :: s.class_name, , :: s.cw, "java/lang/Object" ()>, , { : s.name = /* : e, () ('public static void main (java.lang.String[] args) {' ( ('RefalRuntime.setArgs ("'e.java-module-name'", args);') ('try {' (v.name' (new Result ());') '}') ('catch (RefalException e) {' ( ('java.lang.System.out.println ("$error: " + e);') ('java.lang.System.exit (100);') )'}') )'}');; } :: e.entry,*/ "main" "([Ljava/lang/String;)V" ()>>, >, &ALOAD 0>, &INVOKESTATIC "org/refal/plus/RefalRuntime" "setArgs" "(Ljava/lang/String;[Ljava/lang/String;)V">, &NEW "org/refal/plus/Result">, &DUP>, &INVOKESPECIAL "org/refal/plus/Result" "" "()V">, &INVOKESTATIC s.class_name s.name "(Lorg/refal/plus/Result;)V">, &RETURN>, 0 0>, >;; }, " "()V" ()>>, { : e (s.j_name s.rf_name e.cl_name) e, :: s.cl_name, &NEW "org/refal/plus/Expr">, &DUP>, &NEW s.cl_name>, &DUP>, >, &INVOKESPECIAL s.cl_name "" "(Ljava/lang/String;)V">, &INVOKESPECIAL "org/refal/plus/Expr" "" "(Ljava/lang/Object;)V">, &PUTSTATIC s.class_name s.j_name "Lorg/refal/plus/Expr;">, $fail;; }, { : e (s.const_name e.expr) e, , &PUTSTATIC s.class_name s.const_name "Lorg/refal/plus/Expr;">, $fail;; }, &RETURN>, 0 0>, >, //{ // : e (s.cl-name s.mod-name s.func-name) e, // &"ACC_STATIC">, // $fail;; //}, , e.java_module_name)> :: s.res, { : e (s.cl_name s.mod_name s.func_name s.type) e, :: s.cw, "java/lang/Object" ("org/refal/plus/Func")>, " "()V" ()> :: s.mv, , " "()V">, , , , ("org/refal/plus/RefalException")> :: s.mv, , , s.type : { "FUNC?" = , ; FUNC = , ; }, , , , '$' s.cl_name>)>, $fail;; }, ; $box Block_Tables; $func Init_Block_Table = ; $func Push_Block_Table = ; $func Pop_Block_Table = ; $func Get_Block_Table = s.block_table; Init_Block_Table = :: s.block_table, , ; Push_Block_Table = : e.block_tables, e.block_tables : e s.block_table, >; Pop_Block_Table = : e.block_tables s.block_table1 s.block_table2, : s.i, , ; Get_Block_Table = : e s.block_table, s.block_table; $func Bind_Vars s.type e.vars = ; $func Bind_Var s.type t.var = s.i; $func Lookup_Var t.var = s.type s.i; $func Bind_Iter_Var e.expr t.var1 t.var2 = s.i; $func Lookup_Iter_Var e.expr = s.i s.i1 s.i2; $func Bind_TMP_Var t.var = s.i; $func Lookup_TMP_Var t.var = s.i; Bind_Vars s.type e.vars = { e.vars : e t.var e, : e, $fail;; }; Bind_Var s.type t.var = "VAR-INDEX"> : s.i, ("VAR-INDEX") ()>, (VAR t.var) (s.type s.i)>, s.i; Lookup_Var t.var = VAR t.var> : s.type s.i = s.type s.i; Bind_Iter_Var e.expr t.var1 t.var2 = "VAR-INDEX"> : s.i, ("VAR-INDEX") ()>, :: s.i1, :: s.i2, (ITER e.expr) (s.i s.i1 s.i2)>, s.i; Lookup_Iter_Var e.expr = ITER e.expr> : s.i s.i1 s.i2 = s.i s.i1 s.i2; Bind_TMP_Var t.var = "VAR-INDEX"> : s.i, ("VAR-INDEX") ()>, (TMP t.var) (s.i)>, s.i; Lookup_TMP_Var t.var = TMP t.var> : s.i = s.i; $func Bind_Label t.label = s.l; $func Lookup_Label t.label = s.l; Bind_Label t.label =