~ubuntu-branches/ubuntu/hardy/codeblocks/hardy-backports

« back to all changes in this revision

Viewing changes to src/sdk/scripting/sqplus/SquirrelBindingsUtils.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Michael Casadevall
  • Date: 2008-07-17 04:39:23 UTC
  • Revision ID: james.westby@ubuntu.com-20080717043923-gmsy5cwkdjswghkm
Tags: upstream-8.02
ImportĀ upstreamĀ versionĀ 8.02

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "sqplus.h"
 
2
 
 
3
 
 
4
 
 
5
BOOL CreateStaticNamespace(HSQUIRRELVM v,ScriptNamespaceDecl *sn)
 
6
{
 
7
        SQInteger n = 0;
 
8
        sq_pushroottable(v);
 
9
        sq_pushstring(v,sn->name,-1);
 
10
        sq_newtable(v);
 
11
        const ScriptClassMemberDecl *members = sn->members;
 
12
        const ScriptClassMemberDecl *m = NULL;
 
13
        while(members[n].name) {
 
14
                m = &members[n];
 
15
                sq_pushstring(v,m->name,-1);
 
16
                sq_newclosure(v,m->func,0);
 
17
                sq_setparamscheck(v,m->params,m->typemask);
 
18
                sq_setnativeclosurename(v,-1,m->name);
 
19
                sq_createslot(v,-3);
 
20
                n++;
 
21
        }
 
22
        const ScriptConstantDecl *consts = sn->constants;
 
23
        const ScriptConstantDecl *c = NULL;
 
24
        n = 0;
 
25
        while(consts[n].name) {
 
26
                c = &consts[n];
 
27
                sq_pushstring(v,c->name,-1);
 
28
                switch(c->type) {
 
29
                case OT_STRING: sq_pushstring(v,c->val.s,-1);break;
 
30
                case OT_INTEGER: sq_pushinteger(v,c->val.i);break;
 
31
                case OT_FLOAT: sq_pushfloat(v,c->val.f);break;
 
32
        // C::B patch: Handle all switch cases
 
33
                default: break;
 
34
                }
 
35
                sq_createslot(v,-3);
 
36
                n++;
 
37
        }
 
38
        if(sn->delegate) {
 
39
                const ScriptClassMemberDecl *members = sn->delegate;
 
40
                const ScriptClassMemberDecl *m = NULL;
 
41
                sq_newtable(v);
 
42
                while(members[n].name) {
 
43
                        m = &members[n];
 
44
                        sq_pushstring(v,m->name,-1);
 
45
                        sq_newclosure(v,m->func,0);
 
46
                        sq_setparamscheck(v,m->params,m->typemask);
 
47
                        sq_setnativeclosurename(v,-1,m->name);
 
48
                        sq_createslot(v,-3);
 
49
                        n++;
 
50
                }
 
51
                sq_setdelegate(v,-2);
 
52
        }
 
53
        sq_createslot(v,-3);
 
54
        sq_pop(v,1);
 
55
        
 
56
        return TRUE;
 
57
}
 
58
 
 
59
BOOL CreateClass(HSQUIRRELVM v,SquirrelClassDecl *cd)
 
60
{
 
61
        SQInteger n = 0;
 
62
        SQInteger oldtop = sq_gettop(v);
 
63
        sq_pushroottable(v);
 
64
        sq_pushstring(v,cd->name,-1);
 
65
        if(cd->base) {
 
66
                sq_pushstring(v,cd->base,-1);
 
67
                if(SQ_FAILED(sq_get(v,-3))) { // Make sure the base exists if specified by cd->base name.
 
68
                        sq_settop(v,oldtop);
 
69
                        return FALSE;
 
70
                }
 
71
        }
 
72
        if(SQ_FAILED(sq_newclass(v,cd->base?1:0))) { // Will inherit from base class on stack from sq_get() above.
 
73
                sq_settop(v,oldtop);
 
74
                return FALSE;
 
75
        }
 
76
//  sq_settypetag(v,-1,(unsigned int)cd);
 
77
// C::B patch: Use pragmas only for MS compilers
 
78
#if defined(_WIN32) && defined(_MSC_VER)
 
79
#pragma warning(disable : 4311)
 
80
#endif
 
81
        sq_settypetag(v,-1,reinterpret_cast<SQUserPointer>(cd));
 
82
        const ScriptClassMemberDecl *members = cd->members;
 
83
        const ScriptClassMemberDecl *m = NULL;
 
84
  if (members) {
 
85
    while(members[n].name) {
 
86
      m = &members[n];
 
87
      sq_pushstring(v,m->name,-1);
 
88
      sq_newclosure(v,m->func,0);
 
89
      sq_setparamscheck(v,m->params,m->typemask);
 
90
      sq_setnativeclosurename(v,-1,m->name);
 
91
      sq_createslot(v,-3);
 
92
      n++;
 
93
    }
 
94
  } // if
 
95
        sq_createslot(v,-3);
 
96
        sq_pop(v,1);
 
97
        return TRUE;
 
98
}
 
99
 
 
100
BOOL CreateNativeClassInstance(HSQUIRRELVM v,const SQChar *classname,SQUserPointer ud,SQRELEASEHOOK hook)
 
101
{
 
102
        SQInteger oldtop = sq_gettop(v);
 
103
        sq_pushroottable(v);
 
104
        sq_pushstring(v,classname,-1);
 
105
        if(SQ_FAILED(sq_rawget(v,-2))){ // Get the class (created with sq_newclass()).
 
106
                sq_settop(v,oldtop);
 
107
                return FALSE;
 
108
        }
 
109
        //sq_pushroottable(v);
 
110
        if(SQ_FAILED(sq_createinstance(v,-1))) {
 
111
                sq_settop(v,oldtop);
 
112
                return FALSE;
 
113
        }
 
114
        sq_remove(v,-3); //removes the root table
 
115
        sq_remove(v,-2); //removes the class
 
116
        if(SQ_FAILED(sq_setinstanceup(v,-1,ud))) {
 
117
                sq_settop(v,oldtop);
 
118
                return FALSE;
 
119
        }
 
120
        sq_setreleasehook(v,-1,hook);
 
121
        return TRUE;
 
122
}