经历了大约一个多星期的挑选,
Vczh Library++3.0托管语言的语法树大约就定下来了。跟本地语言有一个缺省的语法叫NativeX一样,这次的语法就叫ManagedX了。当然ManagedX只是设计来直接反映托管语言语法树的一门语言,如果愿意的话,这个语法树还能被编译成其他长得像(嗯,只能是像,因为必须是托管的,有类没指针等)Basic啦Pascal那样子的东西。
我将ManagedX的语法分为两部分。第一部分是基础部分,第二部分则是扩展部分。将他们分开的依据就是,一个基于扩展部分的程序,总是可以被重写为一个功能完全一致但是仅基于基础部分的比较复杂的程序。举一个简单的例子。我们知道lambda表达式在一门面向对象语言中并不是必需的,它只是一个语法糖。如果我们在面向对象语言中把函数指针统统抽象成一个基类或者接口(就跟C#的Delegate一样)的话,一个lambda表达式总是可以被表达成一个新的类型,然后只需要重新组织一下生成该lambda表达式的函数的局部变量,就可以把lambda表达是去掉了。当然lambda表达式作为一个语法来说是必需的,因为它大大提高了开发效率。但是对于编译过程来说又不是必需的,因为它总是可以用自动重写的方法来去掉。
因此ManagedX的编译过程就比较清晰了:
1、我们接受一个基于扩展部分的程序,然后经过第一轮的语法分析,得到语法树上面所有节点的类型信息和引用信息。
2、根据分析出来的信息,将该程序重写为仅基于基础部分的程序。在重写的过程中会使得信息不会丢失(特别是ManagedX支持反射,而反射却可以支持扩展部分,所以需要做很多小动作来维持重写前后的程序运行上的一致性)
3、对重写出来的新程序重新进行语法分析。
4、根据分析出来的信息,将它编译成
NativeX。
从这里打架就可以知道为什么我之前要做NativeX了,因为实现了NativeX之后,以后实现很多新的复杂语言会十分省事。运行时的虚拟机做好了,函数库也有了一部分,还有基于二进制编译结果的多文件支持啦、泛型啦、concept mapping啦、外接函数插件啦、还有将来会做的debugger,和编译到X86的过程,都可以直接被新的语言所享受。在这里ManagedX的开发过程就仅仅是一个前端的开发过程了,因为后端的第一阶段已经完成了,至少可以直接使用。
下面贴一下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