vector crash

zjh fqbqrr at 163.com
Fri Jan 19 02:13:08 UTC 2024


On Thursday, 18 January 2024 at 03:07:13 UTC, zjh wrote:


```d
import std.stdio, std.range,std.file;
import std.string:strip;

import dparse.ast;
import dparse.lexer;
import dparse.parser : parseModule;
import dparse.rollback_allocator : RollbackAllocator;
import core.stdcpp.vector;
import core.stdcpp.string;

void push(ref vector!string l,string i){
     l.push_back(i);
}
string Rff(string a){
     return readText(a);
}

void Wf(string a,string b){
     std.file.write(a,b);
}

void toF(ref vector!string b,string a){
     writeln("toV");writeln(b.length);
     string d;
     foreach(ref string e;b)d~=e~"\n";
     Wf(a,d);
}

void Qwk(ref vector!string b){
     while(1){
         auto t=b.back();if(t.length!=0)break;
         b.pop_back();
     }
}

void Pr(ref vector!string b){
     foreach(ref string a;b)writeln(a);
}//
void toV(string a,ref vector!string b){
     auto f=File(a,"r");
     while(!f.eof()){
         string l=strip(f.readln());push(b,l);
     }
     Qwk(b);
}//
string du(char c,int i){
     char[]n;n.length=i;n[]=c;return n.idup;
}

string Jjc(int l,string b){
     string a=du('+',l);return a~b;
}

class V : ASTVisitor
{
     alias visit = ASTVisitor.visit;
     vector!string f=[];
     int l;
     override void visit(const FunctionDeclaration decl)
     {
         writeln(' '.repeat(l * 4), decl.name.text);
         f.push_back(decl.name.text);
         l++;
         scope (exit) l--;
         decl.accept(this);
     }
     void _out(string s){
         string b=s~".t";toF(f,b);
     }
}

void ff(string B,string s)
{
     LexerConfig config;
     auto cache = StringCache(StringCache.defaultBucketCount);
     auto tokens = getTokensForParser(B, config, &cache);
     RollbackAllocator rba;
     auto m = parseModule(tokens,s, &rba);
     auto v= new V();
     v.visit(m);v._out(s);
}
void gg(string a){
     vector!string d=[];toV(a,d);
     Pr(d);//3,OK
     foreach(e;d){
         string b=e;//.1
         string m=readText(b);ff(m,b);
     }
}


void main(){
     string a="filename.txt";
     gg(a);
}

```

A fully compiled version is too tiring, mainly due to the need to 
change the Chinese function name.
Some names are simply changed, otherwise it would be too tiring.



More information about the Digitalmars-d-learn mailing list