diff --git a/include/serene/slir/dialect.td b/include/serene/slir/dialect.td index 04a9eab..73520f5 100644 --- a/include/serene/slir/dialect.td +++ b/include/serene/slir/dialect.td @@ -83,8 +83,8 @@ def DefOp: Serene_Op<"def"> { DefOp }]; - let arguments = (ins TypeAttr:$type, - StrAttr:$name, + let arguments = (ins StrAttr:$name, + AnyType:$value, OptionalAttr:$sym_visibility); let results = (outs SereneSymbol); diff --git a/src/libserene/exprs/def.cpp b/src/libserene/exprs/def.cpp index fc8172e..2c4be6a 100644 --- a/src/libserene/exprs/def.cpp +++ b/src/libserene/exprs/def.cpp @@ -24,6 +24,8 @@ #include "serene/exprs/list.h" #include "serene/exprs/symbol.h" #include "serene/exprs/traits.h" +#include "serene/slir/dialect.h" +#include "serene/slir/utils.h" #include #include @@ -115,6 +117,19 @@ void Def::generateIR(serene::Namespace &ns, mlir::ModuleOp &m) { value->generateIR(ns, m); return; } + + // auto loc = slir::toMLIRLocation(ns, location.start); + // auto &mctx = ns.getContext().mlirContext; + + // mlir::OpBuilder builder(&mctx); + + // auto sym = slir::SymbolType::get(&mctx, ns.name, binding); + + // TODO: we need to change the generate method of expressions + // to return mlir::Value or any wrapper of that which would + // be the ssa form of the result of the expression. + // and then use it to define the def op here. + // auto def = builder.create(sym, binding, value); m.emitError("Def: not implemented!"); }; } // namespace exprs