經(jīng)歷了大約一個(gè)多星期的挑選,
Vczh Library++3.0托管語言的語法樹大約就定下來了。跟本地語言有一個(gè)缺省的語法叫NativeX一樣,這次的語法就叫ManagedX了。當(dāng)然ManagedX只是設(shè)計(jì)來直接反映托管語言語法樹的一門語言,如果愿意的話,這個(gè)語法樹還能被編譯成其他長得像(嗯,只能是像,因?yàn)楸仨毷峭泄艿模蓄悰]指針等)Basic啦Pascal那樣子的東西。
我將ManagedX的語法分為兩部分。第一部分是基礎(chǔ)部分,第二部分則是擴(kuò)展部分。將他們分開的依據(jù)就是,一個(gè)基于擴(kuò)展部分的程序,總是可以被重寫為一個(gè)功能完全一致但是僅基于基礎(chǔ)部分的比較復(fù)雜的程序。舉一個(gè)簡單的例子。我們知道lambda表達(dá)式在一門面向?qū)ο笳Z言中并不是必需的,它只是一個(gè)語法糖。如果我們在面向?qū)ο笳Z言中把函數(shù)指針統(tǒng)統(tǒng)抽象成一個(gè)基類或者接口(就跟C#的Delegate一樣)的話,一個(gè)lambda表達(dá)式總是可以被表達(dá)成一個(gè)新的類型,然后只需要重新組織一下生成該lambda表達(dá)式的函數(shù)的局部變量,就可以把lambda表達(dá)是去掉了。當(dāng)然lambda表達(dá)式作為一個(gè)語法來說是必需的,因?yàn)樗蟠筇岣吡碎_發(fā)效率。但是對于編譯過程來說又不是必需的,因?yàn)樗偸强梢杂米詣又貙懙姆椒▉砣サ簟?br />
因此ManagedX的編譯過程就比較清晰了:
1、我們接受一個(gè)基于擴(kuò)展部分的程序,然后經(jīng)過第一輪的語法分析,得到語法樹上面所有節(jié)點(diǎn)的類型信息和引用信息。
2、根據(jù)分析出來的信息,將該程序重寫為僅基于基礎(chǔ)部分的程序。在重寫的過程中會使得信息不會丟失(特別是ManagedX支持反射,而反射卻可以支持?jǐn)U展部分,所以需要做很多小動作來維持重寫前后的程序運(yùn)行上的一致性)
3、對重寫出來的新程序重新進(jìn)行語法分析。
4、根據(jù)分析出來的信息,將它編譯成
NativeX。
從這里打架就可以知道為什么我之前要做NativeX了,因?yàn)閷?shí)現(xiàn)了NativeX之后,以后實(shí)現(xiàn)很多新的復(fù)雜語言會十分省事。運(yùn)行時(shí)的虛擬機(jī)做好了,函數(shù)庫也有了一部分,還有基于二進(jìn)制編譯結(jié)果的多文件支持啦、泛型啦、concept mapping啦、外接函數(shù)插件啦、還有將來會做的debugger,和編譯到X86的過程,都可以直接被新的語言所享受。在這里ManagedX的開發(fā)過程就僅僅是一個(gè)前端的開發(fā)過程了,因?yàn)楹蠖说牡谝浑A段已經(jīng)完成了,至少可以直接使用。
下面貼一下ManagedX那將近900行的語法樹:(Library\Scripting\ManagedLanguage\ManagedLanguageExpression.h)
1 /***********************************************************************
2 Vczh Library++ 3.0
3 Developer: 陳梓瀚(vczh)
4 Scripting::ManagedLanguage
5
6 Classes:
7 ***********************************************************************/
8
9 #ifndef VCZH_SCRIPTING_MANAGEDLANGUAGE_MANAGEDLANGUAGEEXPRESSION
10 #define VCZH_SCRIPTING_MANAGEDLANGUAGE_MANAGEDLANGUAGEEXPRESSION
11
12 #include "..\..\Pointer.h"
13 #include "..\..\String.h"
14 #include "..\..\Collections\List.h"
15 #include "..\..\Collections\Dictionary.h"
16 #include "..\Common\AlgorithmDeclaration.h"
17
18 namespace vl
19 {
20 namespace scripting
21 {
22 namespace managedlanguage
23 {
24 struct ManagedPosition
25 {
26 vint start;
27 vint lineStart;
28 vint lineIndex;
29 vint codeIndex;
30
31 ManagedPosition();
32 };
33
34 class ManagedLanguageElement : public Object, private NotCopyable
35 {
36 public:
37 ManagedPosition position;
38 };
39
40 /***********************************************************************
41 Basic Constructions
42 ***********************************************************************/
43
44 class ManagedType : public ManagedLanguageElement
45 {
46 public:
47 ALGORITHM_TARGET_ROOT(ManagedType)
48 };
49
50 class ManagedExpression : public ManagedLanguageElement
51 {
52 public:
53 ALGORITHM_TARGET_ROOT(ManagedExpression)
54 };
55
56 class ManagedStatement : public ManagedLanguageElement
57 {
58 public:
59 ALGORITHM_TARGET_ROOT(ManagedStatement)
60 };
61
62 class ManagedDeclaration : public ManagedLanguageElement
63 {
64 public:
65 ALGORITHM_TARGET_ROOT(ManagedDeclaration)
66 };
67
68 class ManagedProgram : public ManagedLanguageElement
69 {
70 public:
71 collections::List<Ptr<ManagedDeclaration>> declarations;
72 };
73
74 /***********************************************************************
75 Extended Constructions
76 ***********************************************************************/
77
78 class ManagedExtendedType : public ManagedType
79 {
80 public:
81 ALGORITHM_ACCEPT_DECLARATION(ManagedType)
82
83 ALGORITHM_TARGET_ROOT(ManagedExtendedType)
84 };
85
86 class ManagedExtendedExpression : public ManagedExpression
87 {
88 public:
89 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
90
91 ALGORITHM_TARGET_ROOT(ManagedExtendedExpression)
92 };
93
94 class ManagedExtendedStatement : public ManagedStatement
95 {
96 public:
97 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
98
99 ALGORITHM_TARGET_ROOT(ManagedExtendedStatement)
100 };
101
102 class ManagedExtendedDeclaration : public ManagedDeclaration
103 {
104 public:
105 ALGORITHM_ACCEPT_DECLARATION(ManagedDeclaration)
106
107 ALGORITHM_TARGET_ROOT(ManagedExtendedDeclaration)
108 };
109
110 /***********************************************************************
111 Basic Types
112 ***********************************************************************/
113
114 class ManagedGenericArgumentType : public ManagedType
115 {
116 public:
117 ALGORITHM_ACCEPT_DECLARATION(ManagedType)
118
119 WString name;
120 };
121
122 class ManagedReferencedType : public ManagedType
123 {
124 public:
125 ALGORITHM_ACCEPT_DECLARATION(ManagedType)
126
127 WString name;
128 };
129
130 class ManagedMemberType : public ManagedType
131 {
132 public:
133 ALGORITHM_ACCEPT_DECLARATION(ManagedType)
134
135 Ptr<ManagedType> operand;
136 WString member;
137 };
138
139 class ManagedInstantiatedGenericType : public ManagedType
140 {
141 public:
142 ALGORITHM_ACCEPT_DECLARATION(ManagedType)
143
144 Ptr<ManagedType> elementType;
145 collections::List<Ptr<ManagedType>> argumentTypes;
146 };
147
148 #define MANAGED_TYPE_TARGETS(P, F)\
149 F(P, ManagedGenericArgumentType)\
150 F(P, ManagedReferencedType)\
151 F(P, ManagedMemberType)\
152 F(P, ManagedInstantiatedGenericType)\
153 F(P, ManagedExtendedType)\
154
155 DEFINE_ALGORITHM_INTERFACE(ManagedType, MANAGED_TYPE_TARGETS)
156
157 /***********************************************************************
158 Extended Types
159 ***********************************************************************/
160
161 class ManagedArrayType : public ManagedExtendedType
162 {
163 public:
164 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedType)
165
166 Ptr<ManagedType> elementType;
167 int dimensionCount;
168 };
169
170 class ManagedFunctionType : public ManagedExtendedType
171 {
172 public:
173 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedType)
174
175 Ptr<ManagedType> returnType;
176 collections::List<Ptr<ManagedType>> parameterTypes;
177 };
178
179 class ManagedEventType : public ManagedExtendedType
180 {
181 public:
182 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedType)
183
184 Ptr<ManagedType> functionType;
185 };
186
187 class ManagedAutoReferType : public ManagedExtendedType
188 {
189 public:
190 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedType)
191 };
192
193 #define MANAGED_EXTENDED_TYPE_TARGETS(P, F)\
194 F(P, ManagedArrayType)\
195 F(P, ManagedFunctionType)\
196 F(P, ManagedEventType)\
197 F(P, ManagedAutoReferType)\
198
199 DEFINE_ALGORITHM_INTERFACE(ManagedExtendedType, MANAGED_EXTENDED_TYPE_TARGETS)
200
201 /***********************************************************************
202 Basic Expressions
203 ***********************************************************************/
204
205 class ManagedPrimitiveExpression : public ManagedExpression
206 {
207 };
208
209 class ManagedNullExpression : public ManagedPrimitiveExpression
210 {
211 public:
212 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
213 };
214
215 class ManagedIntegerExpression : public ManagedPrimitiveExpression
216 {
217 public:
218 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
219
220 bool sign;
221 union
222 {
223 signed __int64 signedInteger;
224 unsigned __int64 unsignedInteger;
225 } value;
226 };
227
228 class ManagedFloatExpression : public ManagedPrimitiveExpression
229 {
230 public:
231 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
232
233 bool doublePrecision;
234 double value;
235 };
236
237 class ManagedBooleanExpression : public ManagedPrimitiveExpression
238 {
239 public:
240 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
241
242 bool value;
243 };
244
245 class ManagedCharExpression : public ManagedPrimitiveExpression
246 {
247 public:
248 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
249
250 wchar_t value;
251 };
252
253 class ManagedStringExpression : public ManagedPrimitiveExpression
254 {
255 public:
256 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
257
258 WString value;
259 };
260
261 class ManagedReferenceExpression : public ManagedExpression
262 {
263 public:
264 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
265
266 WString name;
267 };
268
269 class ManagedMemberExpression : public ManagedExpression
270 {
271 public:
272 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
273
274 Ptr<ManagedExpression> operand;
275 WString member;
276 };
277
278 class ManagedInstanciatedExpression : public ManagedExpression
279 {
280 public:
281 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
282
283 Ptr<ManagedExpression> operand;
284 collections::List<Ptr<ManagedType>> argumentTypes;
285 };
286
287 class ManagedInvokeExpression : public ManagedExpression
288 {
289 public:
290 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
291
292 Ptr<ManagedExpression> function;
293 collections::List<Ptr<ManagedExpression>> arguments;
294 collections::List<WString> defaultParameterNames;
295 collections::List<Ptr<ManagedExpression>> defaultParameterValues;
296 };
297
298 class ManagedNewExpression : public ManagedExpression
299 {
300 public:
301 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
302
303 Ptr<ManagedType> objectType;
304 collections::List<Ptr<ManagedExpression>> arguments;
305 collections::List<WString> defaultParameterNames;
306 collections::List<Ptr<ManagedExpression>> defaultParameterValues;
307 collections::List<WString> propertyNames;
308 collections::List<Ptr<ManagedExpression>> propertyValues;
309 };
310
311 class ManagedFunctionResultExpression : public ManagedExpression
312 {
313 public:
314 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
315 };
316
317 class ManagedCastingExpression : public ManagedExpression
318 {
319 public:
320 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
321
322 Ptr<ManagedExpression> operand;
323 Ptr<ManagedType> type;
324 };
325
326 class ManagedThisExpression : public ManagedExpression
327 {
328 public:
329 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
330 };
331
332 class ManagedBaseExpression : public ManagedExpression
333 {
334 public:
335 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
336 };
337
338 class ManagedAssignmentExpression : public ManagedExpression
339 {
340 public:
341 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
342 };
343
344 #define MANAGED_EXPRESSION_TARGETS(P, F)\
345 F(P, ManagedNullExpression)\
346 F(P, ManagedIntegerExpression)\
347 F(P, ManagedFloatExpression)\
348 F(P, ManagedBooleanExpression)\
349 F(P, ManagedCharExpression)\
350 F(P, ManagedStringExpression)\
351 F(P, ManagedReferenceExpression)\
352 F(P, ManagedMemberExpression)\
353 F(P, ManagedInstanciatedExpression)\
354 F(P, ManagedInvokeExpression)\
355 F(P, ManagedNewExpression)\
356 F(P, ManagedFunctionResultExpression)\
357 F(P, ManagedCastingExpression)\
358 F(P, ManagedThisExpression)\
359 F(P, ManagedBaseExpression)\
360 F(P, ManagedAssignmentExpression)\
361 F(P, ManagedExtendedExpression)\
362
363 DEFINE_ALGORITHM_INTERFACE(ManagedExpression, MANAGED_EXPRESSION_TARGETS)
364
365 /***********************************************************************
366 Extended Expressions
367 ***********************************************************************/
368
369 class ManagedLambdaExpression : public ManagedExtendedExpression
370 {
371 public:
372 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedExpression)
373
374 collections::List<Ptr<ManagedType>> parameterTypes;
375 collections::List<WString> parameterNames;
376 Ptr<ManagedType> returnType;
377 Ptr<ManagedStatement> body;
378 };
379
380 class ManagedChoiceExpression : public ManagedExtendedExpression
381 {
382 public:
383 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedExpression)
384
385 Ptr<ManagedExpression> condition;
386 Ptr<ManagedExpression> trueExpression;
387 Ptr<ManagedExpression> falseExpression;
388 };
389
390 class ManagedNullChoiceExpression : public ManagedExtendedExpression
391 {
392 public:
393 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedExpression)
394
395 Ptr<ManagedExpression> valueExpression;
396 Ptr<ManagedExpression> candidateExpression;
397 };
398
399 class ManagedTypeofExpression : public ManagedExtendedExpression
400 {
401 public:
402 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedExpression)
403
404 Ptr<ManagedType> type;
405 };
406
407 #define MANAGED_EXTENDED_EXPRESSION_TARGETS(P, F)\
408 F(P, ManagedLambdaExpression)\
409 F(P, ManagedChoiceExpression)\
410 F(P, ManagedNullChoiceExpression)\
411 F(P, ManagedTypeofExpression)\
412
413 DEFINE_ALGORITHM_INTERFACE(ManagedExtendedExpression, MANAGED_EXTENDED_EXPRESSION_TARGETS)
414
415 /***********************************************************************
416 Basic Statements
417 ***********************************************************************/
418
419 class ManagedEmptyStatement : public ManagedStatement
420 {
421 public:
422 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
423 };
424
425 class ManagedCompositeStatement : public ManagedStatement
426 {
427 public:
428 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
429
430 collections::List<Ptr<ManagedStatement>> statements;
431 };
432
433 class ManagedExpressionStatement : public ManagedStatement
434 {
435 public:
436 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
437
438 Ptr<ManagedExpression> expression;
439 };
440
441 class ManagedVariableStatement : public ManagedStatement
442 {
443 public:
444 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
445
446 bool constant;
447 Ptr<ManagedType> type;
448 WString name;
449 Ptr<ManagedExpression> initializer;
450 };
451
452 class ManagedIfStatement : public ManagedStatement
453 {
454 public:
455 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
456
457 Ptr<ManagedExpression> condition;
458 Ptr<ManagedStatement> trueStatement;
459 Ptr<ManagedStatement> falseStatement;
460 };
461
462 class ManagedWhileStatement : public ManagedStatement
463 {
464 public:
465 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
466
467 Ptr<ManagedExpression> beginCondition;
468 Ptr<ManagedExpression> endCondition;
469 Ptr<ManagedStatement> statement;
470 };
471
472 class ManagedForStatement : public ManagedStatement
473 {
474 public:
475 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
476
477 Ptr<ManagedStatement> initializer;
478 Ptr<ManagedStatement> sideEffect;
479 Ptr<ManagedExpression> condition;
480 Ptr<ManagedStatement> statement;
481 };
482
483 class ManagedBreakStatement : public ManagedStatement
484 {
485 public:
486 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
487 };
488
489 class ManagedContinueStatement : public ManagedStatement
490 {
491 public:
492 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
493 };
494
495 class ManagedReturnStatement : public ManagedStatement
496 {
497 public:
498 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
499 };
500
501 class ManagedTryCatchStatement : public ManagedStatement
502 {
503 public:
504 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
505
506 Ptr<ManagedStatement> tryStatement;
507 collections::List<Ptr<ManagedType>> catchExceptionTypes;
508 collections::List<WString> catchExceptionNames;
509 collections::List<Ptr<ManagedStatement>> catchExceptionHandlers;
510 Ptr<ManagedStatement> finallyStatement;
511 };
512
513 class ManagedThrowStatement : public ManagedStatement
514 {
515 public:
516 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
517
518 Ptr<ManagedExpression> expression;
519 };
520
521 #define MANAGED_STATEMENT_TARGETS(P, F)\
522 F(P, ManagedEmptyStatement)\
523 F(P, ManagedCompositeStatement)\
524 F(P, ManagedExpressionStatement)\
525 F(P, ManagedVariableStatement)\
526 F(P, ManagedIfStatement)\
527 F(P, ManagedWhileStatement)\
528 F(P, ManagedForStatement)\
529 F(P, ManagedBreakStatement)\
530 F(P, ManagedContinueStatement)\
531 F(P, ManagedReturnStatement)\
532 F(P, ManagedTryCatchStatement)\
533 F(P, ManagedThrowStatement)\
534 F(P, ManagedExtendedStatement)
535
536 DEFINE_ALGORITHM_INTERFACE(ManagedStatement, MANAGED_STATEMENT_TARGETS)
537
538 /***********************************************************************
539 Extended Statements
540 ***********************************************************************/
541
542 class ManagedUsingStatement : public ManagedExtendedStatement
543 {
544 public:
545 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedStatement)
546
547 Ptr<ManagedType> type;
548 WString name;
549 Ptr<ManagedExpression> initialize;
550 Ptr<ManagedStatement> statement;
551 };
552
553 class ManagedLockStatement : public ManagedExtendedStatement
554 {
555 public:
556 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedStatement)
557
558 Ptr<ManagedExpression> lock;
559 Ptr<ManagedStatement> statement;
560 };
561
562 class ManagedSelectStatement : public ManagedExtendedStatement
563 {
564 public:
565 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedStatement)
566
567 Ptr<ManagedExpression> expression;
568 collections::List<Ptr<ManagedExpression>> caseConditions;
569 collections::List<Ptr<ManagedStatement>> caseStatements;
570 Ptr<ManagedStatement> defaultStatements;
571 };
572
573 #define MANAGED_EXTENDED_STATEMENT_TARGETS(P, F)\
574 F(P, ManagedUsingStatement)\
575 F(P, ManagedLockStatement)\
576 F(P, ManagedSelectStatement)\
577
578 DEFINE_ALGORITHM_INTERFACE(ManagedExtendedStatement, MANAGED_EXTENDED_STATEMENT_TARGETS)
579
580 /***********************************************************************
581 Basic Declaration Fragments
582 ***********************************************************************/
583
584 struct ManagedAttributeInfo
585 {
586 public:
587 collections::List<Ptr<ManagedNewExpression>> attributes;
588 };
589
590 struct ManagedGenericInfo
591 {
592 public:
593 struct Argument
594 {
595 WString name;
596 collections::List<Ptr<ManagedType>> typeConstraints;
597 bool newConstraint;
598 };
599
600 collections::List<Ptr<Argument>> arguments;
601 };
602
603 namespace declatt
604 {
605 enum Accessor
606 {
607 Public,
608 Protected,
609 Private,
610 ProtectedInternal,
611 Internal,
612 };
613
614 enum Inheritation
615 {
616 Normal,
617 Sealed,
618 Abstract,
619 Virtual,
620 Override,
621 };
622
623 enum MemberType
624 {
625 Instance,
626 Static,
627 };
628
629 enum DataType
630 {
631 Variable,
632 Constant,
633 Readonly,
634 };
635 };
636
637 class ManagedMember : public ManagedLanguageElement
638 {
639 public:
640 ALGORITHM_TARGET_ROOT(ManagedMember)
641
642 declatt::Accessor accessor;
643 declatt::MemberType memberType;
644 ManagedAttributeInfo attributeInfo;
645 };
646
647 class ManagedExtendedMember : public ManagedMember
648 {
649 public:
650 ALGORITHM_ACCEPT_DECLARATION(ManagedMember)
651
652 ALGORITHM_TARGET_ROOT(ManagedExtendedMember)
653 };
654
655 class ManagedParameter : public ManagedLanguageElement
656 {
657 public:
658 enum ParameterType
659 {
660 Normal,
661 Default,
662 Params
663 };
664
665 Ptr<ManagedType> type;
666 WString name;
667 ParameterType parameterType;
668 Ptr<ManagedExpression> defaultValue;
669 bool params;
670 };
671
672 class ManagedMethodCommon
673 {
674 public:
675 collections::List<Ptr<ManagedParameter>> parameters;
676 Ptr<ManagedStatement> body;
677 };
678
679 class ManagedConstructorCommon
680 {
681 public:
682 collections::List<Ptr<ManagedExpression>> baseArguments;
683 collections::List<WString> baseDefaultParameterNames;
684 collections::List<Ptr<ManagedExpression>> baseDefaultParameterValues;
685 };
686
687 /***********************************************************************
688 Basic Members
689 ***********************************************************************/
690
691 class ManagedField : public ManagedMember
692 {
693 public:
694 ALGORITHM_ACCEPT_DECLARATION(ManagedMember)
695
696 Ptr<ManagedType> type;
697 WString name;
698 Ptr<ManagedExpression> initializer;
699
700 declatt::DataType dataType;
701 };
702
703 class ManagedMethod : public ManagedMember, public ManagedMethodCommon
704 {
705 public:
706 ALGORITHM_ACCEPT_DECLARATION(ManagedMember)
707
708 Ptr<ManagedType> implementedInterfaceType;
709 WString name;
710 Ptr<ManagedType> returnType;
711
712 declatt::Inheritation inheritation;
713 ManagedGenericInfo genericInfo;
714 };
715
716 class ManagedConstructor : public ManagedMember, public ManagedMethodCommon, public ManagedConstructorCommon
717 {
718 public:
719 ALGORITHM_ACCEPT_DECLARATION(ManagedMember)
720 };
721
722 #define MANAGED_MEMBER_TARGETS(P, F)\
723 F(P, ManagedField)\
724 F(P, ManagedMethod)\
725 F(P, ManagedConstructor)\
726 F(P, ManagedExtendedMember)\
727
728 DEFINE_ALGORITHM_INTERFACE(ManagedMember, MANAGED_MEMBER_TARGETS)
729
730 /***********************************************************************
731 Extended Members
732 ***********************************************************************/
733
734 class ManagedProperty : public ManagedExtendedMember
735 {
736 public:
737 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedMember)
738
739 Ptr<ManagedType> type;
740 WString name;
741 Ptr<ManagedStatement> getter;
742 Ptr<ManagedStatement> setter;
743
744 declatt::Accessor setterAccessor;
745 declatt::Inheritation inheritation;
746 };
747
748 class ManagedConverterOperator : public ManagedExtendedMember
749 {
750 public:
751 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedMember)
752
753 Ptr<ManagedType> targetType;
754 bool implicit;
755
756 declatt::Inheritation inheritation;
757 ManagedGenericInfo genericInfo;
758 };
759
760 class ManagedConverterConstructor : public ManagedExtendedMember, public ManagedConstructorCommon
761 {
762 public:
763 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedMember)
764
765 Ptr<ManagedType> sourceType;
766 bool implicit;
767 };
768
769 #define MANAGED_EXTENDED_MEMBER_TARGETS(P, F)\
770 F(P, ManagedProperty)\
771 F(P, ManagedConverterOperator)\
772 F(P, ManagedConverterConstructor)\
773
774 DEFINE_ALGORITHM_INTERFACE(ManagedExtendedMember, MANAGED_EXTENDED_MEMBER_TARGETS)
775
776 /***********************************************************************
777 Basic Declarations
778 ***********************************************************************/
779
780 class ManagedTypeDeclaration : public ManagedDeclaration
781 {
782 public:
783 ALGORITHM_ACCEPT_DECLARATION(ManagedDeclaration)
784
785 enum DeclarationType
786 {
787 Class,
788 Structure,
789 Interface,
790 };
791
792 collections::List<Ptr<ManagedMember>> members;
793
794 declatt::Accessor accessor;
795 declatt::Inheritation inheritation;
796 ManagedGenericInfo genericInfo;
797 ManagedAttributeInfo attributeInfo;
798 };
799
800 class ManagedNamespaceDeclaration : public ManagedDeclaration
801 {
802 public:
803 ALGORITHM_ACCEPT_DECLARATION(ManagedDeclaration)
804
805 collections::List<Ptr<ManagedDeclaration>> declarations;
806 };
807
808 #define MANAGED_DECLARATION_TARGETS(P, F)\
809 F(P, ManagedTypeDeclaration)\
810 F(P, ManagedNamespaceDeclaration)\
811 F(P, ManagedExtendedDeclaration)\
812
813 DEFINE_ALGORITHM_INTERFACE(ManagedDeclaration, MANAGED_DECLARATION_TARGETS)
814
815 /***********************************************************************
816 Extended Declarations
817 ***********************************************************************/
818
819 class ManagedEnumerationDeclaration : public ManagedExtendedDeclaration
820 {
821 public:
822 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedDeclaration)
823
824 bool composable;
825 collections::List<WString> enumerationNames;
826 collections::List<vint> enumerationValues;
827
828 declatt::Accessor accessor;
829 ManagedAttributeInfo attributeInfo;
830 };
831
832 class ManagedTypeRenameDeclaration : public ManagedExtendedDeclaration
833 {
834 public:
835 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedDeclaration)
836
837 declatt::Accessor accessor;
838 ManagedGenericInfo genericInfo;
839 };
840
841 class ManagedUsingNamespaceDeclaration : public ManagedExtendedDeclaration
842 {
843 public:
844 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedDeclaration)
845
846 collections::List<WString> namespaceFragments;
847 };
848
849 #define MANAGED_EXTENDED_DECLARATION_TARGETS(P, F)\
850 F(P, ManagedEnumerationDeclaration)\
851 F(P, ManagedTypeRenameDeclaration)\
852 F(P, ManagedUsingNamespaceDeclaration)\
853
854 DEFINE_ALGORITHM_INTERFACE(ManagedExtendedDeclaration, MANAGED_EXTENDED_DECLARATION_TARGETS)
855 }
856 }
857 }
858
859 #endif