mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-31 20:38:27 +08:00
[tools] parse IndexOfBlock inside procedures
a procedure can only see its own blocks
This commit is contained in:
@@ -55,7 +55,7 @@ let sprint = fun ?call_assoc expr ->
|
|||||||
sprintf "%s(%s)" op (eval e1)
|
sprintf "%s(%s)" op (eval e1)
|
||||||
| CallOperator (_,_) -> failwith "Operator should be binary or unary"
|
| CallOperator (_,_) -> failwith "Operator should be binary or unary"
|
||||||
| Call (i, [Ident s]) when Some i = n ->
|
| Call (i, [Ident s]) when Some i = n ->
|
||||||
let index = try List.assoc s l with Not_found -> failwith (sprintf "Unknown block: '%s'" s) in
|
let index = try List.assoc s l with Not_found -> failwith (sprintf "Expr_syntax call_assoc not found: '%s'" s) in
|
||||||
sprintf "%d" index
|
sprintf "%d" index
|
||||||
| Call (i, es) ->
|
| Call (i, es) ->
|
||||||
let ses = List.map eval es in
|
let ses = List.map eval es in
|
||||||
|
|||||||
@@ -43,18 +43,19 @@ let parse_expression = fun s ->
|
|||||||
s (Lexing.lexeme_char lexbuf 0);
|
s (Lexing.lexeme_char lexbuf 0);
|
||||||
exit 1
|
exit 1
|
||||||
| Parsing.Parse_error ->
|
| Parsing.Parse_error ->
|
||||||
fprintf stderr "Parsing error in '%s', token '%s' ?\n"
|
fprintf stderr "Fp_proc: Parsing error in '%s', token '%s' ?\n"
|
||||||
s (Lexing.lexeme lexbuf);
|
s (Lexing.lexeme lexbuf);
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
|
|
||||||
open Latlong
|
open Latlong
|
||||||
|
|
||||||
let subst_expression = fun env e ->
|
let subst_expression = fun (name, env) e ->
|
||||||
let rec sub = fun e ->
|
let rec sub = fun e ->
|
||||||
match e with
|
match e with
|
||||||
Ident i -> Ident (try List.assoc i env with Not_found -> i)
|
Ident i -> Ident (try List.assoc i env with Not_found -> i)
|
||||||
| Int _ | Float _ | Field _ -> e
|
| Int _ | Float _ | Field _ -> e
|
||||||
|
| Call ("IndexOfBlock", [Ident s]) -> Call ("IndexOfBlock", [ Ident ("'"^name^"."^s^"'") ]) (* prefix block name *)
|
||||||
| Call (i, es) -> Call (i, List.map sub es)
|
| Call (i, es) -> Call (i, List.map sub es)
|
||||||
| CallOperator (i, es) -> CallOperator (i, List.map sub es)
|
| CallOperator (i, es) -> CallOperator (i, List.map sub es)
|
||||||
| Index (i,e) -> Index (i,sub e)
|
| Index (i,e) -> Index (i,sub e)
|
||||||
@@ -230,8 +231,8 @@ let parse_include = fun dir flight_plan include_xml ->
|
|||||||
and sectors = get_children "sectors" proc
|
and sectors = get_children "sectors" proc
|
||||||
and header = get_pc_data "header" proc in
|
and header = get_pc_data "header" proc in
|
||||||
|
|
||||||
let exceptions = List.map (transform_exception prefix reroutes env) exceptions
|
let exceptions = List.map (transform_exception prefix reroutes (proc_name, env)) exceptions
|
||||||
and blocks = List.map (transform_block prefix reroutes env) blocks in
|
and blocks = List.map (transform_block prefix reroutes (proc_name, env)) blocks in
|
||||||
|
|
||||||
List.fold_right
|
List.fold_right
|
||||||
append_children
|
append_children
|
||||||
|
|||||||
Reference in New Issue
Block a user