Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Sven Gestegård Robertz
LabComm
Commits
dadd6d29
Commit
dadd6d29
authored
Mar 30, 2014
by
Sven Gestegård Robertz
Browse files
Merge branch 'voidtest'
parents
9ca60152
e86fc9b2
Changes
22
Hide whitespace changes
Inline
Side-by-side
compiler/CS_CodeGen.jrag
View file @
dadd6d29
...
@@ -645,6 +645,10 @@ aspect CS_Class {
...
@@ -645,6 +645,10 @@ aspect CS_Class {
" not declared");
" not declared");
}
}
public boolean VoidType.CS_needInstance() {
return false;
}
public boolean PrimType.CS_needInstance() {
public boolean PrimType.CS_needInstance() {
return false;
return false;
}
}
...
@@ -772,13 +776,15 @@ aspect CS_Info {
...
@@ -772,13 +776,15 @@ aspect CS_Info {
public void TypeDecl.CS_info(CS_env env, String namespace) {
public void TypeDecl.CS_info(CS_env env, String namespace) {
env.print(";C#;typedef;" + namespace + getName() + ";");
env.print(";C#;typedef;" + namespace + getName() + ";");
getType().CS_emitType(env);
getType().CS_emitType(env) ;
env.print(";not_applicable_for_C#");
env.println();
env.println();
}
}
public void SampleDecl.CS_info(CS_env env, String namespace) {
public void SampleDecl.CS_info(CS_env env, String namespace) {
env.print(";C#;sample;" + namespace + getName() + ";");
env.print(";C#;sample;" + namespace + getName() + ";");
getType().CS_emitType(env);
getType().CS_emitType(env);
env.print(";not_applicable_for_C#");
env.println();
env.println();
}
}
...
...
compiler/C_CodeGen.jrag
View file @
dadd6d29
...
@@ -371,8 +371,10 @@ aspect C_Declarations {
...
@@ -371,8 +371,10 @@ aspect C_Declarations {
env.println("int labcomm"+env.verStr+"_encode_" + env.prefix + getName() + "(");
env.println("int labcomm"+env.verStr+"_encode_" + env.prefix + getName() + "(");
env.indent();
env.indent();
env.println("struct labcomm"+env.verStr+"_encoder *e,");
env.println("struct labcomm"+env.verStr+"_encoder *e");
env.println(env.prefix + getName() + " *v");
if(!isVoid() ) {
env.println(", "+env.prefix + getName() + " *v");
}
env.unindent();
env.unindent();
env.println(");");
env.println(");");
...
@@ -700,8 +702,10 @@ aspect C_Encoder {
...
@@ -700,8 +702,10 @@ aspect C_Encoder {
env = env.nestStruct("(*v)");
env = env.nestStruct("(*v)");
env.println("static int encode_" + env.prefix + getName() + "(");
env.println("static int encode_" + env.prefix + getName() + "(");
env.indent();
env.indent();
env.println("struct labcomm"+env.verStr+"_writer *w,");
env.println("struct labcomm"+env.verStr+"_writer *w");
env.println(env.prefix + getName() + " *v");
if(!isVoid() ) {
env.println(", "+env.prefix + getName() + " *v");
}
env.unindent();
env.unindent();
env.println(")");
env.println(")");
env.println("{");
env.println("{");
...
@@ -714,16 +718,19 @@ aspect C_Encoder {
...
@@ -714,16 +718,19 @@ aspect C_Encoder {
// Typesafe encode wrapper
// Typesafe encode wrapper
env.println("int labcomm"+env.verStr+"_encode_" + env.prefix + getName() + "(");
env.println("int labcomm"+env.verStr+"_encode_" + env.prefix + getName() + "(");
env.println("struct labcomm"+env.verStr+"_encoder *e,");
env.println("struct labcomm"+env.verStr+"_encoder *e");
env.println(env.prefix + getName() + " *v");
if(!isVoid() ) {
env.println(", "+env.prefix + getName() + " *v");
}
env.unindent();
env.unindent();
env.println(")");
env.println(")");
env.println("{");
env.println("{");
env.indent();
env.indent();
env.println("return labcomm"+env.verStr+"_internal_encode(e, &labcomm"+env.verStr+"_signature_" +
env.println("return labcomm"+env.verStr+"_internal_encode(e, &labcomm"+env.verStr+"_signature_" +
env.prefix + getName() +
env.prefix + getName() +
", (labcomm"+env.verStr+"_encoder_function)encode_" + env.prefix + getName() +
", (labcomm"+env.verStr+"_encoder_function)encode_" +
", v);");
env.prefix + getName() +
(!isVoid()?", v":", NULL")+");");
env.unindent();
env.unindent();
env.println("}");
env.println("}");
}
}
...
@@ -745,7 +752,7 @@ aspect C_Encoder {
...
@@ -745,7 +752,7 @@ aspect C_Encoder {
}
}
public void UserType.C_emitEncoder(C_env env) {
public void UserType.C_emitEncoder(C_env env) {
lookupType(getName()
).getType().C_emitEncoder(env);
decl(
).getType().C_emitEncoder(env);
}
}
public void StructType.C_emitEncoder(C_env env) {
public void StructType.C_emitEncoder(C_env env) {
...
@@ -1156,12 +1163,23 @@ aspect C_Info {
...
@@ -1156,12 +1163,23 @@ aspect C_Info {
public void TypeDecl.C_info(C_env env) {
public void TypeDecl.C_info(C_env env) {
env.println(",C,typedef," + env.prefix + getName() + "," +
env.println(",C,typedef," + env.prefix + getName() + "," +
env.prefix + getName());
env.prefix + getName() + "," +
C_info_type_or_void(env.prefix));
}
}
public void SampleDecl.C_info(C_env env) {
public void SampleDecl.C_info(C_env env) {
env.println(",C,sample," + env.prefix + getName() + "," +
env.println(",C,sample," + env.prefix + getName() + "," +
env.prefix + getName());
env.prefix + getName() + "," +
C_info_type_or_void(env.prefix));
}
}
// make void types explicitly as they require special treatment
// in encoder/decoder calls
protected String Decl.C_info_type_or_void(String prefix) {
if(isVoid() ) {
return "void";
} else {
return prefix + getName() ;
}
}
}
}
compiler/DeclNames.jrag
0 → 100644
View file @
dadd6d29
aspect DeclNames {
inh String Type.declName();
eq Decl.getType().declName() = getName();
inh String Field.declName();
eq StructType.getField(int i).declName() = declName();
}
compiler/ErrorCheck.jrag
View file @
dadd6d29
...
@@ -20,6 +20,7 @@ aspect ErrorCheck {
...
@@ -20,6 +20,7 @@ aspect ErrorCheck {
}
}
public void ASTNode.errorCheck(Collection collection) {
public void ASTNode.errorCheck(Collection collection) {
nameCheck();
nameCheck();
typeCheck();
if(hasErrors())
if(hasErrors())
collection.add(errors);
collection.add(errors);
for(int i = 0; i < getNumChild(); i++) {
for(int i = 0; i < getNumChild(); i++) {
...
...
compiler/Java_CodeGen.jrag
View file @
dadd6d29
...
@@ -196,6 +196,7 @@ aspect Java_StructName {
...
@@ -196,6 +196,7 @@ aspect Java_StructName {
aspect Java_Void {
aspect Java_Void {
syn boolean Decl.isVoid() = getType().isVoid();
syn boolean Decl.isVoid() = getType().isVoid();
syn boolean UserType.isVoid() = decl().isVoid();
syn boolean Type.isVoid() = false;
syn boolean Type.isVoid() = false;
syn boolean VoidType.isVoid() = true;
syn boolean VoidType.isVoid() = true;
...
@@ -746,6 +747,10 @@ aspect Java_Class {
...
@@ -746,6 +747,10 @@ aspect Java_Class {
" not declared");
" not declared");
}
}
public boolean VoidType.Java_needInstance() {
return false;
}
public boolean PrimType.Java_needInstance() {
public boolean PrimType.Java_needInstance() {
return false;
return false;
}
}
...
@@ -864,13 +869,15 @@ aspect Java_Info {
...
@@ -864,13 +869,15 @@ aspect Java_Info {
public void TypeDecl.Java_info(Java_env env) {
public void TypeDecl.Java_info(Java_env env) {
env.print(",Java,typedef," + getName() + ",");
env.print(",Java,typedef," + getName() + ",");
getType().Java_emitType(env);
getType().Java_emitType(env);
env.print(",not_applicable_for_Java");
env.println();
env.println();
}
}
public void SampleDecl.Java_info(Java_env env) {
public void SampleDecl.Java_info(Java_env env) {
env.print(",Java,sample," + getName() + ",");
env.print(",Java,sample," + getName() + ",");
getType().Java_emitType(env);
getType().Java_emitType(env);
env.print(",not_applicable_for_Java");
env.println();
env.println();
}
}
...
...
compiler/LabComm.ast
View file @
dadd6d29
...
@@ -12,7 +12,7 @@ PrimType : Type ::= <Name:String> <Token:int>;
...
@@ -12,7 +12,7 @@ PrimType : Type ::= <Name:String> <Token:int>;
UserType : Type ::= <Name:String>;
UserType : Type ::= <Name:String>;
StructType : Type ::= Field*;
StructType : Type ::= Field*;
ParseArrayType : Type ::= Type Dim*;
ParseArrayType : Type ::= Type Dim*;
abstract ArrayType :
Type ::= Type Exp*;
abstract ArrayType :Type ::= Type Exp*;
VariableArrayType : ArrayType;
VariableArrayType : ArrayType;
FixedArrayType : ArrayType;
FixedArrayType : ArrayType;
...
...
compiler/LabComm.java
View file @
dadd6d29
...
@@ -249,6 +249,10 @@ public class LabComm {
...
@@ -249,6 +249,10 @@ public class LabComm {
if
(
prettyOnStdout
)
{
if
(
prettyOnStdout
)
{
ast
.
pp
(
System
.
out
);
ast
.
pp
(
System
.
out
);
}
}
}
else
{
// Catch-all for compilation errors
System
.
err
.
println
(
"Error in specification"
);
System
.
exit
(
3
);
}
}
}
}
}
}
...
...
compiler/LabCommParser.parser
View file @
dadd6d29
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
s
.
append
(
" *** Syntactic error: unexpected token "
+
Terminals
.
NAMES
[
token
.
getId
()]);
s
.
append
(
" *** Syntactic error: unexpected token "
+
Terminals
.
NAMES
[
token
.
getId
()]);
throw
new
SourceError
(
s
.
toString
());
throw
new
SourceError
(
s
.
toString
());
//
super
.
syntaxError
(
token
);
//
super
.
syntaxError
(
token
);
//
throw
new
RuntimeException
(
token
.
getLine
(
token
.
getStart
())
+
", "
+
//
throw
new
RuntimeException
(
token
.
getLine
(
token
.
getStart
())
+
", "
+
//
token
.
getColumn
(
token
.
getStart
())
+
": Syntax Error"
);
//
token
.
getColumn
(
token
.
getStart
())
+
": Syntax Error"
);
}
}
public
void
scannerError
(
Scanner
.
Exception
e
)
{
public
void
scannerError
(
Scanner
.
Exception
e
)
{
...
@@ -55,51 +55,50 @@ List var_decl_list =
...
@@ -55,51 +55,50 @@ List var_decl_list =
Field
var_decl
=
Field
var_decl
=
type
.
t
IDENTIFIER
SEMICOLON
{:
return
new
Field
(
t
,
IDENTIFIER
);
:}
type
.
t
IDENTIFIER
SEMICOLON
{:
return
new
Field
(
t
,
IDENTIFIER
);
:}
|
type
.
t
IDENTIFIER
dim_list
.
d
SEMICOLON
|
type
.
t
IDENTIFIER
dim_list
.
d
SEMICOLON
{:
return
new
Field
(
new
ParseArrayType
(
t
,
d
),
IDENTIFIER
);
:}
{:
return
new
Field
(
new
ParseArrayType
(
t
,
d
),
IDENTIFIER
);
:}
;
;
TypeDecl
type_decl
=
TypeDecl
type_decl
=
TYPEDEF
type
.
t
IDENTIFIER
SEMICOLON
{:
return
new
TypeDecl
(
t
,
IDENTIFIER
);
:}
TYPEDEF
type
.
t
IDENTIFIER
SEMICOLON
{:
return
new
TypeDecl
(
t
,
IDENTIFIER
);
:}
|
TYPEDEF
type
.
t
IDENTIFIER
dim_list
.
d
SEMICOLON
|
TYPEDEF
type
.
t
IDENTIFIER
dim_list
.
d
SEMICOLON
{:
return
new
TypeDecl
(
new
ParseArrayType
(
t
,
d
),
IDENTIFIER
);
:}
{:
return
new
TypeDecl
(
new
ParseArrayType
(
t
,
d
),
IDENTIFIER
);
:}
;
;
SampleDecl
sample_decl
=
SampleDecl
sample_decl
=
SAMPLE
type
.
t
IDENTIFIER
SEMICOLON
SAMPLE
type
.
t
IDENTIFIER
SEMICOLON
{:
return
new
SampleDecl
(
t
,
IDENTIFIER
);
:}
{:
return
new
SampleDecl
(
t
,
IDENTIFIER
);
:}
|
SAMPLE
type
.
t
IDENTIFIER
dim_list
.
d
SEMICOLON
|
SAMPLE
type
.
t
IDENTIFIER
dim_list
.
d
SEMICOLON
{:
return
new
SampleDecl
(
new
ParseArrayType
(
t
,
d
),
IDENTIFIER
);
:}
{:
return
new
SampleDecl
(
new
ParseArrayType
(
t
,
d
),
IDENTIFIER
);
:}
|
SAMPLE
VOID
IDENTIFIER
SEMICOLON
{:
return
new
SampleDecl
(
new
VoidType
(),
IDENTIFIER
);
:}
;
;
Type
type
=
Type
type
=
prim_type
.
p
{:
return
p
;
:}
prim_type
.
p
{:
return
p
;
:}
|
user_type
.
u
{:
return
u
;
:}
|
user_type
.
u
{:
return
u
;
:}
|
struct_type
.
s
{:
return
s
;
:}
|
struct_type
.
s
{:
return
s
;
:}
|
void_type
.
v
{:
return
v
;
:}
;
;
PrimType
prim_type
=
PrimType
prim_type
=
BOOLEAN
BOOLEAN
{:
return
new
PrimType
(
BOOLEAN
,
ASTNode
.
LABCOMM_BOOLEAN
);
:}
{:
return
new
PrimType
(
BOOLEAN
,
ASTNode
.
LABCOMM_BOOLEAN
);
:}
|
BYTE
|
BYTE
{:
return
new
PrimType
(
BYTE
,
ASTNode
.
LABCOMM_BYTE
);
:}
{:
return
new
PrimType
(
BYTE
,
ASTNode
.
LABCOMM_BYTE
);
:}
|
SHORT
|
SHORT
{:
return
new
PrimType
(
SHORT
,
ASTNode
.
LABCOMM_SHORT
);
:}
{:
return
new
PrimType
(
SHORT
,
ASTNode
.
LABCOMM_SHORT
);
:}
|
INT
|
INT
{:
return
new
PrimType
(
INT
,
ASTNode
.
LABCOMM_INT
);
:}
{:
return
new
PrimType
(
INT
,
ASTNode
.
LABCOMM_INT
);
:}
|
LONG
|
LONG
{:
return
new
PrimType
(
LONG
,
ASTNode
.
LABCOMM_LONG
);
:}
{:
return
new
PrimType
(
LONG
,
ASTNode
.
LABCOMM_LONG
);
:}
|
FLOAT
|
FLOAT
{:
return
new
PrimType
(
FLOAT
,
ASTNode
.
LABCOMM_FLOAT
);
:}
{:
return
new
PrimType
(
FLOAT
,
ASTNode
.
LABCOMM_FLOAT
);
:}
|
DOUBLE
|
DOUBLE
{:
return
new
PrimType
(
DOUBLE
,
ASTNode
.
LABCOMM_DOUBLE
);
:}
{:
return
new
PrimType
(
DOUBLE
,
ASTNode
.
LABCOMM_DOUBLE
);
:}
|
STRING
|
STRING
{:
return
new
PrimType
(
STRING
,
ASTNode
.
LABCOMM_STRING
);
:}
{:
return
new
PrimType
(
STRING
,
ASTNode
.
LABCOMM_STRING
);
:}
;
;
UserType
user_type
=
UserType
user_type
=
IDENTIFIER
{:
return
new
UserType
(
IDENTIFIER
);
:}
IDENTIFIER
{:
return
new
UserType
(
IDENTIFIER
);
:}
;
;
...
@@ -107,6 +106,10 @@ StructType struct_type =
...
@@ -107,6 +106,10 @@ StructType struct_type =
STRUCT
LBRACE
var_decl_list
.
l
RBRACE
{:
return
new
StructType
(
l
);
:}
STRUCT
LBRACE
var_decl_list
.
l
RBRACE
{:
return
new
StructType
(
l
);
:}
;
;
VoidType
void_type
=
VOID
{:
return
new
VoidType
();
:}
;
List
dim_list
=
List
dim_list
=
dim
.
d
{:
return
new
List
().
add
(
d
);
:}
dim
.
d
{:
return
new
List
().
add
(
d
);
:}
|
dim_list
.
l
dim
.
d
{:
return
l
.
add
(
d
);
:}
|
dim_list
.
l
dim
.
d
{:
return
l
.
add
(
d
);
:}
...
@@ -121,7 +124,7 @@ List exp_list =
...
@@ -121,7 +124,7 @@ List exp_list =
|
exp_list
.
l
COMMA
exp
.
e
{:
return
l
.
add
(
e
);
:}
|
exp_list
.
l
COMMA
exp
.
e
{:
return
l
.
add
(
e
);
:}
;
;
Exp
exp
=
Exp
exp
=
INTEGER_LITERAL
{:
return
new
IntegerLiteral
(
INTEGER_LITERAL
);
:}
INTEGER_LITERAL
{:
return
new
IntegerLiteral
(
INTEGER_LITERAL
);
:}
|
UNDERSCORE
{:
return
new
VariableSize
();
:}
|
UNDERSCORE
{:
return
new
VariableSize
();
:}
;
;
compiler/TypeCheck.jrag
0 → 100644
View file @
dadd6d29
aspect TypeCheck {
public void ASTNode.typeCheck() {
// calls to the different type checks to be performed
nullTypeCheck();
}
// void is not allowed as a field in a struct or an array element
syn boolean Type.isNull();
eq Type.isNull() = false;
eq VoidType.isNull() = true;
eq UserType.isNull() = decl().isNull();
syn boolean TypeDecl.isNull();
eq TypeDecl.isNull() = getType().isNull();
public void ASTNode.nullTypeCheck() {}
public void Field.nullTypeCheck() {
if(getType().isNull()) {
error("field " + getName() + " of struct "+ declName()+ " may not be of type void");
}
}
public void ParseArrayType.nullTypeCheck() {
if(getType().isNull()) {
error("elements of array "+declName()+" may not be of type void");
}
}
public void ArrayType.nullTypeCheck() {
if(getType().isNull()) {
error("elements of array "+declName()+" may not be of type void");
}
}
}
examples/simple/Decoder.java
View file @
dadd6d29
...
@@ -5,7 +5,7 @@ import java.io.InputStream;
...
@@ -5,7 +5,7 @@ import java.io.InputStream;
import
se.lth.control.labcomm.LabCommDecoderChannel
;
import
se.lth.control.labcomm.LabCommDecoderChannel
;
public
class
Decoder
public
class
Decoder
implements
theTwoInts
.
Handler
,
anotherTwoInts
.
Handler
,
IntString
.
Handler
,
TwoArrays
.
Handler
,
TwoFixedArrays
.
Handler
implements
theTwoInts
.
Handler
,
anotherTwoInts
.
Handler
,
IntString
.
Handler
,
TwoArrays
.
Handler
,
TwoFixedArrays
.
Handler
,
doavoid
.
Handler
{
{
...
@@ -20,6 +20,7 @@ public class Decoder
...
@@ -20,6 +20,7 @@ public class Decoder
IntString
.
register
(
decoder
,
this
);
IntString
.
register
(
decoder
,
this
);
TwoArrays
.
register
(
decoder
,
this
);
TwoArrays
.
register
(
decoder
,
this
);
TwoFixedArrays
.
register
(
decoder
,
this
);
TwoFixedArrays
.
register
(
decoder
,
this
);
doavoid
.
register
(
decoder
,
this
);
try
{
try
{
System
.
out
.
println
(
"Running decoder."
);
System
.
out
.
println
(
"Running decoder."
);
...
@@ -72,6 +73,10 @@ public class Decoder
...
@@ -72,6 +73,10 @@ public class Decoder
}
}
System
.
out
.
println
();
System
.
out
.
println
();
}
}
public
void
handle_doavoid
()
throws
java
.
io
.
IOException
{
System
.
out
.
println
(
"Got doavoid"
);
}
public
static
void
main
(
String
[]
arg
)
throws
Exception
{
public
static
void
main
(
String
[]
arg
)
throws
Exception
{
...
...
examples/simple/example_encoder.c
View file @
dadd6d29
...
@@ -20,9 +20,13 @@ int main(int argc, char *argv[]) {
...
@@ -20,9 +20,13 @@ int main(int argc, char *argv[]) {
labcomm_default_error_handler
,
labcomm_default_error_handler
,
labcomm_default_memory
,
labcomm_default_memory
,
labcomm_default_scheduler
);
labcomm_default_scheduler
);
labcomm_encoder_register_simple_doavoid
(
encoder
);
labcomm_encoder_register_simple_theTwoInts
(
encoder
);
labcomm_encoder_register_simple_theTwoInts
(
encoder
);
labcomm_encoder_register_simple_anotherTwoInts
(
encoder
);
labcomm_encoder_register_simple_anotherTwoInts
(
encoder
);
labcomm_encoder_register_simple_IntString
(
encoder
);
labcomm_encoder_register_simple_IntString
(
encoder
);
labcomm_encode_simple_doavoid
(
encoder
);
simple_IntString
is
;
simple_IntString
is
;
is
.
x
=
24
;
is
.
x
=
24
;
is
.
s
=
"Hello, LabComm!"
;
is
.
s
=
"Hello, LabComm!"
;
...
...
examples/simple/simple.lc
View file @
dadd6d29
...
@@ -25,3 +25,18 @@ sample struct {
...
@@ -25,3 +25,18 @@ sample struct {
int a[2];
int a[2];
int b[2,3];
int b[2,3];
} TwoFixedArrays;
} TwoFixedArrays;
typedef void avoid;
sample avoid doavoid;
// examples of errors: void may not be used
// in structs or arrays
//
// sample struct {
// int a;
// avoid error;
//} foo;
//
//sample void error2[2] ;
//sample avoid error3[_];
examples/twoway/client.c
View file @
dadd6d29
...
@@ -175,7 +175,7 @@ int main(int argc, char *argv[])
...
@@ -175,7 +175,7 @@ int main(int argc, char *argv[])
}
}
}
}
printf
(
"
\n
"
);
printf
(
"
\n
"
);
labcomm_encode_types_Terminate
(
encoder
,
LABCOMM_VOID
);
labcomm_encode_types_Terminate
(
encoder
);
out:
out:
return
0
;
return
0
;
...
...
lib/c/test/test_labcomm_generated_encoding.c
View file @
dadd6d29
...
@@ -179,7 +179,8 @@ void dump_encoder(struct labcomm_encoder *encoder)
...
@@ -179,7 +179,8 @@ void dump_encoder(struct labcomm_encoder *encoder)
int
main
(
void
)
int
main
(
void
)
{
{
generated_encoding_V
V
;
//no longer used
//generated_encoding_V V;
generated_encoding_B
B
=
1
;
generated_encoding_B
B
=
1
;
struct
labcomm_encoder
*
encoder
=
labcomm_encoder_new
(
struct
labcomm_encoder
*
encoder
=
labcomm_encoder_new
(
...
@@ -199,7 +200,8 @@ int main(void)
...
@@ -199,7 +200,8 @@ int main(void)
EXPECT
({
0x02
,
-
1
,
0x01
,
'B'
,
0x21
});
EXPECT
({
0x02
,
-
1
,
0x01
,
'B'
,
0x21
});
labcomm_encoder_ioctl
(
encoder
,
IOCTL_WRITER_RESET
);
labcomm_encoder_ioctl
(
encoder
,
IOCTL_WRITER_RESET
);
labcomm_encode_generated_encoding_V
(
encoder
,
&
V
);
// was: labcomm_encode_generated_encoding_V(encoder, &V);
labcomm_encode_generated_encoding_V
(
encoder
);
EXPECT
({
-
1
});
EXPECT
({
-
1
});
labcomm_encoder_ioctl
(
encoder
,
IOCTL_WRITER_RESET
);
labcomm_encoder_ioctl
(
encoder
,
IOCTL_WRITER_RESET
);
...
...
test/Makefile
View file @
dadd6d29
TESTS
=
basic simple nested
TESTS
=
basic simple nested
LABCOMM_JAR
=
../compiler/labComm.jar
LABCOMM_JAR
=
../compiler/labComm.jar
LABCOMM
=
java
-jar
$(LABCOMM_JAR)
LABCOMM
=
java
-jar
$(LABCOMM_JAR)
CFLAGS
=
-O3
-g
-Wall
-Werror
CFLAGS
=
-O3
-g
-Wall
-Werror
all
:
all
:
test
:
$(TESTS:%=test_%)
test
:
$(TESTS:%=test_%)
compiler_errors
# PYTHONPATH=../lib/python \
# PYTHONPATH=../lib/python \
# ./test_encoder_decoder.py --labcomm="$(LABCOMM)" basic.lc
# ./test_encoder_decoder.py --labcomm="$(LABCOMM)" basic.lc
...
@@ -14,12 +14,12 @@ test: $(TESTS:%=test_%)
...
@@ -14,12 +14,12 @@ test: $(TESTS:%=test_%)
clean distclean
:
clean distclean
:
rm
-rf
gen
rm
-rf
gen
.PHONY
:
test_%
.PHONY
:
test_%
test_%
:
gen/%/signatures.py
\
test_%
:
gen/%/signatures.py
\
gen/%/c_relay
\
gen/%/c_relay
\
gen/%/cs_relay.exe
\
gen/%/cs_relay.exe
\
gen/%/java_relay.class
\
gen/%/java_relay.class
\
gen/%/java_code
gen/%/java_code
PYTHONPATH
=
../lib/python ./test_encoder_decoder.py
\
PYTHONPATH
=
../lib/python ./test_encoder_decoder.py
\
--signatures
=
gen/
$*
/signatures.py
\
--signatures
=
gen/
$*
/signatures.py
\
--test
tee
gen/
$*
/testdata
\
--test
tee
gen/
$*
/testdata
\
...
@@ -27,6 +27,20 @@ test_%: gen/%/signatures.py \
...
@@ -27,6 +27,20 @@ test_%: gen/%/signatures.py \
--test
mono gen/
$*
/cs_relay.exe /dev/stdin /dev/stdout
\
--test
mono gen/
$*
/cs_relay.exe /dev/stdin /dev/stdout
\
--test
java
\\
-cp
gen/
$*
:../lib/java/labcomm.jar java_relay
\
--test
java
\\
-cp
gen/
$*
:../lib/java/labcomm.jar java_relay
\
/dev/stdin /dev/stdout
/dev/stdin /dev/stdout
# test cases for compiler error checking
.PHONY
:
compiler_errors testErrorsOK testErrorsNOK
compiler_errors
:
testErrorsOK testErrorsNOK
# tests that should succeed
testErrorsOK
:
$(wildcard errors/correct/*.lc)
./test_errors.py
--labcomm
=
"
$(LABCOMM)
"
--testOK
$^
# tests that should fail
testErrorsNOK
:
$(wildcard errors/incorrect/*.lc)