diff --git a/build.gradle b/build.gradle index 6c32e1e..03473a0 100644 --- a/build.gradle +++ b/build.gradle @@ -58,9 +58,9 @@ project(':compiler') { compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" compile "org.ow2.asm:asm-tree:$asm_version" compile "org.ow2.asm:asm-util:$asm_version" - compile "org.ow2.asm:asm-commons:$asm_version" testCompile 'junit:junit:4.12' testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version" + testCompile "org.ow2.asm:asm-debug-all:$asm_version" } publishSettings(project, 'asmble-compiler', 'Asmble WASM Compiler') diff --git a/compiler/src/main/kotlin/asmble/cli/ScriptCommand.kt b/compiler/src/main/kotlin/asmble/cli/ScriptCommand.kt index f30a9a5..22715e5 100644 --- a/compiler/src/main/kotlin/asmble/cli/ScriptCommand.kt +++ b/compiler/src/main/kotlin/asmble/cli/ScriptCommand.kt @@ -56,16 +56,20 @@ abstract class ScriptCommand : Command() { // if input file is class file "class" -> ctx.classLoader.addClass(File(inFile).readBytes()).let { ctx } // if input file is wasm file - else -> Translate.also { it.logger = logger }.inToAst(inFile, inFile.substringAfterLast('.')).let { inAst -> - val (mod, name) = (inAst.commands.singleOrNull() as? Script.Cmd.Module) ?: + else -> { + val translateCmd = Translate + translateCmd.logger = this.logger + translateCmd.inToAst(inFile, inFile.substringAfterLast('.')).let { inAst -> + val (mod, name) = (inAst.commands.singleOrNull() as? Script.Cmd.Module) ?: error("Input file must only contain a single module") - val className = name?.javaIdent?.capitalize() ?: + val className = name?.javaIdent?.capitalize() ?: "Temp" + UUID.randomUUID().toString().replace("-", "") - ctx.withCompiledModule(mod, className, name).let { ctx -> - if (name == null && index != args.inFiles.size - 1) - logger.warn { "File '$inFile' not last and has no name so will be unused" } - if (name == null || args.disableAutoRegister) ctx - else ctx.runCommand(Script.Cmd.Register(name, null)) + ctx.withCompiledModule(mod, className, name).let { ctx -> + if (name == null && index != args.inFiles.size - 1) + logger.warn { "File '$inFile' not last and has no name so will be unused" } + if (name == null || args.disableAutoRegister) ctx + else ctx.runCommand(Script.Cmd.Register(name, null)) + } } } } diff --git a/compiler/src/main/kotlin/asmble/cli/Translate.kt b/compiler/src/main/kotlin/asmble/cli/Translate.kt index 146dfe9..c133f4d 100644 --- a/compiler/src/main/kotlin/asmble/cli/Translate.kt +++ b/compiler/src/main/kotlin/asmble/cli/Translate.kt @@ -70,7 +70,7 @@ open class Translate : Command() { } } "wasm" -> - Script(listOf(Script.Cmd.Module(BinaryToAst(logger = logger).toModule( + Script(listOf(Script.Cmd.Module(BinaryToAst(logger = this.logger).toModule( ByteReader.InputStream(inBytes.inputStream())), null))) else -> error("Unknown in format '$inFormat'") } diff --git a/compiler/src/main/kotlin/asmble/io/BinaryToAst.kt b/compiler/src/main/kotlin/asmble/io/BinaryToAst.kt index 67db443..9c70c9d 100644 --- a/compiler/src/main/kotlin/asmble/io/BinaryToAst.kt +++ b/compiler/src/main/kotlin/asmble/io/BinaryToAst.kt @@ -2,12 +2,11 @@ package asmble.io import asmble.ast.Node import asmble.util.* -import java.io.ByteArrayInputStream import java.nio.ByteBuffer open class BinaryToAst( val version: Long = 1L, - val logger: Logger = Logger.Print(Logger.Level.OFF), + val logger: Logger = Logger.Print(Logger.Level.WARN), val includeNameSection: Boolean = true ) : Logger by logger { diff --git a/settings.gradle b/settings.gradle index 3b6175d..951750a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,7 +2,7 @@ rootProject.name = 'asmble' include 'annotations', 'compiler', 'examples:c-simple', - 'examples:go-simple', - 'examples:rust-regex', +// 'examples:go-simple', +// 'examples:rust-regex', // todo will be enabled when the problem with string max size will be solved 'examples:rust-simple', 'examples:rust-string' \ No newline at end of file