/** ****************************************************************************** * Xenia : Xbox 360 Emulator Research Project * ****************************************************************************** * Copyright 2013 Ben Vanik. All rights reserved. * * Released under the BSD license - see LICENSE in the root for more details. * ****************************************************************************** */ #include #include namespace alloy { namespace compiler { using alloy::hir::HIRBuilder; using alloy::runtime::Runtime; Compiler::Compiler(Runtime* runtime) : runtime_(runtime) { scratch_arena_ = new Arena(); } Compiler::~Compiler() { Reset(); for (auto it = passes_.begin(); it != passes_.end(); ++it) { CompilerPass* pass = *it; delete pass; } delete scratch_arena_; } void Compiler::AddPass(CompilerPass* pass) { pass->Initialize(this); passes_.push_back(pass); } void Compiler::Reset() {} int Compiler::Compile(HIRBuilder* builder) { SCOPE_profile_cpu_f("alloy"); // TODO(benvanik): sophisticated stuff. Run passes in parallel, run until they // stop changing things, etc. for (auto it = passes_.begin(); it != passes_.end(); ++it) { CompilerPass* pass = *it; scratch_arena_->Reset(); if (pass->Run(builder)) { return 1; } } return 0; } } // namespace compiler } // namespace alloy