annotate dmdscript_tango/dnative.d @ 0:55c2951c07be

initial, files origin, premoved tree
author saaadel
date Sun, 24 Jan 2010 12:34:47 +0200
parents
children 8363a4bf6a8f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
1
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
2 /* Digital Mars DMDScript source code.
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
3 * Copyright (c) 2000-2002 by Chromium Communications
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
4 * D version Copyright (c) 2004-2005 by Digital Mars
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
5 * All Rights Reserved
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
6 * written by Walter Bright
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
7 * www.digitalmars.com
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
8 * Use at your own risk. There is no warranty, express or implied.
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
9 * License for redistribution is by the GNU General Public License in gpl.txt.
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
10 *
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
11 * A binary, non-exclusive license for commercial use can be
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
12 * purchased from www.digitalmars.com/dscript/buy.html.
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
13 *
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
14 * DMDScript is implemented in the D Programming Language,
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
15 * www.digitalmars.com/d/
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
16 *
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
17 * For a C++ implementation of DMDScript, including COM support,
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
18 * see www.digitalmars.com/dscript/cppscript.html.
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
19 */
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
20
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
21
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
22 module dmdscript.dnative;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
23
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
24 import dmdscript.script;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
25 import dmdscript.dobject;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
26 import dmdscript.dfunction;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
27 import dmdscript.value;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
28
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
29 /******************* DnativeFunction ****************************/
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
30
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
31 alias void *function(Dobject pthis, CallContext *cc, Dobject othis, Value* ret, Value[] arglist) PCall;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
32
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
33 struct NativeFunctionData
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
34 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
35 d_string* string;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
36 PCall pcall;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
37 d_uint32 length;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
38 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
39
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
40 class DnativeFunction : Dfunction
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
41 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
42 PCall pcall;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
43
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
44 this(PCall func, tchar[] name, d_uint32 length)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
45 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
46 super(length);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
47 this.name = name;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
48 pcall = func;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
49 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
50
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
51 this(PCall func, tchar[] name, d_uint32 length, Dobject o)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
52 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
53 super(length, o);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
54 this.name = name;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
55 pcall = func;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
56 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
57
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
58 void* Call(CallContext *cc, Dobject othis, Value* ret, Value[] arglist)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
59 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
60 return (*pcall)(this, cc, othis, ret, arglist);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
61 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
62
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
63 /*********************************
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
64 * Initalize table of native functions designed
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
65 * to go in as properties of o.
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
66 */
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
67
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
68 static void init(Dobject o, NativeFunctionData[] nfd, uint attributes)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
69 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
70 Dobject f = Dfunction.getPrototype();
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
71
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
72 for (size_t i = 0; i < nfd.length; i++)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
73 { NativeFunctionData* n = &nfd[i];
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
74
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
75 o.Put(*n.string,
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
76 new DnativeFunction(n.pcall, *n.string, n.length, f),
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
77 attributes);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
78 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
79 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
80 }