Author: gabor
Date: Tue Mar 1 18:56:45 2005
New Revision: 9798
Modified:
branches/llvm-backend/cback.dylan
branches/llvm-backend/llvm-glue.cc
Log:
job: 7241
Some dumping functionality plus more definitions.
Beginnings of some convenience macros to automate
the creation of bindings.
Cleanup imminent.
Modified: branches/llvm-backend/cback.dylan
==============================================================================
--- branches/llvm-backend/cback.dylan (original)
+++ branches/llvm-backend/cback.dylan Tue Mar 1 18:56:45 2005
@@ -58,6 +58,38 @@
define functional class <llvm-function-type>(<llvm-type>)
end;
+
+define macro llvm-accessors-definer
+ { define llvm-accessors ?class-name:name (?C++-name:name) end }
+ =>
+ { }
+
+ { define llvm-accessors ?class-name:name (?C++-name:name) ?accessor; ?rest:*
end }
+ =>
+ { define single llvm-accessors [?class-name, ?C++-name, ?accessor] end;
define llvm-accessors ?class-name (?C++-name) ?rest end }
+
+ { define single llvm-accessors [?class-name:name, ?C++-name:name, [?:name;
(); (?results:variable-list)]] end }
+ =>
+ { define method ?name(o :: ?class-name) => (?results);
+ call-out(?"name" "_llvm_" ?"C++-name", void:, ptr: o.raw-value)
+ end }
+
+/* { define single llvm-accessors [?class-name:name, ?C++-name:name, [?:name;
(?args:variable-list); (?results:variable-list)]] end }
+ =>
+ { define method (o :: ?class-name, ?args) => (?results);
+ call-out(?"name" "_llvm_" ?"C++-name", void:, ptr: o.raw-value)
+ end } */
+
+ accessor:
+ { ?:name, () => () } => { [?name; (); () ] }
+end;
+
+
+define llvm-accessors <llvm-type> (Type)
+// delete, () => ();
+// dump, () => ();
+end;
+
// ##########
// ### Values
@@ -80,13 +112,21 @@
// delete: give up ownership and destroy
-define generic delete(v :: <llvm-object>) => ();
+define generic delete(o :: <llvm-object>) => ();
define method delete(v :: <llvm-value>) => ();
call-out("delete_llvm_Value", void:, ptr: v.raw-value)
end;
+// dump: output some textual representation for debugging purposes
+define generic dump(o :: <llvm-object>) => ();
+
+define method dump(v :: <llvm-value>) => ();
+ call-out("dump_llvm_Value", void:, ptr: v.raw-value)
+end;
+
+
// ################
// ### Instructions
@@ -115,7 +155,7 @@
end;
-define method make (c == <llvm-basic-block>, #rest rest, #key)
+define method make (c == <llvm-basic-block>, #rest rest, #key /*NAME, FUNC,
BEFORE*/)
=> (result :: <llvm-basic-block>);
next-method(c, pointer: call-out("make_llvm_BasicBlock", ptr:));
end;
@@ -166,6 +206,10 @@
call-out("delete_llvm_Module", void:, ptr: m.raw-value)
end;
+define method dump(m :: <llvm-module>) => ();
+ call-out("dump_llvm_Module", void:, ptr: m.raw-value)
+end;
+
// ###################################################
@@ -176,7 +220,9 @@
let m = make(<llvm-module>, name: "test");
-
+// make(<llvm-basic-block>).dump;
+ m.dump;
+
m.delete;
end method emit-tlf-gunk;
Modified: branches/llvm-backend/llvm-glue.cc
==============================================================================
--- branches/llvm-backend/llvm-glue.cc (original)
+++ branches/llvm-backend/llvm-glue.cc Tue Mar 1 18:56:45 2005
@@ -1 +1 @@
-#include <llvm/BasicBlock.h>
#include <llvm/Module.h>
namespace d2c
{
struct Obj
{
struct Class* c;
};
template <typename PREFIX, typename ELEM>
struct ArrayObject : PREFIX
{
std::size_t elems;
ELEM arr[];
};
struct ByteString : ArrayObject<Obj, unsigned char>
{
};
struct Symbol : Obj
{
ByteString* print_name;
};
struct Class : Obj
{
Symbol* name;
};
}
using namespace llvm;
using namespace d2c;
extern "C" void* make_llvm_BasicBlock(void)
{
return new BasicBlock();
}
extern "C" void delete_llvm_Value(Value* v)
{
delete v;
}
extern "C" void* make_llvm_Module(ByteString* name)
{
return new Module("TEST");
}
extern "C" void delete_llvm_Module(Module* m)
{
delete m;
}
extern "C" void* make_llvm_Function(FunctionType* type, void* name, Module*
module)
{
return new Function(type, GlobalValue::ExternalLinkage, "TEST", module);
}
\ No newline at end of file
+#include <llvm/BasicBlock.h>
#include <llvm/Module.h>
namespace d2c
{
struct Obj
{
struct Class* c;
};
template <typename PREFIX, typename ELEM>
struct ArrayObject : PREFIX
{
std::size_t elems;
ELEM arr[];
typedef ELEM* iterator;
iterator begin(void) { return arr; }
iterator end(void) { return arr + elems; }
};
struct ByteString : ArrayObject<Obj, unsigned char>
{
operator std::string (void) const
{
const char* start(reinterpret_cast<const char*>(arr));
return std::string(start, elems);
}
};
struct Symbol : Obj
{
ByteString* print_name;
};
struct Class : Obj
{
Symbol* name;
};
struct desc
{
Obj* heapptr;
union {
long l;
float f;
void *ptr;
} dataword;
};
struct SimpleObjectVector : ArrayObject<Obj, desc>
{
};
}
using namespace llvm;
using namespace d2c;
extern "C" void* make_llvm_BasicBlock(void/*NAME, FUNC, BEFORE*/)
{
return new BasicBlock();
}
extern "C" void delete_llvm_Value(Value* v)
{
delete v;
}
extern "C" void* make_llvm_Module(const ByteString* name)
{
return new Module(*name);
}
extern "C" void delete_llvm_Module(Module* m)
{
delete m;
}
extern "C" void dump_llvm_Module(Module* m)
{
m->dump();
}
extern "C" void* make_llvm_Function(FunctionType* type, const ByteString* name,
Module* module)
{
return new Function(type, GlobalValue::ExternalLinkage, *name, module);
}
extern "C" void dump_llvm_Value(Value* v)
{
v->dump();
}
\ No newline at end of file
--
Gd-chatter mailing list
Gd-chatter@xxxxxxxxxxxxxxxx
https://gauss.gwydiondylan.org/mailman/listinfo/gd-chatter
|