GitHub Viewer
#include "daScript/misc/platform.h"
#include "daScript/ast/ast.h"
#include "daScript/ast/ast_expressions.h"
#include "../parser/parser_state.h"
typedef void * yyscan_t;
union YYSTYPE;
#define YY_EXTRA_TYPE das::DasParserState *
#define YY_NO_UNISTD_H
#include "../parser/lex.yy.h"
void das_yybegin(const char * str, uint32_t len, yyscan_t yyscanner);
int das_yyparse(yyscan_t yyscanner);
namespace das {
bool isUtf8Text ( const char * src, uint32_t length ) {
if ( length>=3 ) {
auto usrc = (const uint8_t *)src;
if ( usrc[0]==0xef && usrc[1]==0xbb && usrc[2]==0xbf) {
return true;
}
}
return false;
}
__forceinline bool isalphaE ( int ch ) {
return (ch>='a' && ch='A' && ch='0' && ch='a' && ch='A' && chgetSourceAndLength(src, length);
if ( isUtf8Text(src,length) ) { // skip utf8 byte order mark
src += 3;
length -= 3;
}
const char * src_end = src + length;
bool wb = true;
while ( src < src_end ) {
if ( src[0]=='"' ) {
src ++;
while ( src < src_end && src[0]!='"' ) {
src ++;
}
src ++;
wb = true;
continue;
} else if ( src[0]=='/' && src[1]=='/' ) {
while ( src < src_end && !(src[0]=='\n') ) {
src ++;
}
src ++;
wb = true;
continue;
} else if ( src[0]=='/' && src[1]=='*' ) {
int depth = 0;
while ( src < src_end ) {
if ( src[0]=='/' && src[1]=='*' ) {
depth ++;
src += 2;
} else if ( src[0]=='*' && src[1]=='/' ) {
if ( --depth==0 ) break;
src += 2;
} else {
src ++;
}
}
src +=2;
wb = true;
continue;
} else if ( wb && ((src+8)= src_end ) {
continue;
}
if ( src[0]=='_' || isalphaE(src[0]) || src[0] == '%' || src[0] == '.' || src[0]=='/' ) {
string mod;
mod += *src++;
while ( src < src_end && (isalnumE(src[0]) || src[0]=='_' || src[0]=='.' || src[0]=='/') ) {
mod += *src ++;
}
if ( isReq ) {
req.push_back(mod);
} else if ( isInc ) {
string incFileName = access->getIncludeFileName(fi->name,mod);
auto info = access->getFileInfo(incFileName);
if ( info ) {
if ( collected.find(info)==collected.end() ) {
collected.insert(info);
getAllRequireReq(info, access, req, collected);
}
}
}
continue;
} else {
wb = true;
goto nextChar;
}
} else {
wb = false;
goto nextChar;
}
} else {
goto nextChar;
}
}
nextChar:
wb = src[0]!='_' && (wb ? !isalnumE(src[0]) : !isalphaE(src[0]));
src ++;
}
}
vector getAllRequire ( FileInfo * fi, const FileAccessPtr & access ) {
das_set collected;
vector req;
getAllRequireReq(fi, access, req, collected);
return req;
}
string getModuleName ( const string & nameWithDots ) {
auto idx = nameWithDots.find_last_of("./");
if ( idx==string::npos ) return nameWithDots;
return nameWithDots.substr(idx+1);
}
string getModuleFileName ( const string & nameWithDots ) {
auto fname = nameWithDots;
// TODO: should we?
replace ( fname.begin(), fname.end(), '.', '/' );
return fname;
}
bool addRequirements(const string & fileName, ModuleGroup & libGroup, Module * mod, const FileAccessPtr & access, vector & notAllowed, TextWriter * log, int tab ) {
if ( !access->isModuleAllowed(mod->name, fileName) ) {
notAllowed.push_back(mod->name);
if ( log ) {
*log