Comments and whitespace only, no change in functionality.

git-svn-id: https://svn.code.sf.net/p/acme-crossass/code-0/trunk@68 4df02467-bbd4-4a76-a152-e7ce94205b78
This commit is contained in:
marcobaye 2016-02-21 23:08:02 +00:00
parent 9dcb622b3d
commit 5240b5eff4
3 changed files with 40 additions and 26 deletions

View File

@ -17,7 +17,7 @@
#define RELEASE "0.95.7" // update before release (FIXME) #define RELEASE "0.95.7" // update before release (FIXME)
#define CODENAME "Fenchurch" // update before release #define CODENAME "Fenchurch" // update before release
#define CHANGE_DATE "21 Feb" // update before release #define CHANGE_DATE "22 Feb" // update before release
#define CHANGE_YEAR "2016" // update before release #define CHANGE_YEAR "2016" // update before release
//#define HOME_PAGE "http://home.pages.de/~mac_bacon/smorbrod/acme/" // FIXME //#define HOME_PAGE "http://home.pages.de/~mac_bacon/smorbrod/acme/" // FIXME
#define HOME_PAGE "http://sourceforge.net/p/acme-crossass/" // FIXME #define HOME_PAGE "http://sourceforge.net/p/acme-crossass/" // FIXME

View File

@ -1,5 +1,5 @@
// ACME - a crossassembler for producing 6502/65c02/65816 code. // ACME - a crossassembler for producing 6502/65c02/65816 code.
// Copyright (C) 1998-2015 Marco Baye // Copyright (C) 1998-2016 Marco Baye
// Have a look at "acme.c" for further info // Have a look at "acme.c" for further info
// //
// Arithmetic/logic unit // Arithmetic/logic unit
@ -150,7 +150,7 @@ static struct operator ops_arctan = {OPHANDLE_ARCTAN, 32}; // function
// variables // variables
static struct dynabuf *errormsg_dyna_buf; // dynamic buffer for "value not defined" error static struct dynabuf *errormsg_dyna_buf; // dynamic buffer for "value not defined" error
static struct dynabuf *function_dyna_buf; // dynamic buffer for fn names static struct dynabuf *function_dyna_buf; // dynamic buffer for fn names
static struct dynabuf *undefsym_dyna_buf; // dynamic buffer for name of undefined symbol static struct dynabuf *undefsym_dyna_buf; // dynamic buffer for name of undefined symbol TODO - get rid of this intermediate kluge and report errors immediately
static struct operator **operator_stack = NULL; static struct operator **operator_stack = NULL;
static int operator_stk_size = HALF_INITIAL_STACK_SIZE; static int operator_stk_size = HALF_INITIAL_STACK_SIZE;
static int operator_sp; // operator stack pointer static int operator_sp; // operator stack pointer
@ -199,14 +199,14 @@ static struct ronode function_list[] = {
// ^^^^ this marks the last element // ^^^^ this marks the last element
}; };
#define LEFT_FLAGS (operand_stack[operand_sp-2].flags) #define LEFT_FLAGS (operand_stack[operand_sp - 2].flags)
#define RIGHT_FLAGS (operand_stack[operand_sp-1].flags) #define RIGHT_FLAGS (operand_stack[operand_sp - 1].flags)
#define LEFT_INTVAL (operand_stack[operand_sp-2].val.intval) #define LEFT_INTVAL (operand_stack[operand_sp - 2].val.intval)
#define RIGHT_INTVAL (operand_stack[operand_sp-1].val.intval) #define RIGHT_INTVAL (operand_stack[operand_sp - 1].val.intval)
#define LEFT_FPVAL (operand_stack[operand_sp-2].val.fpval) #define LEFT_FPVAL (operand_stack[operand_sp - 2].val.fpval)
#define RIGHT_FPVAL (operand_stack[operand_sp-1].val.fpval) #define RIGHT_FPVAL (operand_stack[operand_sp - 1].val.fpval)
#define LEFT_ADDRREFS (operand_stack[operand_sp-2].addr_refs) #define LEFT_ADDRREFS (operand_stack[operand_sp - 2].addr_refs)
#define RIGHT_ADDRREFS (operand_stack[operand_sp-1].addr_refs) #define RIGHT_ADDRREFS (operand_stack[operand_sp - 1].addr_refs)
#define PUSH_OPERATOR(x) operator_stack[operator_sp++] = (x) #define PUSH_OPERATOR(x) operator_stack[operator_sp++] = (x)
@ -381,14 +381,15 @@ static void parse_quoted_character(char closing_quote)
// parse character // parse character
value = (intval_t) encoding_encode_char(GotByte); value = (intval_t) encoding_encode_char(GotByte);
// Read closing quote (hopefully) // Read closing quote (hopefully)
if (GetQuotedByte() == closing_quote) if (GetQuotedByte() == closing_quote) {
GetByte(); // if length == 1, proceed with next byte GetByte(); // if length == 1, proceed with next byte
else } else {
if (GotByte) { if (GotByte) {
// if longer than one character // if longer than one character
Throw_error("There's more than one character."); Throw_error("There's more than one character.");
Input_skip_remainder(); Input_skip_remainder();
} }
}
PUSH_INTOPERAND(value, MVALUE_GIVEN | MVALUE_ISBYTE, 0); PUSH_INTOPERAND(value, MVALUE_GIVEN | MVALUE_ISBYTE, 0);
// Now GotByte = char following closing quote (or CHAR_EOS on error) // Now GotByte = char following closing quote (or CHAR_EOS on error)
} }
@ -496,10 +497,13 @@ static void parse_frac_part(int integer_part) // Now GotByte = first digit after
// Parse a decimal value. As decimal values don't use any prefixes, this // Parse a decimal value. As decimal values don't use any prefixes, this
// function expects the first digit to be read already. If the first two // function expects the first digit to be read already.
// digits are "0x", this function branches to the one for parsing hexadecimal // If the first two digits are "0x", this function branches to the one for
// values. If a decimal point is read, this function branches to the one for // parsing hexadecimal values.
// parsing floating-point values. // If the first two digits are "0b", this function branches to the one for
// parsing binary values.
// If a decimal point is read, this function branches to the one for parsing
// floating-point values.
// This function accepts '0' through '9' and one dot ('.') as the decimal // This function accepts '0' through '9' and one dot ('.') as the decimal
// point. The current value is stored as soon as a character is read that is // point. The current value is stored as soon as a character is read that is
// none of those given above. Float usage is only activated when a decimal // none of those given above. Float usage is only activated when a decimal
@ -716,6 +720,7 @@ static void expect_operand_or_monadic_operator(void)
if (BYTEFLAGS(GotByte) & STARTS_KEYWORD) { if (BYTEFLAGS(GotByte) & STARTS_KEYWORD) {
register int length; register int length;
// Read global label (or "NOT") // Read global label (or "NOT")
length = Input_read_keyword(); length = Input_read_keyword();
// Now GotByte = illegal char // Now GotByte = illegal char
@ -741,13 +746,12 @@ static void expect_operand_or_monadic_operator(void)
get_symbol_value(ZONE_GLOBAL, 0, GlobalDynaBuf->size - 1); // -1 to not count terminator get_symbol_value(ZONE_GLOBAL, 0, GlobalDynaBuf->size - 1); // -1 to not count terminator
goto now_expect_dyadic; goto now_expect_dyadic;
} }
} }
} else { } else {
// illegal character read - so don't go on // illegal character read - so don't go on
PUSH_INTOPERAND(0, 0, 0); // push dummy operand so stack is ok PUSH_INTOPERAND(0, 0, 0); // push dummy operand so stack is ok
// push pseudo value, EXISTS flag is clear // push pseudo value, EXISTS flag is clear
if (operator_stack[operator_sp-1] == &ops_return) { if (operator_stack[operator_sp - 1] == &ops_return) {
PUSH_OPERATOR(&ops_end); PUSH_OPERATOR(&ops_end);
alu_state = STATE_TRY_TO_REDUCE_STACKS; alu_state = STATE_TRY_TO_REDUCE_STACKS;
} else { } else {
@ -1367,8 +1371,7 @@ static void try_to_reduce_stacks(int *open_parentheses)
handle_flags_and_dec_stacks: handle_flags_and_dec_stacks:
// Handle flags and decrement value stack pointer // Handle flags and decrement value stack pointer
// "OR" EXISTS, UNSURE and FORCEBIT flags // "OR" EXISTS, UNSURE and FORCEBIT flags
LEFT_FLAGS |= RIGHT_FLAGS & LEFT_FLAGS |= RIGHT_FLAGS & (MVALUE_EXISTS | MVALUE_UNSURE | MVALUE_FORCEBITS);
(MVALUE_EXISTS|MVALUE_UNSURE|MVALUE_FORCEBITS);
// "AND" DEFINED flag // "AND" DEFINED flag
LEFT_FLAGS &= (RIGHT_FLAGS | ~MVALUE_DEFINED); LEFT_FLAGS &= (RIGHT_FLAGS | ~MVALUE_DEFINED);
LEFT_FLAGS &= ~MVALUE_ISBYTE; // clear ISBYTE flag LEFT_FLAGS &= ~MVALUE_ISBYTE; // clear ISBYTE flag
@ -1380,7 +1383,7 @@ remove_next_to_last_operator:
// entry point for '(' operator (has set indirect_flag, so don't clear now) // entry point for '(' operator (has set indirect_flag, so don't clear now)
RNTLObutDontTouchIndirectFlag: RNTLObutDontTouchIndirectFlag:
// Remove operator and shift down next one // Remove operator and shift down next one
operator_stack[operator_sp-2] = operator_stack[operator_sp-1]; operator_stack[operator_sp - 2] = operator_stack[operator_sp - 1];
--operator_sp; // decrement operator stack pointer --operator_sp; // decrement operator stack pointer
} }
@ -1487,6 +1490,7 @@ int ALU_optional_defined_int(intval_t *target) // ACCEPT_EMPTY
Throw_serious_error(value_not_defined()); Throw_serious_error(value_not_defined());
if ((result.flags & MVALUE_EXISTS) == 0) if ((result.flags & MVALUE_EXISTS) == 0)
return 0; return 0;
// something was given, so store // something was given, so store
if (result.flags & MVALUE_IS_FP) if (result.flags & MVALUE_IS_FP)
*target = result.val.fpval; *target = result.val.fpval;

View File

@ -1,5 +1,5 @@
// ACME - a crossassembler for producing 6502/65c02/65816 code. // ACME - a crossassembler for producing 6502/65c02/65816 code.
// Copyright (C) 1998-2014 Marco Baye // Copyright (C) 1998-2016 Marco Baye
// Have a look at "acme.c" for further info // Have a look at "acme.c" for further info
// //
// ALU stuff (the expression parser) // ALU stuff (the expression parser)
@ -12,10 +12,10 @@
// constants // constants
// meaning of bits in "flags" of struct result: // meaning of bits in "flags" of struct result: TODO - this is only for future "number" result type!
#define MVALUE_IS_FP (1u << 8) // floating point value #define MVALUE_IS_FP (1u << 8) // floating point value
#define MVALUE_INDIRECT (1u << 7) // needless parentheses indicate use of indirect addressing modes #define MVALUE_INDIRECT (1u << 7) // needless parentheses indicate use of indirect addressing modes
#define MVALUE_EXISTS (1u << 6) // 0: expression was empty. 1: there was *something* to parse. #define MVALUE_EXISTS (1u << 6) // 0: expression was empty. 1: there was *something* to parse. TODO - get rid of this, make "nothing" its own result type instead!
#define MVALUE_UNSURE (1u << 5) // value once was related to undefined #define MVALUE_UNSURE (1u << 5) // value once was related to undefined
// expression. Needed for producing the same addresses in all passes; because in // expression. Needed for producing the same addresses in all passes; because in
// the first pass there will almost for sure be labels that are undefined, you // the first pass there will almost for sure be labels that are undefined, you
@ -38,7 +38,16 @@ extern void (*ALU_optional_notdef_handler)(const char *);
// FIXME - replace all the functions below with a single one using a "flags" arg! // FIXME - replace all the functions below with a single one using a "flags" arg!
/* its return value would then be:
enum expression_result {
EXRE_ERROR, // error (has been reported, so skip remainder of statement)
EXRE_NOTHING, // next char after space was comma or end-of-statement
EXRE_NUMBER, // int or float (what is returned by the current functions)
EXRE_STRING, // TODO
EXRE_RESERVED, // reserved cpu constant (register names), TODO
EXRE_LIST // TODO
};
// input flags:
#define ACCEPT_EMPTY (1u << 0) // if not given, throws error #define ACCEPT_EMPTY (1u << 0) // if not given, throws error
#define ACCEPT_UNDEFINED (1u << 1) // if not given, undefined throws serious error #define ACCEPT_UNDEFINED (1u << 1) // if not given, undefined throws serious error
//#define ACCEPT_INT (1u << ) needed when strings come along! //#define ACCEPT_INT (1u << ) needed when strings come along!
@ -46,6 +55,7 @@ extern void (*ALU_optional_notdef_handler)(const char *);
#define ACCEPT_OPENPARENTHESIS (1u << 3) // if not given, throws syntax error #define ACCEPT_OPENPARENTHESIS (1u << 3) // if not given, throws syntax error
//#define ACCEPT_STRING //#define ACCEPT_STRING
// do I need ACCEPT_INT and/or ACCEPT_ADDRESS? // do I need ACCEPT_INT and/or ACCEPT_ADDRESS?
*/
// stores int value if given. Returns whether stored. Throws error if undefined. // stores int value if given. Returns whether stored. Throws error if undefined.
extern int ALU_optional_defined_int(intval_t *target); extern int ALU_optional_defined_int(intval_t *target);