annotate dmdscript_tango/darguments.d @ 3:8363a4bf6a8f

rename package: dmdscript to dmdscript_tango
author saaadel
date Sun, 24 Jan 2010 18:33:05 +0200
parents 55c2951c07be
children
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
3
8363a4bf6a8f rename package: dmdscript to dmdscript_tango
saaadel
parents: 0
diff changeset
22 module dmdscript_tango.darguments;
0
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
23
3
8363a4bf6a8f rename package: dmdscript to dmdscript_tango
saaadel
parents: 0
diff changeset
24 import dmdscript_tango.script;
8363a4bf6a8f rename package: dmdscript to dmdscript_tango
saaadel
parents: 0
diff changeset
25 import dmdscript_tango.dobject;
8363a4bf6a8f rename package: dmdscript to dmdscript_tango
saaadel
parents: 0
diff changeset
26 import dmdscript_tango.identifier;
8363a4bf6a8f rename package: dmdscript to dmdscript_tango
saaadel
parents: 0
diff changeset
27 import dmdscript_tango.value;
8363a4bf6a8f rename package: dmdscript to dmdscript_tango
saaadel
parents: 0
diff changeset
28 import dmdscript_tango.text;
8363a4bf6a8f rename package: dmdscript to dmdscript_tango
saaadel
parents: 0
diff changeset
29 import dmdscript_tango.property;
0
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
30
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
31 // The purpose of Darguments is to implement "value sharing"
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
32 // per ECMA 10.1.8 between the activation object and the
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
33 // arguments object.
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
34 // We implement it by forwarding the property calls from the
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
35 // arguments object to the activation object.
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
36
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
37 class Darguments : Dobject
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
38 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
39 Dobject actobj; // activation object
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
40 Identifier*[] parameters;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
41
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
42 int isDarguments() { return true; }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
43
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
44 this(Dobject caller, Dobject callee, Dobject actobj,
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
45 Identifier*[] parameters, Value[] arglist)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
46
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
47 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
48 super(Dobject.getPrototype());
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
49
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
50 this.actobj = actobj;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
51 this.parameters = parameters;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
52
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
53 if (caller)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
54 Put(TEXT_caller, caller, DontEnum);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
55 else
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
56 Put(TEXT_caller, &vnull, DontEnum);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
57
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
58 Put(TEXT_callee, callee, DontEnum);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
59 Put(TEXT_length, arglist.length, DontEnum);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
60
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
61 for (uint a = 0; a < arglist.length; a++)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
62 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
63 Put(a, &arglist[a], DontEnum);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
64 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
65 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
66
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
67 Value* Get(d_string PropertyName)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
68 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
69 d_uint32 index;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
70
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
71 return (StringToIndex(PropertyName, index) && index < parameters.length)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
72 ? actobj.Get(index)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
73 : Dobject.Get(PropertyName);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
74 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
75
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
76 Value* Get(d_uint32 index)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
77 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
78 return (index < parameters.length)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
79 ? actobj.Get(index)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
80 : Dobject.Get(index);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
81 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
82
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
83 Value* Get(d_uint32 index, Value* vindex)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
84 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
85 return (index < parameters.length)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
86 ? actobj.Get(index, vindex)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
87 : Dobject.Get(index, vindex);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
88 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
89
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
90 Value* Put(d_string PropertyName, Value* value, uint attributes)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
91 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
92 d_uint32 index;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
93
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
94 if (StringToIndex(PropertyName, index) && index < parameters.length)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
95 return actobj.Put(PropertyName, value, attributes);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
96 else
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
97 return Dobject.Put(PropertyName, value, attributes);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
98 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
99
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
100 Value* Put(Identifier* key, Value* value, uint attributes)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
101 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
102 d_uint32 index;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
103
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
104 if (StringToIndex(key.value.string, index) && index < parameters.length)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
105 return actobj.Put(key, value, attributes);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
106 else
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
107 return Dobject.Put(key, value, attributes);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
108 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
109
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
110 Value* Put(d_string PropertyName, Dobject o, uint attributes)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
111 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
112 d_uint32 index;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
113
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
114 if (StringToIndex(PropertyName, index) && index < parameters.length)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
115 return actobj.Put(PropertyName, o, attributes);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
116 else
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
117 return Dobject.Put(PropertyName, o, attributes);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
118 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
119
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
120 Value* Put(d_string PropertyName, d_number n, uint attributes)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
121 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
122 d_uint32 index;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
123
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
124 if (StringToIndex(PropertyName, index) && index < parameters.length)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
125 return actobj.Put(PropertyName, n, attributes);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
126 else
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
127 return Dobject.Put(PropertyName, n, attributes);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
128 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
129
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
130 Value* Put(d_uint32 index, Value* vindex, Value* value, uint attributes)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
131 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
132 if (index < parameters.length)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
133 return actobj.Put(index, vindex, value, attributes);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
134 else
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
135 return Dobject.Put(index, vindex, value, attributes);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
136 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
137
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
138 Value* Put(d_uint32 index, Value* value, uint attributes)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
139 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
140 if (index < parameters.length)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
141 return actobj.Put(index, value, attributes);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
142 else
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
143 return Dobject.Put(index, value, attributes);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
144 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
145
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
146 int CanPut(d_string PropertyName)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
147 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
148 d_uint32 index;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
149
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
150 return (StringToIndex(PropertyName, index) && index < parameters.length)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
151 ? actobj.CanPut(PropertyName)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
152 : Dobject.CanPut(PropertyName);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
153 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
154
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
155 int HasProperty(d_string PropertyName)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
156 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
157 d_uint32 index;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
158
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
159 return (StringToIndex(PropertyName, index) && index < parameters.length)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
160 ? actobj.HasProperty(PropertyName)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
161 : Dobject.HasProperty(PropertyName);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
162 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
163
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
164 int Delete(d_string PropertyName)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
165 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
166 d_uint32 index;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
167
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
168 return (StringToIndex(PropertyName, index) && index < parameters.length)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
169 ? actobj.Delete(PropertyName)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
170 : Dobject.Delete(PropertyName);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
171 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
172 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
173