- changed order of script files to match the old DECORATE list for easy comparison of the disassembly.

- added a descriptive name to all types for error messages.
- added a generic type cast node to the code generator.
- added a few more cast operations to the 'cast' VM instruction.
- extended FxClassTypeCast to handle all possible input that can be cast to a class pointer, not just names.
This commit is contained in:
Christoph Oelckers 2016-10-16 19:42:22 +02:00
commit afd9347087
11 changed files with 723 additions and 15 deletions

View file

@ -411,6 +411,78 @@ public:
ExpEmit Emit(VMFunctionBuilder *build);
};
class FxNameCast : public FxExpression
{
FxExpression *basex;
public:
FxNameCast(FxExpression *x);
~FxNameCast();
FxExpression *Resolve(FCompileContext&);
ExpEmit Emit(VMFunctionBuilder *build);
};
class FxStringCast : public FxExpression
{
FxExpression *basex;
public:
FxStringCast(FxExpression *x);
~FxStringCast();
FxExpression *Resolve(FCompileContext&);
ExpEmit Emit(VMFunctionBuilder *build);
};
class FxColorCast : public FxExpression
{
FxExpression *basex;
public:
FxColorCast(FxExpression *x);
~FxColorCast();
FxExpression *Resolve(FCompileContext&);
ExpEmit Emit(VMFunctionBuilder *build);
};
class FxSoundCast : public FxExpression
{
FxExpression *basex;
public:
FxSoundCast(FxExpression *x);
~FxSoundCast();
FxExpression *Resolve(FCompileContext&);
ExpEmit Emit(VMFunctionBuilder *build);
};
//==========================================================================
//
// FxTypeCast
//
//==========================================================================
class FxTypeCast : public FxExpression
{
FxExpression *basex;
bool NoWarn;
public:
FxTypeCast(FxExpression *x, PType *type, bool nowarn);
~FxTypeCast();
FxExpression *Resolve(FCompileContext&);
ExpEmit Emit(VMFunctionBuilder *build);
};
//==========================================================================
//
// FxSign
@ -1130,7 +1202,7 @@ class FxClassTypeCast : public FxExpression
public:
FxClassTypeCast(PClass *dtype, FxExpression *x);
FxClassTypeCast(PClassPointer *dtype, FxExpression *x);
~FxClassTypeCast();
FxExpression *Resolve(FCompileContext&);
ExpEmit Emit(VMFunctionBuilder *build);