@@ -39,24 +39,24 @@ const _rospy_imports = Dict{String,ROSPackage}()
39
39
const _rospy_objects = Dict {String,PyObject} ()
40
40
const _rospy_modules = Dict {String,PyObject} ()
41
41
42
- const _ros_builtin_types = Dict {String, Symbol } (
43
- " bool" => : Bool ,
44
- " int8" => : Int8 ,
45
- " int16" => : Int16 ,
46
- " int32" => : Int32 ,
47
- " int64" => : Int64 ,
48
- " uint8" => : UInt8 ,
49
- " uint16" => : UInt16 ,
50
- " uint32" => : UInt32 ,
51
- " uint64" => : UInt64 ,
52
- " float32" => : Float32 ,
53
- " float64" => : Float64 ,
54
- " string" => : String ,
55
- " time" => : Time ,
56
- " duration" => : Duration ,
42
+ const _ros_builtin_types = Dict {String,DataType } (
43
+ " bool" => Bool,
44
+ " int8" => Int8,
45
+ " int16" => Int16,
46
+ " int32" => Int32,
47
+ " int64" => Int64,
48
+ " uint8" => UInt8,
49
+ " uint16" => UInt16,
50
+ " uint32" => UInt32,
51
+ " uint64" => UInt64,
52
+ " float32" => Float32,
53
+ " float64" => Float64,
54
+ " string" => String,
55
+ " time" => Time,
56
+ " duration" => Duration,
57
57
# Deprecated by ROS but supported here
58
- " char" => : UInt8 ,
59
- " byte" => : Int8 ,
58
+ " char" => UInt8,
59
+ " byte" => Int8,
60
60
)
61
61
62
62
# Abstract supertypes of all generated types
@@ -143,18 +143,18 @@ function _rosimport(package::String, ismsg::Bool, names::String...)
143
143
end
144
144
145
145
"""
146
- rostypegen()
146
+ rostypegen(rosrootmod::Module=Main )
147
147
148
- Initiate the Julia type generation process after importing some ROS types. Creates modules in `Main`
149
- with the same behavior as imported ROS modules in python. Should only be called once, after all
150
- `@rosimport` statements are done.
148
+ Initiate the Julia type generation process after importing some ROS types. Creates modules in
149
+ rootrosmod (default is `Main`) with the same behavior as imported ROS modules in python.
150
+ Should only be called once, after all `@rosimport` statements are done.
151
151
"""
152
- function rostypegen ()
152
+ function rostypegen (rosrootmod :: Module = Main )
153
153
global _rospy_imports
154
154
pkgdeps = _collectdeps (_rospy_imports)
155
155
pkglist = _order (pkgdeps)
156
156
for pkg in pkglist
157
- buildpackage (_rospy_imports[pkg])
157
+ buildpackage (_rospy_imports[pkg], rosrootmod )
158
158
end
159
159
end
160
160
@@ -277,38 +277,38 @@ function _import_rospy_pkg(package::String)
277
277
end
278
278
279
279
# The function that creates and fills the generated top-level modules
280
- function buildpackage (pkg:: ROSPackage )
280
+ function buildpackage (pkg:: ROSPackage , rosrootmod :: Module = Main )
281
281
@debug (" Building package: " , _name (pkg))
282
282
283
283
# Create the top-level module for the package in Main
284
284
pkgsym = Symbol (_name (pkg))
285
- pkgcode = Expr (:toplevel , :(module ($ pkgsym) end ))
286
- Main. eval (pkgcode)
287
- pkgmod = Main. eval (pkgsym)
285
+ pkgcode = :(module ($ pkgsym) end )
288
286
289
287
# Add msg and srv submodules if needed
290
288
@debug_addindent
291
289
if length (pkg. msg. members) > 0
292
290
msgmod = :(module msg end )
293
- msgcode = modulecode (pkg. msg)
291
+ msgcode = modulecode (pkg. msg, rosrootmod )
294
292
for expr in msgcode
295
293
push! (msgmod. args[3 ]. args, expr)
296
294
end
297
- eval (pkgmod , msgmod)
295
+ push! (pkgcode . args[ 3 ] . args , msgmod)
298
296
end
299
297
if length (pkg. srv. members) > 0
300
298
srvmod = :(module srv end )
301
- srvcode = modulecode (pkg. srv)
299
+ srvcode = modulecode (pkg. srv, rosrootmod )
302
300
for expr in srvcode
303
301
push! (srvmod. args[3 ]. args, expr)
304
302
end
305
- eval (pkgmod , srvmod)
303
+ push! (pkgcode . args[ 3 ] . args , srvmod)
306
304
end
305
+ pkgcode = Expr (:toplevel , pkgcode)
306
+ rosrootmod. eval (pkgcode)
307
307
@debug_subindent
308
308
end
309
309
310
310
# Generate all code for a .msg or .srv module
311
- function modulecode (mod:: ROSModule )
311
+ function modulecode (mod:: ROSModule , rosrootmod :: Module = Main )
312
312
@debug (" submodule: " , _fullname (mod))
313
313
modcode = Expr[]
314
314
@@ -325,7 +325,7 @@ function modulecode(mod::ROSModule)
325
325
end
326
326
)
327
327
# Import statement specific to the module
328
- append! (modcode, _importexprs (mod))
328
+ append! (modcode, _importexprs (mod, rosrootmod ))
329
329
# The exported names
330
330
push! (modcode, _exportexpr (mod))
331
331
@@ -340,20 +340,20 @@ function modulecode(mod::ROSModule)
340
340
end
341
341
342
342
# The imports specific to each module, including dependant packages
343
- function _importexprs (mod:: ROSMsgModule )
343
+ function _importexprs (mod:: ROSMsgModule , rosrootmod :: Module = Main )
344
344
imports = Expr[Expr (:import , :RobotOS , :AbstractMsg )]
345
345
othermods = filter (d -> d != _name (mod), mod. deps)
346
- append! (imports, [Expr (:using ,:Main ,Symbol (m),:msg ) for m in othermods])
346
+ append! (imports, [Expr (:using ,Symbol (rosrootmod) ,Symbol (m),:msg ) for m in othermods])
347
347
imports
348
348
end
349
- function _importexprs (mod:: ROSSrvModule )
349
+ function _importexprs (mod:: ROSSrvModule , rosrootmod :: Module = Main )
350
350
imports = Expr[
351
351
Expr (:import , :RobotOS , :AbstractSrv ),
352
352
Expr (:import , :RobotOS , :AbstractService ),
353
353
Expr (:import , :RobotOS , :_srv_reqtype ),
354
354
Expr (:import , :RobotOS , :_srv_resptype ),
355
355
]
356
- append! (imports, [Expr (:using ,:Main ,Symbol (m),:msg ) for m in mod. deps])
356
+ append! (imports, [Expr (:using ,Symbol (rosrootmod) ,Symbol (m),:msg ) for m in mod. deps])
357
357
imports
358
358
end
359
359
@@ -519,7 +519,7 @@ function _addtypemember!(exprs, namestr, typestr)
519
519
end
520
520
j_typ = _ros_builtin_types[typestr]
521
521
# Compute the default value now
522
- j_def = @eval _typedefault ($ j_typ)
522
+ j_def = _typedefault (j_typ)
523
523
end
524
524
525
525
namesym = Symbol (namestr)
0 commit comments