[ InfixRvalueTerm n w i initial_wn wa wl sign base digit dcount; initial_wn = wn; infix_parsed_lvalue = -1; infix_term_type = INFIXTT_NUMBER; w = NextWordStopped(); if (w == -1) return -1; wa = WordAddress(wn-1); wl = WordLength(wn-1); if (wa->0 == '-' or '$' or '0' or '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9') { ! Parse decimal, hex or binary number sign = 1; base = 10; dcount = 0; if (wa->0 == '-') { sign = -1; wl--; wa++; } else { if (wa->0 == '$') { base = 16; wl--; wa++; } if (wa->0 == '$') { base = 2; wl--; wa++; } } if (wl == 0) return -1; n = 0; while (wl > 0) { if (wa->0 >= 'a') digit = wa->0 - 'a' + 10; else digit = wa->0 - '0'; dcount++; switch(base) { 2: if (dcount == 17) return -1; 10: if (dcount == 6) return -1; if (dcount == 5) { if (n > 3276) return -1; if (n == 3276) { if (sign == 1 && digit > 7) return -1; if (sign == -1 && digit > 8) return -1; } } 16: if (dcount == 5) return -1; } if (digit >= 0 && digit < base) n = base*n + digit; else return -1; wl--; wa++; } parsed_number = n*sign; return 1; } ! Parse character constant 'a' if (wl == 3 && wa->0==''' && wa->2==''') { parsed_number = wa->1; return 1; } ! ##Action, 'dword' switch(w) { '##': infix_term_type = INFIXTT_ACTION; w = NextWordStopped(); if (w == -1) return -1; wn--; if (InfixActionToken() == 0) return 1; return -1; '^^': infix_term_type = INFIXTT_DWORD; w = NextWordStopped(); if (w == -1) return -1; parsed_number = w; return 1; } ! Test for attribute, property, class name, variable name, array name, routine ! name, constant name wn--; if ((wa->0 >= 'a' && wa->0 <= 'z') || (wa->0 >= 'A' && wa->0 <= 'Z') || wa->0 == '_') { infix_term_type = INFIXTT_ATTRIBUTE; if (InfixMatchPrule(InfixPrintAttribute, #lowest_attribute_number, #highest_attribute_number, wa, wl)) { wn++; return 1; } infix_term_type = INFIXTT_PROPERTY; if (InfixMatchPrule(InfixPrintProperty, #lowest_property_number, #highest_property_number, wa, wl)) { wn++; return 1; } infix_term_type = INFIXTT_GLOBAL; if (InfixMatchPrule(InfixPrintGlobal, #lowest_global_number, #highest_global_number, wa, wl)) { infix_parsed_lvalue = parsed_number-16; parsed_number = #globals_array-->infix_parsed_lvalue; wn++; return 1; } infix_term_type = INFIXTT_ARRAY; if (InfixMatchPrule(InfixPrintArray, #lowest_array_number, #highest_array_number, wa, wl)) { infix_parsed_lvalue = parsed_number; parsed_number = Symb__Tab(INFIXTT_ARRAY,parsed_number); infix_data1 = temp__global3; infix_data2 = temp__global2; wn++; return 1; } infix_term_type = INFIXTT_ROUTINE; if (InfixMatchPrule(InfixPrintRoutine, #lowest_routine_number, #highest_routine_number, wa, wl)) { infix_parsed_lvalue = parsed_number; parsed_number = Symb__Tab(INFIXTT_ROUTINE,parsed_number); infix_data1 = temp__global3; infix_data2 = temp__global2; wn++; return 1; } infix_term_type = INFIXTT_CONSTANT; if (InfixMatchPrule(InfixPrintConstant, #lowest_constant_number, #highest_constant_number, wa, wl)) { infix_parsed_lvalue = parsed_number; parsed_number = Symb__Tab(INFIXTT_CONSTANT,parsed_number); infix_data1 = temp__global3; infix_data2 = temp__global2; wn++; return 1; } switch(w) { 'parent', 'child', 'children', 'random', 'metaclass', 'sibling': parsed_number = w; infix_parsed_lvalue = INFIXTT_SYSFUN; wn++; return 1; } } infix_term_type = INFIXTT_NAMEDOBJECT; wn = initial_wn; i = ParseToken(SCOPE_TT, InfixBigScope); if (i == GPR_REPARSE) return i; if (i > GPR_MULTIPLE) { print "(", (name) i, " (", i, "))^"; parsed_number = i; return 1; } return -1; ];