Example #1
0
        private static void EmitCode(PackageIL package, PackageIL stdLibPackage, string path)
        {
            var codeEmitter = new CodeEmitter();

            codeEmitter.Emit(package);
            codeEmitter.Emit(stdLibPackage);
            File.WriteAllText(path, codeEmitter.GetEmittedCode(), Encoding.UTF8);
        }
        public string Disassemble(PackageIL package)
        {
            var builder = new AssemblyBuilder();

            foreach (var declaration in package.GetNonMemberDeclarations())
            {
                Disassemble(declaration, builder);
                builder.BlankLine();
            }

            return(builder.Code);
        }
Example #3
0
        private static string EmitCode(Project project, PackageIL package, string cacheDir)
        {
            var emittedPackages = new HashSet <PackageIL>();
            var packagesToEmit  = new Queue <PackageIL>();

            packagesToEmit.Enqueue(package);

            var codeEmitter = new CodeEmitter();

            while (packagesToEmit.TryDequeue(out var currentPackage))
            {
                if (!emittedPackages.Contains(currentPackage))
                {
                    codeEmitter.Emit(currentPackage);
                    emittedPackages.Add(currentPackage);
                    packagesToEmit.EnqueueRange(currentPackage.References);
                }
            }

            string outputPath;

            switch (project.Template)
            {
            case ProjectTemplate.App:
            {
                outputPath = Path.Combine(cacheDir, "program.c");
            }
            break;

            case ProjectTemplate.Lib:
            {
                outputPath = Path.Combine(cacheDir, "lib.c");
            }
            break;

            default:
                throw ExhaustiveMatch.Failed(project.Template);
            }

            File.WriteAllText(outputPath, codeEmitter.GetEmittedCode(), Encoding.UTF8);

            return(outputPath);
        }
 public abstract void Emit(PackageIL package);
Example #5
0
 public override void Emit(PackageIL package)
 {
     packageEmitter.Emit(package, code);
 }