protected override void BeginEmit() { base.BeginEmit(); OldRules = Emitter.Rules; if (Emitter.Resolver.ResolveNode(CustomEventDeclaration) is MemberResolveResult rr) { Emitter.Rules = Rules.Get(Emitter, rr.Member); } }
protected override void BeginEmit() { base.BeginEmit(); this.OldRules = this.Emitter.Rules; var rr = this.Emitter.Resolver.ResolveNode(this.MethodDeclaration, this.Emitter) as MemberResolveResult; if (rr != null) { this.Emitter.Rules = Rules.Get(this.Emitter, rr.Member); } }
public override AstNode VisitTypeDeclaration(TypeDeclaration typeDeclaration) { if (Resolver.ResolveNode(typeDeclaration) is TypeResolveResult rr) { Rules = Contract.Rules.Get(Emitter, rr.Type.GetDefinition()); } else { Rules = Contract.Rules.Default; } return(base.VisitTypeDeclaration(typeDeclaration)); }
public override AstNode VisitCustomEventDeclaration(CustomEventDeclaration eventDeclaration) { if (Resolver.ResolveNode(eventDeclaration) is MemberResolveResult rr) { Rules = Contract.Rules.Get(Emitter, rr.Member); } else { Rules = Contract.Rules.Default; } return(base.VisitCustomEventDeclaration(eventDeclaration)); }
public override AstNode VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration) { if (Resolver.ResolveNode(indexerDeclaration) is MemberResolveResult rr) { Rules = Contract.Rules.Get(Emitter, rr.Member); } else { Rules = Contract.Rules.Default; } return(base.VisitIndexerDeclaration(indexerDeclaration)); }
public override AstNode VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration) { if (Resolver.ResolveNode(propertyDeclaration) is MemberResolveResult rr) { Rules = Contract.Rules.Get(Emitter, rr.Member); } else { Rules = Contract.Rules.Default; } return(base.VisitPropertyDeclaration(propertyDeclaration)); }
private static CompilerRule ToRule(IAttribute attribute, CompilerRuleLevel level = CompilerRuleLevel.None) { var rule = new CompilerRule(); foreach (var argument in attribute.NamedArguments) { var member = argument.Key; var value = argument.Value; switch (member.Name) { case nameof(CompilerRule.Lambda): rule.Lambda = (LambdaRule)(int)value.ConstantValue; break; case nameof(CompilerRule.Boxing): rule.Boxing = (BoxingRule)(int)value.ConstantValue; break; case nameof(CompilerRule.ArrayIndex): rule.ArrayIndex = (ArrayIndexRule)(int)value.ConstantValue; break; case nameof(CompilerRule.Integer): rule.Integer = (IntegerRule)(int)value.ConstantValue; break; case nameof(CompilerRule.AnonymousType): rule.AnonymousType = (AnonymousTypeRule)(int)value.ConstantValue; break; case nameof(CompilerRule.AutoProperty): rule.AutoProperty = (AutoPropertyRule)(int)value.ConstantValue; break; case nameof(CompilerRule.InlineComment): rule.InlineComment = (InlineCommentRule)(int)value.ConstantValue; break; case nameof(CompilerRule.ExternalCast): rule.ExternalCast = (ExternalCastRule)(int)value.ConstantValue; break; default: throw new NotSupportedException($"Property {member.Name} is not supported in {attribute.AttributeType.FullName}"); } } rule.Level = level; return(rule); }
public H5DotJson_AssemblySettings() { Dependencies = new List <IModuleDependency>(); Reflection = new ReflectionConfig(); ReflectionInternal = new ReflectionConfig(); Assembly = new AssemblyConfig(); Resources = new ResourceConfig(); Loader = new ModuleLoader(); Output = DEFAULT_OUTPUT; SourceMap = new SourceMapConfig(); Html = new HtmlConfig(); Rules = new CompilerRule(); IgnoreDuplicateTypes = false; }
public override AstNode VisitTypeDeclaration(TypeDeclaration typeDeclaration) { var rr = this.Resolver.ResolveNode(typeDeclaration, null) as TypeResolveResult; if (rr != null) { this.Rules = Contract.Rules.Get(this.Emitter, rr.Type.GetDefinition()); } else { this.Rules = Contract.Rules.Default; } return base.VisitTypeDeclaration(typeDeclaration); }
public override AstNode VisitCustomEventDeclaration(CustomEventDeclaration eventDeclaration) { var rr = this.Resolver.ResolveNode(eventDeclaration, null) as MemberResolveResult; if (rr != null) { this.Rules = Contract.Rules.Get(this.Emitter, rr.Member); } else { this.Rules = Contract.Rules.Default; } return base.VisitCustomEventDeclaration(eventDeclaration); }
public override void VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration) { var rr = this.Resolver.ResolveNode(indexerDeclaration, null) as MemberResolveResult; if (rr != null) { this.Rules = Contract.Rules.Get(this.Emitter, rr.Member); } else { this.Rules = Contract.Rules.Default; } base.VisitIndexerDeclaration(indexerDeclaration); }
private static CompilerRule MergeRules(List <CompilerRule> rules) { var resultRule = new CompilerRule { Lambda = LambdaRule.Managed, AnonymousType = AnonymousTypeRule.Managed, Integer = IntegerRule.Managed, Boxing = BoxingRule.Managed, ArrayIndex = ArrayIndexRule.Managed, AutoProperty = null }; for (int i = rules.Count - 1; i >= 0; i--) { var rule = rules[i]; if (rule.Lambda.HasValue) { resultRule.Lambda = rule.Lambda; } if (rule.AutoProperty.HasValue) { resultRule.AutoProperty = rule.AutoProperty; } if (rule.AnonymousType.HasValue) { resultRule.AnonymousType = rule.AnonymousType; } if (rule.Integer.HasValue) { resultRule.Integer = rule.Integer; } if (rule.ArrayIndex.HasValue) { resultRule.ArrayIndex = rule.ArrayIndex; } if (rule.Boxing.HasValue) { resultRule.Boxing = rule.Boxing; } } return(resultRule); }
public override AstNode VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration) { var rr = this.Resolver.ResolveNode(propertyDeclaration, null) as MemberResolveResult; if (rr != null) { this.Rules = Contract.Rules.Get(this.Emitter, rr.Member); } else { this.Rules = Contract.Rules.Default; } return(base.VisitPropertyDeclaration(propertyDeclaration)); }
public AssemblyInfo() { Dependencies = new List <IPluginDependency>(); DefineConstants = new List <string>(); Reflection = new ReflectionConfig(); ReflectionInternal = new ReflectionConfig(); Assembly = new AssemblyConfig(); Resources = new ResourceConfig(); Loader = new ModuleLoader(); Output = DEFAULT_OUTPUT; SourceMap = new SourceMapConfig(); Html = new HtmlConfig(); Console = new ConsoleConfig(); Rules = new CompilerRule(); IgnoreDuplicateTypes = false; }
public override void VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration) { if (Found) { return; } if (Resolver.ResolveNode(indexerDeclaration) is MemberResolveResult rr) { Rules = Contract.Rules.Get(Emitter, rr.Member); } else { Rules = Contract.Rules.Default; } base.VisitIndexerDeclaration(indexerDeclaration); }
public override void VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration) { if (this.Found) { return; } var rr = this.Resolver.ResolveNode(propertyDeclaration, null) as MemberResolveResult; if (rr != null) { this.Rules = Contract.Rules.Get(this.Emitter, rr.Member); } else { this.Rules = Contract.Rules.Default; } base.VisitPropertyDeclaration(propertyDeclaration); }
public static CompilerRule Get(IEmitter emitter, IEntity entity) { CompilerRule memberRule = null; CompilerRule[] classRules = null; CompilerRule[] assemblyRules = null; CompilerRule[] interfaceRules = null; if (entity is IMember) { var attr = Helpers.GetInheritedAttribute(entity, attributeName); if (attr != null) { memberRule = Rules.ToRule(attr, CompilerRuleLevel.Member); } var typeDef = entity.DeclaringTypeDefinition; if (typeDef != null) { classRules = Rules.GetClassRules(emitter, typeDef); } interfaceRules = Rules.GetVirtualMemberRules(emitter, entity); } else if (entity is ITypeDefinition) { classRules = Rules.GetClassRules(emitter, (ITypeDefinition)entity); } var assembly = entity.ParentAssembly; if (emitter != null && emitter.AssemblyCompilerRuleCache.ContainsKey(assembly)) { assemblyRules = emitter.AssemblyCompilerRuleCache[assembly]; } else { IAttribute[] assemblyAttrs = assembly.AssemblyAttributes.Where(a => a.AttributeType.FullName == Rules.attributeName).ToArray(); assemblyRules = new CompilerRule[assemblyAttrs.Length]; for (int i = 0; i < assemblyAttrs.Length; i++) { assemblyRules[i] = Rules.ToRule(assemblyAttrs[i], CompilerRuleLevel.Assembly); } if (emitter != null) { emitter.AssemblyCompilerRuleCache.Add(assembly, assemblyRules); } } var rules = new List <CompilerRule>(); if (memberRule != null) { rules.Add(memberRule); } if (classRules != null && classRules.Length > 0) { rules.AddRange(classRules); } if (interfaceRules != null && interfaceRules.Length > 0) { rules.AddRange(interfaceRules); } if (emitter != null) { rules.Add(emitter.AssemblyInfo.Rules); } if (assemblyRules != null && assemblyRules.Length > 0) { rules.AddRange(assemblyRules); } return(MergeRules(rules)); }