Generate cleanup code.
This commit is contained in:
parent
94730dad7a
commit
57980975a0
1 changed files with 134 additions and 107 deletions
|
|
@ -272,6 +272,8 @@ protected:
|
||||||
|
|
||||||
virtual void marshalOutput(Node *n, Wrapper *wrapper, String *actioncode, const String *cresult=0, bool emitReturnVariable = true);
|
virtual void marshalOutput(Node *n, Wrapper *wrapper, String *actioncode, const String *cresult=0, bool emitReturnVariable = true);
|
||||||
|
|
||||||
|
virtual void emitCleanupCode(Wrapper *wrapper, ParmList *params);
|
||||||
|
|
||||||
void registerProxyType(SwigType* type);
|
void registerProxyType(SwigType* type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -831,6 +833,9 @@ int JSEmitter::emitCtor(Node *n) {
|
||||||
marshalInputArgs(n, params, wrapper, Ctor, true, false);
|
marshalInputArgs(n, params, wrapper, Ctor, true, false);
|
||||||
|
|
||||||
Printv(wrapper->code, action, "\n", 0);
|
Printv(wrapper->code, action, "\n", 0);
|
||||||
|
|
||||||
|
emitCleanupCode(wrapper, params);
|
||||||
|
|
||||||
t_ctor.replace(T_WRAPPER, wrap_name)
|
t_ctor.replace(T_WRAPPER, wrap_name)
|
||||||
.replace(T_TYPE_MANGLED, state.clazz(TYPE_MANGLED))
|
.replace(T_TYPE_MANGLED, state.clazz(TYPE_MANGLED))
|
||||||
.replace(T_LOCALS, wrapper->locals)
|
.replace(T_LOCALS, wrapper->locals)
|
||||||
|
|
@ -914,6 +919,8 @@ int JSEmitter::emitGetter(Node *n, bool is_member, bool is_static) {
|
||||||
marshalInputArgs(n, params, wrapper, Getter, is_member, is_static);
|
marshalInputArgs(n, params, wrapper, Getter, is_member, is_static);
|
||||||
marshalOutput(n, wrapper, action);
|
marshalOutput(n, wrapper, action);
|
||||||
|
|
||||||
|
emitCleanupCode(wrapper, params);
|
||||||
|
|
||||||
t_getter.replace(T_WRAPPER, wrap_name)
|
t_getter.replace(T_WRAPPER, wrap_name)
|
||||||
.replace(T_LOCALS, wrapper->locals)
|
.replace(T_LOCALS, wrapper->locals)
|
||||||
.replace(T_CODE, wrapper->code)
|
.replace(T_CODE, wrapper->code)
|
||||||
|
|
@ -950,6 +957,8 @@ int JSEmitter::emitSetter(Node *n, bool is_member, bool is_static) {
|
||||||
marshalInputArgs(n, params, wrapper, Setter, is_member, is_static);
|
marshalInputArgs(n, params, wrapper, Setter, is_member, is_static);
|
||||||
Append(wrapper->code, action);
|
Append(wrapper->code, action);
|
||||||
|
|
||||||
|
emitCleanupCode(wrapper, params);
|
||||||
|
|
||||||
t_setter.replace(T_WRAPPER, wrap_name)
|
t_setter.replace(T_WRAPPER, wrap_name)
|
||||||
.replace(T_LOCALS, wrapper->locals)
|
.replace(T_LOCALS, wrapper->locals)
|
||||||
.replace(T_CODE, wrapper->code)
|
.replace(T_CODE, wrapper->code)
|
||||||
|
|
@ -1027,6 +1036,8 @@ int JSEmitter::emitFunction(Node *n, bool is_member, bool is_static) {
|
||||||
marshalInputArgs(n, params, wrapper, Function, is_member, is_static);
|
marshalInputArgs(n, params, wrapper, Function, is_member, is_static);
|
||||||
marshalOutput(n, wrapper, action);
|
marshalOutput(n, wrapper, action);
|
||||||
|
|
||||||
|
emitCleanupCode(wrapper, params);
|
||||||
|
|
||||||
t_function.replace(T_WRAPPER, wrap_name)
|
t_function.replace(T_WRAPPER, wrap_name)
|
||||||
.replace(T_LOCALS, wrapper->locals)
|
.replace(T_LOCALS, wrapper->locals)
|
||||||
.replace(T_CODE, wrapper->code)
|
.replace(T_CODE, wrapper->code)
|
||||||
|
|
@ -1140,6 +1151,22 @@ void JSEmitter::marshalOutput(Node *n, Wrapper *wrapper, String *actioncode, co
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void JSEmitter::emitCleanupCode(Wrapper *wrapper, ParmList *params) {
|
||||||
|
Parm *p;
|
||||||
|
String *tm;
|
||||||
|
|
||||||
|
for (p = params; p;) {
|
||||||
|
if ((tm = Getattr(p, "tmap:freearg"))) {
|
||||||
|
//addThrows(n, "tmap:freearg", p);
|
||||||
|
Replaceall(tm, "$input", Getattr(p, "emit:input"));
|
||||||
|
Printv(wrapper->code, tm, "\n", NIL);
|
||||||
|
p = Getattr(p, "tmap:freearg:next");
|
||||||
|
} else {
|
||||||
|
p = nextSibling(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int JSEmitter::switchNamespace(Node *n) {
|
int JSEmitter::switchNamespace(Node *n) {
|
||||||
|
|
||||||
if (!GetFlag(n, "feature:nspace")) {
|
if (!GetFlag(n, "feature:nspace")) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue