hipe_gensym.erl

来自「OTP是开放电信平台的简称」· ERL 代码 · 共 147 行

ERL
147
字号
%%=======================================================================%% File        : hipe_gensym.erl%% Author      : Eric Johansson, Kostis Sagonas%% Description : Generates unique symbols and fresh integer counts.%%=======================================================================%% $Id$%%=======================================================================%% Notes: Written while we were in Montreal, Canada for PPDP-2000 as an%%        exercise in Principles and Practice of Declarative Programming!%%=======================================================================-module(hipe_gensym).-export([%% init/0, new_var/0, new_label/0,	 %% update_lblrange/1, update_vrange/1, var_range/0, label_range/0,	 set_var/1, get_var/0, get_next_var/0,	 set_label/1, get_label/0, get_next_label/0]).-export([init/1, new_var/1, new_label/1,	 update_vrange/2, update_lblrange/2, var_range/1, label_range/1,	 set_var/2, get_var/1, get_next_var/1,	 set_label/2, get_label/1, get_next_label/1]).%%-----------------------------------------------------------------------%% %% %%-----------------------------------------------------------------------%% init() ->%%   put(var_count, 0),%%   put(label_count, 0),%%   put(var_min, 0),%%   put(var_max, 0),%%   put(lbl_min, 1),%%   put(lbl_max, 1).init(What) ->  put({What,var_count}, 0),  put({What,label_count}, 0),  put({What,var_min}, 0),  put({What,var_max}, 0),  put({What,lbl_min}, 1),  put({What,lbl_max}, 1).%% new_var() ->%%   V = get(var_count),%%   put(var_count, V+1),%%   V.new_var(What) ->  V = get({What,var_count}),  put({What,var_count}, V+1),  V.%% new_label() ->%%   L = get(label_count),%%   put(label_count, L+1),%%   L.new_label(What) ->  L = get({What,label_count}),  put({What,label_count}, L+1),  L.%% update_vrange(V) ->%%   Vmax = get(var_max),%%   Vmin = get(var_min),%%   put(var_min, lists:min([V, Vmin])),%%   put(var_max, lists:max([V, Vmax])).update_vrange(What,V) ->  Vmax = get({What,var_max}),  Vmin = get({What,var_min}),  put({What,var_min}, lists:min([V, Vmin])),  put({What,var_max}, lists:max([V, Vmax])).%% update_lblrange(L) ->%%   Lmax = get(lbl_max),%%   Lmin = get(lbl_min),%%   put(lbl_min, lists:min([L, Lmin])),%%   put(lbl_max, lists:max([L, Lmax])).update_lblrange(What,L) ->  Lmax = get({What,lbl_max}),  Lmin = get({What,lbl_min}),  put({What,lbl_min}, lists:min([L, Lmin])),  put({What,lbl_max}, lists:max([L, Lmax])).%% var_range() ->%%   {get(var_min), get(var_max)}.var_range(What) ->  {get({What,var_min}), get({What,var_max})}.%% label_range() ->%%   {get(lbl_min), get(lbl_max)}.label_range(What) ->  {get({What,lbl_min}), get({What,lbl_max})}. %%-----------------------------------------------------------------------%% Variable counter%%-----------------------------------------------------------------------set_var(X) ->  put(var_max, X).set_var(What,X) ->  put({What,var_max}, X).get_var() ->  get(var_max).get_var(What) ->  get({What,var_max}).get_next_var() ->  C = get(var_max),  put(var_max, C+1),  C+1.get_next_var(What) ->  C = get({What,var_max}),  put({What,var_max}, C+1),  C+1.%%-----------------------------------------------------------------------%% Label counter%%-----------------------------------------------------------------------set_label(X) ->  put(lbl_max, X).set_label(What,X) ->  put({What,lbl_max}, X).get_label() ->  get(lbl_max).get_label(What) ->  get({What,lbl_max}).get_next_label() ->  C = get(lbl_max),  put(lbl_max, C+1),  C+1.get_next_label(What) ->  C = get({What,lbl_max}),  put({What,lbl_max}, C+1),  C+1.%%-----------------------------------------------------------------------

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?