소스 검색

Rust: Use unsigned 16 bit integers for timer IDs

Joeri Exelmans 5 년 전
부모
커밋
7c0bb7277d
3개의 변경된 파일11개의 추가작업 그리고 10개의 파일을 삭제
  1. 1 1
      src/sccd/cd/codegen/sccdlib.rs
  2. 6 5
      src/sccd/statechart/codegen/rust.py
  3. 4 4
      src/sccd/statechart/parser/xml.py

+ 1 - 1
src/sccd/cd/codegen/sccdlib.rs

@@ -3,7 +3,7 @@ use std::cmp::Ordering;
 
 type Timestamp = usize;
 
-type TimerId = usize;
+type TimerId = u16;
 
 pub trait State<TimersType, Handle> {
   // Execute enter actions of only this state

+ 6 - 5
src/sccd/statechart/codegen/rust.py

@@ -37,8 +37,8 @@ def ident_source_target(state: State) -> str:
     # drop the first '_' (this is safe, the root state itself can never be source or target)
     return snake_case(state)[1:]
 
-def ident_transition(t: Transition) -> str:
-    return "transition%d_FROM_%s_TO_%s" % (t.id, ident_source_target(t.source), ident_source_target(t.target))
+# def ident_transition(t: Transition) -> str:
+#     return "transition%d_FROM_%s_TO_%s" % (t.id, ident_source_target(t.source), ident_source_target(t.target))
 
 def ident_arena_label(state: State) -> str:
     if state.full_name == "/":
@@ -563,12 +563,13 @@ def compile_statechart(sc: Statechart, globals: Globals, w: IndentingWriter):
         w.writeln("fn debug_print_sizes() {")
         w.writeln("  println!(\"------------------------\");")
         w.writeln("  println!(\"info: Statechart: {} bytes\", size_of::<Statechart>());")
-        w.writeln("  println!(\"info: Event: {} bytes\", size_of::<Event>());")
-        w.writeln("  println!(\"info: Arenas: {} bytes\", size_of::<Arenas>());")
+        w.writeln("  println!(\"info: Timers: {} bytes\", size_of::<Timers>());")
         def write_state_size(state):
-            w.writeln("  println!(\"info: %s: {} bytes\", size_of::<%s>());" % (state.full_name, ident_type(state)))
+            w.writeln("  println!(\"info: State %s: {} bytes\", size_of::<%s>());" % (state.full_name, ident_type(state)))
             for child in state.real_children:
                 write_state_size(child)
         write_state_size(tree.root)
+        w.writeln("  println!(\"info: Event: {} bytes\", size_of::<Event>());")
+        w.writeln("  println!(\"info: Arenas: {} bytes\", size_of::<Arenas>());")
         w.writeln("  println!(\"------------------------\");")
         w.writeln("}")

+ 4 - 4
src/sccd/statechart/parser/xml.py

@@ -246,10 +246,10 @@ def statechart_parser_rules(globals, path, load_external = True, parse_f = parse
             # after-events should only be generated by the runtime
             # by putting a '+' in the event name (which isn't an allowed character in the parser),
             # we can be certain that the user will never generate a valid after-event.
-            if DEBUG:
-              event_name = "+%d_%s_%s" % (after_id, parent.short_name, target_string) # transition gets unique event name
-            else:
-              event_name = "+%d" % after_id
+            # if DEBUG:
+            #   event_name = "+%d_%s_%s" % (after_id, parent.short_name, target_string) # transition gets unique event name
+            # else:
+            event_name = "+%d" % after_id
             transition.trigger = AfterTrigger(globals.events.assign_id(event_name), event_name, after_id, after_expr)
             statechart.internal_events |= transition.trigger.enabling_bitmap
             after_id += 1