public static native int nativeBind(byte[] address, int port);
- public static native int nativeConnect(int fd, byte[] address, int port);
+ public native int nativeConnect(int fd, byte[] address, int port);
int setFD(int filed) {
fd=filed;
return this.subString(beginIndex, this.count);
}
+ public int lastindexOf(int ch) {
+ return this.lastindexOf(ch, count - 1);
+ }
+
+ public int lastindexOf(int ch, int fromIndex) {
+ for(int i=fromIndex;i>0;i--)
+ if (this.charAt(i)==ch)
+ return i;
+ return -1;
+ }
+
public int indexOf(int ch) {
return this.indexOf(ch, 0);
}
value[i]=str.value[i+str.offset];
}
+ public StringBuffer() {
+ value=new char[16];//16 is DEFAULTSIZE
+ count=0;
+ offset=0;
+ }
+
public int length() {
return count;
}
TempDescriptor temp=tfp.getTemp();
Hashtable flagtable=(Hashtable)flagorder.get(temp.getType().getClassDesc());
FlagDescriptor flag=tfp.getFlag();
- int flagid=1<<((Integer)flagtable.get(flag)).intValue();
- boolean flagstatus=ffan.getFlagChange(tfp);
- if (flagstatus) {
- int mask=0;
+ if (flag==null) {
+ //Newly allocate objects that don't set any flags case
if (flagortable.containsKey(temp)) {
- mask=((Integer)flagortable.get(temp)).intValue();
+ throw new Error();
}
- mask|=flagid;
+ int mask=0;
flagortable.put(temp,new Integer(mask));
} else {
- int mask=0xFFFFFFFF;
- if (flagandtable.containsKey(temp)) {
- mask=((Integer)flagandtable.get(temp)).intValue();
+ int flagid=1<<((Integer)flagtable.get(flag)).intValue();
+ boolean flagstatus=ffan.getFlagChange(tfp);
+ if (flagstatus) {
+ int mask=0;
+ if (flagortable.containsKey(temp)) {
+ mask=((Integer)flagortable.get(temp)).intValue();
+ }
+ mask|=flagid;
+ flagortable.put(temp,new Integer(mask));
+ } else {
+ int mask=0xFFFFFFFF;
+ if (flagandtable.containsKey(temp)) {
+ mask=((Integer)flagandtable.get(temp)).intValue();
+ }
+ mask&=(0xFFFFFFFF^flagid);
+ flagandtable.put(temp,new Integer(mask));
}
- mask&=(0xFFFFFFFF^flagid);
- flagandtable.put(temp,new Integer(mask));
}
}
Iterator orit=flagortable.keySet().iterator();
int andmask=0xFFFFFFF;
if (flagandtable.containsKey(temp))
andmask=((Integer)flagandtable.get(temp)).intValue();
- output.println("flagorand("+generateTemp(fm, temp)+", 0x"+Integer.toHexString(ormask)+", 0x"+Integer.toHexString(andmask)+");");
+ if (ffan.getTaskType()==FlatFlagActionNode.NEWOBJECT) {
+ output.println("flagorandinit("+generateTemp(fm, temp)+", 0x"+Integer.toHexString(ormask)+", 0x"+Integer.toHexString(andmask)+");");
+ } else {
+ output.println("flagorand("+generateTemp(fm, temp)+", 0x"+Integer.toHexString(ormask)+", 0x"+Integer.toHexString(andmask)+");");
+ }
}
Iterator andit=flagandtable.keySet().iterator();
while(andit.hasNext()) {
TempDescriptor temp=(TempDescriptor)andit.next();
int andmask=((Integer)flagandtable.get(temp)).intValue();
- if (!flagortable.containsKey(temp))
- output.println("flagorand("+generateTemp(fm, temp)+", 0, 0x"+Integer.toHexString(andmask)+");");
+ if (!flagortable.containsKey(temp)) {
+ if (ffan.getTaskType()==FlatFlagActionNode.NEWOBJECT)
+ output.println("flagorandinit("+generateTemp(fm, temp)+", 0, 0x"+Integer.toHexString(andmask)+");");
+ else
+ output.println("flagorand("+generateTemp(fm, temp)+", 0, 0x"+Integer.toHexString(andmask)+");");
+ }
}
}
}
FlatNew fn=new FlatNew(td, out_temp);
TempDescriptor[] temps=new TempDescriptor[con.numArgs()];
FlatNode last=fn;
-
- if (con.getFlagEffects()!=null) {
+ if (td.getClassDesc().hasFlags()) {
+ // if (con.getFlagEffects()!=null) {
FlatFlagActionNode ffan=new FlatFlagActionNode(FlatFlagActionNode.NEWOBJECT);
FlagEffects fes=con.getFlagEffects();
TempDescriptor flagtemp=out_temp;
- for(int j=0;j<fes.numEffects();j++) {
- FlagEffect fe=fes.getEffect(j);
- ffan.addFlagAction(flagtemp, fe.getFlag(), fe.getStatus());
- }
+ if (fes!=null)
+ for(int j=0;j<fes.numEffects();j++) {
+ FlagEffect fe=fes.getEffect(j);
+ ffan.addFlagAction(flagtemp, fe.getFlag(), fe.getStatus());
+ } else {
+ ffan.addFlagAction(flagtemp, null, false);
+ }
+
last.addNext(ffan);
last=ffan;
}
this.taskexit=taskexit;
}
+ public int getTaskType() {
+ return taskexit;
+ }
+
public void addFlagAction(TempDescriptor td, FlagDescriptor fd, boolean status) {
TempFlagPair tfp=new TempFlagPair(td,fd);
if (tempflagpairs.containsKey(tfp)) {
else if (x=='\r')
new_st+="\\r";
else if (x=='"')
- new_st+="'"+'"'+"'";
+ new_st+="\\\"";
else new_st+=x;
}
return new_st;
this.td=td;
}
public int hashCode() {
- return fd.hashCode()^td.hashCode();
+ if (fd!=null)
+ return fd.hashCode()^td.hashCode();
+ else
+ return td.hashCode();
}
public TempDescriptor getTemp() {
ExpressionNode condition=parseExpression(pn.getChild("condition").getFirstChild());
BlockNode body=parseSingleBlock(pn.getChild("statement").getFirstChild());
blockstatements.add(new LoopNode(condition,body,LoopNode.DOWHILELOOP));
- } else {
+ } else {
System.out.println("---------------");
System.out.println(pn.PPrint(3,true));
throw new Error();
else
fd=(FieldDescriptor) ltd.getClassDesc().getFieldTable().get(fieldname);
if (fd==null)
- throw new Error("Unknown field "+fieldname);
+ throw new Error("Unknown field "+fieldname + " in "+fan.printNode(0));
fan.setField(fd);
if (td!=null)
if (!typeutil.isSuperorType(td,fan.getType()))
Lex.Lexer l = new Lex.Lexer(fr);
java_cup.runtime.lr_parser g;
g = new Parse.Parser(l);
- ParseNode p=(ParseNode) g./*debug_*/parse().value;
+ ParseNode p=null;
+ try {
+ p=(ParseNode) g./*debug_*/parse().value;
+ } catch (Exception e) {
+ System.err.println("Error parsing file:"+sourcefile);
+ e.printStackTrace();
+ System.exit(-1);
+ }
state.addParseNode(p);
if (l.numErrors()!=0) {
System.out.println("Error parsing "+sourcefile);
:};
flag_list_opt ::= LBRACE flag_list:fl RBRACE {:RESULT=fl;:}
- | {: RESULT = new ParseNode("empty"); :}
+ | LBRACE RBRACE {: RESULT = new ParseNode("empty"); :}
+ |
+ {: RESULT = new ParseNode("empty"); :}
;
flag_list ::= flag_change:fc {:
void flagorand(void * ptr, int ormask, int andmask) {
int oldflag=((int *)ptr)[1];
- struct RuntimeHash *flagptr=(struct RuntimeHash *)(((int*)ptr)[2]);
int flag=ormask|oldflag;
flag&=andmask;
if (flag==oldflag) /* Don't do anything */
return;
+ else flagbody(ptr, flag);
+}
+
+void flagorandinit(void * ptr, int ormask, int andmask) {
+ int oldflag=((int *)ptr)[1];
+ int flag=ormask|oldflag;
+ flag&=andmask;
+ flagbody(ptr,flag);
+}
+
+void flagbody(void *ptr, int flag) {
+ struct RuntimeHash *flagptr=(struct RuntimeHash *)(((int*)ptr)[2]);
((int*)ptr)[1]=flag;
/*Remove object from all queues */
#define CALL02(name, alt1, alt2) name(struct name ## _params * ___params___)
#define CALL11(name,rest, alt) name(struct name ## _params * ___params___, rest)
#define CALL12(name,rest, alt1, alt2) name(struct name ## _params * ___params___, rest)
-#define CALL21(name,rest, rest2, alt) name(struct name ## _params * ___params___, rest, rest2)
#define CALL23(name, rest, rest2, alt1, alt2, alt3) name(struct name ## _params * ___params___, rest, rest2)
+#define CALL24(name, rest, rest2, alt1, alt2, alt3, alt4) name(struct name ## _params * ___params___, rest, rest2)
#else
#define VAR(name) name
#define CALL00(name) name()
#define CALL02(name, alt1, alt2) name(alt1, alt2)
#define CALL11(name,rest, alt) name(alt)
#define CALL12(name,rest, alt1, alt2) name(alt1, alt2)
-#define CALL21(name,rest, rest2, alt) name(alt)
#define CALL23(name, rest, rest2, alt1, alt2, alt3) name(alt1, alt2, alt3)
+#define CALL24(name, rest, rest2, alt1, alt2, alt3, alt4) name(alt1, alt2, alt3, alt4)
#endif
#ifdef TASK
#include "SimpleHash.h"
#include "task.h"
void flagorand(void * ptr, int ormask, int andmask);
+void flagorandinit(void * ptr, int ormask, int andmask);
+void flagbody(void *ptr, int flag);
void executetasks();
void processtasks();
extern struct RuntimeHash *fdtoobject;
-int CALL23(___Socket______nativeConnect____I__AR_B_I, int ___fd___, int ___port___, int ___fd___, struct ArrayObject * ___address___ ,int ___port___) {
+int CALL24(___Socket______nativeConnect____I__AR_B_I, int ___fd___, int ___port___, struct ___Socket___ * ___this___, int ___fd___, struct ArrayObject * ___address___ ,int ___port___) {
struct sockaddr_in sin;
int rc;
bzero(&sin, sizeof(sin));
sin.sin_family= AF_INET;
sin.sin_port=htons(___port___);
- sin.sin_addr.s_addr=htonl(*(((char *)&VAR(___address___)->___length___)+sizeof(int)));
+ sin.sin_addr.s_addr=htonl(*(int *)(((char *)&VAR(___address___)->___length___)+sizeof(int)));
do {
rc = connect(___fd___, (struct sockaddr *) &sin, sizeof(sin));
} while (rc<0 && errno==EINTR); /* repeat if interrupted */
if (rc<0) goto error;
+
+#ifdef TASK
+ //Make non-blocking
+ fcntl(___fd___, F_SETFD, 1);
+ fcntl(___fd___, F_SETFL, fcntl(___fd___, F_GETFL)|O_NONBLOCK);
+ RuntimeHashadd(fdtoobject, ___fd___, (int) VAR(___this___));
+ addreadfd(___fd___);
+#endif
+
return 0;
error:
struct sockaddr_in sin;
bzero(&sin, sizeof(sin));
sin.sin_family= AF_INET;
- sin.sin_port=htons(___port___);
- sin.sin_addr.s_addr=htonl(*(((char *) &VAR(___address___)->___length___)+sizeof(int)));
+ sin.sin_port=0;
+ sin.sin_addr.s_addr=INADDR_ANY;
fd=socket(AF_INET, SOCK_STREAM, 0);
if (fd<0) {
#endif
}
-#ifdef TASK
- //Make non-blocking
- fcntl(fd, F_SETFD, 1);
- fcntl(fd, F_SETFL, fcntl(fd, F_GETFL)|O_NONBLOCK);
-#endif
-
rc = bind(fd, (struct sockaddr *) &sin, sizeof(sin));
if (rc<0) goto error;
bytearray=allocate_newarray(BYTEARRAYTYPE,h->h_length);
#endif
((void **)&((&arraybytearray->___length___)[1]))[i]=bytearray;
- for(j=0;j<h->h_length;j++) {
- ((char *)&((&bytearray->___length___)[1]))[j]=h->h_addr_list[i][j];
+ {
+ int ha=ntohl(*(int *)h->h_addr_list[i]);
+ (&bytearray->___length___)[1]=ha;
}
}