Skip to content

Commit

Permalink
#341 Fixed bugs, added tests
Browse files Browse the repository at this point in the history
  • Loading branch information
SanderMertens committed Sep 22, 2015
1 parent 62fbd00 commit 7af3f29
Show file tree
Hide file tree
Showing 18 changed files with 569 additions and 41 deletions.
8 changes: 4 additions & 4 deletions components/vm/src/vm.c
Original file line number Diff line number Diff line change
Expand Up @@ -625,9 +625,9 @@ typedef union Di2f_t {
goto STOP;\
}\
{\
cx_object prev = cx_setSource((cx_object)op2_##code);\
cx_object prev = cx_setOwner((cx_object)op2_##code);\
cx_update((cx_object)op1_##code);\
cx_setSource(prev);\
cx_setOwner(prev);\
}\
next();\

Expand All @@ -640,9 +640,9 @@ typedef union Di2f_t {
goto STOP;\
}\
{\
cx_object prev = cx_setSource((cx_object)op2_##code);\
cx_object prev = cx_setOwner((cx_object)op2_##code);\
cx_updateEnd((cx_object)op1_##code);\
cx_setSource(prev);\
cx_setOwner(prev);\
}\
next();\

Expand Down
2 changes: 1 addition & 1 deletion generators/c/api/src/cx_apicollection.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ static cx_int16 c_apiSequenceTypeForeach(cx_sequence o, c_apiWalk_t* data) {
g_fileIndent(data->header);
g_fileWrite(data->header, "cx_uint32 elem##_iter;\\\n");
g_fileWrite(data->header, "%s elem;\\\n", elementId);
g_fileWrite(data->header, "for(elem##_iter=0; elem = seq.buffer[elem##_iter], elem##_iter<seq.length; elem##_iter++)\\\n");
g_fileWrite(data->header, "for(elem##_iter=0; seq.buffer ? elem = seq.buffer[elem##_iter] : 0, elem##_iter<seq.length; elem##_iter++)\\\n");
g_fileDedent(data->header);
g_fileWrite(data->header, "\n");

Expand Down
2 changes: 1 addition & 1 deletion packages/corto/ast/src/ast_Parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -715,7 +715,7 @@ ast_Storage ast_Parser_observerCreate(ast_Parser this, cx_string id, ast_Express
}
cx_setref(&observer->dispatcher, dispatcher);

if (cx_observerDefine(observer, observable, mask, NULL)) {
if (cx_observerDefine(observer, mask, observable, NULL)) {
goto error;
}
}
Expand Down
1 change: 1 addition & 0 deletions packages/corto/lang/include/cx.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ extern "C" {
#include "cx_parameter.h"
#include "cx_primitive.h"
#include "cx_procedure.h"
#include "cx_replicator.h"
#include "cx_sequence.h"
#include "cx_struct.h"
#include "cx_text.h"
Expand Down
38 changes: 26 additions & 12 deletions packages/corto/lang/include/cx__api.h
Original file line number Diff line number Diff line change
Expand Up @@ -752,14 +752,14 @@ cx_int16 cx_observableEventCopy(cx_observableEvent *dst, cx_observableEvent src)
cx_int16 cx_observableEventCompare(cx_observableEvent dst, cx_observableEvent src);

/* ::corto::lang::observer */
cx_observer cx_observerCreate(cx_object observable, cx_eventMask mask, void(*_impl)(cx_function f, void *result, void *args));
cx_observer cx_observerCreateChild(cx_object _parent, cx_string _name, cx_object observable, cx_eventMask mask, void(*_impl)(cx_function f, void *result, void *args));
cx_observer cx_observerCreate(cx_eventMask mask, cx_object observable, void(*_impl)(cx_function f, void *result, void *args));
cx_observer cx_observerCreateChild(cx_object _parent, cx_string _name, cx_eventMask mask, cx_object observable, void(*_impl)(cx_function f, void *result, void *args));

cx_observer cx_observerDeclare(void);
cx_observer cx_observerDeclareChild(cx_object _parent, cx_string _name);
cx_int16 cx_observerDefine(cx_observer this, cx_object observable, cx_eventMask mask, void(*_impl)(cx_function f, void *result, void *args));
void cx_observerUpdate(cx_observer this, cx_object observable, cx_eventMask mask);
void cx_observerSet(cx_observer this, cx_object observable, cx_eventMask mask);
cx_int16 cx_observerDefine(cx_observer this, cx_eventMask mask, cx_object observable, void(*_impl)(cx_function f, void *result, void *args));
void cx_observerUpdate(cx_observer this, cx_eventMask mask, cx_object observable);
void cx_observerSet(cx_observer this, cx_eventMask mask, cx_object observable);
cx_string cx_observerStr(cx_observer value);
cx_observer cx_observerFromStr(cx_observer value, cx_string str);
cx_int16 cx_observerCopy(cx_observer *dst, cx_observer src);
Expand Down Expand Up @@ -926,6 +926,20 @@ cx_int16 cx_procedureKindCompare(cx_procedureKind* dst, cx_procedureKind* src);
cx_int16 cx_procedureKindInit(cx_procedureKind* value);
cx_int16 cx_procedureKindDeinit(cx_procedureKind* value);

/* ::corto::lang::replicator */
cx_replicator cx_replicatorCreate(void);
cx_replicator cx_replicatorCreateChild(cx_object _parent, cx_string _name);

cx_replicator cx_replicatorDeclare(void);
cx_replicator cx_replicatorDeclareChild(cx_object _parent, cx_string _name);
cx_int16 cx_replicatorDefine(cx_replicator this);
void cx_replicatorUpdate(cx_replicator this);
void cx_replicatorSet(cx_replicator this);
cx_string cx_replicatorStr(cx_replicator value);
cx_replicator cx_replicatorFromStr(cx_replicator value, cx_string str);
cx_int16 cx_replicatorCopy(cx_replicator *dst, cx_replicator src);
cx_int16 cx_replicatorCompare(cx_replicator dst, cx_replicator src);

/* ::corto::lang::sequence */
cx_sequence cx_sequenceCreate(cx_type elementType, cx_uint32 max);
cx_sequence cx_sequenceCreateChild(cx_object _parent, cx_string _name, cx_type elementType, cx_uint32 max);
Expand Down Expand Up @@ -1189,7 +1203,7 @@ cx_int16 cx_wordDeinit(cx_word* value);
#define cx_interfaceseqForeach(seq, elem) \
cx_uint32 elem##_iter;\
cx_interface elem;\
for(elem##_iter=0; elem = seq.buffer[elem##_iter], elem##_iter<seq.length; elem##_iter++)\
for(elem##_iter=0; seq.buffer ? elem = seq.buffer[elem##_iter] : 0, elem##_iter<seq.length; elem##_iter++)\

cx_interface cx_interfaceseqAppend(cx_interfaceseq *seq);
void cx_interfaceseqSize(cx_interfaceseq *seq, cx_uint32 length);
Expand All @@ -1199,7 +1213,7 @@ void cx_interfaceseqClear(cx_interfaceseq *seq);
#define cx_interfaceVectorseqForeach(seq, elem) \
cx_uint32 elem##_iter;\
cx_interfaceVector elem;\
for(elem##_iter=0; elem = seq.buffer[elem##_iter], elem##_iter<seq.length; elem##_iter++)\
for(elem##_iter=0; seq.buffer ? elem = seq.buffer[elem##_iter] : 0, elem##_iter<seq.length; elem##_iter++)\

cx_interfaceVector* cx_interfaceVectorseqAppend(cx_interfaceVectorseq *seq);
void cx_interfaceVectorseqSize(cx_interfaceVectorseq *seq, cx_uint32 length);
Expand All @@ -1209,7 +1223,7 @@ void cx_interfaceVectorseqClear(cx_interfaceVectorseq *seq);
#define cx_memberseqForeach(seq, elem) \
cx_uint32 elem##_iter;\
cx_member elem;\
for(elem##_iter=0; elem = seq.buffer[elem##_iter], elem##_iter<seq.length; elem##_iter++)\
for(elem##_iter=0; seq.buffer ? elem = seq.buffer[elem##_iter] : 0, elem##_iter<seq.length; elem##_iter++)\

cx_member cx_memberseqAppend(cx_memberseq *seq);
void cx_memberseqSize(cx_memberseq *seq, cx_uint32 length);
Expand All @@ -1219,7 +1233,7 @@ void cx_memberseqClear(cx_memberseq *seq);
#define cx_objectseqForeach(seq, elem) \
cx_uint32 elem##_iter;\
cx_object elem;\
for(elem##_iter=0; elem = seq.buffer[elem##_iter], elem##_iter<seq.length; elem##_iter++)\
for(elem##_iter=0; seq.buffer ? elem = seq.buffer[elem##_iter] : 0, elem##_iter<seq.length; elem##_iter++)\

cx_object cx_objectseqAppend(cx_objectseq *seq);
void cx_objectseqSize(cx_objectseq *seq, cx_uint32 length);
Expand All @@ -1229,7 +1243,7 @@ void cx_objectseqClear(cx_objectseq *seq);
#define cx_observerseqForeach(seq, elem) \
cx_uint32 elem##_iter;\
cx_observer elem;\
for(elem##_iter=0; elem = seq.buffer[elem##_iter], elem##_iter<seq.length; elem##_iter++)\
for(elem##_iter=0; seq.buffer ? elem = seq.buffer[elem##_iter] : 0, elem##_iter<seq.length; elem##_iter++)\

cx_observer cx_observerseqAppend(cx_observerseq *seq);
void cx_observerseqSize(cx_observerseq *seq, cx_uint32 length);
Expand All @@ -1239,7 +1253,7 @@ void cx_observerseqClear(cx_observerseq *seq);
#define cx_parameterseqForeach(seq, elem) \
cx_uint32 elem##_iter;\
cx_parameter elem;\
for(elem##_iter=0; elem = seq.buffer[elem##_iter], elem##_iter<seq.length; elem##_iter++)\
for(elem##_iter=0; seq.buffer ? elem = seq.buffer[elem##_iter] : 0, elem##_iter<seq.length; elem##_iter++)\

cx_parameter* cx_parameterseqAppend(cx_parameterseq *seq);
void cx_parameterseqSize(cx_parameterseq *seq, cx_uint32 length);
Expand All @@ -1249,7 +1263,7 @@ void cx_parameterseqClear(cx_parameterseq *seq);
#define cx_vtableForeach(seq, elem) \
cx_uint32 elem##_iter;\
cx_function elem;\
for(elem##_iter=0; elem = seq.buffer[elem##_iter], elem##_iter<seq.length; elem##_iter++)\
for(elem##_iter=0; seq.buffer ? elem = seq.buffer[elem##_iter] : 0, elem##_iter<seq.length; elem##_iter++)\

cx_function cx_vtableAppend(cx_vtable *seq);
void cx_vtableSize(cx_vtable *seq, cx_uint32 length);
Expand Down
1 change: 1 addition & 0 deletions packages/corto/lang/include/cx__meta.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ CX_META_OBJECT(struct, parameter);
CX_META_OBJECT(struct, delegatedata);
CX_META_OBJECT(struct, interfaceVector);
CX_META_OBJECT(interface, dispatcher);
CX_META_OBJECT(interface, replicator);

CX_META_OBJECT(binary, octet);
CX_META_OBJECT(boolean, bool);
Expand Down
6 changes: 5 additions & 1 deletion packages/corto/lang/include/cx__type.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ extern "C" {
#define cx_primitiveKind(o) ((cx_primitiveKind *)cx_assertType((cx_type)cx_primitiveKind_o, o))
#define cx_procedure(o) ((cx_procedure)cx_assertType((cx_type)cx_procedure_o, o))
#define cx_procedureKind(o) ((cx_procedureKind *)cx_assertType((cx_type)cx_procedureKind_o, o))
#define cx_replicator(o) ((cx_replicator)cx_assertType((cx_type)cx_replicator_o, o))
#define cx_sequence(o) ((cx_sequence)cx_assertType((cx_type)cx_sequence_o, o))
#define cx_state(o) ((cx_state *)cx_assertType((cx_type)cx_state_o, o))
#define cx_string(o) ((cx_string *)cx_assertType((cx_type)cx_string_o, o))
Expand Down Expand Up @@ -398,8 +399,8 @@ CX_CLASS(cx_observer);

CX_CLASS_DEF(cx_observer) {
CX_EXTEND(cx_function);
cx_object observable;
cx_eventMask mask;
cx_object observable;
cx_uint32 template;
cx_dispatcher dispatcher;
cx_object me;
Expand Down Expand Up @@ -602,6 +603,9 @@ CX_CLASS_DEF(cx_procedure) {
cx_callbackInit bind;
};

/* ::corto::lang::replicator */
CX_INTERFACE(cx_replicator);

/* ::corto::lang::sequence */
CX_CLASS(cx_sequence);

Expand Down
4 changes: 3 additions & 1 deletion packages/corto/lang/include/cx_object.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,15 @@ cx_string cx_relname(cx_object from, cx_object o, cx_id buffer);

/* Persistent data */
cx_time cx_timestampof(cx_object o);
cx_object cx_ownerof(cx_object o);

/* Find objects by name */
cx_object cx_lookup(cx_object scope, cx_string name);
cx_object cx_resolve(cx_object scope, cx_string expr);

/* Notifications */
cx_object cx_setSource(cx_object source);
cx_object cx_setOwner(cx_object source);
cx_object cx_getOwner(void);
cx_int32 cx_listen(cx_object observable, cx_observer observer, cx_object _this);
cx_int32 cx_silence(cx_object observable, cx_observer observer, cx_object _this);
cx_bool cx_listening(cx_object observable, cx_observer, cx_object _this);
Expand Down
28 changes: 28 additions & 0 deletions packages/corto/lang/include/cx_replicator.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/* cx_replicator.h
*
* This file contains generated code. Do not modify!
*/

#ifndef corto_lang_replicator_H
#define corto_lang_replicator_H

#include "corto.h"
#ifdef corto_lang_LIB
#include "cx__type.h"
#include "cx__api.h"
#include "cx__meta.h"
#else
#include "corto/lang/cx__type.h"
#include "corto/lang/cx__api.h"
#include "corto/lang/cx__meta.h"
#endif

#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif
#endif

3 changes: 2 additions & 1 deletion packages/corto/lang/src/cx.c
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ int8_t CX_DEBUG_ENABLED = 0;
SSO_OP_PRIM(op, parameter);\
SSO_OP_PRIM(op, delegatedata);\
SSO_OP_VOID(op, dispatcher);\
SSO_OP_VOID(op, replicator);\
SSO_OP_PRIM(op, callbackInit);\
SSO_OP_PRIM(op, callbackDestruct);\
SSO_OP_PROCEDURETYPE(op);\
Expand Down Expand Up @@ -191,8 +192,8 @@ int8_t CX_DEBUG_ENABLED = 0;
/* virtual */\
SSO_OP_OBJ(op, virtual_init_);\
/* observer */\
SSO_OP_OBJ(op, observer_observable);\
SSO_OP_OBJ(op, observer_mask);\
SSO_OP_OBJ(op, observer_observable);\
SSO_OP_OBJ(op, observer_template);\
SSO_OP_OBJ(op, observer_dispatcher);\
SSO_OP_OBJ(op, observer_me);\
Expand Down
Loading

0 comments on commit 7af3f29

Please sign in to comment.