Pārlūkot izejas kodu

Fixed new type of return without exceptions and related errors in compiled/primitives

Yentl Van Tendeloo 7 gadi atpakaļ
vecāks
revīzija
71d6e56ff6

+ 2 - 2
kernel/modelverse_kernel/compiled.py

@@ -202,7 +202,7 @@ def element_neq(a, b, **remainder):
         yield [("RETURN", [{'value': False}])]
         yield [("RETURN", [{'value': False}])]
     else:
     else:
         #raise PrimitiveFinished({'value': a['id'] != b['id']})
         #raise PrimitiveFinished({'value': a['id'] != b['id']})
-        yield [("RETURN", [{'value': a['value'] != b['value']}])]
+        yield [("RETURN", [{'value': a['id'] != b['id']}])]
 
 
 def list_append(a, b, **remainder):
 def list_append(a, b, **remainder):
     if "id" not in b:
     if "id" not in b:
@@ -240,7 +240,7 @@ def dict_add(a, b, c, **remainder):
 def dict_len(a, **remainder):
 def dict_len(a, **remainder):
     outgoings, = yield [("RO", [a['id']])]
     outgoings, = yield [("RO", [a['id']])]
     #raise PrimitiveFinished({'value': len(outgoings)})
     #raise PrimitiveFinished({'value': len(outgoings)})
-    yield [("RETURN", [{'value': len(outgoing)}])]
+    yield [("RETURN", [{'value': len(outgoings)}])]
 
 
 def set_add(a, b, **remainder):
 def set_add(a, b, **remainder):
     if 'value' not in b:
     if 'value' not in b:

+ 1 - 1
kernel/modelverse_kernel/primitives.py

@@ -416,7 +416,7 @@ def read_in(a, b, root, **remainder):
 
 
     incoming, = yield [("RI", [a['id']])]
     incoming, = yield [("RI", [a['id']])]
     #raise PrimitiveFinished({'id': sorted(incoming)[b['value']] if len(incoming) > b['value'] else root})
     #raise PrimitiveFinished({'id': sorted(incoming)[b['value']] if len(incoming) > b['value'] else root})
-    yield [("RETURN", [{'id': sorted(outgoing)[b['value']] if len(incoming) > b['value'] else root}])]
+    yield [("RETURN", [{'id': sorted(incoming)[b['value']] if len(incoming) > b['value'] else root}])]
 
 
 def read_edge_src(a, **remainder):
 def read_edge_src(a, **remainder):
     result, = yield [("RE", [a['id']])]
     result, = yield [("RE", [a['id']])]

+ 4 - 10
kernel/modelverse_kernel/request_handler.py

@@ -19,25 +19,21 @@ class RequestHandler(object):
         self.reply = reply
         self.reply = reply
         while self.generator_stack:
         while self.generator_stack:
             try:
             try:
-                print("Stack: " + str(self.generator_stack))
                 requests = self.generator_stack[-1].send(self.reply)
                 requests = self.generator_stack[-1].send(self.reply)
-                print("Requests: " + str(requests))
 
 
                 # Generated new request, so process
                 # Generated new request, so process
                 if requests and requests[0][0] in self.handlers:
                 if requests and requests[0][0] in self.handlers:
-                    # Try to add a new generator to branch into
                     self.generator_stack.append(None)
                     self.generator_stack.append(None)
                     # This next command potentially raises a finished message already, meaning that we should stop already
                     # This next command potentially raises a finished message already, meaning that we should stop already
                     # We avoid an extra try/except block by putting the None on the stack already
                     # We avoid an extra try/except block by putting the None on the stack already
-                    self.generator_stack[-1] = self.handlers[requests[0][0]](requests[0][1])
                     self.reply = None
                     self.reply = None
+                    self.generator_stack[-1] = self.handlers[requests[0][0]](requests[0][1])
                 else:
                 else:
                     # MvS request, so forward that instead
                     # MvS request, so forward that instead
                     return requests
                     return requests
 
 
             except StopIteration:
             except StopIteration:
                 # Exception, so finished execution of this generator, passing on None to the caller
                 # Exception, so finished execution of this generator, passing on None to the caller
-                print("STOPITER")
                 del self.generator_stack[-1]
                 del self.generator_stack[-1]
                 self.reply = [None]
                 self.reply = [None]
                 
                 
@@ -50,14 +46,12 @@ class RequestHandler(object):
                 # Exception, so finished execution of this generator, passing on ex.result to the caller
                 # Exception, so finished execution of this generator, passing on ex.result to the caller
                 del self.generator_stack[-1]
                 del self.generator_stack[-1]
                 self.reply = [ex.result]
                 self.reply = [ex.result]
-                print("SHOULD NOT HAPPEN")
 
 
     def execute_sleep(self, request_args):
     def execute_sleep(self, request_args):
         raise primitive_functions.SleepKernel(request_args[0], request_args[1])
         raise primitive_functions.SleepKernel(request_args[0], request_args[1])
 
 
     def execute_return(self, request_args):
     def execute_return(self, request_args):
-        print("RETURNING")
-        print(self.generator_stack)
         del self.generator_stack[-1]
         del self.generator_stack[-1]
-        self.reply = request_args[0]
-        print(self.generator_stack)
+        del self.generator_stack[-1]
+        self.reply = [request_args[0]]
+        return self.generator_stack[-1]

+ 1 - 1
wrappers/modelverse_SCCD.py

@@ -1,7 +1,7 @@
 """
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
 
-Date:   Wed May  2 08:43:16 2018
+Date:   Wed May  2 09:25:29 2018
 
 
 Model author: Yentl Van Tendeloo
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server
 Model name:   MvK Server