677 lines · 16.0 KB · Java
RawDownload
		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