Currently when we `mlir::debugPrint` JSIR, we get the default format, which is pretty verbose: ```mlir "jsir.file"() <{comments = []}> ({ "jsir.program"() <{source_type = "script"}> ({ %0 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any "jshir.if_statement"(%0) ({ %2 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any "jsir.expression_statement"(%2) : (!jsir.any) -> () }, { }) : (!jsir.any) -> () %1 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any "jshir.if_statement"(%1) ({ "jshir.block_statement"() ({ %2 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any "jsir.expression_statement"(%2) : (!jsir.any) -> () }, { ^bb0: }) : () -> () }, { %2 = "jsir.identifier"() <{name = "c"}> : () -> !jsir.any "jsir.expression_statement"(%2) : (!jsir.any) -> () }) : (!jsir.any) -> () }, { ^bb0: }) : () -> () }) : () -> () ``` We should provide a custom, simplified assembly format, like this: ```mlir jsir.file { jsir.program {source_type = "script"} { %0 = jsir.identifier {name = "a"} jshir.if_statement(%0) ({ %2 = jsir.identifier {name = "b"} jsir.expression_statement(%2) }, { }) %1 = jsir.identifier{name = "a"} jshir.if_statement(%1) ({ jshir.block_statement() ({ %2 = jsir.identifier {name = "b"} jsir.expression_statement(%2) }, { ^bb0: }) }, { %2 = jsir.identifier {name = "c"} jsir.expression_statement(%2) }) }, { ^bb0: }) }) ``` Note: Since JSIR currently doesn't support TypeScript, every expression has the type `jsir.any` and doesn't have to be spelled out explicitly. The custom [assemblyFormat](https://mlir.llvm.org/docs/DefiningDialects/Operations/#declarative-assembly-format) should be declared in [jsir_ops.generated.td](https://github.com/google/jsir/blob/main/maldoca/js/ir/jsir_ops.generated.td) and [jsir_ops.td](https://github.com/google/jsir/blob/main/maldoca/js/ir/jsir_ops.td). jsir_ops.generated.td is generated by [astgen](https://github.com/google/jsir/tree/main/maldoca/astgen).
Activity