Author: tewk
Date: Fri Dec  5 04:39:55 2008
New Revision: 33506

Added:
   trunk/compilers/ncigen/k.h
   trunk/compilers/ncigen/kk.h
Modified:
   trunk/compilers/ncigen/sqlite_interface_generator.pl

Log:
[ncigen] SQLite autogenerated stubs


Added: trunk/compilers/ncigen/k.h
==============================================================================
--- (empty file)
+++ trunk/compilers/ncigen/k.h  Fri Dec  5 04:39:55 2008
@@ -0,0 +1,47 @@
+extern const char sqlite3_version[];
+const char *sqlite3_libversion(void);
+int sqlite3_libversion_number(void);
+int sqlite3_threadsafe(void);
+typedef struct sqlite3 sqlite3;
+typedef long long int sqlite_int64;
+typedef unsigned long long int sqlite_uint64;
+typedef sqlite_int64 sqlite3_int64;
+typedef sqlite_uint64 sqlite3_uint64;
+int sqlite3_close(sqlite3 *);
+typedef int (*sqlite3_callback)(void*,int,char**, char**);
+int sqlite3_exec( sqlite3*, const char *sql, int 
(*callback)(void*,int,char**,char**), void *, char **errmsg);
+typedef struct sqlite3_mutex sqlite3_mutex;
+int sqlite3_extended_result_codes(sqlite3*, int onoff);
+sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
+int sqlite3_changes(sqlite3*);
+int sqlite3_total_changes(sqlite3*);
+void sqlite3_interrupt(sqlite3*);
+int sqlite3_complete(const char *sql);
+int sqlite3_complete16(const void *sql);
+int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*);
+int sqlite3_busy_timeout(sqlite3*, int ms);
+int sqlite3_get_table( sqlite3*, const char *sql, char ***pResult, int *nrow, 
int *ncolumn, char **errmsg);
+void sqlite3_free_table(char **result);
+char *sqlite3_vmprintf(const char*, va_list);
+void *sqlite3_malloc(int);
+void *sqlite3_realloc(void*, int);
+void sqlite3_free(void*);
+sqlite3_int64 sqlite3_memory_used(void);
+sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
+void sqlite3_randomness(int N, void *P);
+int sqlite3_set_authorizer( sqlite3*, int (*xAuth)(void*,int,const char*,const 
char*,const char*,const char*), void *pUserData);
+void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*);
+void *sqlite3_profile(sqlite3*, void(*xProfile)(void*,const 
char*,sqlite3_uint64), void*);
+void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
+int sqlite3_open( const char *filename, sqlite3 **ppDb);
+int sqlite3_open16( const void *filename, sqlite3 **ppDb);
+int sqlite3_open_v2( const char *filename, sqlite3 **ppDb, int flags, const 
char *zVfs);
+int sqlite3_errcode(sqlite3 *db);
+const char *sqlite3_errmsg(sqlite3*);
+const void *sqlite3_errmsg16(sqlite3*);
+typedef struct sqlite3_stmt sqlite3_stmt;
+int sqlite3_limit(sqlite3*, int id, int newVal);
+int sqlite3_prepare( sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt 
**ppStmt, const char **pzTail);
+int sqlite3_prepare_v2( sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt 
**ppStmt, const char **pzTail);
+int sqlite3_prepare16( sqlite3 *db, const void *zSql, int nByte, sqlite3_stmt 
**ppStmt, const void **pzTail);
+int sqlite3_prepare16_v2( sqlite3 *db, const void *zSql, int nByte, 
sqlite3_stmt **ppStmt, const void **pzTail);

Added: trunk/compilers/ncigen/kk.h
==============================================================================
--- (empty file)
+++ trunk/compilers/ncigen/kk.h Fri Dec  5 04:39:55 2008
@@ -0,0 +1,2 @@
+int a(int a, int b);
+int b(int a, int b);

Modified: trunk/compilers/ncigen/sqlite_interface_generator.pl
==============================================================================
--- trunk/compilers/ncigen/sqlite_interface_generator.pl        (original)
+++ trunk/compilers/ncigen/sqlite_interface_generator.pl        Fri Dec  5 
04:39:55 2008
@@ -13,10 +13,17 @@
 run("gcc -x c -E $fn > $pp_fn");
 my $compiler = compreg('NCIGEN');
 my $ast = $compiler.parse(slurp($pp_fn));
-say +$ast;
-for $ast.item() -> $x {
+
+my $b = $ast.item();
+
+for ($ast.item().kv) -> $k,$v {
   say "====================================================";
-  say $x;
+  say $k;
+  say $v.perl;
+  for ($v.list) -> $x {
+    say $x.perl;
+  }
+  say pir($v);
 }
 
 sub compreg {
@@ -29,3 +36,109 @@
   $prefix ~ nonce;
 }
 
+sub gen_preamble($nsname, $libname) {
+    my $fmt = ".namespace [$nsname]\n";
+    $fmt ~= ".sub __load_lib_dlfunc_init__ :anon :init :load\n";
+
+    if $libname {
+        $fmt ~= "loadlib \$P1, '$libname'\nif \$P1 goto has_lib\n";
+    }
+    else {
+        $fmt ~= "\$P1 = null\ngoto has_lib\n";
+    }
+
+    $fmt ~= "\$P2 = new 'Exception'";
+    $fmt ~= "\$P2[0] = 'error loading $libname - loadlib failed'";
+    $fmt ~= "throw \$P2";
+    $fmt ~= "has_lib:";
+
+    return $fmt;
+}
+
+multi sub pir($node) {
+    return  pir_children($node);
+}
+multi sub pir(NCIGENAST::TypeDef $node) { return ""; }
+multi sub pir(NCIGENAST::VarDecl $node) { return ""; } 
+multi sub pir(NCIGENAST::FuncDecl $node) {
+    ##  get list of arguments to operation
+    my $arglist = $node.list();
+
+    my $type = param_to_code($node, 1);
+
+    for @($arglist) -> $x {
+        $type ~= param_to_code($x);
+    }
+
+    my $name = $node.name();
+    my $fmt = "dlfunc \$P2, \$P1, '$name', '$type'\nstore_global '$name', 
\$P2";
+
+    return $fmt;
+}
+
+sub param_to_code($node, $returncode) {
+    my $I0 = $node.'pointer'();
+    my $I2 = $node.'pointer_cnt'();
+    my $pt = $node.'primitive_type'();
+
+    if ($node.pointer()) {
+        if ($pt ~~ 'void' ) {
+            if ($returncode) { return ""; }
+            else { return "v"; }
+        }
+        elsif ($pt ~~ 'int') { return "i"; }
+        elsif ($pt ~~ 'long') { return "l"; }
+        elsif ($pt ~~ 'char') { return "c"; }
+        elsif ($pt ~~ 'short') { return "s"; }
+        else { return "p"; }
+    }
+    else {
+        if ($node.pointer_cnt() > 1 ) {
+            return "V";
+        }
+        if ($pt ~~ 'void' ) {
+            if ($returncode) { return "p"; } #probably should be "V"
+            else { return "p"; } 
+        }
+        elsif ($pt ~~ 'int') { return "V"; }
+        elsif ($pt ~~ 'long') { return "V"; }
+        elsif ($pt ~~ 'char') { return "t"; }
+        elsif ($pt ~~ 'short') { return "V"; }
+        else { 
+            say "ERROR";
+            say $pt;
+            say "what is this";
+            return "p"; }
+    }
+}
+
+sub to_pir($ast, $adverbs) {
+#    .param pmc ast
+#    .param pmc adverbs         :slurpy :named
+    
+    my $code = "";
+    my $raw = $adverbs['raw'];
+    unless ($raw) {
+        $code = gen_preamble($adverbs);
+    }
+
+    ##  now generate the pir
+    $code = pir(ast);
+
+    return $code;
+}
+
+sub pir_children($node) {
+    my $code = "";
+    for ($node.kv) -> $k, $v {
+        $code ~= pir($v);
+    }
+    return $code;
+}
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=perl6:
+

Reply via email to