Skip to content

Commit

Permalink
First support for uint
Browse files Browse the repository at this point in the history
  • Loading branch information
alexp-sssup committed Feb 13, 2010
1 parent 2f919c6 commit 922fbc9
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 31 deletions.
1 change: 1 addition & 0 deletions abc.cpp
Expand Up @@ -134,6 +134,7 @@ void ABCVm::registerClasses()
Global.setVariableByQName("Date","",Class<Date>::getClass());
Global.setVariableByQName("RegExp","",Class<RegExp>::getClass());
Global.setVariableByQName("QName","",Class<ASQName>::getClass());
Global.setVariableByQName("uint","",Class<UInteger>::getClass("uint"));

Global.setVariableByQName("print","",new Function(print));
Global.setVariableByQName("trace","",new Function(print));
Expand Down
5 changes: 5 additions & 0 deletions asobjects.cpp
Expand Up @@ -1624,3 +1624,8 @@ void InterfaceClass::lookupAndLink(ASObject* o, const tiny_string& name, const t
assert(ret);
o->setVariableByQName(name,interfaceNs,ret);
}

void UInteger::sinit(Class_base* c)
{
c->setVariableByQName("MAX_VALUE","",new UInteger(0xffffffff));
}
75 changes: 51 additions & 24 deletions asobjects.h
Expand Up @@ -331,7 +331,7 @@ friend bool Boolean_concrete(ASObject* obj);
bool val;
public:
Boolean(bool v):val(v){type=T_BOOLEAN;}
int toInt() const
int32_t toInt() const
{
return val;
}
Expand Down Expand Up @@ -521,33 +521,74 @@ friend class ABCVm;
friend class ABCContext;
friend ASObject* abstract_i(intptr_t i);
private:
int val;
//int debug;
int32_t val;
public:
Integer(int v):val(v){type=T_INTEGER;
Integer(int32_t v=0):val(v){type=T_INTEGER;
setVariableByQName("toString",AS3,new Function(Integer::_toString));
}
Integer(Manager* m):val(0),ASObject(m){type=T_INTEGER;
setVariableByQName("toString",AS3,new Function(Integer::_toString));
}
ASFUNCTION(_toString);
virtual ~Integer(){}
Integer& operator=(int v){val=v; return *this; }
//Integer& operator=(int v){val=v; return *this; }
tiny_string toString() const;
int toInt() const
int32_t toInt() const
{
return val;
}
double toNumber() const
{
return val;
}
operator int() const{return val;}
// operator int() const{return val;}
bool isLess(ASObject* r);
bool isGreater(ASObject* r);
bool isEqual(ASObject* o);
};

class UInteger: public ASObject
{
private:
uint32_t val;
public:
UInteger(uint32_t v=0):val(v){type=T_UINTEGER;}

//Integer& operator=(int v){val=v; return *this; }
static void sinit(Class_base* c);
tiny_string toString() const
{
abort();
}
int32_t toInt() const
{
abort();
// return val;
}
uint32_t toUInt() const
{
return val;
}
double toNumber() const
{
abort();
// return val;
}
// operator int() const{return val;}
bool isLess(ASObject* r)
{
abort();
}
bool isGreater(ASObject* r)
{
abort();
}
bool isEqual(ASObject* o)
{
abort();
}
};

class Number : public ASObject
{
friend ASObject* abstract_d(number_t i);
Expand All @@ -562,7 +603,7 @@ friend class ABCContext;
{
return (unsigned int)(val);
}
int toInt() const
int32_t toInt() const
{
if(val<0)
return int(val);
Expand All @@ -576,7 +617,7 @@ friend class ABCContext;
{
return val;
}
operator double() const {return val;}
// operator double() const {return val;}
bool isLess(ASObject* o);
bool isGreater(ASObject* o);
bool isEqual(ASObject* o);
Expand Down Expand Up @@ -613,7 +654,7 @@ class Date: public IInterface
int minute;
int second;
int millisecond;
int toInt() const;
int32_t toInt() const;
public:
Date();
static void sinit(Class_base*);
Expand Down Expand Up @@ -648,20 +689,6 @@ class ScriptDefinable: public Definable
void define(ASObject* g){ f->call(g,NULL,0); }
};

//Deprecated
/*class MethodDefinable: public Definable
{
private:
IFunction::as_function f;
std::string name;
public:
MethodDefinable(const std::string& _n,IFunction::as_function _f):name(_n),f(_f){}
void define(ASObject* g)
{
g->setVariableByQName(name,new Function(f));
}
};*/

class PlaceObject2Tag;

class DictionaryDefinable: public Definable
Expand Down
31 changes: 31 additions & 0 deletions class.h
Expand Up @@ -139,5 +139,36 @@ class Class: public Class_base
}
};

//Specialized class for uint
template<>
class Class<UInteger>: public Class_base
{
private:
Class<UInteger>():Class_base("uint"){}
IInterface* getInstance(bool construct, arguments* args)
{
abort();
return NULL;
}
public:
static Class<UInteger>* getClass(const tiny_string& name)
{
std::map<tiny_string, Class_base*>::iterator it=sys->classes.find(name);
if(it==sys->classes.end()) //This class is not yet in the map, create it
{
Class<UInteger>* ret=new Class<UInteger>;
UInteger::sinit(ret);
sys->classes.insert(std::make_pair(name,ret));
return ret;
}
else
return static_cast<Class<UInteger>*>(it->second);
}
void buildInstanceTraits(ASObject* o) const
{
abort();
}
};

};
#endif
8 changes: 4 additions & 4 deletions swftypes.cpp
Expand Up @@ -216,12 +216,12 @@ bool Integer::isGreater(ASObject* o)
if(o->getObjectType()==T_INTEGER)
{
const Integer* i=static_cast<const Integer*>(o);
return val>*i;
return val > i->toInt();
}
else if(o->getObjectType()==T_NUMBER)
{
const Number* d=static_cast<const Number*>(o);
return val>*d;
return val > d->toNumber();
}
else
{
Expand All @@ -234,12 +234,12 @@ bool Integer::isLess(ASObject* o)
if(o->getObjectType()==T_INTEGER)
{
const Integer* i=static_cast<const Integer*>(o);
return val<*i;
return val < i->toInt();
}
else if(o->getObjectType()==T_NUMBER)
{
const Number* i=static_cast<const Number*>(o);
return val<double(*i);
return val < i->toNumber();
}
else
return ASObject::isLess(o);
Expand Down
6 changes: 3 additions & 3 deletions swftypes.h
Expand Up @@ -46,7 +46,7 @@ namespace lightspark
ASObject* c::name(ASObject* obj, arguments* args)

enum SWFOBJECT_TYPE { T_OBJECT=0, T_INTEGER=1, T_NUMBER=2, T_FUNCTION=3, T_UNDEFINED=4, T_NULL=5, T_STRING=6,
T_DEFINABLE=7, T_BOOLEAN=8, T_ARRAY=9, T_CLASS=10, T_QNAME=11, T_NAMESPACE=12};
T_DEFINABLE=7, T_BOOLEAN=8, T_ARRAY=9, T_CLASS=10, T_QNAME=11, T_NAMESPACE=12, T_UINTEGER=13};

enum STACK_TYPE{STACK_NONE=0,STACK_OBJECT,STACK_INT,STACK_NUMBER,STACK_BOOLEAN};

Expand Down Expand Up @@ -511,8 +511,8 @@ friend class SystemState;
ASObject* getValueAt(int i);
SWFOBJECT_TYPE getObjectType() const;
virtual tiny_string toString() const;
virtual int toInt() const;
virtual unsigned int toUInt() const;
virtual int32_t toInt() const;
virtual uint32_t toUInt() const;
virtual double toNumber() const;

virtual bool isEqual(ASObject* r);
Expand Down

0 comments on commit 922fbc9

Please sign in to comment.