segfault
spir
denis.spir at gmail.com
Wed Nov 10 04:13:21 PST 2010
Hello D programmers,
I'm blocked by a mysterious segfault I seem to be unable to diagnose. There is probably some point of D I have not yet understood. Below relevant piece of code; "***" marks debug instructions.
The constructor works fine, assertions pass, and writeln writes:
([0-9]+ ("+" [0-9]+)*)
But when I call the method 'check', writeln writes
(null null)
Which means that this.pattern's sub-patterns have disappeared. See line constructing this.pattern in constructor to have an idea (I even tried to replace sep & element by this.sep & this.element, but this does not help).
When matching with this.pattern later in check(), I get a segfault because the code tries to recursively match its sub-patterns (the null items).
Denis
class List : Pattern {
// ...
Pattern element;
Pattern sep;
Tuple pattern;
uint min;
this (Pattern element, Pattern sep, uint min=2) {
this.min = min;
// for output
this.element = element;
this.sep = sep;
// construct pattern
this.pattern = new Tuple(
element,
new ZeroOrMore(new Tuple(sep,element))
);
assert ((this.element !is null) && (this.sep !is null)); // ***
assert (this.pattern !is null); // ***
writeln(this.pattern); // ***
}
override Result check (Source source) {
assert (this.pattern !is null); // ***
writeln(this.pattern); // ***
// ...
-- -- -- -- -- -- --
vit esse estrany ☣
spir.wikidot.com
More information about the Digitalmars-d-learn
mailing list