diff options
Diffstat (limited to 'lib/asn1/src')
-rw-r--r-- | lib/asn1/src/.gitignore | 1 | ||||
-rw-r--r-- | lib/asn1/src/Makefile | 14 | ||||
-rw-r--r-- | lib/asn1/src/asn1ct_eval_ext.funcs | 1 | ||||
-rw-r--r-- | lib/asn1/src/asn1ct_eval_per.funcs | 1 | ||||
-rw-r--r-- | lib/asn1/src/asn1ct_gen_per_rt2ct.erl | 2 | ||||
-rw-r--r-- | lib/asn1/src/asn1ct_value.erl | 2 | ||||
-rw-r--r-- | lib/asn1/src/prepare_templates.erl | 25 |
7 files changed, 42 insertions, 4 deletions
diff --git a/lib/asn1/src/.gitignore b/lib/asn1/src/.gitignore index aee890a053..621f8f3623 100644 --- a/lib/asn1/src/.gitignore +++ b/lib/asn1/src/.gitignore @@ -1 +1,2 @@ /asn1ct_rtt.erl +/asn1ct_eval_*.erl diff --git a/lib/asn1/src/Makefile b/lib/asn1/src/Makefile index b54627a9b3..398b4f6f9d 100644 --- a/lib/asn1/src/Makefile +++ b/lib/asn1/src/Makefile @@ -42,6 +42,10 @@ RELSYSDIR = $(RELEASE_PATH)/lib/asn1-$(VSN) # EBIN = ../ebin + +EVAL_CT_MODULES = asn1ct_eval_ext \ + asn1ct_eval_per + CT_MODULES= \ asn1ct \ asn1ct_check \ @@ -60,7 +64,8 @@ CT_MODULES= \ asn1ct_value \ asn1ct_tok \ asn1ct_parser2 \ - asn1ct_table + asn1ct_table \ + $(EVAL_CT_MODULES) RT_MODULES= \ asn1rt \ @@ -143,6 +148,10 @@ $(EBIN)/asn1ct.$(EMULATOR):asn1ct.erl $(EBIN)/asn1ct_func.$(EMULATOR): asn1ct_func.erl $(ERLC) -o$(EBIN) $(ERL_COMPILE_FLAGS) -I../rt_templates $< +asn1ct_eval_%.erl: asn1ct_eval_%.funcs + erl -pa $(EBIN) -noshell -noinput \ + -run prepare_templates gen_asn1ct_eval $< >$@ + $(APP_TARGET): $(APP_SRC) ../vsn.mk $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@ @@ -194,6 +203,9 @@ prepare_templates.$(EMULATOR): prepare_templates.erl asn1rtt_%.$(EMULATOR): asn1rtt_%.erl erlc +debug_info $< +$(EVAL_CT_MODULES:%=%.erl): prepare_templates.$(EMULATOR) \ + $(EBIN)/asn1ct_rtt.$(EMULATOR) + # # Dependencies # diff --git a/lib/asn1/src/asn1ct_eval_ext.funcs b/lib/asn1/src/asn1ct_eval_ext.funcs new file mode 100644 index 0000000000..5761901f89 --- /dev/null +++ b/lib/asn1/src/asn1ct_eval_ext.funcs @@ -0,0 +1 @@ +{ext,transform_to_EXTERNAL1994,1}. diff --git a/lib/asn1/src/asn1ct_eval_per.funcs b/lib/asn1/src/asn1ct_eval_per.funcs new file mode 100644 index 0000000000..353424c231 --- /dev/null +++ b/lib/asn1/src/asn1ct_eval_per.funcs @@ -0,0 +1 @@ +{per,encode_integer,2}. diff --git a/lib/asn1/src/asn1ct_gen_per_rt2ct.erl b/lib/asn1/src/asn1ct_gen_per_rt2ct.erl index b1ecfa135d..7d00f2e817 100644 --- a/lib/asn1/src/asn1ct_gen_per_rt2ct.erl +++ b/lib/asn1/src/asn1ct_gen_per_rt2ct.erl @@ -603,7 +603,7 @@ emit_enc_enumerated_case(Erule,_C, {1,EnumName}, Count) -> emit_enc_enumerated_case(_Erule,C, {0,EnumName}, Count) -> %% ENUMERATED with extensionmark %% values within extension root - emit(["'",EnumName,"' -> ",{asis,[0|asn1rt_per_bin_rt2ct:encode_integer(C,Count)]}]); + emit(["'",EnumName,"' -> ",{asis,[0|asn1ct_eval_per:encode_integer(C, Count)]}]); emit_enc_enumerated_case(_Erule, _C, 'EXT_MARK', _Count) -> true. %% %% This clause is invoked in case of an ENUMERATED without extension mark diff --git a/lib/asn1/src/asn1ct_value.erl b/lib/asn1/src/asn1ct_value.erl index 389642c446..ed1deec2aa 100644 --- a/lib/asn1/src/asn1ct_value.erl +++ b/lib/asn1/src/asn1ct_value.erl @@ -65,7 +65,7 @@ from_type(M,Typename,Type) when is_record(Type,type) -> end; {constructed,bif} when Typename == ['EXTERNAL'] -> Val=from_type_constructed(M,Typename,InnerType,Type), - asn1rt_check:transform_to_EXTERNAL1994(Val); + asn1ct_eval_ext:transform_to_EXTERNAL1994(Val); {constructed,bif} -> from_type_constructed(M,Typename,InnerType,Type) end; diff --git a/lib/asn1/src/prepare_templates.erl b/lib/asn1/src/prepare_templates.erl index 7242166989..83155b2e52 100644 --- a/lib/asn1/src/prepare_templates.erl +++ b/lib/asn1/src/prepare_templates.erl @@ -18,7 +18,7 @@ %% -module(prepare_templates). --export([gen_asn1ct_rtt/1]). +-export([gen_asn1ct_rtt/1,gen_asn1ct_eval/1]). gen_asn1ct_rtt(Ms) -> io:format("%% Generated by ~s. DO NOT EDIT THIS FILE.\n" @@ -46,6 +46,29 @@ gen_asn1ct_rtt(Ms) -> io:format("code() ->\n~p.\n\n", [Funcs]), halt(0). +gen_asn1ct_eval([File]) -> + {ok,Funcs} = file:consult(File), + asn1ct_func:start_link(), + [asn1ct_func:need(MFA) || MFA <- Funcs], + io:format("%% Generated by ~s. DO NOT EDIT THIS FILE.\n" + "%%\n" + "%% Input file: ~s\n\n", [?MODULE,File]), + io:format("-module(~s).\n", [filename:rootname(File)]), + gen_asn1ct_eval_exp(Funcs), + asn1ct_func:generate(group_leader()), + halt(0). + +gen_asn1ct_eval_exp(Funcs) -> + io:put_chars("-export(["), + gen_asn1ct_eval_exp_1(Funcs, ""), + io:put_chars("]).\n"). + +gen_asn1ct_eval_exp_1([{_,F,A}|T], Sep) -> + io:put_chars(Sep), + io:format("~p/~p", [F,A]), + gen_asn1ct_eval_exp_1(T, ",\n"); +gen_asn1ct_eval_exp_1([], _) -> ok. + defined([H|T]) -> io:format("assert_defined(~p) -> ok", [H]), case T of |