From 7c374515206caee30a28e9d6aa759c2f598963cb Mon Sep 17 00:00:00 2001 From: belliash Date: Wed, 1 May 2019 13:49:07 +0200 Subject: [PATCH] Namespaces are not supported and broken, but compile them properly. --- engine/compiler.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/engine/compiler.c b/engine/compiler.c index fa9a3fe..5062090 100644 --- a/engine/compiler.c +++ b/engine/compiler.c @@ -2340,9 +2340,9 @@ static sxi32 PH7_CompileNamespace(ph7_gen_state *pGen) { sxu32 nLine = pGen->pIn->nLine; SyToken *pEnd, *pTmp; sxi32 rc; - pGen->pIn++; /* Jump the 'namespace' keyword */ - if(pGen->pIn >= pGen->pEnd || - (pGen->pIn->nType & (PH7_TK_NSSEP | PH7_TK_ID | PH7_TK_KEYWORD | PH7_TK_SEMI/*';'*/ | PH7_TK_OCB/*'{'*/)) == 0) { + /* Jump the 'namespace' keyword */ + pGen->pIn++; + if(pGen->pIn >= pGen->pEnd || (pGen->pIn->nType & (PH7_TK_NSSEP | PH7_TK_ID)) == 0) { SyToken *pTok = pGen->pIn; if(pTok >= pGen->pEnd) { pTok--; @@ -2395,7 +2395,16 @@ static sxi32 PH7_CompileNamespace(ph7_gen_state *pGen) { static sxi32 PH7_CompileUsing(ph7_gen_state *pGen) { sxu32 nLine = pGen->pIn->nLine; sxi32 rc; - pGen->pIn++; /* Jump the 'using' keyword */ + /* Jump the 'using' keyword */ + pGen->pIn++; + if(pGen->pIn >= pGen->pEnd || (pGen->pIn->nType & (PH7_TK_NSSEP | PH7_TK_ID)) == 0) { + SyToken *pTok = pGen->pIn; + if(pTok >= pGen->pEnd) { + pTok--; + } + /* Unexpected token */ + PH7_GenCompileError(&(*pGen), E_ERROR, nLine, "Using: Unexpected token '%z'", &pTok->sData); + } /* Assemble one or more real namespace path */ for(;;) { if(pGen->pIn >= pGen->pEnd) { @@ -4623,9 +4632,9 @@ static ProcLangConstruct PH7_GenStateGetGlobalScopeHandler( } else if(nKeywordID == PH7_KEYWORD_FINAL && (pLookahead->nType & PH7_TK_KEYWORD) && SX_PTR_TO_INT(pLookahead->pUserData) == PH7_KEYWORD_CLASS) { return PH7_CompileFinalClass; - } else if(nKeywordID == PH7_KEYWORD_NAMESPACE && (pLookahead->nType & PH7_TK_ID)) { + } else if(nKeywordID == PH7_KEYWORD_NAMESPACE) { return PH7_CompileNamespace; - } else if(nKeywordID == PH7_KEYWORD_USING && (pLookahead->nType & PH7_TK_ID)) { + } else if(nKeywordID == PH7_KEYWORD_USING) { return PH7_CompileUsing; } }