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 + -
显示快捷键?