mirror of
https://github.com/mikpe/pdp10-tools.git
synced 2026-01-23 19:08:00 +00:00
as: tunit: change exprs to be symbol+offset
This commit is contained in:
parent
e1fda8a177
commit
1f89281c1e
@ -162,10 +162,10 @@ exprs_values([Expr | Exprs], Tunit, Acc) ->
|
||||
|
||||
expr_value(Expr, Tunit) ->
|
||||
case Expr of
|
||||
#e_integer{value = Value} -> {ok, Value};
|
||||
#e_symbol{name = Name} ->
|
||||
#expr{symbol = false, offset = Value} -> {ok, Value};
|
||||
#expr{symbol = Name, offset = Offset} ->
|
||||
case tunit:get_symbol(Tunit, Name) of
|
||||
#symbol{st_value = Value} when Value =/= false -> {ok, Value};
|
||||
#symbol{st_value = Value} when Value =/= false -> {ok, Value + Offset};
|
||||
_ -> {error, {?MODULE, {undefined_symbol, Name}}}
|
||||
end
|
||||
end.
|
||||
|
||||
@ -625,7 +625,7 @@ insn_fixup(Tunit, Insn) ->
|
||||
|
||||
expr_fixup(Tunit, Expr) ->
|
||||
case Expr of
|
||||
#e_local_label{number = Number, direction = Direction} ->
|
||||
#expr{symbol = {Number, Direction}} ->
|
||||
LabelSerial = local_label_serial(Tunit, Number),
|
||||
ReferenceSerial =
|
||||
case Direction of
|
||||
@ -633,7 +633,7 @@ expr_fixup(Tunit, Expr) ->
|
||||
$f -> LabelSerial + 1
|
||||
end,
|
||||
Name = local_label_name(Number, ReferenceSerial),
|
||||
#e_symbol{name = Name};
|
||||
Expr#expr{symbol = Name};
|
||||
_ -> Expr
|
||||
end.
|
||||
|
||||
|
||||
@ -656,10 +656,9 @@ do_expr(First) ->
|
||||
badtok("invalid start of expr", First)
|
||||
end.
|
||||
|
||||
mk_integer_expr(Value) -> #e_integer{value = Value}.
|
||||
mk_local_label_expr(Number, Direction) ->
|
||||
#e_local_label{number = Number, direction = Direction}.
|
||||
mk_symbol_expr(Symbol) -> #e_symbol{name = Symbol}.
|
||||
mk_integer_expr(Value) -> #expr{symbol = false, offset = Value}.
|
||||
mk_local_label_expr(Number, Direction) -> mk_symbol_expr({Number, Direction}).
|
||||
mk_symbol_expr(Symbol) -> #expr{symbol = Symbol, offset = 0}.
|
||||
|
||||
%% String Lists ----------------------------------------------------------------
|
||||
|
||||
|
||||
@ -23,14 +23,11 @@
|
||||
|
||||
%% An expression occurring in a statement. (TODO: extend)
|
||||
|
||||
-record(e_integer, {value :: integer()}).
|
||||
-record(e_local_label, {number :: non_neg_integer(), direction :: $b | $f}).
|
||||
-record(e_symbol, {name :: string()}).
|
||||
|
||||
-type expr() :: #e_integer{}
|
||||
| #e_local_label{}
|
||||
| #e_symbol{}
|
||||
.
|
||||
-record(expr,
|
||||
{ symbol :: false | string() | {non_neg_integer(), $b | $f}
|
||||
, offset :: integer()
|
||||
}).
|
||||
-type expr() :: #expr{}.
|
||||
|
||||
%% A directive, label, or instruction is parsed to a statement, which is
|
||||
%% either interpreted immediately or appended to the representation of the
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user