B.TypeMemberModifiers ConvertModifier(AttributedNode node, B.TypeMemberModifiers defaultVisibility) { Modifiers m = node.Modifier; B.TypeMemberModifiers r = B.TypeMemberModifiers.None; if ((m & Modifiers.Private) != 0) r |= B.TypeMemberModifiers.Private; if ((m & Modifiers.Internal) != 0) r |= B.TypeMemberModifiers.Internal; if ((m & Modifiers.Public) != 0) r |= B.TypeMemberModifiers.Public; if ((m & Modifiers.Protected) != 0) r |= B.TypeMemberModifiers.Protected; if (r == B.TypeMemberModifiers.None) r = defaultVisibility; if ((m & Modifiers.Abstract) != 0) r |= B.TypeMemberModifiers.Abstract; if ((m & Modifiers.Virtual) != 0) r |= B.TypeMemberModifiers.Virtual; if ((m & Modifiers.Sealed) != 0) r |= B.TypeMemberModifiers.Final; if ((m & Modifiers.Static) != 0) { r |= B.TypeMemberModifiers.Static; } else if (currentType != null && currentType.IsStatic) { if (!(node is TypeDeclaration)) r |= B.TypeMemberModifiers.Static; } if ((m & Modifiers.Override) != 0) r |= B.TypeMemberModifiers.Override; if ((m & Modifiers.ReadOnly) != 0 && !(node is PropertyDeclaration)) { r |= B.TypeMemberModifiers.Final; } if ((m & Modifiers.Const) != 0) { r |= B.TypeMemberModifiers.Final | B.TypeMemberModifiers.Static; } if ((m & Modifiers.New) != 0) { AddError(node, "shadowing is not supported"); } if ((m & Modifiers.Partial) != 0) { r |= B.TypeMemberModifiers.Partial; } if ((m & Modifiers.Extern) != 0) { // not necessary in Boo } if ((m & Modifiers.Volatile) != 0) { AddError(node, "Volatile modifier is not supported"); } if ((m & Modifiers.Unsafe) != 0) { AddError(node, "Unsafe modifier is not supported"); } if ((m & Modifiers.Overloads) != 0) { // not necessary in Boo } if ((m & Modifiers.WithEvents) != 0) { // not necessary in Boo } return r; }
void AddWarning(B.LexicalInfo lex, string warningMessage) { warnings.Add(new CompilerWarning(lex, warningMessage)); }
void AddError(B.LexicalInfo lex, string errorMessage) { errors.Add(new CompilerError(lex, errorMessage)); }
B.TypeReference ConvertTypeReference(B.Expression expr) { B.TypeofExpression te = expr as B.TypeofExpression; if (te != null) return te.Type; if (expr is B.ReferenceExpression) { return new B.SimpleTypeReference(expr.ToCodeString()); } AddError(expr.LexicalInfo, "Expected type, but found expression."); return null; }
void ConvertTypeReferences(List<TypeReference> input, B.TypeReferenceCollection output) { foreach (TypeReference t in input) { B.TypeReference r = ConvertTypeReference(t); if (r != null) { output.Add(r); } } }
B.TypeMemberModifiers ConvertModifier(AttributedNode node, B.TypeMemberModifiers defaultVisibility) { Modifiers m = node.Modifier; B.TypeMemberModifiers r = B.TypeMemberModifiers.None; if ((m & Modifiers.Private) != 0) r |= B.TypeMemberModifiers.Private; if ((m & Modifiers.Internal) != 0) r |= B.TypeMemberModifiers.Internal; if ((m & Modifiers.Public) != 0) r |= B.TypeMemberModifiers.Public; if ((m & Modifiers.Protected) != 0) r |= B.TypeMemberModifiers.Protected; if (r == B.TypeMemberModifiers.None) r = defaultVisibility; if ((m & Modifiers.Abstract) != 0) r |= B.TypeMemberModifiers.Abstract; if ((m & Modifiers.Virtual) != 0) r |= B.TypeMemberModifiers.Virtual; if ((m & Modifiers.Sealed) != 0) r |= B.TypeMemberModifiers.Final; if ((m & Modifiers.Static) != 0) { r |= B.TypeMemberModifiers.Static; } else if (currentType != null && currentType.IsStatic) { if (!(node is TypeDeclaration)) r |= B.TypeMemberModifiers.Static; } if ((m & Modifiers.Override) != 0) r |= B.TypeMemberModifiers.Override; if ((m & Modifiers.ReadOnly) != 0 && !(node is PropertyDeclaration)) { r |= B.TypeMemberModifiers.Final; } if ((m & Modifiers.Const) != 0) { r |= B.TypeMemberModifiers.Final | B.TypeMemberModifiers.Static; } if ((m & Modifiers.New) != 0) { AddError(node, "shadowing is not supported"); } if ((m & Modifiers.Partial) != 0) { r |= B.TypeMemberModifiers.Partial; } if ((m & Modifiers.Extern) != 0) { // not necessary in Boo } if ((m & Modifiers.Volatile) != 0) { AddError(node, "Volatile modifier is not supported"); } if ((m & Modifiers.Unsafe) != 0) { AddError(node, "Unsafe modifier is not supported"); } if ((m & Modifiers.Overloads) != 0) { // not necessary in Boo } if ((m & Modifiers.WithEvents) != 0) { // not necessary in Boo } if ((m & Modifiers.Default) != 0) { ParametrizedNode parametrizedNode = node as ParametrizedNode; string name = null; if (parametrizedNode != null) { name = parametrizedNode.Name; } else { AddError(node, "Default modifier is not supported on this member."); } if (name != null && currentType != null) { currentType.Attributes.Add(MakeAttribute("System.Reflection.DefaultMember", new B.StringLiteralExpression(name))); } } return r; }