annotate dmdscript_tango/protoerror.d @ 5:4adfb4e05382 default tip

(no commit message)
author saaadel
date Wed, 17 Mar 2010 01:01:05 +0200
parents 8363a4bf6a8f
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-2006 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.protoerror;
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.value;
8363a4bf6a8f rename package: dmdscript to dmdscript_tango
saaadel
parents: 0
diff changeset
27 import dmdscript_tango.threadcontext;
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.dfunction;
8363a4bf6a8f rename package: dmdscript to dmdscript_tango
saaadel
parents: 0
diff changeset
30 import dmdscript_tango.property;
0
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
31
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
32 int foo; // cause this module to be linked in
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
33
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
34 /* ===================== D0_constructor ==================== */
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
35
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
36 class D0_constructor : Dfunction
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
37 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
38 d_string text_d1;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
39 Dobject function(d_string) newD0;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
40
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
41 this(ThreadContext *tc, d_string text_d1, Dobject function(d_string) newD0)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
42 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
43 super(1, tc.Dfunction_prototype);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
44 this.text_d1 = text_d1;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
45 this.newD0 = newD0;
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 void *Construct(CallContext *cc, Value *ret, Value[] arglist)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
49 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
50 // ECMA 15.11.7.2
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
51 Value* m;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
52 Dobject o;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
53 tchar[] s;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
54
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
55 m = (arglist.length) ? &arglist[0] : &vundefined;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
56 // ECMA doesn't say what we do if m is undefined
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
57 if (m.isUndefined())
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
58 s = text_d1;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
59 else
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
60 s = m.toString();
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
61 o = (*newD0)(s);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
62 ret.putVobject(o);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
63 return null;
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 void *Call(CallContext *cc, Dobject othis, Value* ret, Value[] arglist)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
67 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
68 // ECMA v3 15.11.7.1
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
69 return Construct(cc, ret, arglist);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
70 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
71 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
72
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
73
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
74 template proto(alias TEXT_D1)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
75 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
76
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
77 /* ===================== D0_prototype ==================== */
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
78
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
79 class D0_prototype : D0
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
80 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
81 this(ThreadContext *tc)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
82 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
83 super(tc.Derror_prototype);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
84
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
85 tchar[] s;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
86
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
87 Put(TEXT_constructor, tc.ctorTable[TEXT_D1], DontEnum);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
88 Put(TEXT_name, TEXT_D1, 0);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
89 s = TEXT_D1 ~ ".prototype.message";
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
90 Put(TEXT_message, s, 0);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
91 Put(TEXT_description, s, 0);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
92 Put(TEXT_number, cast(d_number)0, 0);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
93 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
94 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
95
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
96 /* ===================== D0 ==================== */
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
97
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
98 class D0 : Dobject
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
99 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
100 ErrInfo errinfo;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
101
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
102 this(Dobject prototype)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
103 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
104 super(prototype);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
105 classname = TEXT_Error;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
106 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
107
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
108 this(tchar[] m)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
109 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
110 this(D0.getPrototype());
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
111 Put(TEXT_message, m, 0);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
112 Put(TEXT_description, m, 0);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
113 Put(TEXT_number, cast(d_number)0, 0);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
114 errinfo.message = m;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
115 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
116
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
117 this(ErrInfo *perrinfo)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
118 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
119 this(perrinfo.message);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
120 errinfo = *perrinfo;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
121 Put(TEXT_number, cast(d_number)perrinfo.code, 0);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
122 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
123
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
124 void getErrInfo(ErrInfo *perrinfo, int linnum)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
125 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
126 if (linnum && errinfo.linnum == 0)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
127 errinfo.linnum = linnum;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
128 if (perrinfo)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
129 *perrinfo = errinfo;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
130 //writefln("getErrInfo(linnum = %d), errinfo.linnum = %d", linnum, errinfo.linnum);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
131 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
132
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
133 static Dfunction getConstructor()
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
134 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
135 ThreadContext *tc = ThreadContext.getThreadContext();
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
136 assert(tc);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
137 return tc.ctorTable[TEXT_D1];
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
138 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
139
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
140 static Dobject getPrototype()
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
141 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
142 ThreadContext *tc = ThreadContext.getThreadContext();
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
143 assert(tc);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
144 return tc.protoTable[TEXT_D1];
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
145 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
146
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
147 static Dobject newD0(d_string s)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
148 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
149 return new D0(s);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
150 }
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
151
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
152 static void init(ThreadContext *tc)
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
153 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
154 Dfunction constructor = new D0_constructor(tc, TEXT_D1, &newD0);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
155 tc.ctorTable[TEXT_D1] = constructor;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
156
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
157 Dobject prototype = new D0_prototype(tc);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
158 tc.protoTable[TEXT_D1] = prototype;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
159
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
160 constructor.Put(TEXT_prototype, prototype, DontEnum | DontDelete | ReadOnly);
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
161 }
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
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
165 alias proto!(TEXT_SyntaxError) syntaxerror;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
166 alias proto!(TEXT_EvalError) evalerror;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
167 alias proto!(TEXT_ReferenceError) referenceerror;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
168 alias proto!(TEXT_RangeError) rangeerror;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
169 alias proto!(TEXT_TypeError) typeerror;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
170 alias proto!(TEXT_URIError) urierror;
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 * Register initializer for each class.
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
174 */
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
175
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
176 static this()
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
177 {
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
178 ThreadContext.initTable ~= &syntaxerror.D0.init;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
179 ThreadContext.initTable ~= &evalerror.D0.init;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
180 ThreadContext.initTable ~= &referenceerror.D0.init;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
181 ThreadContext.initTable ~= &rangeerror.D0.init;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
182 ThreadContext.initTable ~= &typeerror.D0.init;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
183 ThreadContext.initTable ~= &urierror.D0.init;
55c2951c07be initial, files origin, premoved tree
saaadel
parents:
diff changeset
184 }