Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
L
lustre-v6
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
verimag
synchrone
lustre-v6
Commits
b6f47683
Commit
b6f47683
authored
6 months ago
by
Leandre Lacourt
Browse files
Options
Downloads
Patches
Plain Diff
mise en place d'un fichier para vide si compilé sans tâche
parent
acce0ecc
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
bin/lustre-mt/main.ml
+133
-132
133 additions, 132 deletions
bin/lustre-mt/main.ml
bin/lustre-mt/parser.ml
+6
-7
6 additions, 7 deletions
bin/lustre-mt/parser.ml
lib/soc2yaml.ml
+3
-1
3 additions, 1 deletion
lib/soc2yaml.ml
with
142 additions
and
140 deletions
bin/lustre-mt/main.ml
+
133
−
132
View file @
b6f47683
...
@@ -31,144 +31,145 @@ let main () =
...
@@ -31,144 +31,145 @@ let main () =
(* creates the files *)
(* creates the files *)
let cfile = open_out ("
para
.
c
") in
let cfile = open_out ("
para
.
c
") in
let hfile = open_out ("
para
.
h
") in
(* includes *)
fprintf cfile "
#
include
<
stdio
.
h
>
\
n
";
fprintf cfile "
#
include
<
pthread
.
h
>
\
n
";
fprintf cfile "
#
include
<
semaphore
.
h
>
\
n
";
fprintf cfile "
#
include
<
errno
.
h
>
\
n
";
fprintf cfile "
#
include
<
time
.
h
>
\
n
";
fprintf cfile "
#
include
<
sys
/
time
.
h
>
\
n
";
fprintf cfile "
#
include
\
"%s.h
\"\n
"
!
Parser
.
name
;
fprintf
cfile
"
\n
"
;
(* semaphores macro *)
fprintf
cfile
"/* Initialize the semaphore with the given count. */
\n
"
;
fprintf
cfile
"#define SEM_INIT(sem, v, max_v) sem_init(&(sem), 0, (v))
\n
"
;
fprintf
cfile
"/* wait for the semaphore to be active (i.e. equal to 1) and then decrement it by one. */
\n
"
;
fprintf
cfile
"#define SEM_WAIT(sem) while (sem_wait(&sem) != 0 && errno == EINTR) continue
\n
"
;
fprintf
cfile
"/* make the semaphore active (i.e. equal to 1) */
\n
"
;
fprintf
cfile
"#define SEM_SIGNAL(sem) sem_post(&(sem))
\n
"
;
fprintf
cfile
"
\n
"
;
fprintf
cfile
"/* task structures */
\n
"
;
let
print_task_structs
task
=
fprintf
cfile
"typedef struct {
\n
"
;
fprintf
cfile
"
\t
%s_ctx_type ctx;
\n
"
task
.
name
;
fprintf
cfile
"
\t
sem_t sem_start;
\n
"
;
fprintf
cfile
"
\t
sem_t sem_join;
\n
"
;
fprintf
cfile
"pthread_t thr;
\n
}"
;
fprintf
cfile
"%s_TASK_struct;"
task
.
name
;
fprintf
cfile
"
\n\n
"
in
List
.
iter
print_task_structs
!
tasks
;
fprintf
cfile
"/* runners */
\n
"
;
let
print_task_runners
task
=
fprintf
cfile
"void* %s_runner(void* cd) {
\n
"
task
.
name
;
fprintf
cfile
"
\t
%s_TASK_struct* ts = (%s_TASK_struct*) cd;
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"
\t
while(1){
\n
"
;
fprintf
cfile
"
\t\t
SEM_WAIT(ts->sem_start);
\n
"
;
fprintf
cfile
"
\t\t
%s_step(&ts->ctx);
\n
"
task
.
name
;
fprintf
cfile
"
\t\t
SEM_SIGNAL(ts->sem_join);
\n
"
;
fprintf
cfile
"
\t
}
\n
"
;
fprintf
cfile
"}
\n\n
"
in
List
.
iter
print_task_runners
!
tasks
;
fprintf
cfile
"/* task Initializers */
\n
"
;
let
print_task_inits
task
=
fprintf
cfile
"%s_TASK_type %s_TASK_init() {
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"
\t
%s_TASK_struct* ts = (%s_TASK_struct*)calloc(1, sizeof(%s_TASK_struct));
\n
"
task
.
name
task
.
name
task
.
name
;
if
task
.
memory
then
fprintf
cfile
"
\t
%s_ctx_init(&ts->ctx);
\n
"
task
.
name
;
fprintf
cfile
"
\t
SEM_INIT(ts->sem_start, 0, 1);
\n
"
;
fprintf
cfile
"
\t
SEM_INIT(ts->sem_join, 0, 1);
\n
"
;
fprintf
cfile
"
\t
pthread_create(&(ts->thr), NULL, %s_runner, ts);
\n
"
task
.
name
;
fprintf
cfile
"
\t
return (void*) ts;
\n
"
;
fprintf
cfile
"}
\n\n
"
in
List
.
iter
print_task_inits
!
tasks
;
fprintf
cfile
"/* task resets */
\n
"
;
let
print_task_resets
task
=
if
task
.
memory
then
(
fprintf
cfile
"void %s_TASK_reset(%s_TASK_type tD) {
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"
\t
%s_TASK_struct* ts = (%s_TASK_struct*) tD;
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"
\t
%s_ctx_reset(&ts->ctx);
\n
"
task
.
name
;
fprintf
cfile
"}
\n\n
"
)
else
(
fprintf
cfile
"void %s_TASK_reset(%s_TASK_type tD) {
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"}
\n\n
"
)
in
List
.
iter
print_task_resets
!
tasks
;
fprintf
cfile
"/* task start */
\n
"
;
let
print_task_starts
task
=
fprintf
cfile
"void %s_TASK_START(%s_TASK_type tD) {
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"
\t
%s_TASK_struct* ts = (%s_TASK_struct*) tD;
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"
\t
SEM_SIGNAL(ts->sem_start);
\n
"
;
fprintf
cfile
"}
\n\n
"
in
List
.
iter
print_task_starts
!
tasks
;
fprintf
cfile
"/* task join */
\n
"
;
let
print_task_joins
task
=
fprintf
cfile
"void %s_TASK_JOIN(%s_TASK_type tD) {
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"
\t
%s_TASK_struct* ts = (%s_TASK_struct*) tD;
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"
\t
SEM_WAIT(ts->sem_join);
\n
"
;
fprintf
cfile
"}
\n\n
"
in
List
.
iter
print_task_joins
!
tasks
;
fprintf
cfile
"/* task inputs */
\n
"
;
if((List.length !tasks) > 0) then
let
print_task_inputs
task
=
(* includes *)
let
(
print_var_inputs
:
string
->
variable
->
unit
)
=
fprintf cfile "
#
include
<
stdio
.
h
>
\
n
";
fun
name
var
->
fprintf cfile "
#
include
<
pthread
.
h
>
\
n
";
fprintf
cfile
"void %s_TASK_setin_%s(%s_TASK_type tD, %s %s) {
\n
"
name
var
.
name
name
var
.
var_type
var
.
name
;
fprintf cfile "
#
include
<
semaphore
.
h
>
\
n
";
fprintf
cfile
"
\t
%s_TASK_struct* ts = (%s_TASK_struct*) tD;
\n
"
name
name
;
fprintf cfile "
#
include
<
errno
.
h
>
\
n
";
fprintf
cfile
"
\t
ts->ctx.%s = %s;
\n
"
var
.
name
var
.
name
;
fprintf cfile "
#
include
<
time
.
h
>
\
n
";
fprintf
cfile
"}
\n\n
"
;
fprintf cfile "
#
include
<
sys
/
time
.
h
>
\
n
";
fprintf cfile "
#
include
\
"%s.h
\"\n
"
!
Parser
.
name
;
fprintf
cfile
"
\n
"
;
(* semaphores macro *)
fprintf
cfile
"/* Initialize the semaphore with the given count. */
\n
"
;
fprintf
cfile
"#define SEM_INIT(sem, v, max_v) sem_init(&(sem), 0, (v))
\n
"
;
fprintf
cfile
"/* wait for the semaphore to be active (i.e. equal to 1) and then decrement it by one. */
\n
"
;
fprintf
cfile
"#define SEM_WAIT(sem) while (sem_wait(&sem) != 0 && errno == EINTR) continue
\n
"
;
fprintf
cfile
"/* make the semaphore active (i.e. equal to 1) */
\n
"
;
fprintf
cfile
"#define SEM_SIGNAL(sem) sem_post(&(sem))
\n
"
;
fprintf
cfile
"
\n
"
;
fprintf
cfile
"/* task structures */
\n
"
;
let
print_task_structs
task
=
fprintf
cfile
"typedef struct {
\n
"
;
fprintf
cfile
"
\t
%s_ctx_type ctx;
\n
"
task
.
name
;
fprintf
cfile
"
\t
sem_t sem_start;
\n
"
;
fprintf
cfile
"
\t
sem_t sem_join;
\n
"
;
fprintf
cfile
"pthread_t thr;
\n
}"
;
fprintf
cfile
"%s_TASK_struct;"
task
.
name
;
fprintf
cfile
"
\n\n
"
in
List
.
iter
print_task_structs
!
tasks
;
fprintf
cfile
"/* runners */
\n
"
;
let
print_task_runners
task
=
fprintf
cfile
"void* %s_runner(void* cd) {
\n
"
task
.
name
;
fprintf
cfile
"
\t
%s_TASK_struct* ts = (%s_TASK_struct*) cd;
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"
\t
while(1){
\n
"
;
fprintf
cfile
"
\t\t
SEM_WAIT(ts->sem_start);
\n
"
;
fprintf
cfile
"
\t\t
%s_step(&ts->ctx);
\n
"
task
.
name
;
fprintf
cfile
"
\t\t
SEM_SIGNAL(ts->sem_join);
\n
"
;
fprintf
cfile
"
\t
}
\n
"
;
fprintf
cfile
"}
\n\n
"
in
in
List
.
iter
(
print_
var_inputs
task
.
name
)
task
.
var_in
;
List
.
iter
print_
task_runners
!
tasks
;
in
List
.
iter
print_task_inputs
!
tasks
;
fprintf
cfile
"/* task Initializers */
\n
"
;
let
print_task_inits
task
=
fprintf
cfile
"
/* task outputs */
\n
"
;
fprintf
cfile
"
%s_TASK_type %s_TASK_init() {
\n
"
task
.
name
task
.
name
;
let
print_task_outputs
task
=
fprintf
cfile
"
\t
%s_TASK_struct* ts = (%s_TASK_struct*)calloc(1, sizeof(%s_TASK_struct));
\n
"
task
.
name
task
.
name
task
.
name
;
let
(
print_var_outputs
:
string
->
variable
->
unit
)
=
if
task
.
memory
then
fprintf
cfile
"
\t
%s_ctx_init(&ts->ctx);
\n
"
task
.
name
;
f
un
name
var
->
f
printf
cfile
"
\t
SEM_INIT(ts->sem_start, 0, 1);
\n
"
;
fprintf
cfile
"
void %s_TASK_getout_%s(%s_TASK_type tD, %s* p%s) {
\n
"
name
var
.
name
name
var
.
var_type
var
.
name
;
fprintf
cfile
"
\t
SEM_INIT(ts->sem_join, 0, 1);
\n
"
;
fprintf
cfile
"
\t
%s_TASK_struct* ts = (%s_TASK_struct*) tD;
\n
"
name
name
;
fprintf
cfile
"
\t
pthread_create(&(ts->thr), NULL, %s_runner, ts);
\n
"
task
.
name
;
fprintf
cfile
"
\t
*p%s = ts->ctx.%s;
\n
"
var
.
name
var
.
name
;
fprintf
cfile
"
\t
return (void*) ts;
\n
"
;
fprintf
cfile
"}
\n\n
"
;
fprintf
cfile
"}
\n\n
"
in
in
List
.
iter
(
print_var_outputs
task
.
name
)
task
.
var_out
;
List
.
iter
print_task_inits
!
tasks
;
in
List
.
iter
print_task_outputs
!
tasks
;
fprintf
cfile
"/* task resets */
\n
"
;
let
print_task_resets
task
=
if
task
.
memory
then
(
fprintf
cfile
"void %s_TASK_reset(%s_TASK_type tD) {
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"
\t
%s_TASK_struct* ts = (%s_TASK_struct*) tD;
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"
\t
%s_ctx_reset(&ts->ctx);
\n
"
task
.
name
;
fprintf
cfile
"}
\n\n
"
)
else
(
fprintf
cfile
"void %s_TASK_reset(%s_TASK_type tD) {
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"}
\n\n
"
)
in
List
.
iter
print_task_resets
!
tasks
;
let
hfile
=
open_out
(
"para.h"
)
in
fprintf
cfile
"/* task start */
\n
"
;
fprintf
hfile
"#ifndef _PARA_H
\n
#define _PARA_H
\n\n
"
;
let
print_task_starts
task
=
fprintf
cfile
"void %s_TASK_START(%s_TASK_type tD) {
\n
"
task
.
name
task
.
name
;
let
print_h_tasks
task
=
fprintf
cfile
"
\t
%s_TASK_struct* ts = (%s_TASK_struct*) tD;
\n
"
task
.
name
task
.
name
;
fprintf
hfile
"typedef void* %s_TASK_type;
\n
"
task
.
name
;
fprintf
cfile
"
\t
SEM_SIGNAL(ts->sem_start);
\n
"
;
fprintf
hfile
"extern %s_TASK_type %s_TASK_init();
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"}
\n\n
"
fprintf
hfile
"extern void %s_TASK_reset(%s_TASK_type tD);
\n
"
task
.
name
task
.
name
;
in
fprintf
hfile
"extern void %s_TASK_START(%s_TASK_type tD);
\n
"
task
.
name
task
.
name
;
List
.
iter
print_task_starts
!
tasks
;
fprintf
hfile
"extern void %s_TASK_JOIN(%s_TASK_type tD);
\n
"
task
.
name
task
.
name
;
let
(
print_h_task_inputs
:
Types
.
variable
->
unit
)
=
fun
var
->
fprintf
cfile
"/* task join */
\n
"
;
fprintf
hfile
"extern void %s_TASK_setin_%s(%s_TASK_type tD, %s %s);
\n
"
task
.
name
var
.
name
task
.
name
var
.
var_type
var
.
name
let
print_task_joins
task
=
fprintf
cfile
"void %s_TASK_JOIN(%s_TASK_type tD) {
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"
\t
%s_TASK_struct* ts = (%s_TASK_struct*) tD;
\n
"
task
.
name
task
.
name
;
fprintf
cfile
"
\t
SEM_WAIT(ts->sem_join);
\n
"
;
fprintf
cfile
"}
\n\n
"
in
List
.
iter
print_task_joins
!
tasks
;
fprintf
cfile
"/* task inputs */
\n
"
;
let
print_task_inputs
task
=
let
(
print_var_inputs
:
string
->
variable
->
unit
)
=
fun
name
var
->
fprintf
cfile
"void %s_TASK_setin_%s(%s_TASK_type tD, %s %s) {
\n
"
name
var
.
name
name
var
.
var_type
var
.
name
;
fprintf
cfile
"
\t
%s_TASK_struct* ts = (%s_TASK_struct*) tD;
\n
"
name
name
;
fprintf
cfile
"
\t
ts->ctx.%s = %s;
\n
"
var
.
name
var
.
name
;
fprintf
cfile
"}
\n\n
"
;
in
List
.
iter
(
print_var_inputs
task
.
name
)
task
.
var_in
;
in
in
List
.
iter
print_h_task_inputs
task
.
var_in
;
List
.
iter
print_task_inputs
!
tasks
;
let
(
print_h_task_outputs
:
Types
.
variable
->
unit
)
=
fun
var
->
fprintf
hfile
"extern void %s_TASK_getout_%s(%s_TASK_type td, %s* %s);
\n
"
task
.
name
var
.
name
task
.
name
var
.
var_type
var
.
name
fprintf
cfile
"/* task outputs */
\n
"
;
let
print_task_outputs
task
=
let
(
print_var_outputs
:
string
->
variable
->
unit
)
=
fun
name
var
->
fprintf
cfile
"void %s_TASK_getout_%s(%s_TASK_type tD, %s* p%s) {
\n
"
name
var
.
name
name
var
.
var_type
var
.
name
;
fprintf
cfile
"
\t
%s_TASK_struct* ts = (%s_TASK_struct*) tD;
\n
"
name
name
;
fprintf
cfile
"
\t
*p%s = ts->ctx.%s;
\n
"
var
.
name
var
.
name
;
fprintf
cfile
"}
\n\n
"
;
in
List
.
iter
(
print_var_outputs
task
.
name
)
task
.
var_out
;
in
in
List
.
iter
print_h_task_outputs
task
.
var_out
List
.
iter
print_task_outputs
!
tasks
;
in
List
.
iter
print_h_tasks
!
tasks
;
fprintf
hfile
"#ifndef _PARA_H
\n
#define _PARA_H
\n\n
"
;
fprintf
hfile
"#endif"
;
let
print_h_tasks
task
=
fprintf
hfile
"typedef void* %s_TASK_type;
\n
"
task
.
name
;
fprintf
hfile
"extern %s_TASK_type %s_TASK_init();
\n
"
task
.
name
task
.
name
;
fprintf
hfile
"extern void %s_TASK_reset(%s_TASK_type tD);
\n
"
task
.
name
task
.
name
;
fprintf
hfile
"extern void %s_TASK_START(%s_TASK_type tD);
\n
"
task
.
name
task
.
name
;
fprintf
hfile
"extern void %s_TASK_JOIN(%s_TASK_type tD);
\n
"
task
.
name
task
.
name
;
let
(
print_h_task_inputs
:
Types
.
variable
->
unit
)
=
fun
var
->
fprintf
hfile
"extern void %s_TASK_setin_%s(%s_TASK_type tD, %s %s);
\n
"
task
.
name
var
.
name
task
.
name
var
.
var_type
var
.
name
in
List
.
iter
print_h_task_inputs
task
.
var_in
;
let
(
print_h_task_outputs
:
Types
.
variable
->
unit
)
=
fun
var
->
fprintf
hfile
"extern void %s_TASK_getout_%s(%s_TASK_type td, %s* %s);
\n
"
task
.
name
var
.
name
task
.
name
var
.
var_type
var
.
name
in
List
.
iter
print_h_task_outputs
task
.
var_out
in
List
.
iter
print_h_tasks
!
tasks
;
fprintf
hfile
"#endif"
;
...
...
This diff is collapsed.
Click to expand it.
bin/lustre-mt/parser.ml
+
6
−
7
View file @
b6f47683
...
@@ -83,19 +83,17 @@ let (save_variable_attributes : Types.variable -> (string * Yaml.value) -> unit)
...
@@ -83,19 +83,17 @@ let (save_variable_attributes : Types.variable -> (string * Yaml.value) -> unit)
|_
->
assert
false
|_
->
assert
false
let
(
save_variables_in
:
Types
.
task
->
Yaml
.
value
->
unit
)
=
fun
task
x
->
let
(
save_variables_in
:
Types
.
task
->
Yaml
.
value
->
unit
)
=
fun
task
x
->
let
v
=
{
name
=
""
;
var_type
=
""
}
::
[]
let
v
=
{
name
=
""
;
var_type
=
""
}
::
[]
in
in
match
x
with
match
x
with
|
`O
l
->
|
`O
l
->
assert
(
v
<>
[]
);
List
.
iter
(
save_variable_attributes
(
List
.
hd
v
))
l
;
List
.
iter
(
save_variable_attributes
(
List
.
hd
v
))
l
;
task
.
var_in
<-
v
@
task
.
var_in
task
.
var_in
<-
v
@
task
.
var_in
|_
->
assert
false
|_
->
assert
false
let
(
save_variables_out
:
Types
.
task
->
Yaml
.
value
->
unit
)
=
fun
task
x
->
let
(
save_variables_out
:
Types
.
task
->
Yaml
.
value
->
unit
)
=
fun
task
x
->
let
v
=
{
name
=
""
;
var_type
=
""
}
::
[]
let
v
=
{
name
=
""
;
var_type
=
""
}
::
[]
in
in
match
x
with
match
x
with
|
`O
l
->
|
`O
l
->
assert
(
v
<>
[]
);
List
.
iter
(
save_variable_attributes
(
List
.
hd
v
))
l
;
List
.
iter
(
save_variable_attributes
(
List
.
hd
v
))
l
;
task
.
var_out
<-
v
@
task
.
var_out
task
.
var_out
<-
v
@
task
.
var_out
|_
->
assert
false
|_
->
assert
false
...
@@ -119,7 +117,7 @@ let (save_data_task : Types.task -> (string * Yaml.value) -> unit) =
...
@@ -119,7 +117,7 @@ let (save_data_task : Types.task -> (string * Yaml.value) -> unit) =
let
(
save_data_tasks
:
Yaml
.
value
->
unit
)
=
fun
x
->
let
(
save_data_tasks
:
Yaml
.
value
->
unit
)
=
fun
x
->
let
task
=
{
name
=
""
;
var_in
=
[]
;
var_out
=
[]
;
memory
=
true
}
::
[]
in
let
task
=
{
name
=
""
;
var_in
=
[]
;
var_out
=
[]
;
memory
=
true
}
::
[]
in
match
x
with
match
x
with
|
`O
l
->
|
`O
l
->
assert
(
task
<>
[]
);
List
.
iter
(
save_data_task
(
List
.
hd
task
))
l
;
List
.
iter
(
save_data_task
(
List
.
hd
task
))
l
;
tasks
:=
!
tasks
@
task
tasks
:=
!
tasks
@
task
|_
->
assert
false
|_
->
assert
false
...
@@ -127,6 +125,7 @@ let (save_data_tasks : Yaml.value -> unit) = fun x ->
...
@@ -127,6 +125,7 @@ let (save_data_tasks : Yaml.value -> unit) = fun x ->
let
(
save_data
:
(
string
*
Yaml
.
value
)
->
unit
)
=
fun
(
key
,
value
)
->
let
(
save_data
:
(
string
*
Yaml
.
value
)
->
unit
)
=
fun
(
key
,
value
)
->
match
(
key
,
value
)
with
match
(
key
,
value
)
with
|
"all_para_nodes"
,
`A
l
->
List
.
iter
save_data_tasks
l
;
|
"all_para_nodes"
,
`A
l
->
List
.
iter
save_data_tasks
l
;
|
"all_para_nodes"
,
`Null
->
assert
true
|
"main_node"
,
`String
n
->
name
:=
n
|
"main_node"
,
`String
n
->
name
:=
n
|_
->
assert
false
|_
->
assert
false
...
...
This diff is collapsed.
Click to expand it.
lib/soc2yaml.ml
+
3
−
1
View file @
b6f47683
...
@@ -95,7 +95,9 @@ let (f : Soc.key -> Soc.tbl -> string -> unit) = fun sk stbl basename ->
...
@@ -95,7 +95,9 @@ let (f : Soc.key -> Soc.tbl -> string -> unit) = fun sk stbl basename ->
in
in
let
(
main2yaml
:
unit
->
unit
)
=
fun
()
->
let
(
main2yaml
:
unit
->
unit
)
=
fun
()
->
let
s
=
"main_node: "
^
basename
in
let
(
name
,
_
,
_
)
=
main_soc
.
key
in
let
main_name
=
Str
.
replace_first
(
Str
.
regexp
"::"
)
"_"
name
in
let
s
=
"main_node: "
^
main_name
in
fprintf
yaml_file
"
\n
%s"
s
fprintf
yaml_file
"
\n
%s"
s
in
in
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment