# HG changeset patch # User Ryoma SHINYA # Date 1292292450 -32400 # Node ID f228eb7791621f214a73906aa41c69c94c8346dd # Parent abe36c207b23dfd397c3926305ce4f5dec68e96b modify CbC-grep. avoid optimize (call->jmp) in matcher. diff -r abe36c207b23 -r f228eb779162 pyrect/translator/cbc_grep_translator.py --- a/pyrect/translator/cbc_grep_translator.py Tue Dec 14 04:09:46 2010 +0900 +++ b/pyrect/translator/cbc_grep_translator.py Tue Dec 14 11:07:30 2010 +0900 @@ -56,10 +56,11 @@ self.emit("typedef unsigned char *UCHARP;") self.emiti("typedef struct env_ {") self.emit( "void (*ret)();") + self.emit( "int count;") self.demit("} ENV;") self.emit("typedef ENV *ENVP;", 2) - self.emit("void matcher(UCHARP beg, UCHARP buf, UCHARP end);") + self.emit("int matcher(UCHARP beg, UCHARP buf, UCHARP end);") self.emit('__code entry(%s);' % self.interface, 2) self.emit('__code accept(%s);' % self.interface) @@ -221,16 +222,17 @@ self.demit("}", 2) def emit_driver(self): - self.emiti("void matcher(UCHARP beg, UCHARP buf, UCHARP end) {") + self.emiti("int matcher(UCHARP beg, UCHARP buf, UCHARP end) {") self.emit( "__label__ _return;") self.emiti( "void __return() {") self.emit( "goto _return;") self.demit( "}") - self.emit( "ENVP envp = malloc(sizeof(ENV));") - self.emit( "envp->ret = __return;") - self.emit( "goto entry(%s);" % self.args) + self.emit( "ENV env;") + self.emit( "env.ret = __return;") + self.emit( "env.count = 0;") + self.emit( "goto entry(beg, buf, end, &env);") self.demiti("_return:") - self.emit( "return;") + self.emit( "return env.count;") self.demit("}", 2) self.emiti("__code entry(%s) {" % self.interface)