]> git.sur5r.net Git - cc65/commitdiff
Added new .FATAL pseudo op.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 9 Jan 2011 11:00:22 +0000 (11:00 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 9 Jan 2011 11:00:22 +0000 (11:00 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@4903 b7a2c559-68d2-44c3-8de9-860c34a00d81

doc/ca65.sgml
src/ca65/pseudo.c
src/ca65/scanner.c
src/ca65/token.h

index cc00fdf9b691cdbacc4ed4836177843e63c49028..c04328105f686137e8e21ef13acaf4a4c498fc2f 100644 (file)
@@ -148,7 +148,7 @@ Here is a description of all the command line options:
 
   Set the default for the CPU type. The option takes a parameter, which
   may be one of
-                                           
+
                6502, 65SC02, 65C02, 65816, sunplus, sweet16, HuC6280
 
   The sunplus cpu is not available in the freeware version, because the
@@ -294,7 +294,7 @@ Here is a description of all the command line options:
   will take place. The assembler supports the same target systems as the
   compiler, see there for a list.
 
-  Depending on the target, the default CPU type is also set. This can be 
+  Depending on the target, the default CPU type is also set. This can be
   overriden by using the <tt/<ref id="option--cpu" name="--cpu">/ option.
 
 
@@ -2290,7 +2290,8 @@ Here's a list of all control commands and a description, what they do:
 <sect1><tt>.ERROR</tt><label id=".ERROR"><p>
 
   Force an assembly error. The assembler will output an error message
-  preceded by "User error" and will <em/not/ produce an object file.
+  preceded by "User error". Assembly is continued but no object file will
+  generated.
 
   This command may be used to check for initial conditions that must be
   set before assembling a source file.
@@ -2307,8 +2308,9 @@ Here's a list of all control commands and a description, what they do:
        .endif
   </verb></tscreen>
 
-  See also the <tt><ref id=".WARNING" name=".WARNING"></tt> and <tt><ref
-  id=".OUT" name=".OUT"></tt> directives.
+  See also: <tt><ref id=".FATAL" name=".FATAL"></tt>,
+            <tt><ref id=".OUT" name=".OUT"></tt>,
+            <tt><ref id=".WARNING" name=".WARNING"></tt>
 
 
 <sect1><tt>.EXITMAC, .EXITMACRO</tt><label id=".EXITMACRO"><p>
@@ -2374,6 +2376,32 @@ Here's a list of all control commands and a description, what they do:
   See: <tt><ref id=".ADDR" name=".ADDR"></tt>
 
 
+<sect1><tt>.FATAL</tt><label id=".FATAL"><p>
+
+  Force an assembly error and terminate assembly. The assembler will output an
+  error message preceded by "User error" and will terminate assembly
+  immediately.
+
+  This command may be used to check for initial conditions that must be
+  set before assembling a source file.
+
+  Example:
+
+  <tscreen><verb>
+       .if     foo = 1
+       ...
+       .elseif bar = 1
+       ...
+       .else
+               .fatal  "Must define foo or bar!"               
+       .endif
+  </verb></tscreen>
+
+  See also: <tt><ref id=".ERROR" name=".ERROR"></tt>,
+            <tt><ref id=".OUT" name=".OUT"></tt>,
+            <tt><ref id=".WARNING" name=".WARNING"></tt>
+
+
 <sect1><tt>.FEATURE</tt><label id=".FEATURE"><p>
 
   This directive may be used to enable one or more compatibility features
@@ -3097,8 +3125,9 @@ Here's a list of all control commands and a description, what they do:
        .out    "This code was written by the codebuster(tm)"
   </verb></tscreen>
 
-  See also the <tt><ref id=".WARNING" name=".WARNING"></tt> and <tt><ref
-  id=".ERROR" name=".ERROR"></tt> directives.
+  See also: <tt><ref id=".ERROR" name=".ERROR"></tt>,
+            <tt><ref id=".FATAL" name=".FATAL"></tt>,
+            <tt><ref id=".WARNING" name=".WARNING"></tt>
 
 
 <sect1><tt>.P02</tt><label id=".P02"><p>
@@ -3505,20 +3534,21 @@ Here's a list of all control commands and a description, what they do:
 
   <tscreen><verb>
        .macro  jne     target
-               .local L1
-               .ifndef target
-               .warning "Forward jump in jne, cannot optimize!"
-               beq     L1
-               jmp     target
+               .local L1
+               .ifndef target
+               .warning "Forward jump in jne, cannot optimize!"
+               beq     L1
+               jmp     target
        L1:
                .else
-               ...
-               .endif
+               ...
+               .endif
        .endmacro
   </verb></tscreen>
 
-  See also the <tt><ref id=".ERROR" name=".ERROR"></tt> and <tt><ref id=".OUT"
-  name=".OUT"></tt> directives.
+  See also: <tt><ref id=".ERROR" name=".ERROR"></tt>
+            <tt><ref id=".FATAL" name=".FATAL"></tt>,
+            <tt><ref id=".OUT" name=".OUT"></tt>
 
 
 <sect1><tt>.WORD</tt><label id=".WORD"><p>
index 239075f1b981e4504f59feb0ff2a05307e1b71fe..a5f127eecf1e53ad642e5dfe73fb712fcf017672 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2010, Ullrich von Bassewitz                                      */
+/* (C) 1998-2011, Ullrich von Bassewitz                                      */
 /*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
@@ -882,6 +882,19 @@ static void DoFarAddr (void)
 
 
 
+static void DoFatal (void)
+/* Fatal user error */
+{
+    if (Tok != TOK_STRCON) {
+       ErrorSkip ("String constant expected");
+    } else {
+               Fatal ("User error: %m%p", &SVal);
+       SkipUntilSep ();
+    }
+}
+
+
+
 static void DoFeature (void)
 /* Switch the Feature option */
 {
@@ -1874,6 +1887,7 @@ static CtrlDesc CtrlCmdTab [] = {
     { ccNone,          DoExport        },
     { ccNone,          DoExportZP      },
     { ccNone,          DoFarAddr       },
+    { ccNone,                  DoFatal         },
     { ccNone,          DoFeature       },
     { ccNone,          DoFileOpt       },
     { ccNone,           DoForceImport   },
index 40c3e0b0706c98f4ee96959767e0ef89dae9cc4f..2c4b2292e6a6fb5dad429b1e3a2a0efc86074ab1 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2010, Ullrich von Bassewitz                                      */
+/* (C) 1998-2011, Ullrich von Bassewitz                                      */
 /*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
@@ -194,6 +194,7 @@ struct DotKeyword {
     { ".EXPORT",       TOK_EXPORT      },
     { ".EXPORTZP",     TOK_EXPORTZP    },
     { ".FARADDR",      TOK_FARADDR     },
+    { ".FATAL",         TOK_FATAL       },
     { ".FEATURE",      TOK_FEATURE     },
     { ".FILEOPT",      TOK_FILEOPT     },
     { ".FOPT",         TOK_FILEOPT     },
index 51bab2d68c1d2ec66a7b2f2e1ae856f061444516..7a85fe4afacba857477944163fd36fb005c4d47d 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2007-2010, Ullrich von Bassewitz                                      */
+/* (C) 2007-2011, Ullrich von Bassewitz                                      */
 /*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
@@ -164,6 +164,7 @@ typedef enum Token {
     TOK_EXPORT,
     TOK_EXPORTZP,
     TOK_FARADDR,
+    TOK_FATAL,
     TOK_FEATURE,
     TOK_FILEOPT,
     TOK_FORCEIMPORT,
@@ -220,7 +221,7 @@ typedef enum Token {
     TOK_POPCPU,
     TOK_POPSEG,
     TOK_PROC,
-    TOK_PSC02, 
+    TOK_PSC02,
     TOK_PUSHCPU,
     TOK_PUSHSEG,
     TOK_REFERENCED,