Skip to content

Commit fabc95c

Browse files
authored
Merge pull request #12 from wrapl/dev
dev
2 parents cc10497 + 114eca4 commit fabc95c

File tree

16 files changed

+1083
-57
lines changed

16 files changed

+1083
-57
lines changed

docs/library/db/postgres.rst

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,30 @@ db/postgres
2929
*TBD*
3030

3131

32+
:mini:`meth (Arg₁: connection):db`
33+
*TBD*
34+
35+
36+
:mini:`meth (Arg₁: connection):host`
37+
*TBD*
38+
39+
40+
:mini:`meth (Arg₁: connection):hostaddr`
41+
*TBD*
42+
43+
44+
:mini:`meth (Arg₁: connection):options`
45+
*TBD*
46+
47+
48+
:mini:`meth (Arg₁: connection):pass`
49+
*TBD*
50+
51+
52+
:mini:`meth (Arg₁: connection):port`
53+
*TBD*
54+
55+
3256
:mini:`meth (Connection: connection):prepare(SQL: string): statement`
3357
Creates a prepared statement on :mini:`Connection`.
3458

@@ -42,6 +66,10 @@ db/postgres
4266
*TBD*
4367

4468

69+
:mini:`meth (Arg₁: connection):user`
70+
*TBD*
71+
72+
4573
:mini:`type statement < function`
4674
A prepared statement. Calling a statement executes the prepared statement on the associated connection, with the provided arguments (if any).
4775

docs/library/hierarchy.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,12 @@ hierarchy
110110
"any":e -> "frame":w;
111111
"sequence":e -> "message":w;
112112
"any":e -> "curl":w;
113+
"any":e -> "basic":w;
114+
"basic":e -> "basicset":w;
115+
"any":e -> "basiciterator":w;
116+
"any":e -> "calculator":w;
117+
"any":e -> "accumulator":w;
118+
"function":e -> "statistic":w;
113119
"function":e -> "dist":w;
114120
"dist":e -> "bernoulli":w;
115121
"dist":e -> "binomial":w;

docs/library/util/bitset.rst

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@ util/bitset
99

1010
.. rst-class:: mini-api
1111

12-
:mini:`fun decodebitset(Arg₁: address)`
13-
*TBD*
14-
15-
1612
:mini:`type bitset < sequence`
1713
*TBD*
1814

src/db/build.rabs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ let RADB := scope("radb";) do
4343
execute("git clone -b dev https://github.com/rajamukherji/radb.git", Dir)
4444
:>execute("cp -rv ~/Work/Radb", Dir)
4545
Dir:chdir
46+
execute("git checkout fc108745a5dd2a3e758d4a90cef610ca8c0f7ac4")
4647
execute("make clean")
4748
execute('make libradb.a RADB_MEM=GC CFLAGS=-fpic', DEBUG and "DEBUG=1")
4849
end

src/db/postgres.c

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,14 @@ static int connection_prepare(const char *Name, const char *SQL, connection_t *C
410410

411411
static PGconn *connection_connect(connection_t *Connection) {
412412
for (;;) {
413-
ML_LOG_INFO(NULL, "%s", "Connecting to Postgres database");
413+
const char *Host = "<unknown>";
414+
for (const char **Keyword = Connection->Keywords; *Keyword; ++Keyword) {
415+
if (!strcmp(*Keyword, "host")) {
416+
Host = Connection->Values[Keyword - Connection->Keywords];
417+
break;
418+
}
419+
}
420+
ML_LOG_INFO(NULL, "Connecting to Postgres database at %s", Host);
414421
stringmap_foreach(Connection->Statements, Connection, (void *)connection_prepare);
415422
PGconn *Conn = PQconnectdbParams(Connection->Keywords, Connection->Values, 0);
416423
if (PQstatus(Conn) == CONNECTION_OK) {
@@ -736,6 +743,22 @@ ML_METHOD("close", MLConnectionT) {
736743
return MLNil;
737744
}
738745

746+
#define STRING_INFO_METHOD(NAME) \
747+
\
748+
ML_METHOD(#NAME, MLConnectionT) { \
749+
connection_t *Connection = (connection_t *)Args[0]; \
750+
const char *Value = PQ ## NAME(Connection->Conn); \
751+
return Value ? ml_string_copy(Value, -1) : MLNil; \
752+
}
753+
754+
STRING_INFO_METHOD(db)
755+
STRING_INFO_METHOD(user)
756+
STRING_INFO_METHOD(pass)
757+
STRING_INFO_METHOD(host)
758+
STRING_INFO_METHOD(hostaddr)
759+
STRING_INFO_METHOD(port)
760+
STRING_INFO_METHOD(options)
761+
739762
ML_LIBRARY_ENTRY0(db_postgres) {
740763
#include "postgres_init.c"
741764
Slot[0] = (ml_value_t *)MLConnectionT;

src/db/radb.c

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ ML_FUNCTION(FixedStoreCreate) {
4747
size_t ChunkSize = 0;
4848
ml_fixed_store_t *Store = new(ml_fixed_store_t);
4949
Store->Type = FixedStoreT;
50-
Store->Handle = fixed_store_create(ml_string_value(Args[0]), ml_integer_value_fast(Args[1]), ChunkSize);
50+
Store->Handle = fixed_store_create(ml_string_value(Args[0]), ml_integer_value(Args[1]), ChunkSize);
5151
CHECK_HANDLE(Store);
5252
return (ml_value_t *)Store;
5353
}
@@ -76,7 +76,7 @@ ML_METHOD("get", FixedStoreT, MLIntegerT) {
7676
// Returns the entry at :mini:`Index` in :mini:`Store`.
7777
ml_fixed_store_t *Store = (ml_fixed_store_t *)Args[0];
7878
CHECK_HANDLE(Store);
79-
size_t Index = ml_integer_value_fast(Args[1]);
79+
size_t Index = ml_integer_value(Args[1]);
8080
void *Value = fixed_store_get(Store->Handle, Index);
8181
size_t Length = fixed_store_node_size(Store->Handle);
8282
return ml_buffer(Value, Length);
@@ -124,11 +124,11 @@ ML_FUNCTION(StringStoreCreate) {
124124
size_t ChunkSize = 0;
125125
if (Count > 2) {
126126
ML_CHECK_ARG_TYPE(2, MLIntegerT);
127-
ChunkSize = ml_integer_value_fast(Args[2]);
127+
ChunkSize = ml_integer_value(Args[2]);
128128
}
129129
ml_string_store_t *Store = new(ml_string_store_t);
130130
Store->Type = StringStoreT;
131-
Store->Handle = string_store_create(ml_string_value(Args[0]), ml_integer_value_fast(Args[1]), ChunkSize);
131+
Store->Handle = string_store_create(ml_string_value(Args[0]), ml_integer_value(Args[1]), ChunkSize);
132132
CHECK_HANDLE(Store);
133133
return (ml_value_t *)Store;
134134
}
@@ -157,7 +157,7 @@ ML_METHOD("get", StringStoreT, MLIntegerT) {
157157
// Returns the entry at :mini:`Index` in :mini:`Store`.
158158
ml_string_store_t *Store = (ml_string_store_t *)Args[0];
159159
CHECK_HANDLE(Store);
160-
size_t Index = ml_integer_value_fast(Args[1]);
160+
size_t Index = ml_integer_value(Args[1]);
161161
size_t Length = string_store_size(Store->Handle, Index);
162162
if (Length == INVALID_INDEX) return ml_error("IndexError", "Invalid index");
163163
char *Value = snew(Length + 1);
@@ -174,7 +174,7 @@ ML_METHOD("set", StringStoreT, MLIntegerT, MLAddressT) {
174174
// Stores :mini:`Value` as the entry at :mini:`Index` in :mini:`Store` and returns :mini:`Value`.
175175
ml_string_store_t *Store = (ml_string_store_t *)Args[0];
176176
CHECK_HANDLE(Store);
177-
size_t Index = ml_integer_value_fast(Args[1]);
177+
size_t Index = ml_integer_value(Args[1]);
178178
string_store_set(Store->Handle, Index, ml_address_value(Args[2]), ml_address_length(Args[2]));
179179
return Args[2];
180180
}
@@ -192,7 +192,7 @@ ML_METHOD("write", StringStoreT, MLIntegerT) {
192192
CHECK_HANDLE(Store);
193193
ml_string_store_writer_t *Writer = new(ml_string_store_writer_t);
194194
Writer->Type = StringStoreWriterT;
195-
string_store_writer_open(Writer->Handle, Store->Handle, ml_integer_value_fast(Args[1]));
195+
string_store_writer_open(Writer->Handle, Store->Handle, ml_integer_value(Args[1]));
196196
return (ml_value_t *)Writer;
197197
}
198198

@@ -201,7 +201,7 @@ ML_METHOD("append", StringStoreT, MLIntegerT) {
201201
CHECK_HANDLE(Store);
202202
ml_string_store_writer_t *Writer = new(ml_string_store_writer_t);
203203
Writer->Type = StringStoreWriterT;
204-
string_store_writer_append(Writer->Handle, Store->Handle, ml_integer_value_fast(Args[1]));
204+
string_store_writer_append(Writer->Handle, Store->Handle, ml_integer_value(Args[1]));
205205
return (ml_value_t *)Writer;
206206
}
207207

@@ -218,31 +218,31 @@ ML_METHOD("read", StringStoreT, MLIntegerT) {
218218
CHECK_HANDLE(Store);
219219
ml_string_store_reader_t *Reader = new(ml_string_store_reader_t);
220220
Reader->Type = StringStoreReaderT;
221-
string_store_reader_open(Reader->Handle, Store->Handle, ml_integer_value_fast(Args[1]));
221+
string_store_reader_open(Reader->Handle, Store->Handle, ml_integer_value(Args[1]));
222222
return (ml_value_t *)Reader;
223223
}
224224

225225
ML_METHOD("search", StringStoreT, MLIntegerT, MLIntegerT) {
226226
ml_string_store_t *Store = (ml_string_store_t *)Args[0];
227227
CHECK_HANDLE(Store);
228-
size_t Index = ml_integer_value_fast(Args[1]);
229-
uint32_t Value = ml_integer_value_fast(Args[2]);
228+
size_t Index = ml_integer_value(Args[1]);
229+
uint32_t Value = ml_integer_value(Args[2]);
230230
return string_store_value_search_uint32(Store->Handle, Index, Value) ? MLSome : MLNil;
231231
}
232232

233233
ML_METHOD("insert", StringStoreT, MLIntegerT, MLIntegerT) {
234234
ml_string_store_t *Store = (ml_string_store_t *)Args[0];
235235
CHECK_HANDLE(Store);
236-
size_t Index = ml_integer_value_fast(Args[1]);
237-
uint32_t Value = ml_integer_value_fast(Args[2]);
236+
size_t Index = ml_integer_value(Args[1]);
237+
uint32_t Value = ml_integer_value(Args[2]);
238238
return string_store_value_insert_uint32(Store->Handle, Index, Value) ? MLSome : MLNil;
239239
}
240240

241241
ML_METHOD("remove", StringStoreT, MLIntegerT, MLIntegerT) {
242242
ml_string_store_t *Store = (ml_string_store_t *)Args[0];
243243
CHECK_HANDLE(Store);
244-
size_t Index = ml_integer_value_fast(Args[1]);
245-
uint32_t Value = ml_integer_value_fast(Args[2]);
244+
size_t Index = ml_integer_value(Args[1]);
245+
uint32_t Value = ml_integer_value(Args[2]);
246246
return string_store_value_remove_uint32(Store->Handle, Index, Value) ? MLSome : MLNil;
247247
}
248248

@@ -265,11 +265,11 @@ ML_FUNCTION(CborStoreCreate) {
265265
size_t ChunkSize = 0;
266266
if (Count > 2) {
267267
ML_CHECK_ARG_TYPE(2, MLIntegerT);
268-
ChunkSize = ml_integer_value_fast(Args[2]);
268+
ChunkSize = ml_integer_value(Args[2]);
269269
}
270270
ml_string_store_t *Store = new(ml_string_store_t);
271271
Store->Type = CborStoreT;
272-
Store->Handle = string_store_create(ml_string_value(Args[0]), ml_integer_value_fast(Args[1]), ChunkSize);
272+
Store->Handle = string_store_create(ml_string_value(Args[0]), ml_integer_value(Args[1]), ChunkSize);
273273
CHECK_HANDLE(Store);
274274
return (ml_value_t *)Store;
275275
}
@@ -292,7 +292,7 @@ ML_METHOD("close", CborStoreT) {
292292
ML_METHOD("get", CborStoreT, MLIntegerT) {
293293
ml_string_store_t *Store = (ml_string_store_t *)Args[0];
294294
CHECK_HANDLE(Store);
295-
size_t Index = ml_integer_value_fast(Args[1]);
295+
size_t Index = ml_integer_value(Args[1]);
296296
size_t Length = string_store_size(Store->Handle, Index);
297297
if (Length == INVALID_INDEX) return ml_error("IndexError", "Invalid index");
298298
ml_cbor_reader_t *Cbor = ml_cbor_reader(NULL, NULL, NULL);
@@ -310,7 +310,7 @@ ML_METHOD("get", CborStoreT, MLIntegerT) {
310310
ML_METHOD("set", CborStoreT, MLIntegerT, MLAnyT) {
311311
ml_string_store_t *Store = (ml_string_store_t *)Args[0];
312312
CHECK_HANDLE(Store);
313-
size_t Index = ml_integer_value_fast(Args[1]);
313+
size_t Index = ml_integer_value(Args[1]);
314314
string_store_writer_t Writer[1];
315315
string_store_writer_open(Writer, Store->Handle, Index);
316316
ml_value_t *Error = ml_cbor_encode_to(Writer, (void *)string_store_writer_write, NULL, Args[2]);
@@ -348,7 +348,7 @@ ML_FUNCTION(StringIndexCreate) {
348348
size_t ChunkSize = 0;
349349
if (Count > 1) {
350350
ML_CHECK_ARG_TYPE(2, MLIntegerT);
351-
ChunkSize = ml_integer_value_fast(Args[1]);
351+
ChunkSize = ml_integer_value(Args[1]);
352352
}
353353
const char *Prefix = ml_string_value(Args[0]);
354354
string_store_t *Values = string_store_create(Prefix, 16, ChunkSize);
@@ -449,7 +449,7 @@ ML_METHOD("delete", StringIndexT, MLAddressT) {
449449
ML_METHOD("get", StringIndexT, MLIntegerT) {
450450
ml_string_index_t *Store = (ml_string_index_t *)Args[0];
451451
CHECK_HANDLE(Store);
452-
size_t Index = ml_integer_value_fast(Args[1]);
452+
size_t Index = ml_integer_value(Args[1]);
453453
size_t Size = string_store_size(Store->Values, Index);
454454
char *Value = snew(Size + 1);
455455
string_store_get(Store->Values, Index, Value, Size);

src/db/ravs.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ ML_METHOD("changes", VersionStoreT, MLIntegerT) {
6464
ml_version_store_t *Store = (ml_version_store_t *)Args[0];
6565
CHECK_HANDLE(Store);
6666
ml_value_t *Changes = ml_list();
67-
version_store_change_list(Store->Handle, ml_integer_value_fast(Args[1]), (void *)changes_fn, Changes);
67+
version_store_change_list(Store->Handle, ml_integer_value(Args[1]), (void *)changes_fn, Changes);
6868
return Changes;
6969
}
7070

@@ -80,7 +80,7 @@ ML_METHOD("add", VersionStoreT, MLAnyT) {
8080
ML_METHOD("set", VersionStoreT, MLIntegerT, MLAnyT) {
8181
ml_version_store_t *Store = (ml_version_store_t *)Args[0];
8282
CHECK_HANDLE(Store);
83-
size_t Index = ml_integer_value_fast(Args[1]);
83+
size_t Index = ml_integer_value(Args[1]);
8484
ml_cbor_t Cbor = ml_to_cbor(Args[2]);
8585
if (!Cbor.Length) return Cbor.Error;
8686
version_store_value_update(Store->Handle, Index, Cbor.Data, Cbor.Length);
@@ -90,7 +90,7 @@ ML_METHOD("set", VersionStoreT, MLIntegerT, MLAnyT) {
9090
ML_METHOD("get", VersionStoreT, MLIntegerT) {
9191
ml_version_store_t *Store = (ml_version_store_t *)Args[0];
9292
CHECK_HANDLE(Store);
93-
size_t Index = ml_integer_value_fast(Args[1]);
93+
size_t Index = ml_integer_value(Args[1]);
9494
size_t Length = version_store_value_size(Store->Handle, Index);
9595
void *Buffer = GC_malloc_atomic(Length);
9696
version_store_value_get(Store->Handle, Index, Buffer, Length);
@@ -111,7 +111,7 @@ static int history_fn(ml_value_t *History, uint32_t Change, time_t Time, uint32_
111111
ML_METHOD("history", VersionStoreT, MLIntegerT) {
112112
ml_version_store_t *Store = (ml_version_store_t *)Args[0];
113113
CHECK_HANDLE(Store);
114-
size_t Index = ml_integer_value_fast(Args[1]);
114+
size_t Index = ml_integer_value(Args[1]);
115115
ml_value_t *History = ml_list();
116116
version_store_value_history(Store->Handle, Index, (void *)history_fn, History);
117117
return History;
@@ -120,8 +120,8 @@ ML_METHOD("history", VersionStoreT, MLIntegerT) {
120120
ML_METHOD("get", VersionStoreT, MLIntegerT, MLIntegerT) {
121121
ml_version_store_t *Store = (ml_version_store_t *)Args[0];
122122
CHECK_HANDLE(Store);
123-
size_t Index = ml_integer_value_fast(Args[1]);
124-
size_t Change = ml_integer_value_fast(Args[2]);
123+
size_t Index = ml_integer_value(Args[1]);
124+
size_t Change = ml_integer_value(Args[2]);
125125
size_t Length = version_store_value_revision_size(Store->Handle, Index, Change);
126126
void *Buffer = GC_malloc_atomic(Length);
127127
version_store_value_revision_get(Store->Handle, Index, Change, Buffer, Length);

src/fmt/build.rabs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ scope("gumbo";) do
3131
file("gumbo/src/string_piece.o"),
3232
file("gumbo/src/utf8.o")
3333
]
34+
file("html_init.c")[GUMBO]
3435
for Object in Objects do
3536
(Object % "c")[GUMBO] => fun() nil
3637
end

src/fmt/html.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#include <minilang/ml_macros.h>
33
#include <minilang/ml_xml.h>
44
#include <minilang/ml_stream.h>
5-
#include <gumbo.h>
5+
#include "gumbo.h"
66

77
#undef ML_CATEGORY
88
#define ML_CATEGORY "fmt/html"

src/math/build.rabs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,7 @@
11
so_module("math/dist.so", [file("dist.o")])
2-
:>so_module("math/stat.so", [file("stat.o")])
2+
so_module("math/stat.so", [file("stat.o")])
3+
4+
scope("symengine";) do
5+
LDFLAGS := old + ["-lsymengine"]
6+
so_module("math/symengine.so", [file("symengine.o")])
7+
end

0 commit comments

Comments
 (0)