Skip to content

Optimize away EmptyDataDecls, unknown, and Ptr in the FFI #338

Open
@bergmark

Description

@bergmark
data Text
data JQuery

select :: Text -> Fay JQuery
select = ffi "$(%1)"

currently produces:

Test.select = function($p1){
  return new Fay$$$(function(){
    return new Fay$$Monad(Fay$$jsToFay(["user","JQuery",[]],$(Fay$$fayToJs(["user","Text",[]],$p1))));
  });
};

This is unnecessary, we know that an EmptyDataDecl won't result in any transcoding. This can be fixed manually by:

select :: Ptr Text -> Fay (Ptr JQuery)
select = ffi "$(%1)"
Test.select = function($p1){
  return new Fay$$$(function(){
    return new Fay$$Monad($($p1));
  });
};

The compiler can easily do this instead of the user, just keep track of all types that are EmptyDataDecls (Fay.Compiler.InitialPass) and turn the type into x or Ptr Foo while compiling FFI declarations (Fay.Compiler.FFI).

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions