int start = name.lastIndexOf( '.' ); int end = name.lastIndexOf( ';' ); // if neither found return name if ( (start == -1) && (end==-1) ) return( name ); // adjust if ';' not found end = ( (end==-1)? name.length() : end ); return( name.substring( start+1, end ) ); } private String MkFctName( Method meth ) { // build name from java method name // java method param types, and the // java method return type StringBuffer encode = new StringBuffer(50); encode.append(meth.getName()); // append parmeter encoding Class[] jparam = meth.getParameterTypes(); for( int x=0; x<jparam.length; x++ ) { encode.append( "_" ); encode.append( JTypeEncode( jparam[x] ) ); } // append the method return type encoding encode.append("_"); encode.append( JTypeEncode( meth.getReturnType() ) ); if ( opt_verbose ) System.out.println( "--mangled fct name:"+ encode ); return( encode.toString() ); } private String JTypeEncode( Class jtype ) { String t_name; //types name String encode = ""; //limbo encoding if ( jtype.isPrimitive() ) { // a java primitive type convert to appropriate limbo type t_name = jtype.getName(); // determine if ( t_name.equals( "int" ) ) encode = "I"; else if ( t_name.equals( "char" ) ) encode = "C"; else if ( t_name.equals( "short" ) ) encode = "S"; else if ( t_name.equals( "long" ) ) encode = "J"; else if ( t_name.equals( "boolean" ) ) encode = "Z"; else if ( t_name.equals( "byte" ) ) encode = "B"; else if ( t_name.equals( "float" ) ) encode = "F"; else if ( t_name.equals( "double" ) ) encode = "D"; else encode = "V"; } else { // a java reference (i.e. object or array) t_name = jtype.getName(); if ( t_name.indexOf( '[' ) == -1 ) { // just an object reference encode = "r"+ ClassBaseName( t_name ); } else { // array int x=0; StringBuffer buf = new StringBuffer(40); while( t_name.charAt(x)== '[' ) { buf.append('a'); x++; } if ( t_name.charAt(x) == 'L' ) buf.append( ClassBaseName(t_name.substring(x+1)) ); else buf.append( t_name.substring(x) ); encode = buf.toString(); } } return( encode ); } private DataOutputStream MkFile( String name ) throws IOException { File f = new File( name ); FileOutputStream fout; tmpname = "tmp_"+ name; if ( f.exists() ) { fout = new FileOutputStream( tmpname ); merge = true; } else fout = new FileOutputStream( name ); return( new DataOutputStream( fout ) ); } private void Emit( String info ) throws IOException { out.writeBytes( info ); } // data fields private String base_name; // name of class private String mod_name; // module name of native "peer" module private String limbo_dotm; // name of limbo module decl .m file private String limbo_dotb; // name of limbo module impl .b file private String obj_adt; // adt describing objects instance fields private boolean special; // set true if a special class; a special // class is one known to this tool. Class theClass; // class descriptor object DataOutputStream out; // current gen output file boolean merge = false; // merge old and new gen'ed files String tmpname; Method[] methods; // all methods Method[] natives; // native methods Field[] fields; // all fields Field[] iFields; // instance fields Field[] sFields; // static fields boolean opt_verbose; // print stuff if true boolean has_natives; // set true if class has native methods // consts private static final String T1 = " "; private static final String T2 = " "; private static final String T3 = " "; // generated Limbo/Java type names private static final String T_JObject = "JObject"; private static final String T_JString = "JString"; private static final String T_JClass = "JClass"; private static final String T_JArrayI = "JArrayI"; private static final String T_JArrayC = "JArrayC"; private static final String T_JArrayS = "JArrayS"; private static final String T_JArrayB = "JArrayB"; private static final String T_JArrayJ = "JArrayJ"; private static final String T_JArrayF = "JArrayF"; private static final String T_JArrayD = "JArrayD"; private static final String T_JArrayZ = "JArrayZ"; private static final String T_JArrayJObject = "JArrayJObject"; private static final String T_JArrayJClass = "JArrayJClass"; private static final String T_JArrayJString = "JArrayJString"; private static final String T_JArray = "JArray"; private static final String T_JFd = "ref FileDescriptor_obj"; private static final String T_JInfernoFD = "ref Sys->FD"; }Lines 501–677 of 677. Previous lines
int start = name.lastIndexOf( '.' ); int end = name.lastIndexOf( ';' ); // if neither found return name if ( (start == -1) && (end==-1) ) return( name ); // adjust if ';' not found end = ( (end==-1)? name.length() : end ); return( name.substring( start+1, end ) ); } private String MkFctName( Method meth ) { // build name from java method name // java method param types, and the // java method return type StringBuffer encode = new StringBuffer(50); encode.append(meth.getName()); // append parmeter encoding Class[] jparam = meth.getParameterTypes(); for( int x=0; x<jparam.length; x++ ) { encode.append( "_" ); encode.append( JTypeEncode( jparam[x] ) ); } // append the method return type encoding encode.append("_"); encode.append( JTypeEncode( meth.getReturnType() ) ); if ( opt_verbose ) System.out.println( "--mangled fct name:"+ encode ); return( encode.toString() ); } private String JTypeEncode( Class jtype ) { String t_name; //types name String encode = ""; //limbo encoding if ( jtype.isPrimitive() ) { // a java primitive type convert to appropriate limbo type t_name = jtype.getName(); // determine if ( t_name.equals( "int" ) ) encode = "I"; else if ( t_name.equals( "char" ) ) encode = "C"; else if ( t_name.equals( "short" ) ) encode = "S"; else if ( t_name.equals( "long" ) ) encode = "J"; else if ( t_name.equals( "boolean" ) ) encode = "Z"; else if ( t_name.equals( "byte" ) ) encode = "B"; else if ( t_name.equals( "float" ) ) encode = "F"; else if ( t_name.equals( "double" ) ) encode = "D"; else encode = "V"; } else { // a java reference (i.e. object or array) t_name = jtype.getName(); if ( t_name.indexOf( '[' ) == -1 ) { // just an object reference encode = "r"+ ClassBaseName( t_name ); } else { // array int x=0; StringBuffer buf = new StringBuffer(40); while( t_name.charAt(x)== '[' ) { buf.append('a'); x++; } if ( t_name.charAt(x) == 'L' ) buf.append( ClassBaseName(t_name.substring(x+1)) ); else buf.append( t_name.substring(x) ); encode = buf.toString(); } } return( encode ); } private DataOutputStream MkFile( String name ) throws IOException { File f = new File( name ); FileOutputStream fout; tmpname = "tmp_"+ name; if ( f.exists() ) { fout = new FileOutputStream( tmpname ); merge = true; } else fout = new FileOutputStream( name ); return( new DataOutputStream( fout ) ); } private void Emit( String info ) throws IOException { out.writeBytes( info ); } // data fields private String base_name; // name of class private String mod_name; // module name of native "peer" module private String limbo_dotm; // name of limbo module decl .m file private String limbo_dotb; // name of limbo module impl .b file private String obj_adt; // adt describing objects instance fields private boolean special; // set true if a special class; a special // class is one known to this tool. Class theClass; // class descriptor object DataOutputStream out; // current gen output file boolean merge = false; // merge old and new gen'ed files String tmpname; Method[] methods; // all methods Method[] natives; // native methods Field[] fields; // all fields Field[] iFields; // instance fields Field[] sFields; // static fields boolean opt_verbose; // print stuff if true boolean has_natives; // set true if class has native methods // consts private static final String T1 = " "; private static final String T2 = " "; private static final String T3 = " "; // generated Limbo/Java type names private static final String T_JObject = "JObject"; private static final String T_JString = "JString"; private static final String T_JClass = "JClass"; private static final String T_JArrayI = "JArrayI"; private static final String T_JArrayC = "JArrayC"; private static final String T_JArrayS = "JArrayS"; private static final String T_JArrayB = "JArrayB"; private static final String T_JArrayJ = "JArrayJ"; private static final String T_JArrayF = "JArrayF"; private static final String T_JArrayD = "JArrayD"; private static final String T_JArrayZ = "JArrayZ"; private static final String T_JArrayJObject = "JArrayJObject"; private static final String T_JArrayJClass = "JArrayJClass"; private static final String T_JArrayJString = "JArrayJString"; private static final String T_JArray = "JArray"; private static final String T_JFd = "ref FileDescriptor_obj"; private static final String T_JInfernoFD = "ref Sys->FD"; }