diff --git a/C64Models/Parser/ASMFileParser.cs b/C64Models/Parser/ASMFileParser.cs index 9966b74a..a1c9fb63 100644 --- a/C64Models/Parser/ASMFileParser.cs +++ b/C64Models/Parser/ASMFileParser.cs @@ -2196,24 +2196,14 @@ private bool EvaluateTokensNumeric( int LineIndex, List Tokens, private bool IsOpeningBraceChar( string Token ) { - if ( ( Token == "(" ) - || ( Token == AssemblerSettings.INTERNAL_OPENING_BRACE ) ) - { - return true; - } - return false; + return m_AssemblerSettings.OpenBracketChars.Contains( Token ); } private bool IsClosingBraceChar( string Token ) { - if ( ( Token == ")" ) - || ( Token == AssemblerSettings.INTERNAL_CLOSING_BRACE ) ) - { - return true; - } - return false; + return m_AssemblerSettings.CloseBracketChars.Contains( Token ); } @@ -2574,7 +2564,7 @@ private bool DetermineUnparsedLabels() } if ( tokenCommaIndex == -1 ) { - AddError( lineIndex, Types.ErrorCode.E1001_FAILED_TO_EVALUATE_EXPRESSION, "Could not evaluate !fill expression" ); + AddError( lineIndex, Types.ErrorCode.E1001_FAILED_TO_EVALUATE_EXPRESSION, "Could not evaluate " + startToken + " expression" ); return false; } @@ -3370,6 +3360,10 @@ private string GetLoopGUID( List Scopes ) public List PrepareLineTokens( string Line ) { + if ( Line.Contains( "(SCREEN)" ) ) + { + Debug.Log( "aha" ); + } List lineTokenInfos = ParseTokenInfo( Line, 0, Line.Length ); if ( HasError() ) { @@ -5045,7 +5039,7 @@ private ParseLineResult POFill( List lineTokenInfos, int lineIn if ( info.NumBytes == 0 ) { - AddError( lineIndex, Types.ErrorCode.E1302_MALFORMED_MACRO, "Macro malformed, expect !FILL ," ); + AddError( lineIndex, Types.ErrorCode.E1302_MALFORMED_MACRO, "Macro malformed, expect " + lineTokenInfos[0].Content + " ," ); return ParseLineResult.RETURN_NULL; } lineSizeInBytes = info.NumBytes; @@ -11602,11 +11596,11 @@ public List ParseTokenInfo( string Source, int Start, int Lengt } } if ( ( possibleOperators == 1 ) - && ( completeOperators == 1 ) ) + && ( completeOperators == 1 ) ) { if ( ( charPos + 1 < Start + Length ) - && ( m_AssemblerSettings.AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_GLOBAL].IndexOf( Source[tokenStartPos] ) != -1 ) - && ( m_AssemblerSettings.AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_GLOBAL].IndexOf( Source[charPos + 1] ) != -1 ) ) + && ( m_AssemblerSettings.AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_GLOBAL].IndexOf( Source[tokenStartPos] ) != -1 ) + && ( m_AssemblerSettings.AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_GLOBAL].IndexOf( Source[charPos + 1] ) != -1 ) ) { // we have a text token which is not separated } diff --git a/C64Models/Parser/AssemblerSettings.cs b/C64Models/Parser/AssemblerSettings.cs index 81b74d3e..c5c02955 100644 --- a/C64Models/Parser/AssemblerSettings.cs +++ b/C64Models/Parser/AssemblerSettings.cs @@ -11,6 +11,8 @@ public class AssemblerSettings public GR.Collections.Map AllowedTokenChars = new GR.Collections.Map(); public GR.Collections.Map AllowedTokenEndChars = new GR.Collections.Map(); public string AllowedSingleTokens; + public string OpenBracketChars = ""; + public string CloseBracketChars = ""; public GR.Collections.Map Macros = new GR.Collections.Map(); public string MacroPrefix = ""; public string LabelPostfix = ""; @@ -105,6 +107,9 @@ public void SetAssemblerType( Types.AssemblerType Type ) AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_GLOBAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß."; AllowedTokenEndChars[Types.TokenInfo.TokenType.LABEL_GLOBAL] = "#"; + OpenBracketChars = "(" + INTERNAL_OPENING_BRACE; + CloseBracketChars = ")" + INTERNAL_CLOSING_BRACE; + AllowedTokenStartChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "."; AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß."; AllowedTokenStartChars[Types.TokenInfo.TokenType.LABEL_CHEAP_LOCAL] = "@"; @@ -126,7 +131,7 @@ public void SetAssemblerType( Types.AssemblerType Type ) AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_INTERNAL] = "+-"; - AllowedSingleTokens = ",#(){}*" + INTERNAL_OPENING_BRACE + INTERNAL_CLOSING_BRACE; + AllowedSingleTokens = ",#{}*" + OpenBracketChars + CloseBracketChars; AddMacro( "!ADDR", Types.MacroInfo.MacroType.ADDRESS ); AddMacro( "!ADDRESS", Types.MacroInfo.MacroType.ADDRESS ); @@ -198,6 +203,9 @@ public void SetAssemblerType( Types.AssemblerType Type ) AllowedTokenStartChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "."; AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß."; + OpenBracketChars = "(" + INTERNAL_OPENING_BRACE; + CloseBracketChars = ")" + INTERNAL_CLOSING_BRACE; + AllowedTokenStartChars[Types.TokenInfo.TokenType.LITERAL_CHAR] = "'"; AllowedTokenEndChars[Types.TokenInfo.TokenType.LITERAL_CHAR] = "'"; @@ -217,7 +225,7 @@ public void SetAssemblerType( Types.AssemblerType Type ) AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_INTERNAL] = "+-"; - AllowedSingleTokens = ",#(){}*"; + AllowedSingleTokens = ",#*" + OpenBracketChars + CloseBracketChars; AddMacro( "DC.B", Types.MacroInfo.MacroType.TEXT ); AddMacro( "DC.W", Types.MacroInfo.MacroType.WORD ); @@ -270,6 +278,9 @@ public void SetAssemblerType( Types.AssemblerType Type ) AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_GLOBAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß"; AllowedTokenEndChars[Types.TokenInfo.TokenType.LABEL_GLOBAL] = "#"; + OpenBracketChars = "([" + INTERNAL_OPENING_BRACE; + CloseBracketChars = ")]" + INTERNAL_CLOSING_BRACE; + AllowedTokenStartChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "!"; AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß!"; @@ -299,7 +310,7 @@ public void SetAssemblerType( Types.AssemblerType Type ) AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_INTERNAL] = "+-"; - AllowedSingleTokens = ",#(){}*" + INTERNAL_OPENING_BRACE + INTERNAL_CLOSING_BRACE; + AllowedSingleTokens = ",#*" + OpenBracketChars + CloseBracketChars; AddMacro( "DC.B", Types.MacroInfo.MacroType.TEXT ); AddMacro( "DC.V", Types.MacroInfo.MacroType.TEXT ); @@ -361,6 +372,9 @@ public void SetAssemblerType( Types.AssemblerType Type ) AllowedTokenStartChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "_"; AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß."; + OpenBracketChars = "(" + INTERNAL_OPENING_BRACE; + CloseBracketChars = ")" + INTERNAL_CLOSING_BRACE; + AllowedTokenStartChars[Types.TokenInfo.TokenType.LITERAL_CHAR] = "'"; AllowedTokenEndChars[Types.TokenInfo.TokenType.LITERAL_CHAR] = "'"; @@ -378,7 +392,7 @@ public void SetAssemblerType( Types.AssemblerType Type ) AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_INTERNAL] = "+-"; - AllowedSingleTokens = ",#(){}*"; + AllowedSingleTokens = ",#{}*" + OpenBracketChars + CloseBracketChars; MacroPrefix = "."; @@ -395,6 +409,9 @@ public void SetAssemblerType( Types.AssemblerType Type ) AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_GLOBAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß."; AllowedTokenEndChars[Types.TokenInfo.TokenType.LABEL_GLOBAL] = "#:"; + OpenBracketChars = "(" + INTERNAL_OPENING_BRACE; + CloseBracketChars = ")" + INTERNAL_CLOSING_BRACE; + AllowedTokenStartChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "."; AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß."; @@ -417,7 +434,7 @@ public void SetAssemblerType( Types.AssemblerType Type ) AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_INTERNAL] = "+-"; - AllowedSingleTokens = ",#(){}*"; + AllowedSingleTokens = ",#*" + OpenBracketChars + CloseBracketChars; AddMacro( "DC.B", Types.MacroInfo.MacroType.TEXT ); AddMacro( "DC.W", Types.MacroInfo.MacroType.WORD );