mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 07:33:01 +00:00 
			
		
		
		
	Merge pull request #1517 from sogaiu/add-assertf
Add assertf and use in boot.janet. Address #1516
This commit is contained in:
		| @@ -154,6 +154,11 @@ | ||||
|        ,v | ||||
|        (,error ,(if err err (string/format "assert failure in %j" x)))))) | ||||
|  | ||||
| (defmacro assertf | ||||
|   "Convenience macro that combines `assert` and `string/format`." | ||||
|   [x & args] | ||||
|   ~(as-macro ,assert ,x (,string/format ,;args))) | ||||
|  | ||||
| (defmacro defdyn | ||||
|   ``Define an alias for a keyword that is used as a dynamic binding. The | ||||
|   alias is a normal, lexically scoped binding that can be used instead of | ||||
| @@ -3934,7 +3939,7 @@ | ||||
|     (defn make-sig [] | ||||
|       (ffi/signature :default real-ret-type ;computed-type-args)) | ||||
|     (defn make-ptr [] | ||||
|       (assert (ffi/lookup (if lazy (llib) lib) raw-symbol) (string "failed to find ffi symbol " raw-symbol))) | ||||
|       (assertf (ffi/lookup (if lazy (llib) lib) raw-symbol) "failed to find ffi symbol %v" raw-symbol)) | ||||
|     (if lazy | ||||
|       ~(defn ,alias ,;meta [,;formal-args] | ||||
|          (,ffi/call (,(delay (make-ptr))) (,(delay (make-sig))) ,;formal-args)) | ||||
| @@ -4111,7 +4116,7 @@ | ||||
|     "Get the manifest for a give installed bundle" | ||||
|     [bundle-name] | ||||
|     (def name (get-manifest-filename bundle-name)) | ||||
|     (assert (fexists name) (string "no bundle " bundle-name " found")) | ||||
|     (assertf (fexists name) "no bundle %v found" bundle-name) | ||||
|     (parse (slurp name))) | ||||
|  | ||||
|   (defn- get-bundle-module | ||||
| @@ -4254,11 +4259,9 @@ | ||||
|       (def missing (seq [d :in deps :when (not (bundle/installed? d))] (string d))) | ||||
|       (when (next missing) (errorf "missing dependencies %s" (string/join missing ", ")))) | ||||
|     (def bundle-name (get config :name default-bundle-name)) | ||||
|     (assert bundle-name (errorf "unable to infer bundle name for %v, use :name argument" path)) | ||||
|     (assert (not (string/check-set "\\/" bundle-name)) | ||||
|             (string "bundle name " | ||||
|                     bundle-name | ||||
|                     " cannot contain path separators")) | ||||
|     (assertf bundle-name "unable to infer bundle name for %v, use :name argument" path) | ||||
|     (assertf (not (string/check-set "\\/" bundle-name)) | ||||
|              "bundle name %v cannot contain path separators" bundle-name) | ||||
|     (assert (next bundle-name) "cannot use empty bundle-name") | ||||
|     (assert (not (fexists (get-manifest-filename bundle-name))) | ||||
|             "bundle is already installed") | ||||
| @@ -4310,7 +4313,7 @@ | ||||
|     (var i 0) | ||||
|     (def man (bundle/manifest bundle-name)) | ||||
|     (def files (get man :files @[])) | ||||
|     (assert (os/mkdir dest-dir) (string "could not create directory " dest-dir " (or it already exists)")) | ||||
|     (assertf (os/mkdir dest-dir) "could not create directory %v (or it already exists)" dest-dir) | ||||
|     (def s (sep)) | ||||
|     (os/mkdir (string dest-dir s "bundle")) | ||||
|     (def install-hook (string dest-dir s "bundle" s "init.janet")) | ||||
|   | ||||
| @@ -986,4 +986,14 @@ | ||||
| (assert (deep= (get (dyn 'a) :source-form) source)) | ||||
| (setdyn *debug* nil) | ||||
|  | ||||
| # issue #1516 | ||||
| (assert (assertf true) "assertf 1 argument") | ||||
| (assert (assertf true "fun message") "assertf 2 arguments") | ||||
| (assert (assertf true "%s message" "mystery") "assertf 3 arguments") | ||||
| (assert (assertf (not nil) "%s message" "ordinary") "assertf not nil") | ||||
| (assert-error "assertf error 1" (assertf false)) | ||||
| (assert-error "assertf error 2" (assertf false "fun message")) | ||||
| (assert-error "assertf error 3" (assertf false "%s message" "mystery")) | ||||
| (assert-error "assertf error 4" (assertf nil "%s %s" "alice" "bob")) | ||||
|  | ||||
| (end-suite) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose