MCPcopy Create free account
hub / github.com/GaijinEntertainment/daScript / ast_globalLet

Function ast_globalLet

src/parser/parser_impl.cpp:582–628  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

580 }
581
582 void ast_globalLet ( yyscan_t scanner, bool kwd_let, bool glob_shar, bool pub_var,
583 AnnotationArgumentList * ann, VariableDeclaration * decl ) {
584 auto pDecl = decl;
585 if ( pDecl->pTypeDecl ) {
586 for ( const auto & name_at : *pDecl->pNameList ) {
587 VariablePtr pVar = new Variable();
588 pVar->name = name_at.name;
589 pVar->aka = name_at.aka;
590 if ( !name_at.aka.empty() ) {
591 das_yyerror(scanner,"global variable " + name_at.name + " can't have an aka",name_at.at,
592 CompilationError::invalid_global_aka);
593 }
594 pVar->at = name_at.at;
595 if ( pDecl->pNameList->size()>1 ) {
596 pVar->type = new TypeDecl(*pDecl->pTypeDecl);
597 } else {
598 pVar->type = pDecl->pTypeDecl; pDecl->pTypeDecl = nullptr;
599 }
600 if ( pDecl->pInit ) {
601 if ( pDecl->pNameList->size()>1 ) {
602 pVar->init = pDecl->pInit->clone();
603 } else {
604 pVar->init = pDecl->pInit; pDecl->pInit = nullptr;
605 }
606 pVar->init_via_move = pDecl->init_via_move;
607 pVar->init_via_clone = pDecl->init_via_clone;
608 }
609 if ( kwd_let ) {
610 pVar->type->constant = true;
611 } else {
612 pVar->type->removeConstant = true;
613 }
614 pVar->global_shared = glob_shar;
615 pVar->private_variable = !pub_var;
616 if ( ann ) {
617 // note: we can do this because the annotation syntax is for single variable only
618 pVar->annotation = das::move(*ann);
619 delete ann;
620 ann = nullptr;
621 }
622 if ( !yyextra->g_Program->addVariable(pVar) )
623 das_yyerror(scanner,"global variable is already declared " + name_at.name,name_at.at,
624 CompilationError::already_declared_global);
625 }
626 }
627 delete pDecl;
628 }
629
630 bool isOpName ( const string & name ) {
631 return !(isalpha(name[0]) || name[0]=='_' || name[0]=='`');

Callers 3

yyparseFunction · 0.85
yyparseFunction · 0.85
yyparseFunction · 0.85

Calls 5

das_yyerrorFunction · 0.70
emptyMethod · 0.45
sizeMethod · 0.45
cloneMethod · 0.45
addVariableMethod · 0.45

Tested by

no test coverage detected