orm fixes; glfw: remove C code
parent
a5af903362
commit
dc9cebe26c
|
@ -35,6 +35,7 @@ mut:
|
|||
file string
|
||||
line int
|
||||
line_directives bool
|
||||
cut_pos int
|
||||
}
|
||||
|
||||
fn new_cgen(out_name_c string) *CGen {
|
||||
|
@ -126,6 +127,23 @@ fn (g mut CGen) add_placeholder() int {
|
|||
return g.cur_line.len
|
||||
}
|
||||
|
||||
fn (g mut CGen) start_cut() {
|
||||
g.cut_pos = g.add_placeholder()
|
||||
}
|
||||
|
||||
fn (g mut CGen) cut() string {
|
||||
pos := g.cut_pos
|
||||
g.cut_pos = 0
|
||||
if g.is_tmp {
|
||||
res := g.tmp_line.right(pos)
|
||||
g.tmp_line = g.tmp_line.left(pos)
|
||||
return res
|
||||
}
|
||||
res := g.cur_line.right(pos)
|
||||
g.cur_line = g.cur_line.left(pos)
|
||||
return res
|
||||
}
|
||||
|
||||
fn (g mut CGen) set_placeholder(pos int, val string) {
|
||||
if g.nogen || g.pass != .main {
|
||||
return
|
||||
|
@ -246,3 +264,28 @@ fn build_thirdparty_obj_file(flag string) {
|
|||
println(res)
|
||||
}
|
||||
|
||||
fn os_name_to_ifdef(name string) string {
|
||||
switch name {
|
||||
case 'windows': return '_WIN32'
|
||||
case 'mac': return '__APPLE__'
|
||||
case 'linux': return '__linux__'
|
||||
case 'freebsd': return '__FreeBSD__'
|
||||
case 'openbsd': return '__OpenBSD__'
|
||||
case 'netbsd': return '__NetBSD__'
|
||||
case 'dragonfly': return '__DragonFly__'
|
||||
case 'msvc': return '_MSC_VER'
|
||||
}
|
||||
panic('bad os ifdef name "$name"')
|
||||
}
|
||||
|
||||
fn platform_postfix_to_ifdefguard(name string) string {
|
||||
switch name {
|
||||
case '.v': return '' // no guard needed
|
||||
case '_win.v': return '#ifdef _WIN32'
|
||||
case '_nix.v': return '#ifndef _WIN32'
|
||||
case '_lin.v': return '#ifdef __linux__'
|
||||
case '_mac.v': return '#ifdef __APPLE__'
|
||||
}
|
||||
panic('bad platform_postfix "$name"')
|
||||
}
|
||||
|
||||
|
|
|
@ -269,3 +269,9 @@ return strings__Builder_str(sb);
|
|||
} '
|
||||
}
|
||||
|
||||
fn (p mut Parser) parse_t() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -606,11 +606,15 @@ fn (p mut Parser) fn_call(f Fn, method_ph int, receiver_var, receiver_type strin
|
|||
if p.tok == .lt {
|
||||
p.check(.lt)
|
||||
gen_type = p.check_name()
|
||||
// run<T> => run_App
|
||||
if gen_type == 'T' && p.cur_gen_type != '' {
|
||||
gen_type = p.cur_gen_type
|
||||
}
|
||||
// `foo<Bar>()`
|
||||
// If we are in the first pass, we need to add `Bar` type to the generic function `foo`,
|
||||
// so that generic `foo`s body can be generated for each type in the second pass.
|
||||
if p.first_pass() {
|
||||
//println('registering $gen_type in $f.name')
|
||||
println('registering $gen_type in $f.name fname=$f.name')
|
||||
p.table.register_generic_fn_type(f.name, gen_type)
|
||||
// Function bodies are skipped in the first passed, we only need to register the generic type here.
|
||||
return
|
||||
|
|
|
@ -83,6 +83,8 @@ mut:
|
|||
cur_gen_type string // "App" to replace "T" in current generic function
|
||||
is_vweb bool
|
||||
is_sql bool
|
||||
sql_i int // $1 $2 $3
|
||||
sql_params string // ("select * from users where id = $1", ***"100"***)
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -94,17 +96,6 @@ const (
|
|||
MaxModuleDepth = 4
|
||||
)
|
||||
|
||||
fn platform_postfix_to_ifdefguard(name string) string {
|
||||
switch name {
|
||||
case '.v': return '' // no guard needed
|
||||
case '_win.v': return '#ifdef _WIN32'
|
||||
case '_nix.v': return '#ifndef _WIN32'
|
||||
case '_lin.v': return '#ifdef __linux__'
|
||||
case '_mac.v': return '#ifdef __APPLE__'
|
||||
}
|
||||
panic('bad platform_postfix "$name"')
|
||||
}
|
||||
|
||||
fn (v mut V) new_parser(path string, pass Pass) Parser {
|
||||
v.log('new_parser("$path")')
|
||||
v.cgen.pass = pass
|
||||
|
@ -185,7 +176,7 @@ fn (p mut Parser) parse() {
|
|||
}
|
||||
p.fgenln('\n')
|
||||
p.builtin_mod = p.mod == 'builtin'
|
||||
p.can_chash = p.mod == 'freetype' || p.mod == 'glfw' || p.mod=='glfw2' || p.mod=='ui' // TODO tmp remove
|
||||
p.can_chash = p.mod == 'freetype' || p.mod=='ui' // TODO tmp remove
|
||||
// Import pass - the first and the smallest pass that only analyzes imports
|
||||
// fully qualify the module name, eg base64 to encoding.base64
|
||||
fq_mod := p.table.qualify_module(p.mod, p.file_path)
|
||||
|
@ -1403,7 +1394,17 @@ fn (p mut Parser) bterm() string {
|
|||
p.gen(tok.str())
|
||||
}
|
||||
p.next()
|
||||
p.check_types(p.expression(), typ)
|
||||
// `id == user.id` => `id == $1`, `user.id`
|
||||
if p.is_sql {
|
||||
p.sql_i++
|
||||
p.gen('$' + p.sql_i.str())
|
||||
p.cgen.start_cut()
|
||||
p.check_types(p.expression(), typ)
|
||||
p.sql_params = p.sql_params + p.cgen.cut() + ','
|
||||
//println('sql params = "$p.sql_params"')
|
||||
} else {
|
||||
p.check_types(p.expression(), typ)
|
||||
}
|
||||
typ = 'bool'
|
||||
if is_str { //&& !p.is_sql {
|
||||
p.gen(')')
|
||||
|
@ -2951,20 +2952,6 @@ fn (p mut Parser) get_tmp_counter() int {
|
|||
return p.tmp_cnt
|
||||
}
|
||||
|
||||
fn os_name_to_ifdef(name string) string {
|
||||
switch name {
|
||||
case 'windows': return '_WIN32'
|
||||
case 'mac': return '__APPLE__'
|
||||
case 'linux': return '__linux__'
|
||||
case 'freebsd': return '__FreeBSD__'
|
||||
case 'openbsd': return '__OpenBSD__'
|
||||
case 'netbsd': return '__NetBSD__'
|
||||
case 'dragonfly': return '__DragonFly__'
|
||||
case 'msvc': return '_MSC_VER'
|
||||
}
|
||||
panic('bad os ifdef name "$name"')
|
||||
}
|
||||
|
||||
fn (p mut Parser) if_st(is_expr bool, elif_depth int) string {
|
||||
if is_expr {
|
||||
//if p.fileis('if_expr') {
|
||||
|
|
|
@ -102,14 +102,23 @@ $table_name $tmp;
|
|||
${obj_gen.str()}
|
||||
|
||||
')
|
||||
p.cgen.resetln(tmp)
|
||||
}
|
||||
p.cgen.resetln(tmp)
|
||||
}
|
||||
// Array
|
||||
else {
|
||||
p.cgen.insert_before('
|
||||
q += ' order by id'
|
||||
mut params_gen := ''
|
||||
params := p.sql_params.split(',')
|
||||
for i, param in params {
|
||||
params_gen += 'params[$i] = int_str($param).str;'
|
||||
}
|
||||
|
||||
p.cgen.insert_before('char* params[$p.sql_i];
|
||||
$params_gen
|
||||
|
||||
void* res = PQexecParams(db.conn, "$q", $p.sql_i, 0, params, 0, 0, 0) ;
|
||||
array_pg__Row rows = pg__res_to_rows(res);
|
||||
|
||||
array_pg__Row rows = pg__DB_exec(db, tos2("$q"));
|
||||
//printf("ROWS LEN=%d\\n", rows.len);
|
||||
// TODO preallocate
|
||||
array arr_$tmp = new_array(0, 0, sizeof($table_name));
|
||||
for (int i = 0; i < rows.len; i++) {
|
||||
|
|
|
@ -98,7 +98,6 @@ const (
|
|||
KeyDown = 264
|
||||
)
|
||||
|
||||
// TODO COPY PASTA
|
||||
struct WinCfg {
|
||||
width int
|
||||
height int
|
||||
|
@ -136,10 +135,10 @@ type clickpubfn fn (window voidptr, button, action, mods int)
|
|||
|
||||
pub fn init() {
|
||||
C.glfwInit()
|
||||
# glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
||||
# glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
||||
# glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
|
||||
# glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||||
C.glfwWindowHint(C.GLFW_CONTEXT_VERSION_MAJOR, 3)
|
||||
C.glfwWindowHint(C.GLFW_CONTEXT_VERSION_MINOR, 3)
|
||||
C.glfwWindowHint(C.GLFW_OPENGL_FORWARD_COMPAT, C.GL_TRUE)
|
||||
C.glfwWindowHint(C.GLFW_OPENGL_PROFILE, C.GLFW_OPENGL_CORE_PROFILE)
|
||||
}
|
||||
|
||||
pub fn (w &Window) destroy() {
|
||||
|
@ -172,12 +171,8 @@ pub fn create_window(c WinCfg) *Window {
|
|||
println('failed to create glfw window')
|
||||
C.glfwTerminate()
|
||||
}
|
||||
// # glfwSetCursorPosCallback(cwindow, glfw__mouse_move) ;
|
||||
// C.glfwSetCursorPosCallback(cwindow, mouse_move)
|
||||
C.printf('create window wnd=%p ptr==%p\n', cwindow, c.ptr)
|
||||
C.glfwSetWindowUserPointer(cwindow, c.ptr)
|
||||
// # void *a =glfwGetWindowUserPointer(cwindow);
|
||||
// # printf("aaaaaa=%p d=%d\n", a,a);
|
||||
window := &Window {
|
||||
data: cwindow,
|
||||
title: c.title,
|
||||
|
@ -190,9 +185,6 @@ pub fn (w &Window) set_title(title string) {
|
|||
}
|
||||
|
||||
pub fn (w &Window) make_context_current() {
|
||||
// ChatsRepo
|
||||
kkk := 0
|
||||
// println('making context current' )
|
||||
C.glfwMakeContextCurrent(w.data)
|
||||
}
|
||||
|
||||
|
@ -213,7 +205,6 @@ pub fn set_should_close(w voidptr, close bool) {
|
|||
}
|
||||
|
||||
pub fn (w &Window) should_close() bool {
|
||||
// ChatsRepo
|
||||
return C.glfwWindowShouldClose(w.data)
|
||||
}
|
||||
|
||||
|
@ -258,12 +249,10 @@ pub fn get_time() f64 {
|
|||
}
|
||||
|
||||
pub fn key_pressed(wnd voidptr, key int) bool {
|
||||
# return glfwGetKey(wnd, key) == GLFW_PRESS;
|
||||
return false
|
||||
return int(C.glfwGetKey(wnd, key)) == C.GLFW_PRESS
|
||||
}
|
||||
|
||||
// TODO not mut
|
||||
pub fn (w mut Window) get_clipboard_text() string {
|
||||
pub fn (w &Window) get_clipboard_text() string {
|
||||
return string(byteptr(C.glfwGetClipboardString(w.data)))
|
||||
}
|
||||
|
||||
|
@ -289,18 +278,17 @@ pub fn (w &Window) set_user_ptr(ptr voidptr) {
|
|||
C.glfwSetWindowUserPointer(w.data, ptr)
|
||||
}
|
||||
|
||||
pub fn C.glfwGetVideoMode() C.GLFWvideoMode
|
||||
struct C.GLFWvidmode {
|
||||
width int
|
||||
height int
|
||||
}
|
||||
|
||||
pub fn C.glfwGetVideoMode() *C.GLFWvidmode
|
||||
|
||||
pub fn get_monitor_size() Size {
|
||||
# GLFWvidmode* mode = glfwGetVideoMode(glfwGetPrimaryMonitor());
|
||||
// window_width = mode->width;
|
||||
// window_height = mode->height;
|
||||
// monitor := C.glfwGetPrimaryMonitor()
|
||||
res := Size{}
|
||||
# res.width=mode->width;
|
||||
# res.height=mode->height;
|
||||
// C.glfwGetMonitorPhysicalSize(monitor, &res.width, &res.height)
|
||||
return res
|
||||
//# GLFWvidmode* mode = glfwGetVideoMode(glfwGetPrimaryMonitor());
|
||||
mode := C.glfwGetVideoMode(C.glfwGetPrimaryMonitor())
|
||||
return Size{mode.width, mode.height}
|
||||
}
|
||||
|
||||
pub fn (size Size) str() string {
|
||||
|
|
|
@ -81,6 +81,7 @@ pub fn run<T>(port int) {
|
|||
conn := l.accept() or {
|
||||
panic('accept() failed')
|
||||
}
|
||||
foobar<T>()
|
||||
// TODO move this to handle_conn<T>(conn, app)
|
||||
s := conn.read_line()
|
||||
if s == '' {
|
||||
|
@ -159,6 +160,9 @@ pub fn run<T>(port int) {
|
|||
}
|
||||
|
||||
|
||||
pub fn foobar<T>() {
|
||||
}
|
||||
|
||||
fn (ctx mut Context) parse_form(s string) {
|
||||
if !(ctx.req.method in methods_with_form) {
|
||||
return
|
||||
|
|
Loading…
Reference in New Issue