예제 #1
0
        public ILBlockTranslator(AssemblyTranslator translator, DecompilerContext context, MethodReference methodReference, MethodDefinition methodDefinition, ILBlock ilb, IEnumerable<ILVariable> parameters, IEnumerable<ILVariable> allVariables)
        {
            Translator = translator;
            Context = context;
            ThisMethodReference = methodReference;
            ThisMethod = methodDefinition;
            Block = ilb;

            JS = new JSSpecialIdentifiers(TypeSystem);
            JSIL = new JSILIdentifier(TypeSystem, JS);
            CLR = new CLRSpecialIdentifiers(TypeSystem);

            if (methodReference.HasThis)
                Variables.Add("this", JSThisParameter.New(methodReference.DeclaringType));

            foreach (var parameter in parameters) {
                if ((parameter.Name == "this") && (parameter.OriginalParameter.Index == -1))
                    continue;

                ParameterNames.Add(parameter.Name);
                Variables.Add(parameter.Name, new JSParameter(parameter.Name, parameter.Type));
            }

            foreach (var variable in allVariables) {
                var v = JSVariable.New(variable);
                if (Variables.ContainsKey(v.Identifier)) {
                    v = new JSVariable(variable.OriginalVariable.Name, variable.Type);
                    RenamedVariables[variable] = v;
                    Variables.Add(v.Identifier, v);
                } else {
                    Variables.Add(v.Identifier, v);
                }
            }
        }
예제 #2
0
 public SpecialIdentifiers(MethodTypeFactory methodTypes, TypeSystem typeSystem, ITypeInfoSource typeInfo)
 {
     TypeSystem = typeSystem;
     JS         = new JSSpecialIdentifiers(methodTypes, typeSystem);
     CLR        = new CLRSpecialIdentifiers(typeSystem);
     JSIL       = new JSILIdentifier(methodTypes, typeSystem, typeInfo, JS);
 }
예제 #3
0
        public JSILIdentifier(TypeSystem typeSystem, JSSpecialIdentifiers js)
        {
            TypeSystem = typeSystem;
            JS = js;

            GlobalNamespace = Dot("GlobalNamespace", TypeSystem.Object);
            CopyMembers = Dot("CopyMembers", TypeSystem.Void);
        }
예제 #4
0
        public JSILIdentifier(MethodTypeFactory methodTypes, TypeSystem typeSystem, JSSpecialIdentifiers js)
        {
            TypeSystem = typeSystem;
            MethodTypes = methodTypes;
            JS = js;

            GlobalNamespace = Dot("GlobalNamespace", TypeSystem.Object);
            CopyMembers = Dot("CopyMembers", TypeSystem.Void);
        }
예제 #5
0
        public JSILIdentifier(MethodTypeFactory methodTypes, TypeSystem typeSystem, JSSpecialIdentifiers js)
        {
            TypeSystem  = typeSystem;
            MethodTypes = methodTypes;
            JS          = js;

            GlobalNamespace = Dot("GlobalNamespace", TypeSystem.Object);
            CopyMembers     = Dot("CopyMembers", TypeSystem.Void);
        }
예제 #6
0
 public SpecialIdentifiers(MethodTypeFactory methodTypes, TypeSystem typeSystem)
 {
     TypeSystem = typeSystem;
     JS = new JSSpecialIdentifiers(methodTypes, typeSystem);
     CLR = new CLRSpecialIdentifiers(typeSystem);
     JSIL = new JSILIdentifier(methodTypes, typeSystem, JS);
 }
예제 #7
0
 public SpecialIdentifiers(TypeSystem typeSystem)
 {
     TypeSystem = typeSystem;
     JS = new JSSpecialIdentifiers(typeSystem);
     CLR = new CLRSpecialIdentifiers(typeSystem);
     JSIL = new JSILIdentifier(typeSystem, JS);
 }
예제 #8
0
        protected void TranslateModule(DecompilerContext context, JavascriptFormatter output, ModuleDefinition module, List<Action> initializer, HashSet<TypeDefinition> sealedTypes, bool stubbed)
        {
            var moduleInfo = TypeInfoProvider.GetModuleInformation(module);
            if (moduleInfo.IsIgnored)
                return;

            context.CurrentModule = module;

            var js = new JSSpecialIdentifiers(context.CurrentModule.TypeSystem);
            var jsil = new JSILIdentifier(context.CurrentModule.TypeSystem, js);

            // Probably should be an argument, not a member variable...
            AstEmitter = new JavascriptAstEmitter(
                output, jsil, context.CurrentModule.TypeSystem, this.TypeInfoProvider
            );

            foreach (var typedef in module.Types)
                ForwardDeclareType(context, output, typedef);

            foreach (var typedef in module.Types) {
                TranslateTypeDefinition(context, output, typedef, initializer, stubbed);
                SealType(context, output, typedef, sealedTypes);
            }
        }