Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file current_buffer0.ml
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788open!Core_kernelopen!Import0moduleQ=structincludeQletboundp="boundp"|>Symbol.internandcurrent_buffer="current-buffer"|>Symbol.internandmakunbound="makunbound"|>Symbol.internandset_buffer="set-buffer"|>Symbol.internandsymbol_value="symbol-value"|>Symbol.internendmoduleBuffer=Buffer0letget()=Symbol.funcall0Q.current_buffer|>Buffer.of_value_exnletsett=Symbol.funcall1_iQ.set_buffer(t|>Buffer.to_value)letset_temporarilyt~f=letold=get()insett;protect~f~finally:(fun()->setold);;letvalue_is_defined(var:_Var.t)=Symbol.funcall1Q.boundp(var.symbol|>Symbol.to_value)|>Value.to_bool;;letsymbol_valuesymbol=Symbol.funcall1Q.symbol_value(symbol|>Symbol.to_value)letvalue_internal(var:_Var.t)=symbol_valuevar.symbol|>var.type_.of_value_exnletvaluevar=ifnot(value_is_definedvar)thenNoneelseSome(value_internalvar)letvalue_exnvar=ifnot(value_is_definedvar)thenraise_s[%message"[Current_buffer.value_exn] of undefined variable"~_:(var:_Var.t)];value_internalvar;;letvalue_opt_exnvar=matchvalue_exnvarwith|Somex->x|None->raise_s[%message"buffer unexpectedly does not give a value to variable"(var:_Var.t)~buffer:(get():Buffer.t)];;letclear_value(var:_Var.t)=Symbol.funcall1_iQ.makunbound(var.symbol|>Symbol.to_value);;letset_value(var:_Var.t)a=Symbol.funcall2_iQ.set(var.symbol|>Symbol.to_value)(a|>var.type_.to_value);;letset_valuesvars_and_values=List.itervars_and_values~f:(fun(Var.And_value.T(var,value))->set_valuevarvalue);;letset_values_temporarilyvars_and_values~f=letold_buffer=get()inletolds=List.mapvars_and_values~f:(fun(Var.And_value.T(var,_))->Var.And_value_option.T(var,valuevar))inList.itervars_and_values~f:(fun(Var.And_value.T(var,value))->set_valuevarvalue);protect~f~finally:(fun()->letnew_buffer=get()inletbuffer_changed=not(Buffer.equalold_buffernew_buffer)inifbuffer_changedthensetold_buffer;List.iterolds~f:(fun(Var.And_value_option.T(var,value_opt))->matchvalue_optwith|None->clear_valuevar|Somevalue->set_valuevarvalue);ifbuffer_changedthensetnew_buffer);;letset_value_temporarilyvarvalue~f=set_values_temporarily[T(var,value)]~flethas_non_null_valuevar=matchvalue{varwithtype_=Value.Type.bool}with|None->false|Someb->b;;