mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 07:33:01 +00:00 
			
		
		
		
	Merge branch 'master' of github.com:janet-lang/janet
This commit is contained in:
		
							
								
								
									
										14
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								Makefile
									
									
									
									
									
								
							| @@ -226,8 +226,18 @@ build/janet-%.tar.gz: $(JANET_TARGET) \ | |||||||
| 	jpm.1 janet.1 LICENSE CONTRIBUTING.md $(JANET_LIBRARY) $(JANET_STATIC_LIBRARY) \ | 	jpm.1 janet.1 LICENSE CONTRIBUTING.md $(JANET_LIBRARY) $(JANET_STATIC_LIBRARY) \ | ||||||
| 	build/doc.html README.md build/c/janet.c build/c/shell.c jpm | 	build/doc.html README.md build/c/janet.c build/c/shell.c jpm | ||||||
| 	$(eval JANET_DIST_DIR = "janet-$(shell basename $*)") | 	$(eval JANET_DIST_DIR = "janet-$(shell basename $*)") | ||||||
| 	mkdir -p build/$(JANET_DIST_DIR) | 	mkdir -p build/$(JANET_DIST_DIR)/bin | ||||||
| 	cp -r $^ build/$(JANET_DIST_DIR)/ | 	cp $(JANET_TARGET) build/$(JANET_DIST_DIR)/bin/ | ||||||
|  | 	cp jpm build/$(JANET_DIST_DIR)/bin/ | ||||||
|  | 	mkdir -p build/$(JANET_DIST_DIR)/include | ||||||
|  | 	cp build/janet.h build/$(JANET_DIST_DIR)/include/ | ||||||
|  | 	mkdir -p build/$(JANET_DIST_DIR)/lib/ | ||||||
|  | 	cp $(JANET_LIBRARY) $(JANET_STATIC_LIBRARY) build/$(JANET_DIST_DIR)/lib/ | ||||||
|  | 	mkdir -p build/$(JANET_DIST_DIR)/man/man1/ | ||||||
|  | 	cp janet.1 jpm.1 build/$(JANET_DIST_DIR)/man/man1/ | ||||||
|  | 	mkdir -p build/$(JANET_DIST_DIR)/src/ | ||||||
|  | 	cp build/c/janet.c build/c/shell.c build/$(JANET_DIST_DIR)/src/ | ||||||
|  | 	cp CONTRIBUTING.md build/doc.html LICENSE README.md build/$(JANET_DIST_DIR)/ | ||||||
| 	cd build && tar -czvf ../$@ $(JANET_DIST_DIR) | 	cd build && tar -czvf ../$@ $(JANET_DIST_DIR) | ||||||
|  |  | ||||||
| ######################### | ######################### | ||||||
|   | |||||||
							
								
								
									
										36
									
								
								jpm
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								jpm
									
									
									
									
									
								
							| @@ -968,17 +968,18 @@ int main(int argc, const char **argv) { | |||||||
|   (var has-cpp false) |   (var has-cpp false) | ||||||
|   (def objects |   (def objects | ||||||
|     (seq [src :in sources] |     (seq [src :in sources] | ||||||
|  |       (def suffix | ||||||
|         (cond |         (cond | ||||||
|         (string/has-suffix? ".cpp" src) |           (string/has-suffix? ".cpp" src) ".cpp" | ||||||
|         (let [op (out-path src ".cpp" objext)] |           (string/has-suffix? ".cc" src) ".cc" | ||||||
|           (compile-cpp opts src op) |           (string/has-suffix? ".c" src) ".c" | ||||||
|           (set has-cpp true) |           (errorf "unknown source file type: %s, expected .c, .cc, or .cpp" src))) | ||||||
|           op) |       (def op (out-path src suffix objext)) | ||||||
|         (string/has-suffix? ".c" src) |       (if (= suffix ".c") | ||||||
|         (let [op (out-path src ".c" objext)] |  | ||||||
|         (compile-c opts src op) |         (compile-c opts src op) | ||||||
|           op) |         (do (compile-cpp opts src op) | ||||||
|         (errorf "unknown source file type: %s, expected .c or .cpp" src)))) |           (set has-cpp true))) | ||||||
|  |       op)) | ||||||
|  |  | ||||||
|   (when-let [embedded (opts :embedded)] |   (when-let [embedded (opts :embedded)] | ||||||
|     (loop [src :in embedded] |     (loop [src :in embedded] | ||||||
| @@ -1016,16 +1017,17 @@ int main(int argc, const char **argv) { | |||||||
|     # Get static objects |     # Get static objects | ||||||
|     (def sobjects |     (def sobjects | ||||||
|       (seq [src :in sources] |       (seq [src :in sources] | ||||||
|  |         (def suffix | ||||||
|           (cond |           (cond | ||||||
|           (string/has-suffix? ".cpp" src) |             (string/has-suffix? ".cpp" src) ".cpp" | ||||||
|           (let [op (out-path src ".cpp" sobjext)] |             (string/has-suffix? ".cc" src) ".cc" | ||||||
|             (compile-cpp opts src op true) |             (string/has-suffix? ".c" src) ".c" | ||||||
|             op) |             (errorf "unknown source file type: %s, expected .c, .cc, or .cpp" src))) | ||||||
|           (string/has-suffix? ".c" src) |         (def op (out-path src suffix sobjext)) | ||||||
|           (let [op (out-path src ".c" sobjext)] |         (if (= suffix ".c") | ||||||
|           (compile-c opts src op true) |           (compile-c opts src op true) | ||||||
|             op) |           (compile-cpp opts src op true)) | ||||||
|           (errorf "unknown source file type: %s, expected .c or .cpp")))) |         op)) | ||||||
|  |  | ||||||
|     (when-let [embedded (opts :embedded)] |     (when-let [embedded (opts :embedded)] | ||||||
|       (loop [src :in embedded] |       (loop [src :in embedded] | ||||||
|   | |||||||
| @@ -251,6 +251,9 @@ static JanetTable *handleattr(JanetCompiler *c, int32_t argn, const Janet *argv) | |||||||
|             case JANET_STRING: |             case JANET_STRING: | ||||||
|                 janet_table_put(tab, janet_ckeywordv("doc"), attr); |                 janet_table_put(tab, janet_ckeywordv("doc"), attr); | ||||||
|                 break; |                 break; | ||||||
|  |             case JANET_STRUCT: | ||||||
|  |                 janet_table_merge_struct(tab, janet_unwrap_struct(attr)); | ||||||
|  |                 break; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     return tab; |     return tab; | ||||||
|   | |||||||
| @@ -17,6 +17,10 @@ | |||||||
|   :name "test-mod-4" |   :name "test-mod-4" | ||||||
|   :source @["testmod4.c"]) |   :source @["testmod4.c"]) | ||||||
|  |  | ||||||
|  | (declare-native | ||||||
|  |   :name "testmod5" | ||||||
|  |   :source @["testmod5.cc"]) | ||||||
|  |  | ||||||
| (declare-executable | (declare-executable | ||||||
|   :name "testexec" |   :name "testexec" | ||||||
|   :entry "testexec.janet") |   :entry "testexec.janet") | ||||||
|   | |||||||
| @@ -2,7 +2,8 @@ | |||||||
| (use /build/testmod2) | (use /build/testmod2) | ||||||
| (use /build/testmod3) | (use /build/testmod3) | ||||||
| (use /build/test-mod-4) | (use /build/test-mod-4) | ||||||
|  | (use /build/testmod5) | ||||||
|  |  | ||||||
| (defn main [&] | (defn main [&] | ||||||
|   (print "Hello from executable!") |   (print "Hello from executable!") | ||||||
|   (print (+ (get5) (get6) (get7) (get8)))) |   (print (+ (get5) (get6) (get7) (get8) (get9)))) | ||||||
|   | |||||||
							
								
								
									
										42
									
								
								test/install/testmod5.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								test/install/testmod5.cc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | |||||||
|  | /* | ||||||
|  | * Copyright (c) 2020 Calvin Rose and contributors | ||||||
|  | * | ||||||
|  | * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
|  | * of this software and associated documentation files (the "Software"), to | ||||||
|  | * deal in the Software without restriction, including without limitation the | ||||||
|  | * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||||||
|  | * sell copies of the Software, and to permit persons to whom the Software is | ||||||
|  | * furnished to do so, subject to the following conditions: | ||||||
|  | * | ||||||
|  | * The above copyright notice and this permission notice shall be included in | ||||||
|  | * all copies or substantial portions of the Software. | ||||||
|  | * | ||||||
|  | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||||
|  | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||||
|  | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||||||
|  | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | ||||||
|  | * IN THE SOFTWARE. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | /* A very simple native module */ | ||||||
|  |  | ||||||
|  | #include <janet.h> | ||||||
|  | #include <iostream> | ||||||
|  |  | ||||||
|  | static Janet cfun_get_nine(int32_t argc, Janet *argv) { | ||||||
|  |     (void) argv; | ||||||
|  |     janet_fixarity(argc, 0); | ||||||
|  |     std::cout << "Hello!" << std::endl; | ||||||
|  |     return janet_wrap_number(9.0); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static const JanetReg array_cfuns[] = { | ||||||
|  |     {"get9", cfun_get_nine, NULL}, | ||||||
|  |     {NULL, NULL, NULL} | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | JANET_MODULE_ENTRY(JanetTable *env) { | ||||||
|  |     janet_cfuns(env, NULL, array_cfuns); | ||||||
|  | } | ||||||
| @@ -70,5 +70,17 @@ | |||||||
| (assert (= ~(,defn 1 2 3) [defn 1 2 3]) "bracket tuples are never macros") | (assert (= ~(,defn 1 2 3) [defn 1 2 3]) "bracket tuples are never macros") | ||||||
| (assert (= ~(,+ 1 2 3) [+ 1 2 3]) "bracket tuples are never function calls") | (assert (= ~(,+ 1 2 3) [+ 1 2 3]) "bracket tuples are never function calls") | ||||||
|  |  | ||||||
|  | # Metadata | ||||||
|  |  | ||||||
|  | (def foo-with-tags :a-tag :bar) | ||||||
|  | (assert (get (dyn 'foo-with-tags) :a-tag) "extra keywords in def are metadata tags") | ||||||
|  |  | ||||||
|  | (def foo-with-meta {:baz :quux} :bar) | ||||||
|  | (assert (= :quux (get (dyn 'foo-with-meta) :baz)) "extra struct in def is metadata") | ||||||
|  |  | ||||||
|  | (defn foo-fn-with-meta {:baz :quux} "This is a function" [x] (identity x)) | ||||||
|  | (assert (= :quux (get (dyn 'foo-fn-with-meta) :baz)) "extra struct in defn is metadata") | ||||||
|  | (assert (= "(foo-fn-with-meta x)\n\nThis is a function" (get (dyn 'foo-fn-with-meta) :doc)) "extra string in defn is docstring") | ||||||
|  |  | ||||||
| (end-suite) | (end-suite) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose