From 8294426993e3a7f34eefc559bba81e7ee8b68766 Mon Sep 17 00:00:00 2001 From: Mart Lubbers Date: Thu, 11 May 2017 14:54:42 +0200 Subject: [PATCH] add return statement and todo --- client/interpret.c | 4 ++++ client/mTaskSymbols.h | 2 +- mTask.dcl | 2 ++ mTaskInterpret.dcl | 4 +++- mTaskInterpret.icl | 3 +++ mTaskMakeSymbols.icl | 3 +++ todo.txt | 1 + 7 files changed, 17 insertions(+), 2 deletions(-) diff --git a/client/interpret.c b/client/interpret.c index 92e58d1..0f65888 100644 --- a/client/interpret.c +++ b/client/interpret.c @@ -162,6 +162,10 @@ void run_task(struct task *t) sp--; break; #endif + case BCRETURN: trace("Return"); + pc = plen; + t = stack[sp-1]; + break; default: trace("unrecognized"); die("Unrecognized command: %d", program[pc-1]); diff --git a/client/mTaskSymbols.h b/client/mTaskSymbols.h index 57959af..7532067 100644 --- a/client/mTaskSymbols.h +++ b/client/mTaskSymbols.h @@ -34,5 +34,5 @@ #define BCANALOGWRITE 31 #define BCDIGITALREAD 32 #define BCDIGITALWRITE 33 -#define BCTEST 34 +#define BCRETURN 34 #endif diff --git a/mTask.dcl b/mTask.dcl index b1510af..9eb93da 100644 --- a/mTask.dcl +++ b/mTask.dcl @@ -94,6 +94,8 @@ class sds v where class seq v where (>>=.) infixr 0 :: (v t p) ((v t Expr) -> (v u q)) -> (v u Stmt) | type t & type u (:.) infixr 0 :: (v t p) (v u q) -> v u Stmt | type t & type u +class retrn v where + retrn :: (v t p) -> (v t Stmt) | type t class step` v where (>>*.) infixl 1 :: (v t p) ((v t Expr) -> [Step v u]) -> v u Stmt | type t & type u :: Step v t = E.p.q: Cond (v Bool q) (v t p) | E.p: Ever (v t p) diff --git a/mTaskInterpret.dcl b/mTaskInterpret.dcl index 578d335..8f4bd40 100644 --- a/mTaskInterpret.dcl +++ b/mTaskInterpret.dcl @@ -91,7 +91,8 @@ decode :: String -> MTaskMSGRecv | BCAnalogWrite Pin | BCDigitalRead Pin | BCDigitalWrite Pin - | BCTest AnalogPin + //Return + | BCReturn derive gPrint BCValue, MTaskDeviceSpec derive consIndex BCValue @@ -143,6 +144,7 @@ instance If ByteCode Stmt e Stmt instance If ByteCode x y Stmt instance IF ByteCode instance noOp ByteCode +instance retrn ByteCode instance sds ByteCode instance assign ByteCode diff --git a/mTaskInterpret.icl b/mTaskInterpret.icl index 27d4c43..c81476a 100644 --- a/mTaskInterpret.icl +++ b/mTaskInterpret.icl @@ -282,6 +282,9 @@ instance userLed ByteCode where ledOn (BC l) = BC $ l >>| tell [BCLedOn] ledOff (BC l) = BC $ l >>| tell [BCLedOff] +instance retrn ByteCode where + retrn (BC l) = BC $ tell [BCReturn] + instance zero BCState where zero = {freshl=[1..], freshs=[1..], sdss=[]} diff --git a/mTaskMakeSymbols.icl b/mTaskMakeSymbols.icl index 6781ce8..fc1fe5e 100644 --- a/mTaskMakeSymbols.icl +++ b/mTaskMakeSymbols.icl @@ -20,6 +20,9 @@ from Data.Func import $ import Data.List from Text import class Text(join,toUpperCase), instance Text String +derive consName BC +derive conses BC + (<+) infixr 5 :: a b -> String | toString a & toString b (<+) a b = toString a +++ toString b diff --git a/todo.txt b/todo.txt index 4647ddd..030fb00 100644 --- a/todo.txt +++ b/todo.txt @@ -1,2 +1,3 @@ delete tasks when deleting device let tasks have a unique name +check addition and equality for numbers and bools -- 2.20.1