mirror of
https://github.com/carp-lang/Carp.git
synced 2024-10-11 04:27:55 +03:00
can handle * in function names
This commit is contained in:
parent
53f0e0128d
commit
d1f2966c81
2
Makefile
2
Makefile
@ -4,7 +4,7 @@ LDLIBS=-lffi
|
||||
SOURCE_FILES=src/main.c src/obj.c src/gc.c src/obj_string.c src/reader.c src/eval.c src/env.c src/primops.c src/repl.c src/obj_array.c
|
||||
|
||||
all: src/main.o
|
||||
clang $(SOURCE_FILES) -g -O0 -Wall -rdynamic -o ./bin/carp-repl -ldl $(CFLAGS) $(LDFLAGS) $(LDLIBS)
|
||||
clang $(SOURCE_FILES) -g -O2 -Wall -rdynamic -o ./bin/carp-repl -ldl $(CFLAGS) $(LDFLAGS) $(LDLIBS)
|
||||
|
||||
run:
|
||||
./bin/carp
|
||||
|
@ -284,6 +284,7 @@
|
||||
(map (fn [dep] (add-function-dependency! (str dep) func-name)) total-dependencies)
|
||||
(def ast ast-annotated)
|
||||
(def c c-program-string)
|
||||
;;(println (str "Will save and compile: '" func-name "' with c-func-name '" c-func-name "' and signature: " t))
|
||||
(save-and-compile func-name t c-func-name c-file-name c-program-string proto total-dependencies exe)
|
||||
(meta-set! (eval (symbol func-name)) :code func-code))))
|
||||
|
||||
@ -300,8 +301,10 @@
|
||||
(def out-lib (load-dylib (str out-dir c-func-name (:dylib-extension platform-specifics))))
|
||||
(register out-lib c-func-name arg-types return-type)
|
||||
(add-func! func-name proto out-lib)
|
||||
(let [f (eval (read func-name))]
|
||||
(do (def s (pretty-signature (signature f)))
|
||||
(let [f (eval (read func-name))
|
||||
sig (signature f)]
|
||||
(do (when (nil? sig) (error (str "No signature on function " f)))
|
||||
(def s (pretty-signature sig))
|
||||
(when echo-signature-after-bake (println (str func-name " : " s)))
|
||||
f)))))
|
||||
_ (error "Must bake function with type (:fn ...)")))
|
||||
|
@ -248,6 +248,7 @@
|
||||
(register-builtin "substring" '(:string :int) :string)
|
||||
(register-builtin "file_path_component" '(:string) :string)
|
||||
(register-builtin "get_input" '() :string)
|
||||
(register-builtin "mod" '(:int :int) :int)
|
||||
|
||||
(register-builtin "call" '((:fn () :void)) :void)
|
||||
(register-builtin "call1" '((:fn (:int) :void)) :void)
|
||||
|
@ -130,7 +130,7 @@
|
||||
(defn mapping []
|
||||
(map x2 [1 2 3 4 5]))
|
||||
|
||||
(bake mapping)
|
||||
;;(bake mapping)
|
||||
|
||||
(defn x2f [x]
|
||||
(* x 2.0))
|
||||
@ -147,4 +147,10 @@
|
||||
(defn mapping-strings []
|
||||
(map exclaim [(string-copy "hej") (string-copy "san") (string-copy "svej") (string-copy "san")]))
|
||||
|
||||
;;(bake mapping)
|
||||
(defn even-i? [x]
|
||||
(if (even? x)
|
||||
1
|
||||
0))
|
||||
|
||||
(defn map-even []
|
||||
(map even-i? [1 2 3 4 5 6 7]))
|
||||
|
@ -193,6 +193,10 @@ EXPORT void printret(int (*f)()) {
|
||||
printf("ret = %d\n", x);
|
||||
}
|
||||
|
||||
EXPORT int mod(int x, int y) {
|
||||
return x % y;
|
||||
}
|
||||
|
||||
#ifdef WIN32
|
||||
EXPORT void sleep(int millis) {
|
||||
carp_sleep(millis);
|
||||
|
@ -177,16 +177,16 @@ Obj *p_div(Obj** args, int arg_count) {
|
||||
}
|
||||
}
|
||||
|
||||
Obj *p_mod(Obj** args, int arg_count) {
|
||||
if(arg_count == 0) {
|
||||
return obj_new_int(1);
|
||||
}
|
||||
int prod = args[0]->i;
|
||||
for(int i = 1; i < arg_count; i++) {
|
||||
prod %= args[i]->i;
|
||||
}
|
||||
return obj_new_int(prod);
|
||||
}
|
||||
/* Obj *p_mod(Obj** args, int arg_count) { */
|
||||
/* if(arg_count == 0) { */
|
||||
/* return obj_new_int(1); */
|
||||
/* } */
|
||||
/* int prod = args[0]->i; */
|
||||
/* for(int i = 1; i < arg_count; i++) { */
|
||||
/* prod %= args[i]->i; */
|
||||
/* } */
|
||||
/* return obj_new_int(prod); */
|
||||
/* } */
|
||||
|
||||
Obj *p_eq(Obj** args, int arg_count) {
|
||||
if(arg_count < 2) {
|
||||
@ -1267,9 +1267,11 @@ char *lispify(char *name) {
|
||||
char *s0 = str_replace(name, "_", "-");
|
||||
char *s1 = str_replace(s0, "BANG", "!");
|
||||
char *s2 = str_replace(s1, "QMARK", "?");
|
||||
char *s3 = str_replace(s2, "PTR", "*");
|
||||
free(s0);
|
||||
free(s1);
|
||||
return s2;
|
||||
free(s2);
|
||||
return s3;
|
||||
}
|
||||
|
||||
ffi_type **make_arg_type_array(Obj *args, int arg_count, char *func_name) {
|
||||
|
@ -12,7 +12,7 @@ Obj *p_add(Obj** args, int arg_count);
|
||||
Obj *p_sub(Obj** args, int arg_count);
|
||||
Obj *p_mul(Obj** args, int arg_count);
|
||||
Obj *p_div(Obj** args, int arg_count);
|
||||
Obj *p_mod(Obj** args, int arg_count);
|
||||
//Obj *p_mod(Obj** args, int arg_count);
|
||||
Obj *p_eq(Obj** args, int arg_count);
|
||||
Obj *p_list(Obj** args, int arg_count);
|
||||
Obj *p_str(Obj** args, int arg_count);
|
||||
|
@ -160,7 +160,7 @@ void env_new_global() {
|
||||
register_primop("-", p_sub);
|
||||
register_primop("*", p_mul);
|
||||
register_primop("/", p_div);
|
||||
register_primop("mod", p_mod);
|
||||
//register_primop("mod", p_mod);
|
||||
register_primop("=", p_eq);
|
||||
register_primop("list", p_list);
|
||||
register_primop("str", p_str);
|
||||
|
Loading…
Reference in New Issue
Block a user