
interface Literal {
  void Literal(double x);
  double getf64();
};

interface Name {
  void Name(DOMString x);

  [Const] DOMString c_str();
};

interface Module {
  void Module();
};

[Prefix="ModuleInstance::", NoDelete]
interface ExternalInterface {
};

interface ShellExternalInterface {
  void ShellExternalInterface();
};

ShellExternalInterface implements ExternalInterface;

interface ModuleInstance {
  void ModuleInstance([Ref] Module m, ExternalInterface i);

  [Value] Literal callExport([Ref] Name name, [Ref] LiteralList arguments);
};


interface BufferWithRandomAccess {
  void BufferWithRandomAccess(boolean debug);
  unsigned long size();
  [Operator="[]"] octet at(unsigned long index);
};

interface WasmBinaryWriter {
  void WasmBinaryWriter(Module m, [Ref] BufferWithRandomAccess outbuf, boolean debug);
  void write();
};

interface LiteralList {
  void LiteralList();

  void push_back([Ref] Literal l);
};

// S-Expressions

interface Element {
  boolean isList();
  boolean isStr();
  void dump();

  // list methods
  [Operator="[]"] Element getChild(long i);
  long size();

  // string methods
  [Const] DOMString c_str();
};

interface SExpressionParser {
  void SExpressionParser(DOMString input);
  attribute Element root;
};

interface SExpressionWasmBuilder {
  void SExpressionWasmBuilder([Ref] Module wasm, [Ref] Element input);
};

// Wasm printing

interface WasmPrinter {
  static void printModule(Module m);
};

