Browse Source

add support for `--undefine foo` to remove define (#11400)

* add support for -D !foo to remove define

* use long syntax only
Rudy Ges 1 year ago
parent
commit
5d676dcc19
3 changed files with 10 additions and 0 deletions
  1. 3 0
      src/compiler/args.ml
  2. 3 0
      src/context/common.ml
  3. 4 0
      src/core/define.ml

+ 3 - 0
src/compiler/args.ml

@@ -136,6 +136,9 @@ let parse_args com =
 				| Some value -> Common.external_define_value com flag value
 				| None -> Common.external_define com flag;
 		),"<var[=value]>","define a conditional compilation flag");
+		("Compilation",["--undefine"],[],Arg.String (fun var ->
+			Common.external_undefine com var
+		),"","remove a conditional compilation flag");
 		("Debug",["-v";"--verbose"],[],Arg.Unit (fun () ->
 			com.verbose <- true
 		),"","turn on verbose mode");

+ 3 - 0
src/context/common.ml

@@ -505,6 +505,9 @@ let external_define_value ctx k v =
 let external_define ctx k =
 	Define.raw_define ctx.defines (convert_and_validate k)
 
+let external_undefine ctx k =
+	Define.raw_undefine ctx.defines (convert_and_validate k)
+
 let defines_for_external ctx =
 	PMap.foldi (fun k v acc ->
 		let added_underscore = PMap.add k v acc in

+ 4 - 0
src/core/define.ml

@@ -134,6 +134,10 @@ let define_value ctx k v =
 let raw_define ctx k =
 	raw_define_value ctx k "1"
 
+let raw_undefine ctx k =
+	ctx.values <- PMap.remove k ctx.values;
+	ctx.defines_signature <- None
+
 let define ctx k =
 	raw_define_value ctx (get_define_key k) "1"