0
我想擴展Erlang混合器庫(https://github.com/opscode/mixer)以傳遞「-spec()」。它添加到模塊的功能的行。不過,我不清楚erlc的位置是如何指向erlang核心代碼的。Erlang類型規格如何獲得預處理
我開始用一個非常簡單的(測試)模塊:
-module(mix1).
-export([square/1]).
-spec(square(number()) -> number()).
square(X) -> X * X.
,並以 「erlc + DEBUG_INFO -S mix1.erl」 編制,並得到這個(MODULE_INFO功能去掉):
{module, mix1}. %% version = 0
{exports, [{module_info,0},{module_info,1},{square,1}]}.
{attributes, []}.
{labels, 7}.
{function, square, 1, 2}.
{label,1}.
{line,[{location,"mix1.erl",7}]}.
{func_info,{atom,mix1},{atom,square},1}.
{label,2}.
{line,[{location,"mix1.erl",8}]}.
{gc_bif,'*',{f,0},1,[{x,0},{x,0}],{x,0}}.
return.
我想弄清楚「-spec()」是如何翻譯的,我沒有看到它們,有什麼想法?我錯過了什麼。這裏的最終目標是將其用於分析轉換。
'S'選項不會生成AST,而是生成BEAM彙編器代碼。 @OdobenusRosmarus建議使用'epp:parse_file/3'是一種方法,另一種方法是使用'E'或'P'選項編譯。 – rvirding