Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
L
LabComm
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Anders Blomdell
LabComm
Commits
2d479b83
Commit
2d479b83
authored
11 years ago
by
Tommy Olofsson
Browse files
Options
Downloads
Patches
Plain Diff
Fixed a problem with copy for strings.
parent
9fb85ef7
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
compiler/C_CodeGen.jrag
+15
-3
15 additions, 3 deletions
compiler/C_CodeGen.jrag
lib/c/Makefile
+3
-2
3 additions, 2 deletions
lib/c/Makefile
lib/c/test/test_labcomm_copy.c
+61
-11
61 additions, 11 deletions
lib/c/test/test_labcomm_copy.c
with
79 additions
and
16 deletions
compiler/C_CodeGen.jrag
+
15
−
3
View file @
2d479b83
...
...
@@ -743,9 +743,21 @@ aspect C_copy {
}
public void PrimType.C_emitCopy(C_env env_src, C_env env_dst) {
if (C_isDynamic()) {
env_src.println(String.format(
"%s%s = labcomm_memory_alloc(mem, 1, strlen(%s%s)+1);",
env_dst.accessor(), env_dst.qualid,
env_src.accessor(), env_src.qualid));
env_src.println(String.format(
"memcpy(%s%s, %s%s, strlen(%s%s)+1);",
env_dst.accessor(), env_dst.qualid,
env_src.accessor(), env_src.qualid,
env_src.accessor(), env_src.qualid));
} else {
env_src.println(env_dst.accessor() + env_dst.qualid + " = " +
env_src.accessor() + env_src.qualid + ";");
}
}
public void UserType.C_emitCopy(C_env env_src, C_env env_dst) {
lookupType(getName()).getType().C_emitCopy(env_src, env_dst);
...
...
@@ -880,7 +892,7 @@ aspect C_copy {
public void PrimType.C_emitCopyDeallocation(C_env env) {
if (C_isDynamic()) {
env.println("labcomm_memory_free(mem, 1, " +
env.qualid + ");");
env.accessor() +
env.qualid + ");");
}
}
...
...
This diff is collapsed.
Click to expand it.
lib/c/Makefile
+
3
−
2
View file @
2d479b83
...
...
@@ -3,7 +3,7 @@ UNAME_S=$(shell uname -s)
ALL_DEPS
=
liblabcomm.a liblabcomm.so.1
ifeq
($(UNAME_S),Linux)
CFLAGS
=
-std
=
c99
-g
-Wall
-Werror
-O3
-I
.
-Itest
-Wno-unused-function
CFLAGS
=
-std
=
c99
-g
-Wall
-Werror
-O3
-I
.
-Itest
CC
=
$(
CROSS_COMPILE
)
gcc
LD
=
$(
CROSS_COMPILE
)
ld
LDFLAGS
=
-L
.
...
...
@@ -134,6 +134,7 @@ clean:
$(
RM
)
test
/testdata/gen/
*
.[cho]
$(
RM
)
test
/gen/
*
.[cho]
$(
RM
)
$(
TEST_DIR
)
/test_labcomm
$(
RM
)
$(
TEST_DIR
)
/test_labcomm_copy
distclean
:
clean
$(
RM
)
liblabcomm.so.1
...
...
@@ -151,7 +152,7 @@ $(TEST_DIR)/test_signature_numbers.c: $(TEST_DIR)/gen/another_encoding.h
$(TEST_DIR)/test_signature_numbers.c
:
$(TEST_DIR)/gen/generated_encoding.h
$(TEST_DIR)/test_signature_numbers
:
$(TEST_DIR)/gen/another_encoding.o
$(TEST_DIR)/test_signature_numbers
:
$(TEST_DIR)/gen/generated_encoding.o
$(TEST_DIR)/test_labcomm_copy
:
$(TEST_DIR)/gen/generated_encoding.o $(TEST_DIR)/gen/test_sample.o
$(TEST_DIR)/test_labcomm_copy
:
$(TEST_DIR)/gen/generated_encoding.o $(TEST_DIR)/gen/test_sample.o
$(TEST_DIR)/gen/more_types.o
labcomm_fd_reader.o
:
labcomm_private.h
labcomm_fd_writer.o
:
labcomm_private.h
labcomm_dynamic_buffer_writer.o
:
labcomm_private.h
This diff is collapsed.
Click to expand it.
lib/c/test/test_labcomm_copy.c
+
61
−
11
View file @
2d479b83
...
...
@@ -15,6 +15,7 @@
#include
"labcomm_fd_reader.h"
#include
"test/gen/generated_encoding.h"
#include
"test/gen/test_sample.h"
#include
"test/gen/more_types.h"
#define DATA_FILE "copy_test.dat"
...
...
@@ -43,6 +44,21 @@ static void handle_test_var(test_sample_test_var *v, void *context)
labcomm_copy_test_sample_test_var
(
labcomm_default_memory
,
context
,
v
);
}
static
void
handle_a
(
more_types_A
*
v
,
void
*
context
)
{
labcomm_copy_more_types_A
(
labcomm_default_memory
,
context
,
v
);
}
static
void
handle_s
(
more_types_S
*
v
,
void
*
context
)
{
labcomm_copy_more_types_S
(
labcomm_default_memory
,
context
,
v
);
}
static
void
handle_ns
(
more_types_NS
*
v
,
void
*
context
)
{
labcomm_copy_more_types_NS
(
labcomm_default_memory
,
context
,
v
);
}
int
main
(
int
argc
,
char
**
argv
)
{
struct
labcomm_encoder
*
encoder
;
...
...
@@ -58,6 +74,12 @@ int main(int argc, char **argv)
generated_encoding_P
cache_p
;
test_sample_test_var
test_var
;
test_sample_test_var
cache_test_var
;
more_types_A
a
;
more_types_A
cache_a
;
more_types_S
s
;
more_types_S
cache_s
=
NULL
;
more_types_NS
ns
;
more_types_NS
cache_ns
;
fd
=
open
(
DATA_FILE
,
O_RDWR
|
O_CREAT
|
O_TRUNC
,
0644
);
if
(
fd
==
-
1
)
...
...
@@ -100,6 +122,19 @@ int main(int argc, char **argv)
test_var
.
a
[
i
]
=
10
*
i
+
j
;
labcomm_encode_test_sample_test_var
(
encoder
,
&
test_var
);
labcomm_encoder_register_more_types_A
(
encoder
);
for
(
int
i
=
0
;
i
<
sizeof
(
a
.
a
)
/
sizeof
(
a
.
a
[
0
]);
i
++
)
a
.
a
[
i
]
=
i
;
labcomm_encode_more_types_A
(
encoder
,
&
a
);
labcomm_encoder_register_more_types_S
(
encoder
);
s
=
"this is a string"
;
labcomm_encode_more_types_S
(
encoder
,
&
s
);
labcomm_encoder_register_more_types_NS
(
encoder
);
ns
.
s
=
"this is a another string"
;
labcomm_encode_more_types_NS
(
encoder
,
&
ns
);
labcomm_encoder_free
(
encoder
);
encoder
=
NULL
;
lseek
(
fd
,
0
,
SEEK_SET
);
...
...
@@ -112,35 +147,34 @@ int main(int argc, char **argv)
labcomm_decoder_register_generated_encoding_S1
(
decoder
,
handle_s1
,
&
cache_s1
);
labcomm_decoder_register_generated_encoding_B
(
decoder
,
handle_b
,
&
cache_b
);
labcomm_decoder_register_generated_encoding_I
(
decoder
,
handle_i
,
&
cache_I
);
labcomm_decoder_register_generated_encoding_P
(
decoder
,
handle_p
,
&
cache_p
);
labcomm_decoder_register_test_sample_test_var
(
decoder
,
handle_test_var
,
&
cache_test_var
);
labcomm_decoder_register_generated_encoding_P
(
decoder
,
handle_p
,
&
cache_p
);
labcomm_decoder_decode_one
(
decoder
);
/* S1 */
labcomm_decoder_decode_one
(
decoder
);
labcomm_decoder_decode_one
(
decoder
);
/* B */
labcomm_decoder_decode_one
(
decoder
);
labcomm_decoder_decode_one
(
decoder
);
/* I */
labcomm_decoder_decode_one
(
decoder
);
labcomm_decoder_decode_one
(
decoder
);
/* P */
labcomm_decoder_decode_one
(
decoder
);
labcomm_decoder_decode_one
(
decoder
);
/* test_var */
labcomm_decoder_decode_one
(
decoder
);
labcomm_decoder_register_more_types_A
(
decoder
,
handle_a
,
&
cache_a
);
labcomm_decoder_register_more_types_S
(
decoder
,
handle_s
,
&
cache_s
);
labcomm_decoder_register_more_types_NS
(
decoder
,
handle_ns
,
&
cache_ns
);
while
(
labcomm_decoder_decode_one
(
decoder
)
>
0
)
;
assert
(
cache_s1
.
i
==
s1
.
i
);
puts
(
"S1 copied ok"
);
assert
(
cache_b
==
b
);
puts
(
"B copied ok"
);
assert
(
cache_I
.
n_0
==
I
.
n_0
);
assert
(
cache_I
.
a
[
0
]
==
I
.
a
[
0
]);
assert
(
cache_I
.
a
[
1
]
==
I
.
a
[
1
]);
assert
(
cache_I
.
a
[
2
]
==
I
.
a
[
2
]);
free
(
I
.
a
);
puts
(
"I copied ok"
);
assert
(
cache_p
.
n_0
==
p
.
n_0
);
for
(
int
i
=
0
;
i
<
p
.
n_0
;
i
++
)
assert
(
cache_p
.
a
[
i
].
i
==
p
.
a
[
i
].
i
);
free
(
p
.
a
);
puts
(
"P copied ok"
);
assert
(
cache_test_var
.
n_0
==
test_var
.
n_0
);
assert
(
cache_test_var
.
n_1
==
test_var
.
n_1
);
for
(
int
i
=
0
;
i
<
test_var
.
n_0
;
i
++
)
...
...
@@ -149,6 +183,16 @@ int main(int argc, char **argv)
free
(
test_var
.
a
);
puts
(
"test_var copied ok"
);
for
(
int
i
=
0
;
i
<
sizeof
(
a
.
a
)
/
sizeof
(
a
.
a
[
0
]);
i
++
)
assert
(
cache_a
.
a
[
i
]
==
a
.
a
[
i
]);
puts
(
"A copied ok"
);
assert
(
!
strcmp
(
cache_s
,
s
));
puts
(
"S copied ok"
);
assert
(
!
strcmp
(
cache_ns
.
s
,
ns
.
s
));
puts
(
"NS copied ok"
);
labcomm_decoder_free
(
decoder
);
close
(
fd
);
unlink
(
DATA_FILE
);
...
...
@@ -163,4 +207,10 @@ int main(int argc, char **argv)
puts
(
"P deallocated ok"
);
labcomm_copy_free_test_sample_test_var
(
labcomm_default_memory
,
&
cache_test_var
);
puts
(
"test_var deallocated ok"
);
labcomm_copy_free_more_types_A
(
labcomm_default_memory
,
&
cache_a
);
puts
(
"A deallocated ok"
);
labcomm_copy_free_more_types_S
(
labcomm_default_memory
,
&
cache_s
);
puts
(
"S deallocated ok"
);
labcomm_copy_free_more_types_NS
(
labcomm_default_memory
,
&
cache_ns
);
puts
(
"NS deallocated ok"
);
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment