00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#ifndef __KSCRIPT_FUNC_H__
00021
#define __KSCRIPT_FUNC_H__
00022
00023
#include "koscript_value.h"
00024
#include "koscript_context.h"
00025
#include "koscript_ptr.h"
00026
#include "koscript_parsenode.h"
00027
00028
#include <qshared.h>
00029
00030
class KSParseNode;
00031
class KSInterpreter;
00032
00033 KSModule::Ptr ksCreateModule_KScript(
KSInterpreter* );
00034
00035
class KSFunction :
public QShared
00036 {
00037
public:
00038
typedef KSSharedPtr<KSFunction> Ptr;
00039
00040 KSFunction(
KSModule* m ) : QShared(), m_module( m ) { }
00041
00042
virtual bool call( KSContext& context ) = 0;
00043
virtual QString name() const = 0;
00044
00045
KSModule* module() {
return m_module; }
00046
00047
private:
00048
KSModule* m_module;
00049 };
00050
00051
typedef bool (*KSBuiltinFuncPtr)( KSContext& context );
00052
00053
class KSBuiltinFunction :
public KSFunction
00054 {
00055
public:
00056 KSBuiltinFunction(
KSModule* m,
const QString& _name, KSBuiltinFuncPtr func ) : KSFunction( m ) { m_func = func; m_name = _name; }
00057
virtual ~KSBuiltinFunction() { }
00058
00059
virtual bool call( KSContext& context ) {
return m_func( context ); }
00060
virtual QString name()
const {
return m_name; }
00061
00062
private:
00063 KSBuiltinFuncPtr m_func;
00064
QString m_name;
00065 };
00066
00067
class KSScriptFunction :
public KSFunction
00068 {
00069
public:
00075 KSScriptFunction(
KSModule* m, KSParseNode* node ) : KSFunction( m ) { m_node = node; }
00076
00077
virtual bool call( KSContext& context );
00078
virtual QString name()
const {
return m_node->getIdent(); }
00079
00080
private:
00081 KSParseNode* m_node;
00082 };
00083
00084
#endif