Files
Pyarmor-Static-Unpack-1shot/pyc_object.cpp

78 lines
2.5 KiB
C++
Raw Normal View History

2011-10-23 17:48:10 -07:00
#include "pyc_object.h"
#include "pyc_module.h"
#include "pyc_numeric.h"
#include "pyc_code.h"
2009-07-24 08:35:21 +00:00
#include "data.h"
2011-10-23 17:48:10 -07:00
#include <cstdio>
2009-07-24 08:35:21 +00:00
2009-07-24 21:15:51 +00:00
PycRef<PycObject> Pyc_NULL = (PycObject*)0;
PycRef<PycObject> Pyc_None = new PycObject(PycObject::TYPE_NONE);
PycRef<PycObject> Pyc_Ellipsis = new PycObject(PycObject::TYPE_ELLIPSIS);
PycRef<PycObject> Pyc_StopIteration = new PycObject(PycObject::TYPE_STOPITER);
PycRef<PycObject> Pyc_False = new PycObject(PycObject::TYPE_FALSE);
PycRef<PycObject> Pyc_True = new PycObject(PycObject::TYPE_TRUE);
2009-07-24 08:35:21 +00:00
2009-07-24 21:15:51 +00:00
PycRef<PycObject> CreateObject(int type)
2009-07-24 08:35:21 +00:00
{
switch (type) {
case PycObject::TYPE_NULL:
2009-07-25 00:43:46 +00:00
return Pyc_NULL;
2009-07-24 08:35:21 +00:00
case PycObject::TYPE_NONE:
return Pyc_None;
case PycObject::TYPE_FALSE:
2009-07-25 00:43:46 +00:00
return Pyc_False;
2009-07-24 08:35:21 +00:00
case PycObject::TYPE_TRUE:
2009-07-25 00:43:46 +00:00
return Pyc_True;
2009-07-24 08:35:21 +00:00
case PycObject::TYPE_STOPITER:
return Pyc_StopIteration;
case PycObject::TYPE_ELLIPSIS:
return Pyc_Ellipsis;
case PycObject::TYPE_INT:
return new PycInt();
case PycObject::TYPE_INT64:
return new PycLong(PycObject::TYPE_INT64);
2009-07-24 08:35:21 +00:00
case PycObject::TYPE_FLOAT:
return new PycFloat();
case PycObject::TYPE_BINARY_FLOAT:
return new PycCFloat();
case PycObject::TYPE_COMPLEX:
return new PycComplex();
case PycObject::TYPE_BINARY_COMPLEX:
return new PycCComplex();
2009-07-24 08:35:21 +00:00
case PycObject::TYPE_LONG:
return new PycLong();
case PycObject::TYPE_STRING:
return new PycString();
case PycObject::TYPE_INTERNED:
return new PycString(PycObject::TYPE_INTERNED);
case PycObject::TYPE_STRINGREF:
return new PycString(PycObject::TYPE_STRINGREF);
case PycObject::TYPE_TUPLE:
return new PycTuple();
case PycObject::TYPE_LIST:
return new PycList();
2009-07-24 21:15:51 +00:00
case PycObject::TYPE_DICT:
return new PycDict();
2009-07-24 08:35:21 +00:00
case PycObject::TYPE_CODE:
case PycObject::TYPE_CODE2:
return new PycCode();
case PycObject::TYPE_UNICODE:
return new PycString(PycObject::TYPE_UNICODE);
case PycObject::TYPE_SET:
return new PycSet();
case PycObject::TYPE_FROZENSET:
return new PycSet(PycObject::TYPE_FROZENSET);
2009-07-24 08:35:21 +00:00
default:
fprintf(stderr, "CreateObject: Got unsupported type 0x%X\n", type);
2012-05-26 13:50:23 -07:00
return Pyc_NULL;
2009-07-24 08:35:21 +00:00
}
}
2009-07-24 21:15:51 +00:00
PycRef<PycObject> LoadObject(PycData* stream, PycModule* mod)
2009-07-24 08:35:21 +00:00
{
2009-07-24 21:15:51 +00:00
PycRef<PycObject> obj = CreateObject(stream->getByte());
2009-07-24 08:35:21 +00:00
if (obj != Pyc_NULL)
obj->load(stream, mod);
return obj;
}