dxmp 0.1.0 released
rubikitch at ruby-lang.org
rubikitch at ruby-lang.org
Sat Mar 10 07:17:13 PST 2007
I just released dxmp, code annotator for D.
It is D port of Ruby's xmpfilter.
http://www.dsource.org/projects/dxmp/
$ build dxmp
Files are up to date, no build required.
$ cat simple.rb
# Example of Ruby's xmpfilter
1+1 # =>
"aa".length # =>
$ xmpfilter simple.rb
# Example of Ruby's xmpfilter
1+1 # => 2
"aa".length # => 2
$ cat simple.d
// Example of D's dxmp
int main(char[][] argv) {
1+1; // =>
"aa".length; // =>
return 0;
}
$ ./dxmp simple.d
// Example of D's dxmp
int main(char[][] argv) {
cast(void)(1+1); // => 2
cast(void)("aa".length); // => 2
return 0;
}
$ cat dxmp_testcases.d
private import std.stdio;
private import std.cstream;
int main(char[][] argv) {
version(assert_error) assert(0);
version(switch_error) switch_error();
version(array_warning) array_warning();
version(not_reachable) not_reachable();
version(undefined) undefined();
version(print) print();
version(annotate) annotate();
return 0;
}
version(switch_error)
void switch_error() {
int x = 1;
switch(x) {
case 0:
writefln(0);
break;
/* no default */
}
}
version(array_warning)
char array_warning() {
static char[10] a;
int length = 4;
return a[length - 1];
}
version(not_reachable)
int not_reachable() {
return 1;
return 2;
}
version(undefined)
void undefined() {
x();
}
version(print)
void print() {
writefln("print");
}
version(annotate)
void annotate() {
cast(void)(1+1); // =>
10+10; // =>
}
$ rdmd -version=assert_error dxmp_testcases.d
Error: AssertError Failure dxmp_testcases(4)
$ rdmd -version=switch_error dxmp_testcases.d
Error: Switch Default dxmp_testcases(17)
$ rdmd -w -version=array_warning dxmp_testcases.d
warning - Error: array 'length' hides other 'length' name in outer scope
rdmd: Couldn't compile or execute dxmp_testcases.d.
$ rdmd -w -version=not_reachable dxmp_testcases.d
warning - dxmp_testcases.d(35): Error: statement is not reachable
rdmd: Couldn't compile or execute dxmp_testcases.d.
$ rdmd -version=undefined dxmp_testcases.d
dxmp_testcases.d(40): Error: undefined identifier x
dxmp_testcases.d(40): Error: function expected before (), not x of type int
rdmd: Couldn't compile or execute dxmp_testcases.d.
$ ./dxmp dxmp_testcases.d -version=annotate | grep -5 '// =>'
writefln("print");
}
version(annotate)
void annotate() {
cast(void)(1+1); // => 2
cast(void)(10+10); // => 20
}
$ ./dxmp dxmp_testcases.d -version=assert_error | grep -5 '// !>'
private import std.stdio;
private import std.cstream;
int main(char[][] argv) {
version(assert_error) assert(0); // !> AssertError Failure
version(switch_error) switch_error();
version(array_warning) array_warning();
version(not_reachable) not_reachable();
version(undefined) undefined();
version(print) print();
$ ./dxmp dxmp_testcases.d -version=switch_error | grep -5 '// !>'
}
version(switch_error)
void switch_error() {
int x = 1;
switch(x) { // !> Switch Default
case 0:
writefln(0);
break;
/* no default */
}
$ ./dxmp dxmp_testcases.d -w -version=array_warning | grep -5 '// ~>'
version(annotate)
void annotate() {
}
// ~> warning - Error: array 'length' hides other 'length' name in outer scope
// ~> rdmd: Couldn't compile or execute dxmp_testcases.d.
$ ./dxmp dxmp_testcases.d -version=print | grep -5 '// >>'
version(annotate)
void annotate() {
}
// >> print
$ ./dxmp dxmp_testcases.d -w -version=not_reachable | grep -5 '// ~>'
version(annotate)
void annotate() {
}
// ~> warning - dxmp_testcases.d(35): Error: statement is not reachable
// ~> rdmd: Couldn't compile or execute dxmp_testcases.d.
$ ./dxmp dxmp_testcases.d -version=undefined | grep -5 '// ~>'
version(annotate)
void annotate() {
}
// ~> dxmp_testcases.d(40): Error: undefined identifier x
// ~> dxmp_testcases.d(40): Error: function expected before (), not x of type int
// ~> rdmd: Couldn't compile or execute dxmp_testcases.d.
--
rubikitch
http://www.rubyist.net/~rubikitch/
More information about the Digitalmars-d-announce
mailing list