⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hfile.java

📁 java 到c的转换程序的原代码.对喜欢C程序而不懂JAVA程序的人很有帮助
💻 JAVA
字号:
//  HFile.java -- methods for writing .h filespackage toba.translator;import toba.classfile.*;import java.io.*;import java.util.*;class HFile {static private int hvnum;		// hidden variable number//  write(d, c) -- write header info for class c on stream d.static void write(PrintWriter d, ClassData c){    Field m, f;    boolean hascv;    // header file protection    d.println();    d.println("#ifndef h_" + c.cname);    d.println("#define h_" + c.cname);    // define an "init_classname" macro, possibly having no effect if unneeded    d.println();    d.print("#define init_" + c.cname + "() ");    if (c.getmethod("<clinit>", false) == null)	d.println("(void)0");    else	d.println("if (cl_" + c.cname + ".C.needinit) initclass(&cl_" + 	    c.cname + ".C)");    // function declarations    d.println();    for (int i = 0; i < c.methods.length; i++) {	m = c.methods[i];	d.println(Repr.rettype(m.signature) + "\t" + m.cname +	    "(" + argtypes(m) + ");");    }    // method table    d.println();    d.println("struct mt_" + c.cname + " {");    for (int i = 0; i < c.imtable.length; i++) {	m = c.imtable[i];	d.println("    struct {TobaMethodInvokeType itype;" +	    Repr.rettype(m.signature) + "(*f)(" + argtypes(m) +	    ");\n\tconst Char *name_chars;int name_len;" + 	    "const Char *sig_chars;int sig_len;" +	    "\n\tint localp;int access;int classfilePos;Class *xlist;} " + m.cname + ";");    };    d.println("};");    // are there any class variables?    hascv = false;    for (int i = 0; i < c.fields.length; i++) {	if ((c.fields[i].access & ClassData.ACC_STATIC) != 0) {	    hascv = true;	    break;	}    }    // declare class variable struct, if needed    if (hascv) {	d.println();	d.println("struct cv_" + c.cname + " {");	for (int i = 0; i < c.cvtable.length; i++) {	    f = c.cvtable[i];	    declare(d, f, f.cname);	}	d.println("};");    }    // class struct    d.println();    d.println("extern struct cl_" + c.cname + " {");    d.println("    struct class C;");    d.println("    struct mt_" + c.cname + " M;");    if (hascv)	d.println("    struct cv_" + c.cname + " V;");    d.println("} cl_" + c.cname + ";");    // instance struct    d.println();    d.println("struct in_" + c.cname + " {");    d.println("    struct cl_" + c.cname + " *class;");    d.println("    struct monitor *monitor;");    hvnum = 0;				// init counter of shadowed vars    ivfield(d, c);			// declare instance variable fields    d.println("};");    // tail    d.println();    d.println("#endif /* h_" + c.cname + " */");}//  ivfield(d, c) -- declare instance variables for c and ancestors.static private void ivfield(PrintWriter d, ClassData c){    if (c == null)	return;    for (int i = 0; i < c.ivtable.length; i++) {	Field f = c.ivtable[i];	if (c.visiblevars.get(f.name) == f)	    declare(d, f, f.cname);	else	    declare(d, f, Names.hashvar(++hvnum + "shadowed"));    }}//  declare(d, v, name) -- generate a declaration for a variable.static private void declare(PrintWriter d, Field v, String name){    String prefix = "    ";    if ((v.access & ClassData.ACC_VOLATILE) != 0)	prefix = "    volatile ";    d.println(prefix + Repr.ctype(v.signature.charAt(0)) + " " + name + ";");}//  argtypes(m) -- return string of C arg types for Java method m.private static String argtypes(Field m){    String s = m.signature;    StringBuffer b = new StringBuffer();    if ((m.access & ClassData.ACC_STATIC) == 0)	b.append("Object,");			// "self"    int i = 1;loop:    while (true) {	switch (s.charAt(i)) {	    case ')':  break loop;	    case 'B':  b.append("Byte,");     break;	    case 'C':  b.append("Char,");     break;	    case 'D':  b.append("Double,");   break;	    case 'F':  b.append("Float,");    break;	    case 'I':  b.append("Int,");      break;	    case 'J':  b.append("Long,");     break;	    case 'S':  b.append("Short,");    break;	    case 'Z':  b.append("Boolean,");  break;	    case 'L':				// object		b.append("Object,");		i = s.indexOf(';', i);		break;	    case '[':				// array		b.append("Object,");		while (s.charAt(i) == '[')		    i++;		if (s.charAt(i) == 'L')		    i = s.indexOf(';', i);		break;	}	i++;    }    if (b.length() == 0)	return "void";    else {	b.setLength(b.length() - 1);		// trim final ","	return b.toString();    }}} // class HFile

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -