diff --git a/compiler/2014/C_CodeGen.jrag b/compiler/2014/C_CodeGen.jrag index b10029e803b835962a62c6dde6084a7e8324e246..927a9bb8ff14289216c930c1c07fa298e2f80567 100644 --- a/compiler/2014/C_CodeGen.jrag +++ b/compiler/2014/C_CodeGen.jrag @@ -1458,7 +1458,7 @@ aspect C_Sizeof { public void SampleDecl.C_emitSizeofDeclaration(C_env env) { env.println("extern int labcomm2014_sizeof_" + env.prefix + getName() + - "(" + env.prefix + getName() + " *v);"); + "( const struct labcomm2014_signature *sig, " + env.prefix + getName() + " *v);"); } public int Decl.C_fixedSizeof() { @@ -1471,7 +1471,7 @@ aspect C_Sizeof { public void SampleDecl.C_emitSizeof(C_env env) { env = env.nestStruct("(*v)"); env.println("int labcomm2014_sizeof_" + env.prefix + getName() + - "(" + env.prefix + getName() + " *v)"); + "( const struct labcomm2014_signature *sig, " + env.prefix + getName() + " *v)"); env.println("{"); env.indent(); env.println("return labcomm2014_internal_sizeof(" + @@ -1535,7 +1535,7 @@ aspect C_Sizeof { public void SampleDecl.C_emitSizeofValue(C_env env) { env = env.nestStruct("(*v)"); - env.println("static int sizeof_" + env.prefix + getName() + "(void *vv)"); + env.println("static int sizeof_" + env.prefix + getName() + "( const struct labcomm2014_signature *sig, void *vv)"); env.println("{"); env.indent(); env.println("int result = 0;"); diff --git a/lib/c/2014/labcomm2014.c b/lib/c/2014/labcomm2014.c index 1cd953a789568e82d9ade761d88651754ae218f5..d66efea5532111bf6659e3061e672be713b7ee7d 100644 --- a/lib/c/2014/labcomm2014.c +++ b/lib/c/2014/labcomm2014.c @@ -272,7 +272,7 @@ int labcomm2014_get_local_type_index(const struct labcomm2014_signature *signatu int labcomm2014_internal_sizeof(const struct labcomm2014_signature *signature, void *v) { - int length = signature->encoded_size(v); + int length = signature->encoded_size(signature, v); return (labcomm2014_size_packed32(signature->index) + labcomm2014_size_packed32(length) + length); diff --git a/lib/c/2014/labcomm2014_encoder.c b/lib/c/2014/labcomm2014_encoder.c index 09cdc9221e8a3b5c4efc4489745f468bdc928646..d223e48b41779e4e5e7ba56899b41ff4006585a7 100644 --- a/lib/c/2014/labcomm2014_encoder.c +++ b/lib/c/2014/labcomm2014_encoder.c @@ -147,7 +147,7 @@ static int do_encode( struct encoder *ie = e->context; index = labcomm2014_get_local_index(signature); - length = (signature->encoded_size(value)); + length = (signature->encoded_size(signature, value)); labcomm2014_scheduler_writer_lock(e->scheduler); if (! LABCOMM_SIGNATURE_ARRAY_GET(ie->registered, int, index, 0)) { result = -EINVAL; diff --git a/lib/c/2014/labcomm2014_type_signature.h b/lib/c/2014/labcomm2014_type_signature.h index dfb79342a30f5996437fd44b6e8d4df704bc6c16..20dd2dcc95c452cd94635f110356524748ad8bb7 100644 --- a/lib/c/2014/labcomm2014_type_signature.h +++ b/lib/c/2014/labcomm2014_type_signature.h @@ -50,7 +50,7 @@ struct labcomm2014_sample_ref; struct labcomm2014_signature { char *name; - int (*encoded_size)(void *); /* void* refers to sample_data */ + int (*encoded_size)(const struct labcomm2014_signature *sig, void *); /* void* refers to sample_data */ int size; unsigned char *signature; int index; diff --git a/lib/c/2014/test/test_labcomm.c b/lib/c/2014/test/test_labcomm.c index 0b0fbf36fe0caa3c663654ba9a75bb5509b562f7..ec6dd66297aadb42edb86e1084614709d0c45f64 100644 --- a/lib/c/2014/test/test_labcomm.c +++ b/lib/c/2014/test/test_labcomm.c @@ -217,10 +217,10 @@ static void test_encode_decode(struct labcomm2014_encoder *encoder, err = test_decode_one(decoder); fprintf(stderr, "decode of sample %u * 2 * %u -> size=%d err=%d\n", n_0, n_2, writer.pos, err); - if (writer.pos != labcomm2014_sizeof_test_sample_test_var(&encoder_var)) { + if (writer.pos != labcomm2014_sizeof_test_sample_test_var(NULL, &encoder_var)) { fprintf(stderr, "Incorrect sizeof %u * 2 * %u (%d != %d)\n", n_0, n_2, - writer.pos, labcomm2014_sizeof_test_sample_test_var(&encoder_var)); + writer.pos, labcomm2014_sizeof_test_sample_test_var(NULL, &encoder_var)); exit(1); } if (writer.pos != expected) {