typedef struct sSpiderScript tSpiderScript;
typedef struct sSpiderVariant tSpiderVariant;
+typedef struct sSpiderNamespace tSpiderNamespace;
typedef struct sSpiderFunction tSpiderFunction;
typedef struct sSpiderValue tSpiderValue;
typedef struct sSpiderObjectDef tSpiderObjectDef;
*/
enum eSpiderScript_DataTypes
{
- SS_DATATYPE_UNDEF, //!< Undefined
- SS_DATATYPE_NULL, //!< NULL (Probably will never be used)
- SS_DATATYPE_DYNAMIC, //!< Dynamically typed variable (will this be used?)
- SS_DATATYPE_OPAQUE, //!< Opaque data type
- SS_DATATYPE_OBJECT, //!< Object reference
- SS_DATATYPE_ARRAY, //!< Array
- SS_DATATYPE_INTEGER, //!< Integer (64-bits)
+ /**
+ * \brief Undefined data
+ * \note Default type of an undefined dynamic variable
+ */
+ SS_DATATYPE_UNDEF,
+ /**
+ * \brief Dynamically typed variable
+ * \note Used to dentote a non-fixed type for function parameters
+ */
+ SS_DATATYPE_DYNAMIC,
+ /**
+ * \brief Opaque Data Pointer
+ *
+ * Opaque data types are used for resource handles or for system buffers.
+ */
+ SS_DATATYPE_OPAQUE,
+ /**
+ * \brief Object reference
+ *
+ * A reference to a SpiderScript class instance. Can be accessed
+ * using the -> operator.
+ */
+ SS_DATATYPE_OBJECT,
+ /**
+ * \brief Array data type
+ */
+ SS_DATATYPE_ARRAY,
+ /**
+ * \brief Integer datatype
+ *
+ * 64-bit integer
+ */
+ SS_DATATYPE_INTEGER,
SS_DATATYPE_REAL, //!< Real Number (double)
SS_DATATYPE_STRING, //!< String
NUM_SS_DATATYPES
};
+/**
+ * \brief Namespace definition
+ */
+struct sSpiderNamespace
+{
+ tSpiderNamespace *Next;
+
+ tSpiderNamespace *FirstChild;
+
+ tSpiderFunction *Functions;
+
+ tSpiderObjectDef *Classes;
+
+ int NConstants; //!< Number of constants
+ tSpiderValue *Constants; //!< Number of constants
+
+ const char Name[];
+};
+
/**
* \brief Variant of SpiderScript
*/
{
const char *Name; // Just for debug
- int bDyamicTyped; //!< Use static typing
+ int bDyamicTyped; //!< Use dynamic typing
+ int bImplicitCasts; //!< Allow implicit casts (casts to lefthand side)
tSpiderFunction *Functions; //!< Functions (Linked List)
int NConstants; //!< Number of constants
tSpiderValue *Constants; //!< Number of constants
+
+ tSpiderNamespace RootNamespace;
};
/**
int ReferenceCount; //!< Reference count
union {
- uint64_t Integer; //!< Integer data
+ int64_t Integer; //!< Integer data
double Real; //!< Real Number data
/**
* \brief String data
/**
* \brief Object type name
*/
- const char* const Name;
+ const char * const Name;
/**
* \brief Construct an instance of the object
* \param NArgs Number of arguments
- * \param Args Argument count
+ * \param Args Argument array
* \return Pointer to an object instance (which must be fully valid)
* \retval NULL Invalid parameter (usually, actually just a NULL value)
* \retval ERRPTR Invalid parameter count
*/
- tSpiderObject *(*Constructor)(int NArgs, tSpiderValue *Args);
+ tSpiderObject *(*Constructor)(int NArgs, tSpiderValue **Args);
/**
* \brief Clean up and destroy the object
*/
void (*Destructor)(tSpiderObject *This);
+ tSpiderFunction *Methods; //!< Method Definitions (linked list)
+
int NAttributes; //!< Number of attributes
//! Attribute definitions
struct {
const char *Name; //!< Attribute Name
int bReadOnly; //!< Allow writes to the attribute?
- } *AttributeDefs;
-
-
- int NMethods; //!< Number of methods
- tSpiderFunction *Methods; //!< Method Definitions
+ } AttributeDefs[];
};
/**
struct sSpiderObject
{
tSpiderObjectDef *Type; //!< Object Type
- int NReferences; //!< Number of references
+ int ReferenceCount; //!< Number of references
void *OpaqueData; //!< Pointer to the end of the \a Attributes array
tSpiderValue *Attributes[]; //!< Attribute Array
};
*/
extern tSpiderScript *SpiderScript_ParseFile(tSpiderVariant *Variant, const char *Filename);
/**
- * \brief Execute a method from a script
+ * \brief Execute a function from a script
* \param Script Script to run
* \param Function Name of function to run ("" for the 'main')
* \return Return value
*/
-extern tSpiderValue *SpiderScript_ExecuteMethod(tSpiderScript *Script,
- const char *Function,
+extern tSpiderValue *SpiderScript_ExecuteFunction(tSpiderScript *Script,
+ tSpiderNamespace *Namespace, const char *Function,
int NArguments, tSpiderValue **Arguments
);
*/
extern void SpiderScript_Free(tSpiderScript *Script);
+extern tSpiderObject *SpiderScript_AllocateObject(tSpiderObjectDef *Class, int ExtraBytes);
+
/**
* \name tSpiderValue Manipulation functions
* \{
extern tSpiderValue *SpiderScript_CreateString(int Length, const char *Data);
extern tSpiderValue *SpiderScript_CastValueTo(int Type, tSpiderValue *Source);
extern int SpiderScript_IsValueTrue(tSpiderValue *Value);
+extern void SpiderScript_FreeValue(tSpiderValue *Value);
extern char *SpiderScript_DumpValue(tSpiderValue *Value);
/**
* \}