idlpython.cc
来自「编译工具」· CC 代码 · 共 1,666 行 · 第 1/3 页
CC
1,666 行
case IdlType::tk_wstring: pyv = wstringToList(c->constAsWString()); break; case IdlType::tk_fixed: { char* fs = c->constAsFixed()->asString(); pyv = PyString_FromString(fs); delete [] fs; } break; case IdlType::tk_enum: pyv = findPyDecl(c->constAsEnumerator()->scopedName()); break; default: assert(0); } result_ = PyObject_CallMethod(idlast_, (char*)"Const", (char*)"siiNNsNsNiN", c->file(), c->line(), (int)c->mainFile(), pragmasToList(c->pragmas()), commentsToList(c->comments()), c->identifier(), scopedNameToList(c->scopedName()), c->repoId(), pytype, (int)c->constKind(), pyv); ASSERT_RESULT; registerPyDecl(c->scopedName(), result_);}voidPythonVisitor::visitDeclarator(Declarator* d){ ArraySize* s; int i; for (i=0, s = d->sizes(); s; s = s->next(), ++i); PyObject* pysizes = PyList_New(i); for (i=0, s = d->sizes(); s; s = s->next(), ++i) PyList_SetItem(pysizes, i, PyInt_FromLong(s->size())); result_ = PyObject_CallMethod(idlast_, (char*)"Declarator",(char*)"siiNNsNsN", d->file(), d->line(), (int)d->mainFile(), pragmasToList(d->pragmas()), commentsToList(d->comments()), d->identifier(), scopedNameToList(d->scopedName()), d->repoId(), pysizes); ASSERT_RESULT; registerPyDecl(d->scopedName(), result_);}voidPythonVisitor::visitTypedef(Typedef* t){ if (t->constrType()) { ((DeclaredType*)t->aliasType())->decl()->accept(*this); Py_DECREF(result_); } t->aliasType()->accept(*this); PyObject* pyaliasType = result_; Declarator* d; int i, l; for (l=0, d = t->declarators(); d; d = (Declarator*)d->next(), ++l); PyObject* pydeclarators = PyList_New(l); for (i=0, d = t->declarators(); d; d = (Declarator*)d->next(), ++i) { d->accept(*this); PyList_SetItem(pydeclarators, i, result_); } result_ = PyObject_CallMethod(idlast_, (char*)"Typedef", (char*)"siiNNNiN", t->file(), t->line(), (int)t->mainFile(), pragmasToList(t->pragmas()), commentsToList(t->comments()), pyaliasType, (int)t->constrType(), pydeclarators); ASSERT_RESULT; // Give each Declarator a reference to the Typedef. This creates a // loop which Python's GC won't collect :-( for (i=0; i<l; ++i) { PyObject_CallMethod(PyList_GetItem(pydeclarators, i), (char*)"_setAlias", (char*)"O", result_); }}voidPythonVisitor::visitMember(Member* m){ if (m->constrType()) { ((DeclaredType*)m->memberType())->decl()->accept(*this); Py_DECREF(result_); } m->memberType()->accept(*this); PyObject* pymemberType = result_; Declarator* d; int i; for (i=0, d = m->declarators(); d; d = (Declarator*)d->next(), ++i); PyObject* pydeclarators = PyList_New(i); for (i=0, d = m->declarators(); d; d = (Declarator*)d->next(), ++i) { d->accept(*this); PyList_SetItem(pydeclarators, i, result_); } result_ = PyObject_CallMethod(idlast_, (char*)"Member", (char*)"siiNNNiN", m->file(), m->line(), (int)m->mainFile(), pragmasToList(m->pragmas()), commentsToList(m->comments()), pymemberType, (int)m->constrType(), pydeclarators); ASSERT_RESULT;}voidPythonVisitor::visitStruct(Struct* s){ Member* m; int i; PyObject* pystruct = PyObject_CallMethod(idlast_, (char*)"Struct", (char*)"siiNNsNsi", s->file(), s->line(), (int)s->mainFile(), pragmasToList(s->pragmas()), commentsToList(s->comments()), s->identifier(), scopedNameToList(s->scopedName()), s->repoId(), (int)s->recursive()); ASSERT_PYOBJ(pystruct); registerPyDecl(s->scopedName(), pystruct); for (i=0, m = s->members(); m; m = (Member*)m->next(), ++i); PyObject* pymembers = PyList_New(i); for (i=0, m = s->members(); m; m = (Member*)m->next(), ++i) { m->accept(*this); PyList_SetItem(pymembers, i, result_); } PyObject* r = PyObject_CallMethod(pystruct, (char*)"_setMembers", (char*)"N", pymembers); ASSERT_PYOBJ(r); Py_DECREF(r); result_ = pystruct;}voidPythonVisitor::visitStructForward(StructForward* f){ result_ = PyObject_CallMethod(idlast_, (char*)"StructForward", (char*)"siiNNsNs", f->file(), f->line(), (int)f->mainFile(), pragmasToList(f->pragmas()), commentsToList(f->comments()), f->identifier(), scopedNameToList(f->scopedName()), f->repoId()); ASSERT_RESULT; registerPyDecl(f->scopedName(), result_);}voidPythonVisitor::visitException(Exception* e){ Member* m; int i; for (i=0, m = e->members(); m; m = (Member*)m->next(), ++i); PyObject* pymembers = PyList_New(i); for (i=0, m = e->members(); m; m = (Member*)m->next(), ++i) { m->accept(*this); PyList_SetItem(pymembers, i, result_); } result_ = PyObject_CallMethod(idlast_, (char*)"Exception", (char*)"siiNNsNsN", e->file(), e->line(), (int)e->mainFile(), pragmasToList(e->pragmas()), commentsToList(e->comments()), e->identifier(), scopedNameToList(e->scopedName()), e->repoId(), pymembers); ASSERT_RESULT; registerPyDecl(e->scopedName(), result_);}voidPythonVisitor::visitCaseLabel(CaseLabel* l){ PyObject* pyv; switch(l->labelKind()) { case IdlType::tk_short: pyv = PyInt_FromLong(l->labelAsShort()); break; case IdlType::tk_long: pyv = PyInt_FromLong(l->labelAsLong()); break; case IdlType::tk_ushort: pyv = PyInt_FromLong(l->labelAsUShort()); break; case IdlType::tk_ulong: pyv = PyLong_FromUnsignedLong(l->labelAsULong()); break; case IdlType::tk_boolean: pyv = PyInt_FromLong(l->labelAsBoolean()); break; case IdlType::tk_char: pyv = Py_BuildValue((char*)"c", l->labelAsChar()); break;#ifdef HAS_LongLong case IdlType::tk_longlong: pyv = MyPyLong_FromLongLong(l->labelAsLongLong()); break; case IdlType::tk_ulonglong: pyv = PyLong_FromUnsignedLongLong(l->labelAsULongLong()); break;#endif case IdlType::tk_wchar: pyv = PyInt_FromLong(l->labelAsWChar()); break; case IdlType::tk_enum: pyv = findPyDecl(l->labelAsEnumerator()->scopedName()); break; default: assert(0); } result_ = PyObject_CallMethod(idlast_, (char*)"CaseLabel", (char*)"siiNNiNi", l->file(), l->line(), (int)l->mainFile(), pragmasToList(l->pragmas()), commentsToList(l->comments()), (int)l->isDefault(), pyv, (int)l->labelKind()); ASSERT_RESULT;}voidPythonVisitor::visitUnionCase(UnionCase* c){ if (c->constrType()) { ((DeclaredType*)c->caseType())->decl()->accept(*this); Py_DECREF(result_); } CaseLabel* l; int i; for (i=0, l = c->labels(); l; l = (CaseLabel*)l->next(), ++i); PyObject* pylabels = PyList_New(i); for (i=0, l = c->labels(); l; l = (CaseLabel*)l->next(), ++i) { l->accept(*this); PyList_SetItem(pylabels, i, result_); } c->caseType()->accept(*this); PyObject* pycaseType = result_; c->declarator()->accept(*this); PyObject* pydeclarator = result_; result_ = PyObject_CallMethod(idlast_, (char*)"UnionCase", (char*)"siiNNNNiN", c->file(), c->line(), (int)c->mainFile(), pragmasToList(c->pragmas()), commentsToList(c->comments()), pylabels, pycaseType, (int)c->constrType(), pydeclarator); ASSERT_RESULT;}voidPythonVisitor::visitUnion(Union* u){ if (u->constrType()) { ((DeclaredType*)u->switchType())->decl()->accept(*this); Py_DECREF(result_); } u->switchType()->accept(*this); PyObject* pyswitchType = result_; PyObject* pyunion = PyObject_CallMethod(idlast_, (char*)"Union", (char*)"siiNNsNsNii", u->file(), u->line(), (int)u->mainFile(), pragmasToList(u->pragmas()), commentsToList(u->comments()), u->identifier(), scopedNameToList(u->scopedName()), u->repoId(), pyswitchType, (int)u->constrType(), (int)u->recursive()); ASSERT_PYOBJ(pyunion); registerPyDecl(u->scopedName(), pyunion); UnionCase* c; int i; for (i=0, c = u->cases(); c; c = (UnionCase*)c->next(), ++i); PyObject* pycases = PyList_New(i); for (i=0, c = u->cases(); c; c = (UnionCase*)c->next(), ++i) { c->accept(*this); PyList_SetItem(pycases, i, result_); } PyObject* r = PyObject_CallMethod(pyunion, (char*)"_setCases", (char*)"N", pycases); ASSERT_PYOBJ(r); Py_DECREF(r); result_ = pyunion;}voidPythonVisitor::visitUnionForward(UnionForward* f){ result_ = PyObject_CallMethod(idlast_, (char*)"UnionForward", (char*)"siiNNsNs", f->file(), f->line(), (int)f->mainFile(), pragmasToList(f->pragmas()), commentsToList(f->comments()), f->identifier(), scopedNameToList(f->scopedName()), f->repoId()); ASSERT_RESULT; registerPyDecl(f->scopedName(), result_);}voidPythonVisitor::visitEnumerator(Enumerator* e){ result_ = PyObject_CallMethod(idlast_, (char*)"Enumerator", (char*)"siiNNsNsi", e->file(), e->line(), (int)e->mainFile(), pragmasToList(e->pragmas()), commentsToList(e->comments()), e->identifier(), scopedNameToList(e->scopedName()), e->repoId(), e->value()); ASSERT_RESULT; registerPyDecl(e->scopedName(), result_);}voidPythonVisitor::visitEnum(Enum* e){ Enumerator* n; int i; for (i=0, n = e->enumerators(); n; n = (Enumerator*)n->next(), ++i); PyObject* pyenumerators = PyList_New(i); for (i=0, n = e->enumerators(); n; n = (Enumerator*)n->next(), ++i) { n->accept(*this); PyList_SetItem(pyenumerators, i, result_); } result_ = PyObject_CallMethod(idlast_, (char*)"Enum", (char*)"siiNNsNsN", e->file(), e->line(), (int)e->mainFile(), pragmasToList(e->pragmas()), commentsToList(e->comments()), e->identifier(), scopedNameToList(e->scopedName()), e->repoId(), pyenumerators); ASSERT_RESULT; registerPyDecl(e->scopedName(), result_);}voidPythonVisitor::visitAttribute(Attribute* a){ a->attrType()->accept(*this); PyObject* pyattrType = result_; Declarator* d; int i, l; for (l=0, d = a->declarators(); d; d = (Declarator*)d->next(), ++l); PyObject* pydeclarators = PyList_New(l); for (i=0, d = a->declarators(); d; d = (Declarator*)d->next(), ++i) { d->accept(*this); PyList_SetItem(pydeclarators, i, result_); } result_ = PyObject_CallMethod(idlast_, (char*)"Attribute", (char*)"siiNNiNN", a->file(), a->line(), (int)a->mainFile(), pragmasToList(a->pragmas()), commentsToList(a->comments()), (int)a->readonly(), pyattrType, pydeclarators); ASSERT_RESULT;}voidPythonVisitor::visitParameter(Parameter* p){ p->paramType()->accept(*this); PyObject* pyparamType = result_; result_ = PyObject_CallMethod(idlast_, (char*)"Parameter", (char*)"siiNNiNs", p->file(), p->line(), (int)p->mainFile(), pragmasToList(p->pragmas()), commentsToList(p->comments()), p->direction(), pyparamType, p->identifier()); ASSERT_RESULT;}voidPythonVisitor::visitOperation(Operation* o){ o->returnType()->accept(*this); PyObject* pyreturnType = result_; Parameter* p; int i; for (i=0, p = o->parameters(); p; p = (Parameter*)p->next(), ++i); PyObject* pyparameters = PyList_New(i); for (i=0, p = o->parameters(); p; p = (Parameter*)p->next(), ++i) { p->accept(*this); PyList_SetItem(pyparameters, i, result_); } RaisesSpec* r; for (i=0, r = o->raises(); r; r = r->next(), ++i); PyObject* pyraises = PyList_New(i); for (i=0, r = o->raises(); r; r = r->next(), ++i) PyList_SetItem(pyraises, i, findPyDecl(r->exception()->scopedName())); ContextSpec* c; for (i=0, c = o->contexts(); c; c = c->next(), ++i); PyObject* pycontexts = PyList_New(i); for (i=0, c = o->contexts(); c; c = c->next(), ++i) PyList_SetItem(pycontexts, i, PyString_FromString(c->context())); result_ = PyObject_CallMethod(idlast_,(char*)"Operation",(char*)"siiNNiNsNsNNN", o->file(), o->line(), (int)o->mainFile(), pragmasToList(o->pragmas()), commentsToList(o->comments()), (int)o->oneway(), pyreturnType, o->identifier(), scopedNameToList(o->scopedName()), o->repoId(), pyparameters, pyraises, pycontexts); ASSERT_RESULT; registerPyDecl(o->scopedName(), result_);}voidPythonVisitor::visitNative(Native* n){ result_ = PyObject_CallMethod(idlast_, (char*)"Native", (char*)"siiNNsNs", n->file(), n->line(), (int)n->mainFile(), pragmasToList(n->pragmas()), commentsToList(n->comments()), n->identifier(), scopedNameToList(n->scopedName()), n->repoId()); ASSERT_RESULT; registerPyDecl(n->scopedName(), result_);}voidPythonVisitor::visitStateMember(StateMember* s){ if (s->constrType()) { ((DeclaredType*)s->memberType())->decl()->accept(*this); Py_DECREF(result_); } s->memberType()->accept(*this); PyObject* pymemberType = result_; Declarator* d; int i; for (i=0, d = s->declarators(); d; d = (Declarator*)d->next(), ++i); PyObject* pydeclarators = PyList_New(i); for (i=0, d = s->declarators(); d; d = (Declarator*)d->next(), ++i) { d->accept(*this); PyList_SetItem(pydeclarators, i, result_); } result_ = PyObject_CallMethod(idlast_,(char*)"StateMember",(char*)"siiNNiNiN", s->file(), s->line(), (int)s->mainFile(), pragmasToList(s->pragmas()), commentsToList(s->comments()), s->memberAccess(), pymemberType, (int)s->constrType(), pydeclarators); ASSERT_RESULT;}voidPythonVisitor::visitFactory(Factory* f){ Parameter* p; int i; for (i=0, p = f->parameters(); p; p = (Parameter*)p->next(), ++i); PyObject* pyparameters = PyList_New(i); for (i=0, p = f->parameters(); p; p = (Parameter*)p->next(), ++i) { p->accept(*this); PyList_SetItem(pyparameters, i, result_); } result_ = PyObject_CallMethod(idlast_, (char*)"Factory", (char*)"siiNNsN", f->file(), f->line(), (int)f->mainFile(), pragmasToList(f->pragmas()), commentsToList(f->comments()), f->identifier(), pyparameters); ASSERT_RESULT;}voidPythonVisitor::visitValueForward(ValueForward* f){ result_ = PyObject_CallMethod(idlast_, (char*)"ValueForward", (char*)"siiNNsNsi", f->file(), f->line(), (int)f->mainFile(), pragmasToList(f->pragmas()), commentsToList(f->comments()), f->identifier(), scopedNameToList(f->scopedName()), f->repoId(), (int)f->abstract()); ASSERT_RESULT; registerPyDecl(f->scopedName(), result_);}voidPythonVisitor::visitValueBox(ValueBox* b){ if (b->constrType()) { ((DeclaredType*)b->boxedType())->decl()->accept(*this); Py_DECREF(result_); } b->boxedType()->accept(*this); PyObject* pyboxedType = result_; result_ = PyObject_CallMethod(idlast_, (char*)"ValueBox", (char*)"siiNNsNsNi", b->file(), b->line(), (int)b->mainFile(), pragmasToList(b->pragmas()),
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?